好程式設計師不寫程式碼

IT職業頻道發表於2019-01-04

乾明 發自 凹非寺

量子位 出品 | 公眾號 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章