当前位置: 首页 > 科技观察

好程序员不写代码?网友:不用重新发明轮子

时间:2023-03-15 01:19:45 科技观察

无剑胜剑,这就是金庸武侠世界里最好的境界。  在西方程序员的现实世界中,也有同样的精神:最好的代码就是没有代码。最好的代码是根本没有代码。  简单来说,没有代码胜过代码。  △FrancoisChollet  山景城克拉斯剑派的创始人FrancoisChollet最近发了一系列推文来传播这种精神,也有很多人赞同。  他说:  程序员写多少代码并不重要,重要的是解决问题的效率。  不需要编写,不需要维护好的代码现成的解决方案,可以直接使用。  简单的几句话,似乎说出了很多同事的心声。他们大喊“没错”,并用“@”号召朋友们前来观摩。  Chollet完全有资格推特:他是入门框架Keras的作者,谷歌研究员,以及《Python 深度学习》一书的作者。世界第17位。  圣诞后新年前的垃圾时间,他那条不总结、不盼望、不祝愿的推特,转发了700多次,获得了2100多个赞。  代码是不是越多越好?  得到这样认可的核心观点说起来简单:  不管代码是几十行还是几千行,真正的是解决问题。  拿Chollet举的例子来说:如果老板让你做一个系统,监控厨房里是否有人在做饭,你应该怎么做?  解决方案一出,评委就来评判。  如果你买个摄像头,花10000美元收集数据,然后自己控制训练过程,奋斗几个星期用低级库定制一个CNN-LSTM架构……那是一个糟糕的程序员,5个败类程序员。  优秀的程序员会做什么?  购买几个5美元的温度传感器,在几个小时内收集数据,并使用sklearn训练一个简单的逻辑回归模型。  一个下午就可以搞定,而且系统更加可靠和可维护,甚至没有隐私问题。  有人做饭,厨房自然会热起来!如果你只知道如何用摄像头检测人形物体,你根本不知道该怎么做,而且需要时间、精力和金钱。  但这还不算太糟糕。如果程序员对设置好CNN-LSTM后的效果不满意,就要用几周的时间用GAN放大数据,仔细打磨……  “认真”到这种程度,已经超过了到了斗五渣的境界之后,就可以称得上是队友了。  是走错了方向,再怎么努力也是白费。  而这些“认真”的程序员所付出的努力,恐怕会让Chollet感到无奈:  就算要建CNN,为什么要用低端的库定制?我的Keras都打包好了,试试看,换个别的吧……评论区有网友  一针见血地总结:不用重新发明轮子。  不要重新发明轮子  这句话深入各行各业,程序员界也不例外。  作为高阶框架Keras的作者和布道者,Chollet一直在坚持不懈地批判重新发明轮子的行为。  前不久,他还在抱怨一些“讨厌框架”的程序员,说他们从头开始构建的只是框架的一些功能的重新实现,设计很差,无法实现重用。  为什么这么推荐使用相框呢?站在巨人的肩膀上。那些大框架是很多人的想法和努力的结晶。想自己实现一些功能?这相当于尝试以0.01%的努力和脑力取得成功。  一个好的程序员一定要善用前人打下的基础。  不过,在“重新发明轮子”的问题上,争论激烈。在Twitter和Reddit论坛上,关于“什么时候使用框架,什么时候手写”的讨论总是如火如荼。  想要手动搭建模型的程序员,各有各的理由。比如为了优化程序的性能:  太短视了。如果你追求性能和低延迟,你要重写很多代码,这很好。  更多的人重新发明轮子是为了学习。  很多人认为刚开始学习编程的时候,重新发明轮子是个好方法,让初学者更好地理解技术或方法背后的逻辑。  例如,如果你想了解PyTorch的工作原理,以及如何让它运行得更快,最好的方法就是自己实现一个简单版本的autograd。  虽然你无法得到比PyTorch更好的框架,但是通过这个过程,你对PyTorch的理解会越来越深,以后使用PyTorch也会更加得心应手。  同为谷歌研究员的DavidHa曾与Chollet发生过一场激烈的辩论。David说:  实现全连接网络、卷积神经网络、RNN、反向传播、SGD,然后用小训练集训练这些模型是学习神经网络如何工作的好方法。在跳到框架之前,应该花时间在这里获得有价值的直觉。  除此之外,还有一个充满无奈的原因:现成的轮子不一定能用。  不开源,不适合这个特定的任务,这让开发者在面对车轮时束手无策。最近的“圣诞彩蛋”事件,让程序员们对轮子更加警惕了:  谁知道作者会在轮子里藏什么!  但是请记住,无论你为什么要自己从头开始实现一个算法,都不要造一个方轮。  OneMoreThing  知乎曾经流传过这样一个问题:程序员真的很少写代码吗?  有网友调侃&自嘲,说每天写大量代码、敲键盘的程序员是“苦力”、“职级不够”。  也有不少人吐槽:还不是因为大部分时间都在找bug!  话虽如此,无论是调整框架还是从头搭建,写文档还是找bug,都是为了功能的实现。  你支持编码还是非编码?