血汗結晶:漫漫編程路上學到的寶貴經驗
英文原文:Top 20 Programming Lessons I've Learned in 20 Years
不論你是剛畢業的大學生,還是入門級的程序員,亦或是高級程序員,希望此文都能給你一些啟發。
從我 11 歲初次進入編程領域,我就被她的魅力所傾倒,一直陷在她的石榴裙下不可自拔,我深深地愛上了編程。作為后來者,你可能沒有我的這些經歷,我現在將這些經驗公之于眾,希望能對大家有所幫助。我相信長江后浪推前浪,一代新人換舊人,后生可畏。
其實不要說 20 條經驗,哪怕 30 條、40 條,都是遠遠不止的,但是在我從業 20 年的時間里,我已經將所有的精華都已經歸納到這 20 條中了,當然如果以后有增加,我會補充更新的。
下面就是我目前為止最讓我受益匪淺的 20 條。(這可都是我血與汗的結晶啊。)
1. 規定完成任務所需時間
好吧,對于這一點,我不得不承認,作為一個程序員我很慚愧。我曾經親眼目睹一個牛人連續 8 小時坐在電腦前就為了解決某個程序問題,呵呵。給自己定個時間,1 小時、30 分鐘都可以,甚至 15 分鐘也行,如果在這段時間內你還是毫無頭緒,那么為避免浪費時間,可以直接尋求幫助或者自行在網上搜索。不要牛逼哄哄地以為自己是個超級編碼器——你只是 一個人,而不是計算機。
2. 編程語言也是一種語言
一旦了解了某種編程語言的工作原理,那么其他語言之間的共通之處就顯而易見了。我們選擇編程要參照這樣的標準:用的得心順手、生產的效率高、寫出來的代碼整潔,而最最關鍵的是,編程語言應該適合項目,反之亦然。
3. 不要動不動就“設計模式”
有時候,比起組合成一個像模像樣的模式,還不如編寫一個簡單的算法來的省時省力。而且一般而言,用于寫算法的代碼還更整潔,更便于理解。
4. 備份
話說有一次我的一個硬盤突然徹底壞了,導致我寫的許許多多代碼通通丟失,要知道這些代碼可是從我年輕的時候就開始存儲起來的,意義非凡,是無價 之寶。你不明白丟失數據的可怕性只是因為你還未曾經歷過。試想一下,要是明天就是最后的期限,而今天你卻僅僅是因為沒有備份而使得所做的一切努力化為流 水,不光是悲劇,還是人間慘劇。這一條也同樣適用于源碼和版本控制。
5. 人外有人
有時候我常常坐井觀天地以為老子天下第一。后來慢慢發現,原來別人能比我做的更好。要謙虛謹慎地向他人學習。
6. 學海無涯
接上面第 5 條,我經常手不釋卷,抱著雜志和書籍啃上面的計算機和編程的知識(不信可以問我的朋友,他們可以為我作證)。誠然,現在是個信息爆炸的時代,想要跟上技術 發展的腳步真心不是件易事。每一天都孜孜不倦地學習,就是我所謂的及時接收這些信息的好辦法,這樣,我們才不會被時代的大浪拍死在沙灘上。
7. 事物總是在不斷變化
我們學習技術和編程方面的知識應該和我們買股票一樣:要多樣化。不要以為學會了一種技術就可以高枕無憂了。如果某種技術或者編程語言后繼無力逐 漸被市場所淘汰,那么就得趕快更新簡歷,并且臨時抱佛腳迅速練習新技術。我這么多年的經驗告訴我,不要把所有雞蛋都放在同一個籃子里,至少得掌握兩三種語 言,以防有一種過時了,另外一種還能在你閉關修煉新技術的時候應急頂上。
8. 提攜新人
給予和培訓初級/入門級開發人員有關于編程的指導和技巧。溫故而知新,要知道,在幫助他們進步的同時,我們自己可能也在進步,變得更自信,更有發展潛力。
9. 簡化算法
寫完代碼之后,回過頭去再好好進行優化。雖然這邊改一點,那邊變一點,顯得很瑣碎,但是從長遠角度來看,以后維護起來那可就不是方便了這么一點兩點的事了。
10. 編寫文檔
無論是 Web 服務的 API,還是一個簡單的類,我們都應該盡量編寫相應文檔。曾經有人指責我注釋泛濫,但是我卻引以為豪。寫代碼的時候加個注釋對我們而言只是舉手而勞的事, 但是當遇上難以攻克的技術難題時,我想大多數構師、新來的程序員、維護人員都會因此而感激你的。
11. 測試,測試,還是測試
我是黑盒測試的鐵桿粉絲哦。如果我們不能徹底地檢查代碼,不但會影響項目的進程,還會讓你的信譽一落千丈、喪失大家的信任。
12. 慶祝每一次成功
很多程序員在好不容易歷盡千辛萬苦終于搞定那些令人頭疼的難題之后,總是會情不自禁地和同伴慶祝一下:尖叫、擊掌甚至是手舞足蹈。如果有個人興 沖沖地跑來告訴你他寫出了一段驚天地泣鬼神的代碼,即使關于這個代碼片段你已經看過 100 遍了,也值得你為他第 101 次的成功而喝彩。
13. 經常做代碼審查
無論是項目的還是個人的。對于項目代碼,一般而言經常會有人要求查閱,對于別人提出的批評不要當做是吹毛求疵、雞蛋里面挑骨頭,把它想成是建設 性意見以此來激勵自己。對于個人代碼,在堅持不斷自檢的同時,也要常常問問自己,“我怎么做代碼才能寫得更好?”這有助于你加快學習的步伐,讓你迅速成長 為一枚優秀的程序員。
14. 回顧曾經的代碼
當我們回顧以往的代碼時,常常會有兩種迥然不同的態度出現:看到差代碼時“有沒有搞錯,這么爛的代碼竟然是我寫的?!”以及看到好代碼時“哇 塞,這么棒的代碼居然出自我手!”第一種的態度往往是厭惡的,然后好像有強迫癥一樣開始想著是否還能提高和改進。而第二種則帶點驚奇和成就感了。開發人員 總會有那么一兩個超棒的項目成果,引領大家膜拜。如果你對你的編程能力足夠自信,那么也可以將這些成功的案例拿出來再次仔細雕琢,使之更好更棒愈加熠熠生 輝。
15. 幽默很重要
在這 20 年時間里,話說,我還從來沒有遇到過一個沒有幽默感的程序員。別說你遇到過,程序員的幽默外行人怎么會懂?事實上,如果想在這行發展,幽默是必須的。
16. 遠離那些自以為無所不知的程序員,不愿分享的程序員,以及經驗不足的程序員
當你不幸或者不得不和這些家伙合作的時候,不用給他們講道理,自己胸有成竹、運籌帷幄就可以了,當然態度上要謙虛,畢竟謙虛是美德嘛。自以為無 所不知的程序員,時刻想著搶風頭而不是作為團隊一員好好協作。不愿分享的程序員,總是默默無聞自管自地寫代碼。而經驗不足的程序員最煩人了,他們每隔個 10 分鐘就跑過來問你一下,最后搞定代碼的時候,呵呵,我不得不吐槽,這代碼分明都是我寫的了。
17. 任何項目都不簡單
我的朋友、家人和同事都曾要求我“快點”搞定一些事情,比如做網站。可是要知道,心急吃不了熱豆腐,做網站不是說說的,應該考慮全面,這樣才能 做出令客戶和自己都滿意的作品。比方說,開始客戶只是想要一個使用 Microsoft Access 的、只有 3 個頁面的網站,但是最后很有可能會變成一個使用 SQL Server,有 15 個頁面的網站,并且還要有一個論壇,有一個定制的 CMS(內容管理系統)。
18. 不要想當然
如果手頭上有一個看上去特簡單的項目,你或許會想當然地認為這肯定很容易搞定。千萬不要有這樣的想法。除非你有已經一個類和組件,或者一段已經寫好的代碼,并且在現有的項目上已經測試通過,萬事俱備只欠東風,否則你沒有理由也沒有資格說“小菜一碟”。
19. 軟件永遠是完不成的
曾經有一位程序員告訴我,軟件是永遠完不成的,它最多只是“暫時完成”。這個忠告我一直銘記于心。如果客戶還在使用你寫的程序,并且經受了時間的考驗,那么有機會的話,不妨保持更新,這對你的發展絕對有好處。
20. 耐心是一種美德
客戶、朋友和家人在使用電腦的時候,常常會因為電腦壞掉了等各種原因變得煩躁、氣得只想砸東西,最后自己搞不定只得怒氣沖沖地離開。每次看到這 樣的場景,我都會語重心長地說勸誡,“是我們人掌控電腦,而不是電腦掌控人”。一般人尚且會心情不好,更不要說整天對著電腦的程序員了。所以我們程序員更 加需要耐心。下次,要是我們的電腦和程序又出問題了,不要急著對自己發脾氣,好好檢查,最后,找出問題根源所在了,不妨自嘲地說一句,“眾里尋他千百度, 驀然回首,那人卻在燈火闌珊處”。
最后我希望,這 20 條能對大家有所裨益、有所啟迪,能讓各位會心一笑。
譯文鏈接:http://www.codeceo.com/article/20-years-20-experiance.html
翻譯作者:碼農網 – 小峰