Russ Olsen談“我收到的最佳程式設計建議”
Russ Olsen作為《Eloquent Ruby》一書的作者,同時也是一名Clojure開發者。他把一個與古老的CAD[1]程式、辦公室政治、及其進展有關的故事娓娓道來,整個故事可以總結為一句簡單的口頭禪:“千萬別碰其他人的程式碼!”
姓名:
Russ Olsen
程式設計能力及工作經驗:
從穿孔卡片到ClojureScript無所不能。
最顯著的成就:
作者,《Design Patterns in Ruby》(Ruby設計模式),《Eloquent Ruby》
最常用的程式語言:
Ruby為首,Clojure緊隨其後。
建議:
我收到的最佳程式設計建議來自於我的職業生涯早期,那時我正在一個令我愛恨交加的系統上工作。那個系統最酷部分是我們正在做計算機輔助設計——想象一下Adobe Illustrator,不過它是為工程師設計的。那時候,具有互動式圖形的CAD軟體堪稱高科技的頂峰。讓我痛恨的事情是,系統很慢、慢得令人抓狂:你會坐在那裡,看著畫面中一條接一條地出現令人痛苦的線條。完成一個簡單的繪圖會花費幾十秒,然而當顯示覆雜畫面時,你就有機會去喝杯咖啡慢慢等了。即便我們用早期的計算機標準來衡量,該系統的效能也是極其糟糕的,這一定傳達了某些訊號。如果是黑客(hacker)會做些什麼?而你又該做些什麼?
我所做的就是仔細檢視程式碼。儘管圖形部分不是我的職責範圍,但是我花了數個夜晚和週末樂此不疲地鑽研此問題,設法弄清系統如此緩慢的原因。我並沒有花很長時間就找到了這個問題:一旦你啟動該系統,你實際上就開啟了兩個程式。一個程式是正常的CAD系統,而第二個程式則用於完成與繪圖功能有關的全部工作。這兩個程式彼此之間通過某種類似套接字(socket-like)的網路連線進行通訊。顯然,開發圖形子系統的程式設計師已經愛上了客戶端/伺服器(client/server)風格的程式,並且已經在我們的CAD系統中如法炮製了他自己的程式。問題在於,由於我們是在這種早期硬體上執行該系統,因此將全部繪圖壓縮為一個有限的套接字要耗費我們一個數量級的效能,然而我們對正在付出的成本卻給不出充分的理由。
我用接下來的整個週末將把系統整合到一起,這個版本中所有的內容被打包到單個程式中。系統的變化更是引人注目。現在,簡單影像差不多瞬間就能繪製出來,然而更為複雜的影像也只需抿口咖啡的工夫就能完成。星期一早上,我一遍又一遍地演示我的整合版本:首先是給我的老闆演示,接著是我老闆的老闆,然後又是他的老闆,直至全體高層領導。
然後就大難臨頭了。許多那些老闆的老闆的老闆非常生我的氣,但是沒有人可以或打算闡明箇中緣由。我的一些同事見到我就像見了瘟神一樣,避之唯恐不及。慢慢地我想通了,我已經闖入一些錯綜複雜的跨部門權力鬥爭之中。因為我用我自己的笨方法並沒有給圖形處理加速,而是為某個組織派系提供了制勝法寶,同時也讓其他派系感到很不爽。最終,他們勉強地將第二個程式連同套接字(socket)一起移除了,從而我們獲得處理速度更快的圖形。不過興高采烈的人卻寥寥無幾。
就在那時,所有員工的最大老闆要我去他的辦公室走一趟,並送給了我一個關鍵的建議。隨著辦公室的門牢牢地關上,他轉過身來,二目圓睜地看著我,然後說道:
“今後,千萬別碰其他人的程式碼!(In the future, stay the Hell out of other people's code.)”
實際上,這是個很糟糕的建議,從那以後的數年中,我都以自己的方式對它置之不理。不過這些話還是有價值的,因為我曾多次回憶起它們。
每當一些惱人的新員工帶著一個明顯行不通的餿主意來找我時,“千萬別碰其他人的程式碼!”這句話就會在我的腦海裡迴盪,而且聲音越來越大。
每當其他工程師對我的程式碼有見解時,我記得當時心裡是這麼想的,你應該管好你自己的技術工作,但同時我又力求解除我的自尊心。
在後來的那些年裡,隨著我自己也在建立並管理軟體開發團隊,我已經意識到,對於那種古來的專案而言,可能會有整整一打程式設計師都知道系統到底為何如此緩慢,而且也知道該如何修復它。儘管他們心知肚明,但是他們卻把解決方案爛在肚子裡。因為在那種組織裡,與讓系統變得更好相比,還有一些更重要的事情(派系之爭、辦公室政治等等)要關注。“今後,千萬別碰其他人的程式碼,”,這句話假設將會有未來。但是,擁有未來的最好方法是讓以下內容成為團隊的一部分:看重系統進步高於辦公室政治(progress over politics)、奇思妙想高於固步自封(ideas over territory)、自告奮勇高於彬彬有禮(initiative over decorum)。
譯註
[1] CAD,Computer-aided design,即計算機輔助設計,指使用計算機系統來協助設計的建立、修改、分析、或優化。詳細內容參見維基百科。
檢視英文原文:"The Best Programming Advice I Ever Got" with Russ Olsen
來自更多程式設計師的建議參見“The Best Programming Advice I Ever Got”(我收到的最佳程式設計建議)系列文章。
“我收到的最佳程式設計建議”系列譯文
相關文章
- Obie Fernandez談“我收到的最佳程式設計建議”NaN程式設計
- Rob Pike談“我收到的最佳程式設計建議”程式設計
- Erik Buck談“我收到的最佳程式設計建議”程式設計
- Danny Kalev談“我收到的最佳程式設計建議”程式設計
- Bill Wagner談“我收到的最佳程式設計建議”程式設計
- 我曾得到的最佳程式設計建議程式設計
- 程式設計師調程式碼訪談:Russ Cox程式設計師
- 我給所有新手程式設計師的建議程式設計師
- 我曾經得到的一個最好的程式設計建議程式設計
- 程式設計幾點建議程式設計
- Google前美女面試官談程式設計師面試的技巧和建議Go面試程式設計師
- 學習Java程式設計的建議Java程式設計
- 自學程式設計的朋友,我想給你們這 5 個建議程式設計
- 我給程式設計師新手寫簡歷的一些建議程式設計師
- 池建強:我的人生超程式設計(圖靈訪談)程式設計圖靈
- 程式設計漫談(二十):如何自學程式設計及Java、上手真實開發及轉行程式設計師的建議Java行程程式設計師
- PHP 安全程式設計建議PHP程式設計
- 程式設計師:開始程式設計生涯的5個建議程式設計師
- java程式設計的一些建議Java程式設計
- 一個老程式設計師的建議程式設計師
- 程式設計師跳槽的10個建議程式設計師
- Midway 後端程式碼的設計建議後端
- 老程式設計師的10條中肯建議程式設計師
- 提高程式設計能力的7條建議程式設計
- 關於 iOS 64位程式設計的建議iOS程式設計
- 給未來精英程式設計師的建議程式設計師
- 雷軍給程式設計師的五點建議程式設計師
- 寫給未來程式設計師的建議程式設計師
- 給新程式設計師的10條建議程式設計師
- 提高程式設計技能的11個建議程式設計
- 給新人程式設計師的 10 點建議程式設計師
- 給新手程式設計師的幾點建議程式設計師
- 學習Java程式設計的三個建議Java程式設計
- 程式設計師從書本學習程式設計的 5 個建議程式設計師
- [分享]2021 年對 React 前端程式設計師的 10 個程式碼最佳實踐建議React前端程式設計師
- 祖克伯關於程式設計的建議:若不是從小玩遊戲,我絕不會學程式設計程式設計遊戲
- 給程式設計師“菜鳥”的6條建議程式設計師
- 贏得程式設計師尊重的 7 個建議程式設計師