大學沒教的 10 + 1 件關於程式設計的事
本文翻譯自10+1 things they never teach in college about programming。
早上看到這篇文章還滿有趣的,就順手翻譯了一下。很久沒碰英文了 XD,有翻譯謬誤之處請指正。
* * *
我還記得當我完成學業時是多麼天真而傻。那時我深信自己已經準備好進入任何一家軟體公司,並且成為一個閃耀頂尖的開發人員。但理所當然地,工作開始後沒多久我就意識到,還有多少事是我不瞭解的。
在不斷吸取經驗的同時,我一直艱困地學習那些我從來沒被教導過的、但卻是對於成為一個好的開發人員來說最基本的理解觀念。以下是我希望我能在學校就學到的10件事情。
1. 我們永遠是錯的。
(We’re always wrong.)
開發人員有著非常大的自我意識,包含了一些其他的非技術性缺陷,這也是為什麼我們很難去發現我們做錯了什麼。我已經看過太多永無止盡的設計討論,開發人員們總是不斷發表自己的想法…。好了,猜猜看怎樣?我們全都錯了,我們的區別只在於我們犯錯的離譜程度。
理解並接受這一事實是非常重要的,一旦我們開放心胸去聽聽看別人的意見、採用他們的想法,就能建構出一個更好的解決策略。而這也是唯一可行辦法。
2. 事情若有可能出錯,那就一定會出錯。
(If something can break, it will break.)
也有人說,「希望能促進開發」,若你對於某些事並不確定,或是你發現你自己使用了「應該」這個詞彙,那麼你麻煩就大了。
而這只有一個解決方案,進己所能去確保它不會垮掉,這可能意味著你需要撰寫測資、抓蟲(debug)、並驗證需求…
3. 所有程式碼都是鬼扯蛋。
(All code is crap.)
在抱怨那些我碰到的程式碼10年之久後,我得到了一個精闢的結論:所有(包含我自己寫的)程式碼,都是鬼扯蛋。當然,就算鬼扯還是有等級之分,但即使是我看過寫得最好的程式碼,也是難以閱讀。
這並不表示把你的程式碼寫得更好是沒有意義的,相反地,最好和最壞的程式碼還是有巨大的天壤之別。
4. 蟲蟲永遠都在。
(There is always a bug.)
永遠!問題只在於要發現它的困難與否。
5. 客戶最大。
(The most important thing is the client.)
許多客戶並不關心的事是:你使用了哪些技術、應用程式需不需要做更多的事…或通俗的講法是,你是否用了好的實踐方案。
也因我可以想像,假使我只說了前面那一段,我會得到多少黑特留言(hate comments),讓我說得更清楚些…我們永遠不應該忘記客戶的立場,有時開發人員只為了能遵行最佳作法而使用了特殊技術或堅持用過度工程進行。但要記得,若對於客戶來說這並無法增加價值,那就放棄吧。
6. 紙上練兵是行不通的。
(Design on paper doesn’t work.)
我曾相信,在前期我可以將我的整個設計置於紙上,然後只要將缺漏處填上就好,但這根本無法作用。
軟體開發是複雜的,若不親手去碰碰看,很難看到所有實際層面與它們之間的關係。因此,在前期保持規劃與設計很有用的,但不要過度堅持,也不要把設計圖表當作合約固守。
7. 少即是多。
(Less is more.)
或者,你可能知道更好的說法是:「保持簡單、愚蠢!」(Keep it simple, stupid! (KISS))。沒有必要的就捨棄吧,因為記住:「事情若有可能出錯,那就一定會出錯」(上述第二點)。
8. 寫程式只是我們做的20%的工作而已。
(Coding is only 20% of what we do.)
請準備好,花上你80%的時間用於思考、抓蟲、測試、開會討論、溝通…而所有其它的活動都非常重要,所以若要成為一個優秀的軟體開發人員,你必須培養廣泛而全面的技巧,而不僅僅是技術。
9. 客戶不知道他/她想要的是什麼,從來不知道!
(The customer doesn’t know what he/she wants NEVER!.)
客戶有需求,或是想法,但是他們不知道詳細細節…所有軟體開發要做的工作就是,找到細節、除去不確定性、並且將這些需求改造成客戶要的應用程式。
10. 不用麻煩了!有人已經做過啦。
(Someone has done it before.)
所以,不要再重新發明輪子,用Google找找看、或更好的方法是,問你的同事。很多時候他們可能都已經做了相同、或非常類似的事情。
Bonus:嘿!我們的工作超酷!
(Bonus: Hey! Our job is cool!)
往光明面看,程式設計還是超酷的啊!
嚇壞我了!沒想到你這麼厲害。
雖然我看不懂orz…不過你翻得好順又親切~XD
其實我看了也不是很懂 XD
大概經驗還不夠吧,繼續努力!