一名資深程序員的自白!
英文原文:Lessons From A Lifetime Of Being A Programmer
在程序員崗位上工作了三十多年,我學到了也明白了一些事情,希望在這里跟大家一起分享:
- 看不到實物,客戶不會知道自己想要什么
一個功能性原型系統的展示,能夠省下無謂低效的贅述。
- 只要給予足夠的時間,任何安全措施都不安全
安全是目前系統運維的重大挑戰,我們每時每刻都想方設法來保護系統和數據,但是黑客只要成功一次,我們所有努力就極有可能都付諸東流。
- 系統被攻破后造成的影響,依賴于事前的準備功夫
如果能夠預先估計防護系統失效的后果,做足準備措施,例如:把關鍵數據單獨分離存儲,對數據進行加密等,那么或許可以減少日后上頭條的機會。
- 良好的安全部署不僅僅是開銷,而是戰略資產,如果吝嗇于此,代價將不菲
在工作中,我總會聽到人們常常抱怨安全運維是多么的復雜和昂貴,因此,總不時看到某些企業為了蠅頭小利,以犧牲安全性來節省開支,最后不得不多吞下N倍的苦果。
- 復雜問題簡單化,遠比普通問題復雜化困難得多
在任何創造性藝術領域,如:編程,設計,這都是個常見現象。我會盡力把代碼寫得簡單易懂,不論是為了自己還是別人;如果你想展示自己的聰明才 干,而故意把代碼變得復雜, 那么維護會是件可怕的事情。當然從保護知識產權角度來看,這本無可厚非,但或許會失去開源軟件的活力與創造力。
- 成功來自對失敗的總結學習,如果一再容忍失誤,失敗與成功注定是兩條平行線
當人們對自己的錯誤習以為常,那么創造出來的可能是毫無價值的產品。我們需要訂下目標:只允許自己犯同類型的錯,一次。只有嚴控錯誤頻率,才能不斷提高軟件開發水平。
- 永遠不變的是變化
僅根據今天的情況來制訂明天的計劃,是不明智的。特別是在編程的世界里,沒有亙古不變的死路子。反對技術進步,閉關自守,不接受或嘗試新事物,注定是不會成功的。
- 終身學習
我最喜歡的一個說法是:我們背后都跟著一個大滾筒,只要稍微停下,就有可能給絆得人仰馬翻,因此,我們必須比它跑得更快,不斷前進。當我們自認已掌握一切后,殊不知其實是倒退的開始。
- 整個軟件業充斥著野驢猜想
古時候,先知者如果預言失敗,會給石頭活活砸死;而現在,即使預判失敗,專家們都可全身而退,不過去做另外一次預判罷了。因此,野驢猜想盛行,人人都喜歡去預判下論斷,一個浮躁的年代。
- 條條大路通羅馬,羅馬并不在乎你用什么方式到達
客戶不會關心你會遇到什么問題,他們只想你的軟件能解決他們的問題。系統宕機,硬件損壞,黑客攻擊,這些對客戶來說毫無趣味可言。如果不幸發生這些囧事,老實交代是較好的做法,特別是被客戶清晰知道你將如何解決這些問題前。
- 客戶才是最好的質量標準
不論你有多少的測量指標,進行了多少回代碼回顧,通過了多少個驗收清單,這些其實都是次要的;最關鍵是我們做到客戶所期望的,沒有做多余的無用的。記住,客戶才是最后把關的 QA。
- 無記錄,不成功
時至今日,我仍然覺得人們如果不去收集日志,崩潰報告等有用信息,是多么的我伙呆。我一直堅持做的是進行盡可能詳細的記錄,追蹤崩潰情況,閱覽復核報告和備注,和其它任何能迅速定位錯誤的事情。
- 盡管存在更好的辦法,但是時間不會停下來等你
在做評估時,最困難的是取得終止和繼續之間的平衡。如果終止,或許會失去找出更好辦法的機會,但如果這辦法需要耗費過長時間,其實沒多大價值。這是個艱難的抉擇,但有時候今天做出的快速選擇,會比明年才得出的好選擇更管用。
- 尋找有錢的金主
曾合作過的一名銷售人員的觀點讓我印象深刻:找到一個不懂技術但有很多錢的人,如同找到了一個大金礦。聰明的人會問太多問題,貧窮的人不能給予你回報。我由衷地為自己成為程序員感到高興!
- 我的工作是對客戶撒謊,你的工作是讓我看起來是一個好人
還是前述的那名銷售人員,他喜歡口頭允諾客戶完成不可能的任務,并在我們最終完成任務后,捷足先得我們的獎賞與贊譽。盡管挑戰難題會很有成就感,但每次的副作用是無盡的痛苦。我的建議是:盡快尋找另外一個更好的銷售!
作者簡介:
作者 Codist(網名),目前從事 iPhone 應用開發,擁有 10 年的 Java 架構師/開發經驗,現已轉投 PHP;擅長 Fortran、Pascal 及各種匯編語言包括C、 C++、 SQL、Objective-C、Java、JavaScript、PHP;同時他還是一名 Web 設計師,專注 HTML/CSS/Ajax 等領域。
<span id="shareA4" class="fl">
</span>