天天看點

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的觀點主要包括:

  • 學習技術和非技術兩方面的新技能
  • 務實但不教條主義
  • 知道如何尋找答案,而不是依賴于搜尋引擎
  • 熱愛工作相關的一切,而不是程式設計本身
  • 尊重同僚,不要自負
  • 對本職工作存在情感歸屬,而不僅僅是賺錢的途徑
  • 減少重複的分析工作,及時啟動編碼工作,随時調整計劃

繼續閱讀