无剑胜有剑,是金庸武侠世界的最高境界。
理想的西方顺序员世界里,也有与之如出一辙的肉体:The Best Code is No Code At All。最好的代码就是基本没代码。
复杂说来,无码胜有码。
△Francois Chollet
山景城坷垃斯剑派祖师 Francois Chollet 最近就连连发 Twitter,传扬这种肉体,赞同者云集。
他说:
顺序员写多少代码不重要,重要的是处置成绩的效率。
不用你写、不用你维护的才是好代码——直接用的现成处置方案嘛。
复杂几句话,似乎说到了众多同行的心田里。他们高喊“太对了”,还用“@”呼朋唤友前来观摩。
Chollet 有充沛的资历发推布道:他是入门框架 Keras 的作者、Google 研讨员、《Python 深度学习》一书作者,顶会论文没少发,打 Kaggle 竞赛也很凶猛,最高排到过全球第 17 名。
圣诞之后新年之前的渣滓时间里,他这条不总结不展望不拜年的 Twitter,曾经被转发了 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 的时分,也会愈加随手。
同为 Google 研讨员的 David Ha 就曾经和 Chollet 剧烈争论过,David 说:
从零末尾(用纯 Python、numpy、甚至 JS)完成全衔接网络、卷积神经网络、RNN、反向传达、SGD,然后用小训练集来训练这些模型是一种学习神经网络如何任务的好办法。在跳到框架上之前,应该花时间从这里播种宝贵的直觉力。
除此之外,还有一个充溢无法的缘由:现成的轮子还真不一定能用。
没开源、不适宜这个特定义务,都让开发者们面对轮子的时分很无法。最近的“圣诞彩蛋”事情,更是让顺序员们对轮子充溢警觉:
谁知道作者会在轮子里藏些什么东西!
但切记,不论你为什么要本人入手从头完成一个算法,千万不要造出来一个方轮子。
One More Thing
知乎上曾经传达着这样一个成绩:顺序员真的很少写代码吗?
有网友嘲讽&自黑,说写代码多、天天敲键盘的顺序员是“苦力”、“段位不够”。
也有不少人吐槽:还不是由于大部分时间都是在找 bug!
话说回来,无论调框架还是从头搭、写文档还是找 bug,都是为了完成功用。
你支持有码还是无码呢?
【编辑引荐】
Android源代码添加Fuchsia SDK和Fuchsia设备支持
2018让顺序员崩溃的瞬间!看到哪一个你哭了?
圣诞顺序员男友寄雪和DR钻戒求婚,雪却化了
“寒冬”已至,年薪百万的顺序员沦为漂泊汉
微软更懂“怎样尊重顺序员”,正在改良顺序员招聘流程
(责任编辑:admin)