原創(chuàng)|行業(yè)資訊|編輯:郝浩|2014-07-24 14:19:35.000|閱讀 2468 次
概述:本文摘選自國外著名的程序員博客網(wǎng)站blogoverflow.com上的文章.文章指出了到達(dá)到比"優(yōu)秀"更好的程序員應(yīng)該具備的一些特質(zhì).
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
作為工作了好些年的程序員,是否你的思想已經(jīng)出現(xiàn)升華?目標(biāo)不再是停留在“優(yōu)秀”層面,而是打算向更高級別的“偉大”而邁進(jìn)?現(xiàn)在的你想要讓寫出的所有程序都遵循自己的理念;現(xiàn)在的你想要成為編程方面的大師——而不是那種碌碌無為,守著.Net接口茍活度日的書呆子;現(xiàn)在的你認(rèn)為編程學(xué)是一門藝術(shù)而不再是科學(xué),而你想要成為程序員中的畢加索,受人尊敬。
言歸正傳,現(xiàn)在最重要的是如何去實(shí)現(xiàn)這個(gè)變得“偉大”的目標(biāo)。
作為資深的程序員,你應(yīng)當(dāng)認(rèn)識到“偉大”區(qū)別于“優(yōu)秀”的地方并不只限于技術(shù)方面。其中一個(gè)很重要的區(qū)別是“偉大”的程序員能夠從客戶的角度去分析需求,使設(shè)計(jì)更加人性化。而“優(yōu)秀”的程序員只會完成既定的功能。當(dāng)然,如果知道客戶的需求,而無法提供有用的技術(shù)支持也無法被稱為“偉大”。那么我們來看看邁向“偉大”應(yīng)具備的一些特性吧。
復(fù)制和粘貼的程序員不是真正的程序員。如果你發(fā)現(xiàn)自己編寫的代碼行不止一次的出現(xiàn)相同的(或類似的)情形,那么你就該考慮將這些代碼片斷進(jìn)行清理整頓了。這種使代碼變得更小,更加容易進(jìn)行維護(hù),出現(xiàn)程序錯(cuò)誤概率更低的工作我們稱之為代碼重構(gòu),這是必做的日常工作的一部分。
在你掌握了清理和重構(gòu)代碼的技巧之后,下一步,你要學(xué)習(xí)保持代碼簡短實(shí)用的風(fēng)格。想像一下,一篇長的離譜的主程序代碼對于維護(hù)它的人來說會有多么的恐怖。那么在主程序前加入頭文件,將繁瑣的主程序進(jìn)行分塊打包,會讓程序維護(hù)起來簡單一目了然,且編譯的時(shí)間完全相同,我們何樂而不為呢?
YAGNI全稱為You Ain’t Gonna Need It,即為“你不會需要它”之意。作為程序員,我們常希望自己設(shè)計(jì)的東西能夠涵蓋所有基本需求。可事實(shí)往往是這樣的,最開始客戶希望應(yīng)用程序完成其中的a功能,在你完成后,他們又認(rèn)為應(yīng)該加上b和c功能。然后,我們又花上幾天時(shí)間去完成b和c 功能,畢竟這是客戶的需求。這樣的需求變更一次又一次,最后會得到一個(gè)比計(jì)劃大很多的代碼庫和應(yīng)用程序,而你曾經(jīng)編寫的一半代碼都沒用。為了減小更改需求帶來的影響,讓你的解決方案保持靈活性、可定制性和可預(yù)見性是工作中的一個(gè)非常重要的部分。在這里,編程真的就成為了一門藝術(shù)了——沒有硬性規(guī)定,完全自由的裁量度,靈活性全部由程序員自己決定——這和繪畫一樣,多一筆少一筆,是輕還是重全由藝術(shù)家來權(quán)衡。
代碼審查是將代碼提交給有經(jīng)驗(yàn)的程序員來幫助檢查源代碼與編碼標(biāo)準(zhǔn)的符合性以及代碼質(zhì)量的活動,很多人會以為這就是給代碼挑刺的活動,事實(shí)上代碼審查最重要的并不是去關(guān)注技術(shù)細(xì)節(jié),而是去留意設(shè)計(jì)理念,設(shè)計(jì)方法和實(shí)現(xiàn)過程,并提出參考性的建議。如果你覺得應(yīng)該把別人的每個(gè)BUG的細(xì)節(jié)都一一羅列出來,展示別人的代碼有多么的糟糕,那就錯(cuò)了。這在無意之間傳遞了一條錯(cuò)誤訊息:我是來找碴的,是來讓你難堪的。別人會因此刻意回避與你討論,而你也將失去一個(gè)學(xué)習(xí)的機(jī)會。在這里,你應(yīng)當(dāng)學(xué)會尊重他人,就算他比你差很多,你也應(yīng)該抱著這樣的心態(tài):“我們是來互相學(xué)習(xí)的。”
閱讀設(shè)計(jì)模式的經(jīng)典書籍常會為你帶來靈光突現(xiàn)的時(shí)刻——“哈,這就是我解決這個(gè)混亂編碼問題的方法。”設(shè)計(jì)模式可以在軟件工程的開發(fā)中給人們帶來便利,但是,往往其結(jié)果卻是使程序變得更加混亂。這是因?yàn)槿藗冊谡莆樟嗽O(shè)計(jì)模式這個(gè)“錘子”后,往往會把所有的問題都想像成是“釘子”,而不根據(jù)實(shí)際情況進(jìn)行具體分析,這樣常使結(jié)果適得其反。靈活理性的使用設(shè)計(jì)模式很重要。
對于最新的框架和庫,你可能不會使用它們,但是你得清楚它們能夠干什么。這里我舉一個(gè)自己的例子——在SignalR出現(xiàn)以前,我一直堅(jiān)信到目前為止還沒有方法能夠輕易實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用實(shí)時(shí)通告的功能,我用了許多的代碼來完成這項(xiàng)功能,費(fèi)時(shí)又費(fèi)力。但事實(shí)上,pubnub這樣的庫已經(jīng)能夠輕松實(shí)現(xiàn)這樣的功能了,只是我不知道而已。因此,如果你無法對所有的框架和庫都了然于心的話,在編寫程序的時(shí)候,難免會干出許多低效率且無意義的事。滴水穿石,聚沙成塔,你要記住,偉大源自不斷的積累和堅(jiān)持。
這無疑是一個(gè)利己利人的好習(xí)慣,不要因?yàn)樗穆闊┒芙^它忽略它。試想一下,你要對半年以前自己寫的程序進(jìn)行維護(hù),如果沒有注釋的話,單憑半年以前的零星記憶,要在成千上萬條代碼行里去尋找你想找的東西無疑是大海撈針。 另外,使用注釋也是對設(shè)計(jì)理念,算法流程的最好保存,當(dāng)別人問及你算法中“X功能是如何實(shí)現(xiàn)的”,你難道 要跑去翻半年前的算法設(shè)計(jì)圖紙或者挨著把程序從頭到尾看一遍?添加注釋雖然費(fèi)時(shí)但卻能為以后的工作省時(shí)省力,磨刀不誤砍柴工,說的就是這個(gè)道理。
編寫測試用例能夠確保你的代碼能夠持續(xù)正常工作。通過對用例的單元檢測,你可以及時(shí)的搞清楚程序的哪一塊運(yùn)行正常,而哪一塊與設(shè)計(jì)的預(yù)期不符,并及時(shí)更正,而不是等到幾天后應(yīng)用程序出來,只發(fā)現(xiàn)有數(shù)據(jù)異常,卻無法及時(shí)找出這些異常的所在。另外,你還應(yīng)當(dāng)學(xué)習(xí)TDD(驅(qū)動開發(fā)測試)。
控制反轉(zhuǎn)是目前備受爭議的一種技術(shù),它把傳統(tǒng)上由程序代碼直接操控的對象的調(diào)用權(quán)交給容器,通過容器來實(shí)現(xiàn)對象組件的裝配和管理。而依賴注入是其中最流行的IOC類型,其中包含接口注入,設(shè)值注入和構(gòu)造器注入三種方式。如果你仍不了解IOC是怎么一回事,你可以這么想像:把代碼比做曾經(jīng)的對象掌權(quán)者,它現(xiàn)在被剝奪了控制權(quán),被排擠出了核心領(lǐng)導(dǎo)層。
論壇上經(jīng)常有程序員在爭論編程語言的孰優(yōu)孰差,這其實(shí)是沒有意義的。在你了解了多種編程語言后, 你會驚奇的發(fā)現(xiàn)每種語言都有其可取之處。例如,python的簡單易用和ruby on rails在 web應(yīng)用程序開發(fā)的閃光點(diǎn)是硬幣的一面。硬幣的另外一面是嚴(yán)謹(jǐn)整潔,功能強(qiáng)大的javascript和C++。同樣的,硬幣兩邊的c#開發(fā)者和Java開發(fā)者眼里看對方都會不同。盲人摸象,只有盡可能廣泛的去觸摸編程語言這頭大象,它的形象才會更加完整。
程序員是一個(gè)奇怪的物種,這里面不乏有瘋子,狂人,呆瓜和奇葩,當(dāng)然你也可能是其中之一。如何和這些人相處是一門挑戰(zhàn),在這里,我推薦卡內(nèi)基的《如何贏得友誼及影響他人》,這本書很經(jīng)典。
本文整合編譯自
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn