每日最新頭條.有趣資訊

好程式員不寫代碼

乾明 發自 凹非寺

量子位 出品 | 公眾號 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,都是為了實現功能。

你支持有碼還是無碼呢?

加入社群

量子位AI社群開始招募啦,歡迎對AI感興趣的同學,在量子位公眾號(QbitAI)對話界面回復關鍵字“交流群”,獲取入群方式;

此外,量子位專業細分群(自動駕駛、CV、NLP、機器學習等)正在招募,面向正在從事相關領域的工程師及研究人員。

進專業群請在量子位公眾號(QbitAI)對話界面回復關鍵字“專業群”,獲取入群方式。(專業群審核較嚴,敬請諒解)

誠摯招聘

量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復“招聘”兩個字。

喜歡就點「好看」吧 !

獲得更多的PTT最新消息
按讚加入粉絲團