使用一(yī)種特殊的編程語言、編程很牛,單單靠這個并不能說一(yī)名程序員(yuán)/開(kāi)發者就是優秀程序員(yuán)/開(kāi)發者。 快速發展的開(kāi)發環境使得這個行業比我(wǒ)今天看到的任何一(yī)個行業都要發展迅速,這既有積極的一(yī)面也有消極的一(yī)面:今天的程序員(yuán)/開(kāi)發者有很多編程語言、開(kāi)發工(gōng)具和開(kāi)發平台可選,但是建立一(yī)個安全、可擴展的環境卻變得難了很多;硬件和軟件正日新月異地變得更加複雜(zá),但現在學習新技術比過去(qù)要難太多了。
以下(xià)是優秀程序員(yuán)應當具備的品質:
語言和工(gōng)具(Languages and Tools:)
任何程序員(yuán)/開(kāi)發者需要具備的第一(yī)個技能就是,能夠用編程語言工(gōng)作并會使用與之相關的主要開(kāi)發工(gōng)具,包括:工(gōng)具、IDEs, web 框架, messaging APIs。
程序設計方法(Programming Paradigm:)
舉例來說,很好地理解面向對象,這對使用強制式語言(Imperative Language也稱過程式語言)寫出可維護的代碼至關重要。在企業開(kāi)發中(zhōng)你會遇到各種不同的問題,理解多種程序設計方法并知(zhī)道何時使用,将使這些問題迎刃而解。
領域專長的知(zhī)識(Domain Specific Knowledge:)
如果想編寫系統來解決特定領域内的問題,那麽擁有該領域的專長知(zhī)識将非常重要。
盡管許多這樣的知(zhī)識是由項目的商(shāng)業分(fēn)析員(yuán)(Business Analyst)來獲悉,但如果開(kāi)發者也能獲取,那麽跟用戶的交流将會更加容易,而且更能夠理解他們的專業詞彙。
人際關系(People Skills:)
軟件開(kāi)發中(zhōng)最重要的技能之一(yī)就是能夠與其他開(kāi)發者一(yī)起高效工(gōng)作——同事、質量/商(shāng)業分(fēn)析員(yuán)(Quality/Business Analysts),客戶,用戶,很多很多……如果你能夠很好地處理這些關系,那麽成功的大(dà)路也離(lí)你不遠矣。
解決問題(Problem Solving:)
有能力解決那些沒有明顯解決方法的問題,這一(yī)點在軟件開(kāi)發中(zhōng)很重要。當把你的應用配置到JBoss或者通過一(yī)個測試找到一(yī)個棘手bug的時候,理智地編程将成爲調試一(yī)個類路徑(class path)問題。
溝通能力(Good Communication skills:)
在軟件世界中(zhōng),人們通常認爲好的溝通能力就是流利地說話(huà),事實上這遠不是。這指的是:你能夠多麽有效地與其他人交流。作爲一(yī)名優秀的開(kāi)發者,你應當能夠很好地表達你的想法,很好地聽(tīng),以及很好地掌控你與他人溝通的過程。
讀書(shū)(Read Books:)
讀大(dà)量書(shū)将了解很多不同的技術,讀書(shū)使你對一(yī)種技術有了快速、直接的視角。通常你應當選擇知(zhī)名學者的書(shū),他們推崇實踐和用技術解決問題的多種方法。在這個過程中(zhōng),你将學到很多并逐漸形成自己的方法。沒準哪天你也就能出書(shū)了呢。
實踐、實踐再實踐(Practice, Practice and Practice)
許多開(kāi)發者擁有大(dà)量理論知(zhī)識,他們飽覽書(shū)籍和技術資(zī)料。然而,怎樣運用這些知(zhī)識卻讓他們望而卻步。這是因爲他們缺乏實踐。你工(gōng)作的效率和效力隻能通過你實踐中(zhōng)編寫代碼來獲得。唯一(yī)能使你成爲優秀開(kāi)發者的方法就是實踐、實踐再實踐。
遵循範例和最好的實踐(Follow Patterns and Best Practices :)
範例和實踐反映了技術指導、常見技術問題和基于真實事件的實踐。學習的過程是循序漸進的,但是一(yī)勞永逸。這會節省你非常多的時間和精力,讓你的工(gōng)作更加有效。遵循一(yī)本“代碼編程指南(nán)”(Code Design Guideline),經常使用代碼分(fēn)析工(gōng)具将檢測和分(fēn)析你的代碼。
讨論/小(xiǎo)組溝通(Discussion/Newsgroup:)
參加開(kāi)發社區會提高你的領導能力以及貢獻感,二者都是成功的必需品。在社區内參加一(yī)場含量較高的技術讨論将使你充滿成就感,而且會增長你的知(zhī)識,因爲其中(zhōng)的智者會查看和評點你的解決方法,你也會查看和評點他們的。而且這個過程教會你接納并感激别人的建議。如果她/他做出了積極的貢獻,不要忘了贊揚和鼓勵('pat someone on the back')。
網絡和數據庫知(zhī)識(Knowledge of Networking and Databases:)
有人也許不贊成這點,但是一(yī)個優秀的開(kāi)發者應當知(zhī)道網絡和數據庫的基本東西。而且在思考解決方法的時候,不要忘記将二者考慮在内。擁有二者的知(zhī)識,能夠幫你寫出更好的代碼并節省你很多時間。
博客、寫文章(Blog/ Write Articles:)
我(wǒ)們中(zhōng)有誰能夠記住每件事?我(wǒ)不能,所以我(wǒ)把他們記下(xià)來。當我(wǒ)需要的時候,可以回頭翻閱參考。除此之外(wài),我(wǒ)可以借此從讀者那裏獲得反饋,讓我(wǒ)對同樣的問題收獲更多的方法。我(wǒ)已經獲悉了許多與我(wǒ)工(gōng)作有關的反饋,雖然有好有壞,但我(wǒ)會一(yī)一(yī)驗證,這個過程也讓我(wǒ)受益匪淺。
KISS
不要想歪了,這裏的KISS不是你想的那樣,是指讓應用/方法直短、簡單(Keep Implementations/Approaches Short and Simple的簡寫)。不要使用行話(huà)來讓事情更加複雜(zá),因爲人們很難理解它們。最好的方法是簡化你的設計并避免過度設計(over-engineering)的東西。
像測試者一(yī)樣思考(Think as a Tester:)
開(kāi)發者和測試者,來自兩個不同陣營的兩類人群,随時準備同彼此較量。我(wǒ)發現二者的合作将産生(shēng)非常好的結果。既不會損害開(kāi)發者的利益也不會損害測試者的利益。實際上,長期來看,像測試者一(yī)樣思考有利于減少你代碼的bug,而且會形成很好的編程習慣和思維。
堅持一(yī)緻是遊戲規則(Consistency is the name of the game:)
你是否經常跳槽或者被你的薪水所打擊?如果是,那麽靜坐下(xià)來放(fàng)松下(xià)并重新規劃。好好想想不要讓你的決定天馬行空,爲了不斷向前,你需要一(yī)個堅實的決定并堅持不懈。
參加技術研讨會/大(dà)事件(Attend technology seminars and events:)
如果你所在的城市有技術研讨會,一(yī)定要抽出時間參加。大(dà)部分(fēn)的研讨會是免費(fèi)的,而且會提供新技術的重要信息。
萬家通吃還是一(yī)門獨大(dà)?(Jack of all or Master of One?:)
嗯……這個問題不好回答。在現在的環境下(xià),你必須掌握一(yī)種以上的技術。盡管這不容易,但是好的開(kāi)發者還是能夠做到。其中(zhōng)的關鍵就在于适應性:如果你精于某種技術,那麽給以機會你将較容易地在短期内掌握一(yī)種新技術。你不妨試試,多掌握一(yī)種技術可以讓你在使用中(zhōng)對比、選擇。
停止抱怨(Stop complaining:)
是否軟件沒有做成,是否測試人員(yuán)給你檢查出一(yī)堆bug?許多開(kāi)發者的本能反應是抵制情緒進而非常抵制這種情況。由于這種情緒是自然反應未經控制,所以它不可取。靜心分(fēn)析爲什麽軟件失敗、爲什麽有如此多bug,這是一(yī)個學習的經曆将使你未來的工(gōng)作受益良多。
最後,請記住你不是要永遠做個程序員(yuán)。所以一(yī)旦你自我(wǒ)滿足并覺得自己是個優秀的程序員(yuán),你就得重新規劃你自己(re-program yourself)。擴展你的興趣。開(kāi)發隻是這個過程的一(yī)部分(fēn),了解用戶和商(shāng)業實際上是一(yī)種藝術,每個人應當以此爲目标并努力掌握它。