在這個(gè)世界上寂祥,有數(shù)百萬(wàn)的人熱衷于軟件開(kāi)發(fā)荐虐,他們有很多名字,如:軟件工程師(Software Engineer)丸凭,程序員(Programmer)福扬,編碼人(Coder)腕铸,開(kāi)發(fā)人員(Developer)。經(jīng)過(guò)一段時(shí)間后铛碑,這些人能夠成為一個(gè)優(yōu)秀的編碼人員狠裹,他們非常熟悉如何用計(jì)算機(jī)語(yǔ)言來(lái)完成自己的工作。但是汽烦,如果你要成為一個(gè)優(yōu)秀的程序員涛菠,你還可以需要有幾件事你需要注意,如果你能讓下面十個(gè)條目成為你的習(xí)慣撇吞,那么你才能真正算得上是優(yōu)秀程序員俗冻。
1. 學(xué)無(wú)止境。就算是你有了10年以上的程序員經(jīng)歷牍颈,你也得要使勁地學(xué)習(xí)迄薄,因?yàn)槟阍谟?jì)算機(jī)這個(gè)充滿一創(chuàng)造力的領(lǐng)域,每天都會(huì)有很多很多的新事物出現(xiàn)煮岁。你需要跟上時(shí)代的步伐讥蔽。你需要去了解新的程序語(yǔ)言,以及了解正在發(fā)展中的程序語(yǔ)言人乓,以及一些編程框架勤篮。還需要去閱讀一些業(yè)內(nèi)的新聞都毒,并到一些熱門(mén)的社區(qū)去參與在線的討論色罚,這樣你才能明白和了解整個(gè)軟件開(kāi)發(fā)的趨勢(shì)。在國(guó)內(nèi)账劲,一些著名的社區(qū)例如:CSDN戳护,ITPUB,CHINAUINX等等瀑焦,在國(guó)外腌且,建議你經(jīng)常上一上http://digg.com去看看各種BLOG的聚合。
2. 掌握多種語(yǔ)言榛瓮。程序語(yǔ)言總是有其最適合的領(lǐng)域铺董。當(dāng)你面對(duì)需要解決的問(wèn)題時(shí),你需要找到一個(gè)最適合的語(yǔ)言來(lái)解決這些問(wèn)題禀晓。比如精续,如果你需要性能,可能C/C++是首選粹懒,如果你需要跨平臺(tái)重付,可能Java是首選,如果你要寫(xiě)一個(gè)Web上的開(kāi)發(fā)程序凫乖,那么PHP确垫,ASP弓颈,Ajax,JSP可能會(huì)是你的選擇删掀,如果你要處理一些文本并和別的應(yīng)用交互翔冀,可能Perl, Python會(huì)是最好的。所以爬迟,花一些時(shí)間去探索一下其它你并熟悉的程序語(yǔ)言橘蜜,能讓你的眼界變寬,因?yàn)槟惚晃溲b得更好付呕,你思考問(wèn)題也就更為全面计福,這對(duì)于自己和項(xiàng)目都會(huì)有好的幫助。
3. 理性面對(duì)不同的操作系統(tǒng)或技術(shù)徽职。程序員們總是有自己心目中無(wú)可比擬的技術(shù)和操作系統(tǒng)象颖,有的人喜歡Ubuntu,有的人喜歡Debian姆钉,還有的人喜歡Windows说订,以及FreeBSD,MacOSX或Solaris等等潮瓶。程序員們?cè)诰S護(hù)起自己的忠愛(ài)時(shí)的那份執(zhí)著陶冷。只有一部分優(yōu)秀的程序員明白不同操作系統(tǒng)的優(yōu)勢(shì)和長(zhǎng)處和短處,這樣毯辅,在系統(tǒng)選型的時(shí)候埂伦,才能做到真正的客觀和公正,而不會(huì)讓情緒影響到自己思恐。同樣沾谜,語(yǔ)言也是一樣,有太多的程序員總是喜歡糾纏于語(yǔ)言的對(duì)比胀莹,如:Java和Perl基跑。哪個(gè)剛剛出道的程序員沒(méi)有爭(zhēng)論去類(lèi)似的話題呢?比如VC++和Delphi等等描焰。爭(zhēng)論這些東西只能表明自己的膚淺和浮燥媳否。優(yōu)秀的程序并不會(huì)執(zhí)著于這些,而是能夠理性的分析和理心地面對(duì)荆秦,從而才能客觀地做出正確的選擇篱竭。
4. 別把自己框在單一的開(kāi)發(fā)環(huán)境中。 再一次萄凤,正如上面所述室抽,每個(gè)程序員都有自己忠愛(ài)的工具和技術(shù),有的喜歡老的(比如我就喜歡Vi編輯程序)靡努,而有的喜歡新的比如gedit或是Emacs等坪圾。有的喜歡使用像VC++一樣的調(diào)試器晓折,而我更喜歡GDB命令行方面的調(diào)式器。等等等等兽泄。程序員在使用什么樣的工具上的爭(zhēng)論還少嗎漓概?到處都是啊。使用什么樣的工具本來(lái)無(wú)所謂病梢,只要你能更好更快地達(dá)到你的目的胃珍。但是有一點(diǎn)是優(yōu)秀程序員都應(yīng)該了解的——那就是應(yīng)該去嘗試一下別的工作環(huán)境。沒(méi)有比較蜓陌,你永遠(yuǎn)不知道誰(shuí)好誰(shuí)不好觅彰,你也永遠(yuǎn)不知道你所不知道的。
5. 使用版本管理工具管理你的代碼钮热。千萬(wàn)不要告訴我你不知道源碼的版本管理填抬,如果你的團(tuán)隊(duì)開(kāi)發(fā)的源代碼并沒(méi)有版本管理系統(tǒng),那么我要告訴你隧期,你的軟件開(kāi)發(fā)還處于石器時(shí)代飒责。趕快使用一個(gè)版式本管理工具吧。CVS 是一個(gè)看上去平淡無(wú)奇的版本工具仆潮,但它是被使用最廣的版本管理系統(tǒng)宏蛉,Subversion 是CVS的一個(gè)升級(jí)版,其正在開(kāi)始接管CVS的領(lǐng)地性置。Git 又是一個(gè)不同的版本管理工具拾并。還有Visual SourceSafe等。使用什么樣的版本管理工具依賴(lài)于你的團(tuán)隊(duì)的大小和地理分布蚌讼,你也許正在使用最有效率或最沒(méi)有效率的工具來(lái)管理你的源代碼辟灰。但一個(gè)優(yōu)秀的程序員總是會(huì)使用一款源碼版本管理工具來(lái)管理自己的代碼个榕。如果你要我推薦一個(gè)篡石,我推薦你使用開(kāi)源的Subversion。
6. 是一個(gè)優(yōu)秀的團(tuán)隊(duì)成員西采。 除非你喜歡獨(dú)奏凰萨,除非你是孤膽英雄。但我想告訴你械馆,今天胖眷,可能沒(méi)有一個(gè)成熟的軟件是你一個(gè)人能做的到的,你可能是你團(tuán)隊(duì)中最牛的大拿霹崎,但這并不意味著你就是好的團(tuán)隊(duì)成員珊搀。你的能力只有放到一個(gè)團(tuán)隊(duì)中才能施展開(kāi)來(lái)。你在和你的團(tuán)隊(duì)成員交流中有禮貌嗎尾菇?你是否經(jīng)常和他們溝通境析,并且大家都喜歡和你在一起討論問(wèn)題囚枪?想一想一個(gè)足球隊(duì)吧,你是這個(gè)隊(duì)中好的成員嗎劳淆?當(dāng)別人看到你在場(chǎng)上的跑動(dòng)链沼,當(dāng)別人看到你的傳球和接球和搶斷,能受到鼓舞嗎沛鸵?
7. 把你的工作變成文檔括勺。 這一條目當(dāng)然包括了在代碼中寫(xiě)注釋?zhuān)沁€僅僅不夠,你還需要做得更多曲掰。有良好的注釋風(fēng)格的代碼是一個(gè)文檔的基礎(chǔ)疾捍,他能夠讓你和你的團(tuán)隊(duì)容易的明白你的意圖和想法。寫(xiě)下文檔栏妖,并不僅僅是怕我們忘了當(dāng)時(shí)的想法拾氓,而且還是一種團(tuán)隊(duì)的離線交流的方法,更是一種知識(shí)傳遞的方法底哥。記錄下你所知道的一切會(huì)是一個(gè)好的習(xí)慣咙鞍。因?yàn)椋蚁嘈拍悴幌M麆e人總是在你最忙的時(shí)候來(lái)打斷你問(wèn)問(wèn)題趾徽,或是你在休假的時(shí)候接到公司的電話來(lái)詢問(wèn)你問(wèn)題续滋。而你自己如果老是守著自己的東西,其結(jié)果只可能是讓你自己長(zhǎng)時(shí)間地深陷在這塊東西內(nèi)孵奶,而你就更本不可以去做更多的事情疲酌。包括向上的晉升。你可能以為“教會(huì)徒弟能餓死師父”了袁,但我告訴你朗恳,你的保守會(huì)讓你失去更多更好的東西,請(qǐng)你相信我载绿,我絕不是在這里聳人聽(tīng)聞粥诫。
8. 注意備份和安全。 可能你覺(jué)得這是一個(gè)“廢話”崭庸,你已明白了備份的重要性怀浆。但是,我還是要在這里提出怕享,丟失東西是我們?nèi)松械囊徊糠葜瓷模憧偸菚?huì)丟東西,這點(diǎn)你永遠(yuǎn)無(wú)法避免函筋。比如:你的筆記本電腦被人偷了沙合,你的硬盤(pán)損壞了,你的電腦中病毒了跌帐,你的系統(tǒng)被人入侵了首懈,甚至整個(gè)大樓被燒了芳来,等等,等等猜拾。所以即舌,做好備份工作是非常非常重要的事情,硬盤(pán)是不可信的挎袜,所以定期的刻錄光盤(pán)或是磁帶可能會(huì)是一個(gè)好的方法顽聂,網(wǎng)絡(luò)也是不可信的,所以小心病毒和黑客盯仪,不但使用軟件方面的安全策略紊搪,你更需要一個(gè)健全的管理制度。此外全景,盡量的讓你的數(shù)據(jù)放在不同的地方耀石,并做好定期(每日,每周爸黄,每月)的備份策略滞伟。
9. 設(shè)計(jì)要足夠靈活。 可能你的需求只會(huì)要求你實(shí)現(xiàn)一個(gè)死的東西炕贵,但是梆奈,你作為一個(gè)優(yōu)秀的程序,你應(yīng)該隨時(shí)在思考這個(gè)死的東西是否可以有靈活的一面称开,比如把一些參數(shù)變成可以配置的亩钟,把一些公用的東西形成你的函數(shù)庫(kù)以便以后重用,是否提供插件方面的功能鳖轰?你的模塊是否要以像積木一樣隨意組合清酥?如果要有修改的話,你的設(shè)計(jì)是否能夠馬上應(yīng)付蕴侣?當(dāng)然焰轻,靈活的設(shè)計(jì)可能并不是要你去重新發(fā)明輪子,你應(yīng)該盡可能是使用標(biāo)準(zhǔn)化的東西睛蛛。所謂靈話的設(shè)計(jì)就是要讓讓考慮更多需求之外的東西鹦马,把需求中這一類(lèi)的問(wèn)題都考慮到胧谈,而不是只處理需求中所說(shuō)的那一特定的東西忆肾。比如說(shuō),需要需要的屏幕分辨率是800×600菱肖,那么你的設(shè)計(jì)能否靈活于其他的分辨率客冈?程序設(shè)計(jì)總是需要我們?nèi)ヌ幚聿煌沫h(huán)境,以及未來(lái)的趨勢(shì)稳强。我們需要用動(dòng)態(tài)的眼光去思考問(wèn)題场仲,而不是刻舟求劍和悦。也許有一天,你今天寫(xiě)的程序就要移植到別的環(huán)境中去渠缕,那個(gè)時(shí)候你就能真正明白什么是靈活的設(shè)計(jì)了鸽素。
10. 不要搬起石頭砸自己的腳。程序員總是有一種不好的習(xí)慣亦鳞,那就是總是想趕快地完成自己手上的工作馍忽。但情況卻往往事已愿違。越是想做得快燕差,就越是容易出問(wèn)題遭笋,越是想做得快,就越是容易遺漏問(wèn)題徒探,最終瓦呼,程序改過(guò)來(lái)改過(guò)去,按下葫蘆起了瓢测暗,最后花費(fèi)的時(shí)間和精力反而更多央串。欲速而不達(dá)。優(yōu)秀程序員的習(xí)慣是前面多花一些時(shí)間多作一些調(diào)查碗啄,試驗(yàn)一下不網(wǎng)的解決方案蹋辅,如果時(shí)間允許,一個(gè)好的習(xí)慣是挫掏,每4個(gè)小時(shí)的編程侦另,需要一個(gè)小時(shí)的休息,然后又是4個(gè)小時(shí)的編碼尉共。當(dāng)然褒傅,這因人而異,但其目的就是讓你時(shí)嘲烙眩回頭看看殿托,讓你想一想這樣三個(gè)問(wèn)題:1)是否這么做是對(duì)的?2)是否這么做考慮到了所有的情況剧蚣?3)是否有更好的方法支竹?想好了再說(shuō),時(shí)仇矗回頭看看走過(guò)的路礼搁,時(shí)常總結(jié)一下過(guò)去事目尖,會(huì)對(duì)你有很大的幫助馒吴。