關(guān)于編程,大學(xué)沒(méi)有傳授的十件事

2011-08-12 16:20:50來(lái)源:oschina作者:

筆者依然記得當(dāng)年完成學(xué)業(yè)時(shí),深信自己已經(jīng)準(zhǔn)備好進(jìn)入任何一家軟件公司,并開(kāi)始成為一個(gè)頂級(jí)的開(kāi)發(fā)人員。顯然,開(kāi)始工作后沒(méi)多久,筆者就意識(shí)到,還有很多事是我所不了解的。在不斷吸取經(jīng)驗(yàn)的同時(shí),筆者一直在努力

筆者依然記得當(dāng)年完成學(xué)業(yè)時(shí),深信自己已經(jīng)準(zhǔn)備好進(jìn)入任何一家軟件公司,并開(kāi)始成為一個(gè)頂級(jí)的開(kāi)發(fā)人員。顯然,開(kāi)始工作后沒(méi)多久,筆者就意識(shí)到,還有很多事是我所不了解的。在不斷吸取經(jīng)驗(yàn)的同時(shí),筆者一直在努力學(xué)習(xí)那些我從來(lái)沒(méi)有學(xué)過(guò)的,但卻是成為優(yōu)秀的開(kāi)發(fā)人員所應(yīng)了解的基本知識(shí)。以下是筆者希望自己能在學(xué)校就學(xué)到的十件事。

1. 我們總是錯(cuò)的

開(kāi)發(fā)人員有著相當(dāng)大的自我意識(shí),包含了一些其他的非技術(shù)性缺陷,這也正是為什么我們很難發(fā)現(xiàn)我們做錯(cuò)了什么。我看到過(guò)很多無(wú)休止的設(shè)計(jì)討論,開(kāi)發(fā)人員不斷地發(fā)表自己的想法……呵呵!猜猜怎樣……我們都錯(cuò)了,唯一的區(qū)別就是我們犯錯(cuò)的離譜程度不同。

理解并接受這個(gè)事實(shí)非常重要,我們只有這樣做了,才能敞開(kāi)心胸去聽(tīng)聽(tīng)別人的意見(jiàn),采用他們的想法,來(lái)得出一個(gè)更好的解決辦法。

2. 事情若有可能出錯(cuò),就一定會(huì)出錯(cuò)

也就是說(shuō)“希望驅(qū)動(dòng)開(kāi)發(fā)(hope driven development)”,如果你對(duì)于某些事并不確定,如果你發(fā)現(xiàn)自己使用了“應(yīng)該”這個(gè)詞,那你就麻煩了。

而這只有一個(gè)解決方案,盡己所能去保證它不會(huì)出錯(cuò),這可能意味著你需要編寫(xiě)一個(gè)測(cè)試、調(diào)試并驗(yàn)證需求……

3. 所有的代碼都爛

在我抱怨那些我碰到過(guò)的代碼十年之久后,我得出了一個(gè)精辟的結(jié)論,所有的(包括我自己寫(xiě)的)代碼,都爛。當(dāng)然,爛還是有等級(jí)之分的,但即便是我見(jiàn)過(guò)寫(xiě)得最好的代碼,也是難以讀懂的。

這并不意味著把你的代碼寫(xiě)得更好是沒(méi)有意義的,恰恰相反,最好和最壞的代碼還是有天壤之別的。

4. 錯(cuò)誤(Bug)總會(huì)存在

永遠(yuǎn)存在!問(wèn)題只在于要發(fā)現(xiàn)它困難與否。

5. 客戶最大

許多客戶并不在乎你在方案中使用了哪些技術(shù),應(yīng)用程序需不需要做更多的事……或通俗上說(shuō),你是否使用了好的實(shí)踐方案。

也因?yàn)槲铱梢韵胂,要是我只說(shuō)了前面那一段,我會(huì)收到多少惡評(píng),讓我說(shuō)得更清楚些……我想說(shuō)的是,我們永遠(yuǎn)不應(yīng)該忘記客戶的立場(chǎng),有時(shí)候,開(kāi)發(fā)人員為了最佳實(shí)踐而在項(xiàng)目工程中過(guò)度堅(jiān)持采用(某些)技術(shù),但要記住,若這些技術(shù)無(wú)法給客戶帶來(lái)價(jià)值,那就放棄吧!

6. 紙上談兵是行不通的

我曾認(rèn)為,我可以在前期就把我的整個(gè)設(shè)計(jì)置于紙上,然后只要將缺漏處填上就好,但這樣根本行不通。

軟件開(kāi)發(fā)是復(fù)雜的,若不親手去碰碰看,很難看到所有的實(shí)際層面以及它們之間的關(guān)系。因此,在前期保持規(guī)劃與設(shè)計(jì)是很有用的,但不要過(guò)度堅(jiān)持,也不要把設(shè)計(jì)圖表當(dāng)作合約固守。

7. 少即是多

或者,你可能知道更好的說(shuō)法是:“Keep it simple, stupid!”(保持簡(jiǎn)單,KISS設(shè)計(jì)原則)。所以,如果沒(méi)有必要的就舍棄吧!因?yàn)橐涀。?ldquo;事情若有可能出錯(cuò),就一定會(huì)出錯(cuò)。”

8. 編寫(xiě)代碼只是我們所做工作的20%而已

請(qǐng)準(zhǔn)備好,花80%的時(shí)間用于思考、調(diào)試、測(cè)試、開(kāi)會(huì)、談話……而所有的其他活動(dòng)都是非常重要的,所以若要成為一個(gè)優(yōu)秀的軟件開(kāi)發(fā)人員,你必須培養(yǎng)廣泛而全面的技巧(Skill),而不僅僅是技術(shù)(Technical)。

9. 客戶永遠(yuǎn)不知道他/她想要的是什么

客戶若有需求,或是想法,但是他們不知道詳細(xì)情況……軟件開(kāi)發(fā)要做的工作就是,發(fā)現(xiàn)細(xì)節(jié)并去除所有的不確定性,將這些需求轉(zhuǎn)換成客戶想要一個(gè)應(yīng)用程序。

10. 已經(jīng)有人做過(guò)了

所以不要再重新發(fā)明輪子,用谷歌找找看,或者更好的方法是,請(qǐng)教你的同事,很多時(shí)候他們可能都已經(jīng)做了相同、或非常類似的事情。

英文原文:10 things they never teach in college about programming

中文翻譯:伯樂(lè)在線

贊助商鏈接: