天天看點

【觀點】風雨20年:我所積累的20條程式設計經驗【觀點】風雨20年:我所積累的20條程式設計經驗

【觀點】風雨20年:我所積累的20條程式設計經驗

2010-11-13 15:52 |  17920次閱讀 |  來源:DCS Media   【已有128條評論】發表評論

關鍵詞:經驗,程式設計 |  感謝劉江的提供 |  收藏這篇資訊

本文由伯樂線上關關譯自Jonathan Danylko的網站DCS Media。Danylko是一位資深開發顧問,DCS公司的創始人。

從11歲時,我就一直在程式設計,并且一直都很喜歡技術和程式設計。這些年來,我積累了一些艱難又容易的經驗。作為一名程式員,你或許還沒這些經驗,但我會把它們獻給那些想從中學到更多的朋友。

我會持續更新這些經驗,我可能還會有更多的感想,但就我這20年來看,我想下面這個清單中基本不需要增添額外的東西了。下面就是我至今最難忘的經驗。

1. 估算解決問題所需要的時間。不要怕,承認吧!我曾見過一些程式員為了解決一個特殊問題而坐在顯示器前面8小時。為自己定一個時間限制吧,1小時、30分鐘或甚至15分鐘。如果在這期間你不能解決問題,那就去尋求幫助,或到網上找答案,而不是嘗試去做“超級堆碼員”。

2. 程式設計語言是一種語言,隻是一種語言。随着時光推移,隻要你了解了一種語言的原理,你會發現各種語言之間的相似之處 。你所選擇的語言,你應該覺得“舒服”,并且能夠寫出有效(而且簡潔)的代碼。最重要的,讓語言去适應項目,反之亦然。

3. 不要過于注重程式的“設計模式”。 有時候,寫一個簡單的算法,要比引入某種模式更容易。在多數情況下,程式代碼應是簡單易懂,甚至清潔工也能看懂。 

4. 經常備份代碼。在我年輕時,我就有過因硬碟故障而丢了大量代碼的經曆,這經曆很恐怖的。隻要你一次沒有備份,就應當像有着嚴格的期限,客戶明天就需要。此時就該源碼/版本控制軟體大顯身手了。

5. 承認自己并不是最頂尖的程式員 - 知不足。我常想,我對程式設計了解已足夠多,但是總有其他人比你優秀。正所謂,“一山總比一山高”。是以,向他們看齊吧!

6. 學習再學習。正如第5點所說,我經常會在手裡拿一本計算機或程式設計相關的雜志或書(不信,可以問我的朋友)。誠然,總有很多你不知道的技術,你可以從中學習以保持不落後。如果你有一種靈巧的方式來擷取你需要的新技術,那你每天都應該堅持學習。

7. 永恒的變化。你對待技術/程式設計知識,就應像你對待股票一樣:多樣化。不要在某一特定技術上自我感覺良好。如果那種技術或語言已經沒有足夠支援,那你還不如現在就開始更新你的履歷,并啟動教育訓練新計劃。我能保持前行的主要原則是什麼呢?至少了解兩到三種語言,是以,如果某種語言過時了,你在學習新技術的時候還可以依靠另一種語言。

8. 提攜新人。協助并且培養初級/入門的開發人員學習優秀的程式設計方法和技巧。也許你還不知道,在幫助他們向更高一層前進時,你自己也在向更高一層提升,你會更加自信。

9. 簡化算法。代碼如惡魔,在你完成編碼後,應回頭并且優化它。從長遠來看,這裡或那裡一些的改進,會讓後來的支援人員更加輕松。

10. 編寫文檔。無論是Web服務的API,還是一個簡單的類,你盡量編寫相應文檔。我曾經引以為豪的代碼注釋,因過度注釋而有人指責。給三行代碼加一行注釋,隻需要你幾秒時間。如果那是一個比較難以了解的技術,千萬别擔心過多注釋。如果你能很好做好自己的工作,大多數架構師、後備程式員、支援組都會感激你。

