編程王道,唯“慢”不破
人和人之間編程速度的差異還是很大的,有的程序猿寫代碼非???,有的卻常常是龜速。Jeffrey Ventrella最近在一篇文章里探討了這種編程速度的差異,他是絕對的龜速派代表,來看看他對編程速度的看法:
我爸常跟我說的一句話是,慢一點碼,才能快點把程序?qū)懲辍?/p>
我在舊金山很多家互聯(lián)網(wǎng)公司工作過,現(xiàn)在已經(jīng) 52 歲了,對于程序猿這個職業(yè)來說,我的年齡算偏大的。我寫代碼的速度近乎龜速,事實上,我更像是一個會寫代碼的設計師。
以前有一次,我和一些比較年輕的程序猿一起工作,他們信奉的編程宗旨是“速度快、更迭少”。我們在同一個 codebase 里合作,就像在共同煮一大鍋湯一樣。如果我們每個人都持續(xù)不間斷的貢獻代碼的話,未來這個工程應該就會很美很壯觀的呈現(xiàn)出來。
但是并沒有。
問題在于,這些年輕的程序猿們在心里其實有這么一種思想,他們覺得:1、每個人都是可替代的;2、沒人應該對某一部分的具體代碼負責;3、所有人應該都可以任意修改整個工程的代碼。
他們覺得,現(xiàn)在已經(jīng)有了github這種神器用來管理異步時間內(nèi)的代碼貢獻,只要每個人都持之以恒的貢獻代碼,工程和產(chǎn)品就會順理成章的出爐了。
事實不是這樣的。編程從來就不應該是拿工具來減少軟件開發(fā)的時間的。
編程應該是一項有節(jié)奏感有韻律的運動。我傾向于把工程依照不同的規(guī)模和時間度量分成不同的涂層,每一個涂層再從探索、實驗、error、臨時變量這 些細小的東西開始做起。有點像建設腳手架的形式。每一個涂層最終完成的時候是一段可以部署和擴展的 implementation-ready 代碼。這種開發(fā)過程有點像是從策略到設計方案***到完成一棟真正的建筑。
有時候當這棟建筑完成之后,我還會推倒重來一遍,因為我覺得我有更好的建筑方法。這種新的方法有時候是對的,有時候是錯的,事實上除非真正去再做一遍,不然你永遠無法知道究竟哪一種方法更好。
回到最初那鍋湯的問題:在軟件開發(fā)生態(tài)圈里,關于對整個設計流程產(chǎn)生推動與支持的混合思考是很重要的,沒有這一部分的工作,再快的程序猿又能做出多 好的設計?很多神經(jīng)系統(tǒng)科學家相信神經(jīng)元信息的流動在大腦的傳導過程中會有一個短暫的堵塞和混響,這對思維和感知會有很重要的作用。編程的設計也應該是這 樣,需要時間。
慢速編程運動
慢速編程運動在維基百科里的解釋是這樣的:慢速編程運動是慢速運動的一部分,這是一種強調(diào)謹慎設計、高質(zhì)量代碼、軟件測試和思考的軟件開發(fā)哲學,反對混雜組裝、布滿 bug 的代碼,以及過于快速的發(fā)布周期。
世界上的軟件開發(fā)團隊都在尋找更具預測性的工程項目,希望能促成更多的程序員擁有可持續(xù)性的職業(yè)生涯。他們提議了一些可以切身操作的實踐方法,比如結對編程、代碼審查和代碼重構,以開發(fā)更可靠更健壯的軟件應用。
在舊金山海灣地區(qū),風險投資支持的軟件開發(fā)正呈現(xiàn)出一種高燒般的熱度。利益正驅(qū)動著軟件開發(fā)以一種完全不自然的不對拍的節(jié)奏感在運動,它打亂了設計進化(design evolution)原本應有的周期節(jié)律和生物鐘。關于這一點,Rushkoff在Present Shock里說得很明白了。
另一個問題在于,人們對科技越來越詭異的迷戀,以及開發(fā)人員對工具異常的狂熱。大家總在說,為什么有的軟件和應用做得這么爛?沒錯,確實很爛。爛的原因在于,太多一味求快的程序猿在忙著建設工具,然后用這個工具去支持和適配另一個他們建好的工具,然后再用這個工具去支持和適配另另一個他們建好的工具,然后再用這個工具幫他們寫出更快的代碼。
這就是我為什么覺得軟件開發(fā)需要更多的“人”,而不是“工具”的原因。并且,這些人不僅僅只是幫忙做做外面的 UI 藝術之類的而已,應該要有更多的人深入軟件開發(fā)的內(nèi)部——確保軟件更多的與人文產(chǎn)生共鳴和回響。
當我們談論編程時,我們在談論什么?
編程不是打字。
所有的程序猿都明白這一點,但是大部分人都容易忘記這一點。
在電腦前噼里啪啦、彈指揮間的感覺確實很爽,這種鍵盤上啪啪啪的快感卻很容易讓人忘記編程是一項腦力活動,而不是體力勞動。編程的真正奧義在于,把人類的思維、設計、語言、邏輯和精神創(chuàng)造以一種計算機可以識別和儲存的方式記錄下來。
我妻子有時會跑到院子里問我,你在編程嗎?我說,對,我在編程。事實上我可能正拿著鉗子修剪花盆里的花草,或者做做施化肥之類的事情。
植物、土壤、鉗子,這些都是編程的好工具,正如鍵盤、鼠標和雙屏幕一樣。
目前,我們正在經(jīng)歷一個經(jīng)濟產(chǎn)業(yè)的轉型期,從新興到可持續(xù)發(fā)展之間的一次過渡。新的軟件產(chǎn)品和商業(yè)模式是需要發(fā)展,但為了互聯(lián)網(wǎng)行業(yè)發(fā)展的可持續(xù) 性,這種速度應該降下來一些了。擼代碼不僅僅只是在擼當下用戶的需求,擼的更是未來某個行業(yè)領域的架構基礎。代碼應該在程序員的關愛下慢慢的、茁壯的成 長。Like good wine。Like a baby。