Justin James談高效開發者的特質
Justin James 是 Conigent 公司的首席架構師,他指出要想成為一名優秀的開發者,僅僅寫出可用的代碼是遠遠不夠的,還需要具備一些綜合的素質,包括學習技術和非技術兩方面的新技能、務實但不教條主義、知道如何尋找答案等等。
高效的開發人員能夠主動學習技術和非技術兩方面的新知識。糟糕的程序員只知道了解對自己工作必要的東西。但是優秀的開發者會主動學習新的技術技能,不僅是技術方面,他們還會學習非技術技能,對各種知識來源都有一種開放的心態,而不會像有些人那樣固步自封。具體而言,糟糕的程序員可能在參加了 WPF 有關的項目之后才會開始學習 XAML,但是出色的開發者也許在一年之前就已經了解了相關的知識,因為他們覺得這些新知識很有趣,而且他們還會閱讀 WPF 應用的設計指南、可用性的相關內容,因此能夠做出優秀的界面來。
優秀開發者必須遵循實用主義,而不是教條主義。嚴格的遵守編程規則對許多人來說非常可怕,難以堅持下來。James 指出,他經常能夠碰到一些程序員,他們無法或者拒絕做某個任務只是因為完成這個任務的做法通常不符合最佳實踐所。業務需求很少會受到實現需求所采用的技術的制約。沒有人會說,“我們不應該把這個需求寫到規格說明書里,因為要實現這個需求,程序員就不得不寫一段很糟糕的代碼。” 程序員的任務是要創造一個可以工作的應用程序,而絕不是要求在技術方面達到十全十美。這不是在為垃圾代碼做辯護。James 認為,總會在有些時候,你會寫出一些不那么優雅的代碼,但是這些代碼永遠不會作為范例向別人展示。如果只有一種寫法,那么這種代碼就不是糟糕的代碼,但要保證你已考慮了其它所有可能的方案。
James 認為,“知道如何尋找答案”很重要。這項技能不僅僅是在搜索引擎中鍵入幾個關鍵字那么簡單, 也不是到 Stack Overflow 或者 MSDN 論壇上類似網站發求助帖。James 就碰到過在搜索引擎里根本搜不到答案的問題,然后在 Stack Overflow 和 MSDN 論壇發的所有問題貼也沒有一個像樣的答案,不過他最終還是解決了所碰到的問題。有些問題是與情境(上下文環境)相關的,所以如果依賴于搜索引擎和論壇就會被淹沒在各種亂七八糟的答案中。要知道如何進行根本原因分析,利用底層系統方面的知識找到其它的線索和解決方案,還要學習在深入分析問題之前要對問題本身有一個全面的高層次認識。
對工作有熱情,如果不熱愛本職工作,那么你無法成為頂級的開發者。現實世界的確存在一些非常優秀的、為了工作而工作的開發者,James 曾經也是這樣的心態,但是如果這成為你的價值觀,那么你不會樂意做促進事業成功的許多事情。這種觀點會激怒許多開發者,因為他們認為這是一種對自己的侮辱:“我是一名出色的開發者,但是我有其他優先級更高的事情要做,我不能把工作變成生活。”James 表示完全理解,他也有許多優先級高的事情,但是當他投身于工作當中時,他愿意暫時擱置其他優先的事情來完成工作。如果你不能樂意全身心的投入到工作中,那么你無法成為最優秀的開發者,這不是一種侮辱,而是事實。
程序員的熱情不僅僅是編程,而且要熱愛工作、使用的技術、你的老板、項目等等。James 發現有些出色的開發者在平時工作中表現一般,因為這些人討厭手頭的項目或者討厭使用的技術。James 也有過類似的心態,他的同事也有這樣的人。James 建議,如果你處于這樣的情形下,那么需要立刻解決它,要么從工作中找到樂趣,要么換份工作。
許多開發人員都有很強的自尊心。你比其他人更聰明、更有知識或者更有經驗并不意味著你比其他人更出色。你需要平等對待他人,認真聆聽并考慮其他人的想法,不要小看他們。你應該更在意團隊是否成功,而不是個人的成就。
高效開發者應該具備創業精神。最好的程序員不是機器人,他們對產品有自己的情感歸屬和創業精神。對他們來說,產品成功不僅僅意味著工資的回報。因為他們對工作有情感寄托,他們為了項目成功而工作,而且走得更遠。
“該出手時就出手”,James 認為開發人員經常犯的一個錯誤是一頭扎進代碼堆里,但是又不知道應該做什么,更糟糕的是,這些開發者還將其行為稱之為敏捷模式,好像這么說就會顯得不錯。對于出色的開發者而言,之所以扎進代碼里,是因為產品的規格說明對他們來說非常熟悉和有經驗。當高效開發者面臨新挑戰時,他們會認真思考、規劃和研究。他們的優點在于,不會掉入“分析癱瘓”的泥沼里爬不出來,他們知道應該對某些要素保持關注。一旦分析太多,那么就是浪費時間。但是也有例外,比如原子彈項目、宇宙飛船計劃等。
在某一點上停止計劃開始編碼,然后根據實際情況調整自己的計劃。這也正是 James 喜歡敏捷模式的原因。高效的開發者如果發現項目不再適用于項目實際情況,那么就會做出調整甚至拋棄。
綜上所述,James 的觀點主要包括: