你是一名駭客還是工程師?

本文出處:http://www.yegor256.com/2014/10/26/hacker-vs-programmer-mentality.html


二十年之前,最優秀的程序員指的是有能力將整個應用放入64Kb的.COM文件中的人。那些將老舊的Inter 80386運用到極致的人才是是程序員中的精英。


這是因爲二十年前,計算機是昂貴的,而程序員的成本相對便宜。這是”駭客思維“(hacker mentality)的時代。這個時代已經過去了。現在這種心態不會被人們所欣賞,因爲市場行情已經完全相反了。


現今,計算機相當便宜而程序員成本變得昂貴。這是”工程師思維“(designer mentality)的時代,在這個時代中我們代碼的可讀性遠比性能要重要。


價格VS工資

請看上面這幅圖,這是在過去二十年(1994-2014)兩個趨勢的比較。下降的兩條趨勢表明計算機內存和外存的價格在二十年的時間裏變得十分便宜。


第二個趨勢證明軟件開發者的薪水在這段時間內逐步增長。更準確的說,增長了三倍。我沒有找到關於這個的官方報告,但是我保證,程序員的工資保持增長,這對所有人都不是個祕密——每年200000美元對於一個高級開發者來說將不是夢想……但是在二十年前,60K美元已經是可以給到的最好的了。我找到了一篇關於這個主題的非常有意思的文章


這基本上意味着,在1994年我們爲了創建一個PHP網站,我們需要比現在多花費1000倍的資金在硬件上,少花費3倍資金在程序員薪水上。這裏我們討論的是用同樣的技術。同樣的Linux機器和Apache HTTP服務器。


不同之處在於,在1994年,如果我們的機器由於硬件限制而出現性能問題時,增加每一GB的RAM我們需要支付35000美元,而現在我們只需要10美元。


在1994年,招募更多的程序員讓他們來優化代碼甚至重寫代碼要比買新的硬件更有效。在2014年,情況正好相反。將服務器的規模翻倍要比支付更多薪水優化軟件更加便宜(尤其是當服務器在虛擬雲上)。


在1994年,最好的程序員擁有“駭客思維”,但是在2014年“工程師思維”更受青睞。


駭客思維(Hacker Mentality)


某些具有駭客思維的人會稱這個Fibonacci java方法爲“優雅的代碼”(你會這樣稱呼麼?)

public int f(int n) { return n>2?f(n-1)+f(n-2):1; }

我會看重以下這些爲一個優秀駭客的品質:

  • 會運用一門編程語言所有已知的(和未知的)特性。
  • 按照駭客和初學者來區分他人。
  • 對規則和標準感到厭煩
  • 不寫單元測試——初級程序員隨後會寫的。
  • 享受處理緊急事件——這體現出他的才能。
  • 喜歡用言語而非文檔,因爲這樣更加有趣。
  • 討厭自己的代碼被別人修改。
  • 喜歡一段時間鑽研一個項目。

一個駭客是一個有才能的個體。他希望通過他寫的軟件展示他的才華。他熱愛編程並以此爲樂。我會說,他和他的代碼結了婚而且不能想象最終離婚後代碼的幸福生活。代碼的所有權是一個駭客完全佔有的——他將自己理解爲代碼的“主人"。


當我問一個我的駭客朋友——“別人會怎樣才能理解這段代碼的功能?”我總是會聽到這樣的回答——“他們會問我!”(通常會以驕傲的語氣笑着說)。



工程師思維(Designer Mentality)


具有工程師思維的人會將上述代碼重構,使它更容易閱讀。他會將這段Java 方法稱爲“優雅的代碼”(你會怎麼認爲?)。


public int fibo(final int pos) {
  final int num;
  if (pos > 2) {
    num = fibo(pos - 1) + fibo(pos - 2);
  } else {
    num = 1;
  }
  return num;
}

我認爲以下是優秀的工程師所具備的特點:

  • 偏向使用傳統的編程技術。
  • 假設每個人都是初學者,並依此編寫程序。
  • 享受現有的規則並遵守它們。
  • 偏愛文檔而非言語,能夠自動化最佳。
  • 花很多時間編寫單元測試。
  • 討厭緊急事件和加班。
  • 樂於看到他的代碼被修改和重構。
  • 同時跟進多個項目。

一個工程師是一個優秀的團隊工作者。他對團隊進程、標準、培訓和原則的貢獻和他對源代碼的貢獻一樣多。他可以確保當他離開團隊時他的代碼和他的想法會繼續保留併產生作用。


令一個優秀的工程師感到滿意的是看到他的代碼過着“自己的生活”——被改寫,改進,重構知道最後退休。工程師把他自己當做代碼的父母——當代碼到了自立的時候,它需要去過自己的生活。


未來


如果你認爲你是一個駭客的話,我相信是時候做改變了。駭客的時代正在遠去。


在不久的將來,我們將可能停止從硬件的角度思考問題,並將使我們的應用運行在沒有存儲性能限制和CPU性能限制的彈性計算平臺上。我們將會通過簡單地增加月賬單的開支來解決資源使用和大多數性能問題。程序優化問題將不是我們所擔心的。


同時,優秀的軟件工程師的待遇將會越來越高,比如花500+美元每小時僅僅是去檢查軟件並給出一個診斷。


這就是爲什麼當開發一個新的軟件產品時,付費的人考慮最多的就是它的穩定性。項目贊助者會懂得,最好的解決方案就是最易讀,最穩定,自動化程度最高的那個。


而不是最快的。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章