好程序員不寫代碼?網友:沒必要重複發明輪子
(原標題:好程序員不寫代碼)
乾明 發自 凹非寺
量子位 出品 | 公眾號QbitAI
無劍勝有劍,是金庸武俠世界的最高境界。
現實的西方程序員世界裡,也有與之如出一轍的精神: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,都是為了實現功能。
你支持有碼還是無碼呢?
※生命科學學會聯合體:反對有違科學精神倫理道德的研究
※Starsky Robotics能憑攝像頭玩轉自動駕駛嗎?
TAG:網易科技 |