11. 測試、測試再測試。我是一名黑盒測試粉絲。當你完成編碼後,你“被認可”的時候就開始了。如果你們公司有QA部門,如果你的代碼中有錯誤,那你得到的評論,會比項目經理還多。如果你不徹底測試自己的代碼,那恐怕你開發的就不隻是代碼,可能還會聲名狼藉。

12. 慶祝每一次成功。我見過很多程式員在解決程式設計技術難題後,會和同伴握手、擊掌或甚至手舞足蹈。每個人在生命中都會碰到“頓悟”。如果一個程式員高興地跑來叫你去看他的非凡代碼,也許你已經看過這樣的代碼100遍了,但你也應該為了這個家夥而慶祝第101次。

13. 經常檢查代碼。 在公司,你的代碼要經常檢查(包括自查和其他同僚檢查)。不要把别人的檢查,看成是對代碼風格的苛求。應該把它們看作是有建設性的批評。對個人來說,經常檢查你的代碼并且自問,“我怎樣才能寫得更好呢?” 這會讓你加速你的成長,讓你成為一個更優秀的程式員。

14. 回顧你的代碼。在看到自己以前的代碼時,通常會有兩種方式:“難以至信,這代碼是我寫的”和“難以至信,這代碼是我寫的”。第一種往往是厭惡的語氣,并在想如何改進它。你也許會驚歎,舊代碼也能複活成為一種更好的程式,甚至是一個完整的産品。第二種通常帶着驚奇和成就感。開發人員應該一到兩個自己完成的項目成果,能讓衆人不禁而立并注目而觀的項目。同樣,基于你優越的程式設計能力,你可以把過去的程式或項目拿出來,把它們更新為更加優秀的産品或想法。

15. 幽默是不可缺的。在我20年的開發生涯中,我還沒有碰到哪位程式員是沒有幽默感的。實際上,幹我們這行,幽默是一項必備品。

16. 謹防那些無所不知的程式員,不願分享的程式員,還有經驗不足的程式員。當你遇到這幾種程式員時,你自己要謙虛。無所不知的程式員,更想當一個英雄而不是團隊成員;保守的程式員則是在編寫着他們獨享的代碼;而經驗不足的程式員則會每十分鐘就來問你一下,當代碼完成後,代碼已經是你的,而不是他們。

17. 任何項目都不會那麼簡單。朋友、家人和同僚曾請求我倉促做一些事情,倉促做一個程式或者網站。對于這樣的事,應該從雙方做計劃,才能做出令兩方都會滿意的東西。如果某人起初隻是需要一個使用Microsoft Access的、隻有有3個頁面的網站,但來就很可能變成一個有15個頁面的網站,并使用SQL Server,有一個論壇,還有一個定制的CMS(内容管理系統)。

18. 任何時候不要想當然。假如你承接一個簡單的項目,你可能會認為某個部分可以輕松完成。千萬别這樣想!除非你有一個類、元件、或者一段已經寫好的代碼,并且在現有的項目已經測試通過。不要認為這将是很容易的。

19. 沒有已經完成的軟體。曾經有一位程式員告訴我,沒有軟體是已經完成的,它隻是“暫時完成了”。這是明智的忠告。如果客戶還在使用你寫的程式,并經受了時間的考驗。如果有機會,你仍在更新它,這并不是什麼壞事,這讓你不斷地前行。

20. 耐心是一種美德。當客戶、朋友或家庭成員用電腦的時候,他們也許會受挫,進而想砸電腦,或氣沖沖地離開。我一直在告訴他們,“是你掌控電腦,不是電腦掌控你。”對于用作程式設計的電腦,你要有一定的耐心。一旦程式員知道問題所在後,他們就會站在電腦的角度看問題,并且說“哦,這就是為什麼它是這樣做。”