一個(gè)優(yōu)秀的程序員就是那種即使是過單行道都要往兩邊看的人端盆〖榍纾——Doug Linder
作為一個(gè)在IT行業(yè)的軟件程序員,每天促使我去上班的動(dòng)力就是對編程的樂趣和激情藏研。但是為了激發(fā)樂趣并獲得永恒的快感漠嵌,我們需要學(xué)習(xí)和遵守一些基礎(chǔ)知識以成為一名優(yōu)秀的程序員咐汞。
當(dāng)然我總結(jié)的這些東西沒有那么神盖呼,你說你要想學(xué)了之后就一定可以成為優(yōu)秀程序員,那是不可能的化撕。這只是從我的經(jīng)驗(yàn)角度出發(fā)提供的一些捷徑几晤。對于優(yōu)秀程序員的定義,此處可以理解為能開發(fā)出超棒的IT解決方案并且能促進(jìn)行業(yè)整體發(fā)展的程序員植阴。
1.掌握基礎(chǔ)知識
不管任何行業(yè)和任何工作蟹瘾,概念的理解都是成功的關(guān)鍵。除非你有強(qiáng)大的概念基礎(chǔ)掠手,否則就不可能成為一名優(yōu)秀的程序員憾朴。核心概念的理解有助于你用最佳的方式設(shè)計(jì)和實(shí)施解決方案。如果你覺得你現(xiàn)在還沒有好好掌握關(guān)于核心計(jì)算機(jī)科學(xué)和編程語言的特定概念喷鸽,那么現(xiàn)在回過頭去重新學(xué)習(xí)這些基礎(chǔ)知識猶未晚矣众雷。
2.給自己寫的每個(gè)代碼集都貼上標(biāo)簽(how,what)
我發(fā)現(xiàn)區(qū)分程序員優(yōu)劣的一條很明顯的分割線就是做祝,是否有這個(gè)熱情去知道"what and how"砾省。有的程序員對于自己的代碼是如何執(zhí)行的以及執(zhí)行結(jié)果等知道得一清二楚。我也理解有時(shí)候因?yàn)闀r(shí)間緊迫剖淀,我們不得不在只知道這些代碼可以完成工作的情況下就立刻進(jìn)行下一步纯蛾。雖然這對解決問題而言,似乎是另一個(gè)方向的話題纵隔,但是作為一個(gè)程序員翻诉,我們應(yīng)該盡可能地深入研究問題以達(dá)到最高水平。相信我捌刮,隨著時(shí)間的推移碰煌,你會(huì)在不知不覺中養(yǎng)成這個(gè)好習(xí)慣,然后受益無窮绅作。芦圾。
3.通過幫助他人從而學(xué)到更多
可能我們中的大多數(shù)人只有在自己需要幫助的時(shí)候才會(huì)上論壇和群。有一條區(qū)別程序員是否優(yōu)秀的分割線就是俄认,優(yōu)秀者經(jīng)常會(huì)去這些地方以幫助他人个少。而且他們在幫助別人的同時(shí),自己也能學(xué)到很多東西眯杏。如果是在一個(gè)團(tuán)隊(duì)中夜焦,也應(yīng)該互相幫助。相信我岂贩,理解別人的問題背景茫经、研究并提出解決方案會(huì)讓你學(xué)到的更多,成長的更快。
4.代碼要寫得簡單卸伞、易懂抹镊、有邏輯
正如在生活中其他方面一樣,KISS(Keep it simple and short)規(guī)則同樣適用于編程領(lǐng)域荤傲。代碼要有邏輯垮耳,避免過于復(fù)雜。有些人之所以要將代碼寫得那么復(fù)雜只是為了證明自己有寫復(fù)雜代碼的能力弃酌。但是我的經(jīng)驗(yàn)告訴我氨菇,簡單且邏輯化的代碼才能有效工作,不但問題少而且更易擴(kuò)展妓湘。我記得有這么一句話
好的代碼本身就是最好的文檔查蓉。在你要添加注釋之前,先問問自己榜贴,"我怎么改進(jìn)代碼豌研,才能不需要寫這個(gè)注釋?"——Steve McConnell
5.多花時(shí)間分析問題唬党,后面就可以少花時(shí)間去修復(fù)
多花點(diǎn)時(shí)間用來理解和分析問題鹃共,設(shè)計(jì)出最優(yōu)的解決方案,然后你會(huì)發(fā)現(xiàn)接下來的工作將事半功倍驶拱。設(shè)計(jì)過程并不意味著一定要使用建模語言和工具霜浴,也可以很簡單,例如抬頭仰望天空蓝纲,然后在腦子里來一場頭腦風(fēng)暴阴孟。那些一拿到問題就習(xí)慣性去噼里啪啦寫代碼的程序員,最后拿出來的成果往往會(huì)與要求的不同税迷。
你如果在洗澡的時(shí)候腦子里還沒有程序的整體結(jié)構(gòu)永丝,那就意味著還沒有做好開工寫代碼的準(zhǔn)備〖——Richard Pattis
6.第一個(gè)分析審核自己的代碼
雖然有點(diǎn)困難慕嚷,但是在其他人發(fā)現(xiàn)之前自己先知道問題的所在,能讓你學(xué)會(huì)如何寫出"接近于無bug"的代碼毕泌。自己對自己的代碼審核要公正嚴(yán)謹(jǐn)喝检,也要能毫無猶豫地接受他人的審核。近朱者赤撼泛,與優(yōu)秀的程序員一起工作蛇耀,積極聽取他們的反饋,必然也會(huì)幫助你成為一名優(yōu)秀的程序員坎弯。
7.面對日新月異的技術(shù)千萬不要沮喪
最近一段時(shí)間在IT行業(yè)里,我碰到的很多人——要么念叨著對他們的工作失望了,要么甚至于已經(jīng)辭職在找新工作了——都一致表示抠忘,他們想要學(xué)習(xí)并使用最新的技術(shù)撩炊。對于這個(gè)愿望我認(rèn)為可以理解,但是這個(gè)詞"最新的"崎脉,我覺得不甚正確拧咳。我們每天都能聽到有人在說"現(xiàn)在又出來什么新的工具、API囚灼、框架和其他方法等"可以使得編程工作更加的簡捷骆膝。這在技術(shù)領(lǐng)域其實(shí)一直在發(fā)生。真正需要我們?nèi)リP(guān)注和理解的是核心和基本技術(shù)的轉(zhuǎn)變灶体,在這個(gè)基礎(chǔ)上再去看新的框架阅签、工具和API。舉個(gè)例子蝎抽,在很多Java公司可能每隔一周就會(huì)換上新的web框架政钟,但是其基于客戶端—服務(wù)端通信模式的需求方式、MVC模式樟结、filters/servlets/JSP养交、資源綁定、XML解析等核心概念依然是相同的瓢宦。所以碎连,與其時(shí)刻擔(dān)心框架和工具的變化,還不如花點(diǎn)時(shí)間好好學(xué)習(xí)這些核心概念驮履。相信我鱼辙,在理解這些核心概念的基礎(chǔ)上,我們才可以更快地掌握新的框架疲吸、工具和API座每。
8.應(yīng)急措施并不能長久有效
很多時(shí)候,軟件程序員可能會(huì)采取應(yīng)急和變通的解決方案(或因?yàn)闀r(shí)間緊迫摘悴,或缺乏對問題的深刻認(rèn)識峭梳,或技術(shù)經(jīng)驗(yàn)不足)。但是蹂喻,這些應(yīng)急方案會(huì)破壞代碼葱椭,導(dǎo)致其后期很難擴(kuò)展和維護(hù)。我能理解口四,有的時(shí)候這種情況真的很難避免孵运,但是就像我們都應(yīng)該講實(shí)話一樣,你講了謊話蔓彩,那就得知道謊言總有戳穿的那一天治笨。
9.閱讀文檔
優(yōu)秀程序員的基本習(xí)慣之一就是閱讀大量的文檔驳概,技術(shù)指標(biāo)、JSR旷赖、API文檔顺又、教程等等。閱讀文檔為我們用最好的方式編程打下了必需的基石等孵。
10.學(xué)習(xí)他人的代碼
我非常喜歡與那些在IDE里有java源代碼的優(yōu)秀程序員交流互動(dòng)稚照,閱讀/參考他們的代碼。因?yàn)檫@么做不但能了解基本知識俯萌,還可以學(xué)會(huì)寫項(xiàng)目的新方法果录。閱讀和參考一些可靠和已知的開放源碼或者自己的高級代碼,也有助于我們更好地編程咐熙。
最后一點(diǎn)弱恒,前面沒有列進(jìn)去的:不要和別人比
俗話說,人比人糖声,氣死人斤彼,拿自己與別人作比較只會(huì)導(dǎo)致負(fù)面情緒,并演變成不良競爭蘸泻。尺有所短寸有所長琉苇,每個(gè)人都有自己的長處和短處。我看到過很多次一些所謂的特別牛叉的程序員也會(huì)犯一些很愚蠢的錯(cuò)誤悦施。所以并扇,剖析自己,列出不足之處抡诞,努力改進(jìn)自己穷蛹,才是正途。
編程是一種真正的樂趣昼汗,歡迎樂在其中肴熏。
"任何一個(gè)傻瓜,都寫得出能讓計(jì)算機(jī)理解的代碼顷窒,但是蛙吏,優(yōu)秀程序員寫出來的代碼,能讓全人類理解鞋吉。"——Martin Fowler