編者按:原文作者喬納森·丹尼可(jonathan danylko)是一位自由職業的web架構師和程式設計師,程式設計經驗已超過20年,涉足領域有電子商務、生物技術、房地產、醫療、保險和公用事業。正如喬納森在文中所言,本文適合剛畢業的大學生和剛入門的程式設計師。如果你已是高階開發人員,或許你能在本文中看到自己的身影。
從11歲時,我就一直在程式設計,並且一直都很喜歡技術和程式設計。這些年來,我積累了一些艱難又容易的經驗。作為一名程式設計師,你或許還沒這些經驗,但我會把它們獻給那些想從中學到更多的朋友。
我會持續更新這些經驗,我可能還會有更多的感想,但就我這20年來看,我想下面這個列表中基本不需要增添額外的東西了。下面就是我至今最難忘的經驗。
1. 估算解決問題所需要的時間。不要怕,承認吧!我曾見過一些程式設計師為了解決乙個特殊問題而坐在顯示器前面8小時。為自己定乙個時間限制吧,1小時、30分鐘或甚至15分鐘。如果在這期間你不能解決問題,那就去尋求幫助,或到網上找答案,而不是嘗試去做「超級堆碼員」。
2. 程式語言是一種語言,只是一種語言。隨著時光推移,只要你理解了一種語言的原理,你會發現各種語言之間的相似之處。你所選擇的語言,你應該覺得「舒服」,並且能夠寫出有效(而且簡潔)的**。最重要的,讓語言去適應專案,反之亦然。
3. 不要過於注重程式的「設計模式」。有時候,寫乙個簡單的演算法,要比引入某種模式更容易。在多數情況下,程式**應是簡單易懂,甚至清潔工也能看懂。
4. 經常備份**。在我年輕時,我就有過因硬碟故障而丟了大量**的經歷,這經歷很恐怖的。只要你一次沒有備份,就應當像有著嚴格的期限,客戶明天就需要。此時就該原始碼/版本控制軟體大顯身手了。
5. 承認自己並不是最頂尖的程式設計師 - 知不足。我常想,我對程式設計了解已足夠多,但是總有其他人比你優秀。正所謂,「一山總比一山高」。所以,向他們看齊吧!
7. 永恆的變化。你對待技術/程式設計知識,就應像你對待**一樣:多樣化。不要在某一特定技術上自我感覺良好。如果那種技術或語言已經沒有足夠支援,那你還不如現在就開始更新你的簡歷,並啟動培訓新計畫。我能保持前行的主要原則是什麼呢?至少了解兩到三種語言,所以,如果某種語言過時了,你在學習新技術的時候還可以依靠另一種語言。
8. 提攜新人。協助並且培養初級/入門的開發人員學習優秀的程式設計方法和技巧。也許你還不知道,在幫助他們向更高一層前進時,你自己也在向更高一層提公升,你會更加自信。
9. 簡化演算法。**如惡魔,在你完成編碼後,應回頭並且優化它。從長遠來看,這裡或那裡一些的改進,會讓後來的支援人員更加輕鬆。
10. 編寫文件。無論是web服務的api,還是乙個簡單的類,你盡量編寫相應文件。我曾經引以為豪的**注釋,因過度注釋而有人指責。給三行**加一行注釋,只需要你幾秒時間。如果那是乙個比較難以理解的技術,千萬別擔心過多注釋。如果你能很好做好自己的工作,大多數架構師、後備程式設計師、支援組都會感激你。
12. 慶祝每一次成功。我見過很多程式設計師在解決程式設計技術難題後,會和同伴握手、擊掌或甚至手舞足蹈。每個人在生命中都會碰到「頓悟」。如果乙個程式設計師高興地跑來叫你去看他的非凡**,也許你已經看過這樣的**100遍了,但你也應該為了這個傢伙而慶祝第101次。(編者注:《慶祝成功的九種方式》。)
13. 經常檢查**。在公司,你的**要經常檢查(包括自查和其他同事檢查)。不要把別人的檢查,看成是對**風格的苛求。應該把它們看作是有建設性的批評。對個人來說,經常檢查你的**並且自問,「我怎樣才能寫得更好呢?」 這會加速你的成長,讓你成為乙個更優秀的程式設計師。
14. 回顧你的**。在看到自己以前的**時,通常會有兩種方式:「難以至信,這**是我寫的」和「難以至信,這**是我寫的」。第一種往往是厭惡的語氣,並在想如何改進它。你也許會驚嘆,舊**也能復活成為一種更好的程式,甚至是乙個完整的產品。第二種通常帶著驚奇和成就感。開發人員應該一到兩個自己完成的專案成果,能讓眾人不禁而立並注目而觀的專案。同樣,基於你優越的程式設計能力,你可以把過去的程式或專案拿出來,把它們更新為更加優秀的產品或想法。
15. 幽默是不可缺的。在我20年的開發生涯中,我還沒有碰到哪位程式設計師是沒有幽默感的。實際上,幹我們這行,幽默是一項必備品。
16. 謹防那些無所不知的程式設計師,不願分享的程式設計師,還有經驗不足的程式設計師。當你遇到這幾種程式設計師時,你自己要謙虛。無所不知的程式設計師,更想當乙個英雄而不是團隊成員;保守的程式設計師則是在編寫著他們獨享的**;而經驗不足的程式設計師則會每十分鐘就來問你一下,當**完成後,**已經是你的,而不是他們。
17. 任何專案都不會那麼簡單。朋友、家人和同事曾請求我倉促做一些事情,倉促做乙個程式或者**。對於這樣的事,應該從雙方做計畫,才能做出令兩方都會滿意的東西。如果某人起初只是需要乙個使用microsoft access的、只有有3個頁面的**,但來就很可能變成乙個有15個頁面的**,並使用sql server,有乙個論壇,還有乙個定製的cms(內容管理系統)。
18. 任何時候不要想當然。假如你承接乙個簡單的專案,你可能會認為某個部分可以輕鬆完成。千萬別這樣想!除非你有乙個類、元件、或者一段已經寫好的**,並且在現有的專案已經測試通過。不要認為這將是很容易的。
19. 沒有已經完成的軟體。曾經有一位程式設計師告訴我,沒有軟體是已經完成的,它只是「暫時完成了」。這是明智的忠告。如果客戶還在使用你寫的程式,並經受了時間的考驗。如果有機會,你仍在更新它,這並不是什麼壞事,這讓你不斷地前行。
20. 耐心是一種美德。當客戶、朋友或家庭成員用電腦的時候,他們也許會受挫,進而想砸電腦,或氣沖沖地離開。我一直在告訴他們,「是你掌控電腦,不是電腦掌控你。」對於用作程式設計的電腦,你要有一定的耐心。一旦程式設計師知道問題所在後,他們就會站在電腦的角度看問題,並且說「哦,這就是為什麼它是這樣做。」
編者後話
對本文深有感觸!雖然本文沒有華麗的辭藻,其中樸實的道理,其實並非只適用程式設計師,同樣可以擴充套件到其他行業。記得以前練字時,總感覺當時寫得很好,但後來回頭再看時,也會想「這居然是我寫的字!」
11 條程式設計經驗分享
1.從小事做起,然後再擴充套件 無論是建立乙個新的系統,還是在現有的系統中新增新的功能,我總是從乙個簡單到幾乎沒有任何所需功能的版本開始,然後再一步一步地解決問題,直到滿意為止。我從來沒有妄想過能夠一步登天。相反,我一邊開發一邊學習,同時新掌握的資訊還可以用於解決方案中。我很喜歡 john gall...
Danylko的20條程式設計經驗
從11歲時,我就一直在程式設計,並且一直都很喜歡技術和程式設計。這些年來,我積累了一些艱難又容易的經驗。作為一名程式設計師,你或許還沒這些經驗,但我會把它們獻給那些想從中學到更多的朋友。我會持續更新這些經驗,我可能還會有更多的感想,但就我這20年來看,我想下面這個列表中基本不需要增添額外的東西了。下...
經驗分享 風雨20年 我所積累的20條程式設計經驗
譯者按 原文作者喬納森 丹尼可 jonathan danylko 是一位自由職業的web架構師和程式設計師,程式設計經驗已超過20年,涉足領域有電子商務 生物技術 房地產 醫療 保險和公用事業。正如喬納森在文中所言,本文適合剛畢業的大學生和剛入門的程式設計師。如果你已是高階開發人員,或許你能在本文中...