2010年7月28日星期三

20年來某程式設計師得到的20條編碼經驗

作者從11歲開始編程,並且一直都很喜歡技術和編程。這些一直以來獲得的經驗教訓。作為一個程式設計師,你可能需要這樣的忠告。更希望每個人在獲取這些忠告的同時能夠學到更多。

這就是至今為止作者認為印象最深的一些教訓。

1、解決問題時估算你所需要的時間。
C'mon,admit it! 我曾見過一些程序員為了解決一個特殊的問題而連續坐在顯示器前面8小時,我會像下一個會成為這樣的程序員一樣感到內疚。為自己定一個時間表吧,每1小時,30分鐘,甚至15分鐘。如果在這期間你不能找出問題的解決辦法, 那麼就去尋求別人的幫助,或者在網絡上去找答案,而不是嘗試去做super-coder.

2、編程語言是一種語言,也只不過是一種語言。
隨著時間的增長,只要你理解了一種語言是怎麼工作的,你就會發現各種不同語言之間有相似之處。你所選擇的語言應該讓你覺得舒服,並且能夠寫出有效(而且簡潔)的代碼。總重要的,讓語言本身適合這個項目,反之亦然。

3、不要過頭-寫「設計模式」的程序。
有時候,寫一個簡單的算法要比把某種模式引進來容易的多。多數情況下,應該寫易懂的代碼,做到哪怕清潔工也得讀懂。 :-)

4、經常備份代碼。
在我年輕的時候就有過硬盤壞掉了而丟了許多代碼的經歷,這讓人感到相當煩躁。一次你沒有備份你的數據,那就彷彿一次客戶有著嚴格的期限明天就需要他們的東西。(The one time you don't back up your data may be the one time where you have a strict deadline with a client and they need it tomorrow. )這時源碼/版本控制程序就可以幫你。

5、接受一個事實,你並不是最牛的程序員。
常常想已經對編程瞭解的夠多了,但是也經常會發現有人明顯比我強。所以,向他們學習吧。

6、學習再學習 。
像第五條說的,我經常會在手裡拿一本計算機或編程相關的書、雜誌。真的,你可以從中學到不少技術,這樣也可以讓你在工作上不會落後。當然如果你有一個更好的方式來接觸你需要的新技術,那麼你應該每天都學習它。

7、變化是會經常發生的。
你對編程技術的熟悉就好像你對待一支股票一樣:是變化的。不要對一門特定的技術感覺良好。如果這種技術或者語言已經得不到足夠的支持了,你最好馬上開始更新你的簡歷、開始接受培訓吧。分別的主要的原則就是看這項技術能否讓我繼續下去。至少瞭解兩到三種語言,這樣一旦一種不行了,你還可以在學習新技術的時候依賴另一種。

8、給予新手幫助。
協助並且培養新手/初級的開發者,讓他們具有良好的編程技巧。你或許從未意識到...這樣你會使很多人成長,並且在培養他們為下一個位置做準備時你也會感到很開心。

9、讓算法簡單化。
代碼就像朋友一樣,你完成編碼以後,應該從頭再看一遍並且優化它。代碼上這裡或者那裡一點點的改進,會讓後來長期維護的人輕鬆很多。

10、給代碼加註釋。
不管是在註釋一個WEB服務的API還是在註釋一個簡單的類,你儘管做就是。我曾經因過度的代碼註釋而被人指責過,而這卻又是我最引以為豪的事。為三行的代碼加一行註釋僅僅需要你幾秒鐘的時間。如果是一個比較難理解的技巧,千萬別擔心過度的註釋。你做你該做的,這就是架構師,編碼助理、支撐組都最不會抱怨的地方。

11、測試,測試,測試 我是黑盒測試的擁蹙。
當你完成編碼的時候,你「被認證」的時候就開始了。如果你們有質量保證部門,那麼相對於項目經理對你錯誤的評論而言,他們會評論得更多。如果你完全不測試你的代碼,那麼恐怕你開發的就不僅僅是代碼了,可能還有你糟糕的名聲。

12、為每一個成功慶祝。
遇到過的許多程序員在解決完一個編程技術的頭痛問題時,常常和他們的同伴握手、擊掌、甚至手舞足蹈。每個人在生活中都會碰到「豁然開朗」時候。一個程序員高興地跑來叫你去看他獨創的代碼,以你的經歷或許你已經看過這樣的代碼100遍了,但也應該為了這個夥計來第101次慶祝這個成功吧。

13、經常檢查你的代碼。
無論是項目還是個人,在公司裡你應該常常檢查你的代碼,不要把別人的指責當作打擊,而是把它們看作是有建設性的批評。對個人來說,常常檢查你的代碼並且自問 「我怎樣才能讓它更好呢」 這會讓你更快地成長,使你成為一個更好的程序員。

14、回顧你過去的程式碼。
看到自己以前的代碼的時大家經常會有兩種表述:「難以至信,我居然寫過樣的代碼」和「難以至信,我居然寫過樣的代碼」。第一種表述經常是帶著厭惡的語氣。想想如何去改進它,當你讓這些超老的代碼重新復甦,成為更好的、正常的程序甚至完整的產品時,你會感到驚喜的。第二種表述常常帶著驚奇和成就感。開發者應該完成一兩個經得起考驗、經得起討論的工程代碼。另外,你可以利用這些代碼或者工程把他們作成一個更好的產品或者想法,這就要看你優秀的代碼能力了。

15、幽默感是必須的。
作者20年的開發生涯中,從來沒有碰到過一個程序員沒有相當的幽默感的。確切地說,在我們這個行業,這是必須的。

16、當心那些無所不知的人,不願分享的人,和經驗不足的人。
當你遇到這幾種程序員時首先你自己要謙虛。那些無所不知的人更想作一個英雄而不是一個團隊成員,保守的人則是在編寫著他們不願意分享的代碼。而那些經驗不足的程序員會每十分鐘就來問你一下,當他完成開發時,那代碼已經是你的而不是他們的了。

17、沒有項目是從來就是簡單的。
曾被朋友、家人、同事要求忽忙地做一些事情,匆忙地寫一個程序或者網站。應該計劃能夠完成兩方都會滿意的東西。開始時可能他只是需要一個使用Microsoft Access 的有3個頁面的網站,但是隨後就可能變成一個有15個頁面的網站且使用SQL Server、一個論壇、一個自定義的CMS(內容管理系統)

18、任何時候不要想當然。
假如你接手一個簡單的項目,你可能會認為某些部分很容易完成。千萬不要這樣認為,除非你有一個類、組件、或者一段已經寫好的代碼並且已經測試通過。

19、沒有軟件是已經完成的。
一個程序員有次告訴沒有軟件是已經完成的,它們只是暫時完成了。這是明智的忠告。如果客戶還在使用你寫的程序,已經忍過了測試的那段時間。還有可能就是你仍在更新它,這並不是什麼壞事,它可以讓你不斷地工作。:-)

20、有耐心是一種長處。
當客戶、朋友、或者家庭成員用電腦的時候,他們可能會受挫、想砸掉電腦以至於暴走。我告訴他們,「是你在控制電腦而不是電腦在控制你。」對待用於編程的電腦,你需要有一定的耐心。只要程序員明白他們的問題所在了,他們就又從電腦的角度來看問題了,還說「呃,不就是這樣嘛。」

希望這一摞經驗能夠啟發一些人,又或者讓你輕輕一笑。

沒有留言: