我從11歲開始編程,并且一直都很喜歡技術(shù)和編程。這些是我一直以來獲得的經(jīng)驗(yàn)教訓(xùn)。作為一個(gè)程序員,你可能需要這樣的忠告。我更希望每個(gè)人在獲取這些忠告的同時(shí)能夠?qū)W到更多。
我將會(huì)不間斷地更新這里,我可能會(huì)有更多的要寫,但是就我這20年來看,我認(rèn)為沒有什么更多的需要加在這個(gè)清單下了。:-)
這就是至今為止我印象最深的一些教訓(xùn)。
1、解決問題時(shí)估算你所需要的時(shí)間。C'mon,admit it! 我曾見過一些程序員為了解決一個(gè)特殊的問題而連續(xù)坐在顯示器前面8小時(shí),我會(huì)像下一個(gè)會(huì)成為這樣的程序員一樣感到內(nèi)疚。為自己定一個(gè)時(shí)間表吧,每1小時(shí),30分鐘,甚至15分鐘。如果在這期間你不能找出問題的解決辦法, 那么就去尋求別人的幫助,或者在網(wǎng)絡(luò)上去找答案,而不是嘗試去做super-coder.
2、編程語言是一種語言,也只不過是一種語言。隨著時(shí)間的增長,只要你理解了一種語言是怎么工作的,你就會(huì)發(fā)現(xiàn)各種不同語言之間有相似之處。你所選擇的語言應(yīng)該讓你覺得舒服,并且能夠?qū)懗鲇行Вǘ液啙崳┑拇a?傊匾,讓語言本身適合這個(gè)項(xiàng)目,反之亦然。
3、不要過頭-寫“設(shè)計(jì)模式”的程序。 有時(shí)候,寫一個(gè)簡單的算法要比把某種模式引進(jìn)來容易的多。多數(shù)情況下,應(yīng)該寫易懂的代碼,做到哪怕清潔工也得讀懂。 :-)
4、經(jīng)常備份代碼。在我年輕的時(shí)候就有過硬盤壞掉了而丟了許多代碼的經(jīng)歷,這讓人感到相當(dāng)煩躁。一次你沒有備份你的數(shù)據(jù),那就仿佛一次客戶有著嚴(yán)格的期限明天就需要他們的東西。(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. )這時(shí)源碼/版本控制程序就可以幫你。
5、接受一個(gè)事實(shí),你并不是最牛的程序員。我常常想我已經(jīng)對編程了解的夠多了,但是也經(jīng)常會(huì)發(fā)現(xiàn)有人明顯比我強(qiáng)。所以,向他們學(xué)習(xí)吧。
6、學(xué)習(xí)再學(xué)習(xí) 。像第五條說的,我經(jīng)常會(huì)在手里拿一本計(jì)算機(jī)或編程相關(guān)的書、雜志(我的朋友們可以作證)。真的,你可以從中學(xué)到不少技術(shù),這樣也可以讓你在工作上不會(huì)落后。當(dāng)然如果你有一個(gè)更好的方式來接觸你需要的新技術(shù),那么你應(yīng)該每天都學(xué)習(xí)它。
7、變化是會(huì)經(jīng)常發(fā)生的。 你對編程技術(shù)的熟悉就好像你對待一支股票一樣:是變化的。不要對一門特定的技術(shù)感覺良好。如果這種技術(shù)或者語言已經(jīng)得不到足夠的支持了,你最好馬上開始更新你的簡歷、開始接受培訓(xùn)吧。我分別的主要的原則就是看這項(xiàng)技術(shù)能否讓我繼續(xù)下去。至少了解兩到三種語言,這樣一旦一種不行了,你還可以在學(xué)習(xí)新技術(shù)的時(shí)候依賴另一種。
8、給予新手幫助。 協(xié)助并且培養(yǎng)新手/初級(jí)的開發(fā)者,讓他們具有良好的編程技巧。你或許從未意識(shí)到...這樣你會(huì)使很多人成長,并且在培養(yǎng)他們?yōu)橄乱粋(gè)位置做準(zhǔn)備時(shí)你也會(huì)感到很開心。
9、讓算法簡單化。代碼就像朋友一樣,你完成編碼以后,應(yīng)該從頭再看一遍并且優(yōu)化它。代碼上這里或者那里一點(diǎn)點(diǎn)的改進(jìn),會(huì)讓后來長期維護(hù)的人輕松很多。
10、給代碼加注釋。 -不管是在注釋一個(gè)WEB服務(wù)的API還是在注釋一個(gè)簡單的類,你盡管做就是。我曾經(jīng)因過度的代碼注釋而被人指責(zé)過,而這卻又是我最引以為豪的事。為三行的代碼加一行注釋僅僅需要你幾秒鐘的時(shí)間。如果是一個(gè)比較難理解的技巧,千萬別擔(dān)心過度的注釋。你做你該做的,這就是架構(gòu)師,編碼助理、支撐組都最不會(huì)抱怨的地方。
11、測試,測試,測試 我是黑盒測試的擁蹙。當(dāng)你完成編碼的時(shí)候,你“被認(rèn)證”的時(shí)候就開始了。如果你們有質(zhì)量保證部門,那么相對于項(xiàng)目經(jīng)理對你錯(cuò)誤的評(píng)論而言,他們會(huì)評(píng)論得更多。如果你完全不測試你的代碼,那么恐怕你開發(fā)的就不僅僅是代碼了,可能還有你糟糕的名聲。
12、為每一個(gè)成功慶祝。 我遇到過的許多程序員在解決完一個(gè)編程技術(shù)的頭痛問題時(shí),常常和他們的同伴握手、擊掌、甚至手舞足蹈。每個(gè)人在生活中都會(huì)碰到“豁然開朗”時(shí)候。一個(gè)程序員高興地跑來叫你去看他獨(dú)創(chuàng)的代碼,以你的經(jīng)歷或許你已經(jīng)看過這樣的代碼100遍了,但也應(yīng)該為了這個(gè)伙計(jì)來第101次慶祝這個(gè)成功吧。
13、經(jīng)常檢查你的代碼。 無論是項(xiàng)目還是個(gè)人,在公司里你應(yīng)該常常檢查你的代碼,不要把別人的指責(zé)當(dāng)作打擊,而是把它們看作是有建設(shè)性的批評(píng)。對個(gè)人來說,常常檢查你的代碼并且自問 “我怎樣才能讓它更好呢” 這會(huì)讓你更快地成長,使你成為一個(gè)更好的程序員。
14、回顧你過去的代碼。 看到自己以前的代碼的時(shí)大家經(jīng)常會(huì)有兩種表述:“難以至信,我居然寫過樣的代碼”和“難以至信,我居然寫過樣的代碼”。第一種表述經(jīng)常是帶著厭惡的語氣。想想如何去改進(jìn)它,當(dāng)你讓這些超老的代碼重新復(fù)蘇,成為更好的、正常的程序甚至完整的產(chǎn)品時(shí),你會(huì)感到驚喜的。第二種表述常常帶著驚奇和成就感。開發(fā)者應(yīng)該完成一兩個(gè)經(jīng)得起考驗(yàn)、經(jīng)得起討論的工程代碼。另外,你可以利用這些代碼或者工程把他們作成一個(gè)更好的產(chǎn)品或者想法,這就要看你優(yōu)秀的代碼能力了。
15、幽默感是必須的。 我20年的開發(fā)生涯中,我從來沒有碰到過一個(gè)程序員沒有相當(dāng)?shù)挠哪械摹4_切地說,在我們這個(gè)行業(yè),這是必須的。
16、當(dāng)心那些無所不知的人,不愿分享的人,和經(jīng)驗(yàn)不足的人。當(dāng)你遇到這幾種程序員時(shí)首先你自己要謙虛。那些無所不知的人更想作一個(gè)英雄而不是一個(gè)團(tuán)隊(duì)成員,保守的人則是在編寫著他們不愿意分享的代碼。而那些經(jīng)驗(yàn)不足的程序員會(huì)每十分鐘就來問你一下,當(dāng)他完成開發(fā)時(shí),那代碼已經(jīng)是你的而不是他們的了。
17、沒有項(xiàng)目是從來就是簡單的。我曾被朋友、家人、同事要求忽忙地做一些事情,匆忙地寫一個(gè)程序或者網(wǎng)站。應(yīng)該計(jì)劃能夠完成兩方都會(huì)滿意的東西。開始時(shí)可能他只是需要一個(gè)使用Microsoft Access 的有3個(gè)頁面的網(wǎng)站,但是隨后就可能變成一個(gè)有15個(gè)頁面的網(wǎng)站且使用SQL Server、一個(gè)論壇、一個(gè)自定義的CMS(內(nèi)容管理系統(tǒng))
18、任何時(shí)候不要想當(dāng)然。假如你接手一個(gè)簡單的項(xiàng)目,你可能會(huì)認(rèn)為某些部分很容易完成。千萬不要這樣認(rèn)為,除非你有一個(gè)類、組件、或者一段已經(jīng)寫好的代碼并且已經(jīng)測試通過。
19、沒有軟件是已經(jīng)完成的。一個(gè)程序員有次告訴我沒有軟件是已經(jīng)完成的,它們只是暫時(shí)完成了。這是明智的忠告。如果客戶還在使用你寫的程序,已經(jīng)忍過了測試的那段時(shí)間。還有可能就是你仍在更新它,這并不是什么壞事,它可以讓你不斷地工作。:-)
20、有耐心是一種長處。 當(dāng)客戶、朋友、或者家庭成員用電腦的時(shí)候,他們可能會(huì)受挫、想砸掉電腦以至于暴走。我告訴他們,“是你在控制電腦而不是電腦在控制你!睂Υ糜诰幊痰碾娔X,你需要有一定的耐心。只要程序員明白他們的問題所在了,他們就又從電腦的角度來看問題了,還說“呃,不就是這樣嘛!
我希望這一摞經(jīng)驗(yàn)?zāi)軌騿l(fā)一些人,又或者讓你輕輕一笑。
本文鏈接:http://m.95time.cn/tech/program/2010/7628.asp
出處:譯言
責(zé)任編輯:bluehearts
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|