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