好程式設計師不寫程式碼
乾明 發自 凹非寺
量子位 出品 | 公眾號 QbitAI
無劍勝有劍,是金庸武俠世界的最高境界。
現實的西方程式設計師世界裡,也有與之如出一轍的精神:The Best Code is No Code At All。最好的程式碼就是根本沒程式碼。
簡單說來,無碼勝有碼。
△ François Chollet
山景城坷垃斯劍派祖師François 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,都是為了實現功能。
你支援有碼還是無碼呢?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545820/viewspace-2305506/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 程式設計師如何寫出好程式碼?程式設計師
- 不會填坑的程式設計師不是一個好程式設計師!程式設計師
- 好程式設計師寫出來的程式碼,就叫好程式碼嗎?你錯了!程式設計師
- 當程式設計師寫不出程式碼了……程式設計師
- DeepMind攜AlphaCode登Science封面,寫程式碼能力不輸程式設計師程式設計師
- 好程式設計師:Java程式設計師面試秘籍程式設計師Java面試
- 中國程式設計師與美國程式設計師寫程式碼的區別分析程式設計師
- 菜雞程式設計師是如何寫程式碼的?程式設計師
- 程式設計師的工作就只有寫程式碼麼???程式設計師
- 不寫情書,程式設計師還要學寫作嗎?程式設計師
- 新時代程式設計師都用什麼寫程式碼?程式設計師
- 為什麼程式設計師千萬不要重寫程式碼?程式設計師
- 好程式設計師web前端分享css初始化程式碼程式設計師Web前端CSS
- 好程式設計師web前端教程分享JavaScript簡寫方法程式設計師Web前端JavaScript
- 程式設計師如何寫好一篇技術文章?程式設計師
- 為什麼程式設計師喜歡在半夜寫程式碼?程式設計師
- 給程式設計師的幾點程式設計經驗----《編寫高質量程式碼》程式設計師
- 優秀的程式設計師真的不寫註釋嗎?程式設計師
- 程式設計師朋友們,請答應我?別再去東南亞寫程式碼了好麼?程式設計師
- 好程式設計師大資料教程:SparkShell和IDEA中編寫Spark程式程式設計師大資料SparkIdea
- 不懂產品的碼農不是好程式設計師程式設計師
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 不會效能測試的後端,不是好程式設計師後端程式設計師
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Java培訓Java程式設計師必學技術程式設計師Java
- 好程式設計師Python培訓分享Python程式設計師面試技巧程式設計師Python面試
- 老程式設計師的10個程式設計小技巧,教你寫出高質量程式碼!程式設計師
- 好程式設計師分享Css詳解bem書寫規範程式設計師CSS
- 好程式設計師web前端分享css常用屬性縮寫程式設計師Web前端CSS
- 程式設計師寫好技術文章的幾點小技巧程式設計師
- 一個老程式設計師的程式設計之路,寫給年輕的程式設計師們程式設計師
- 程式設計師or碼農程式設計師
- 身為程式設計師寫一百萬行程式碼的感覺程式設計師行程
- 千萬不要相信程式設計師在加班時間寫的程式碼!程式設計師
- 只會寫程式碼的程式設計師永遠無法出色?程式設計師
- 好程式設計師Java培訓簡述Java新手如何學程式碼程式設計師Java
- 程式設計師被懟!HR:對不起,我們不招“精通Excel”的程式設計師程式設計師Excel
- 程式設計師寫的跳轉程式設計師