如何成為一名專家級的開發人員

黃利民發表於2010-11-22

原文作者Jenkov是一位丹麥資深開發人員,從事軟體開發已有十多年。常有讀者諮詢他,“怎麼才能成為一位專家級的開發人員?”(這個“專家”不是頭銜,應是指硬實力,“成為專家”和“被視為專家”是兩碼事)。所以他在下文中給出了相關建議。另外,他也提醒到,這些建議因人而異、因所用技術而異,並非適合所有人。

什麼是“專家”?成為“專家”需要多長時間?

在我開始討論如何成為一名專家之前,我們一起來花上30秒時間,看看專家的定義,還有成為專家需要多長時間?

在使用某一技能三個月後,你還不是專家,即便使用時間是三年,你還不是。馬爾科姆·格萊德威爾在《 異類:不一樣的成功啟示錄 》一書中指出,成為一名真正的專家,需要10000小時。10000小時!如果一天用10小時,每天都學習,則大概需要3年時間。如果一天5小時,一年學習200天,則大概需要10年時間。10年!

根據這一說法,我想起來,我曾在有3年開發經驗時,自認為是一個專家級或高階開發人員。如今,在2010年我已有約10年經驗,我已經知道,自己已經掌握多少東西,還有多少東西尚未知曉。現在,我已覺得自己不再是一名專家了。

此外,在過去10年當中,這一行業(Java企業級開發)已經發生了翻天覆地的變化,所以我過去掌握的技能,已不再“風光”。所以,即便你是專家,你可能也會發現自己正在過時,不得不重頭開始。

還有一件事:你不可能是全才(即:各個領域的專家)。這也就是說,你或許在某一技能上比張三優秀,但張三在另一技能上或許比你優秀。你不可能在任何方面都比別人優秀或比不上別人。你總是能從他人身上學到東西。(更不能因為別人使用的技術和你不同而去攻擊他人,只要別人不是一無是處,你就可以從他們那裡學到很多東西。正所謂,“三人行必有我師”。這也是《成為一名優秀程式設計師所需要知道的那些事》之一)。我曾經遇到過一些開發人員,他們總以為自己在全方面都比他人優秀似的,即便事實並非如此。

事實上,這通常就是區分新手的一種方法。不管是線上上還是線下,新手總是相信自己知道一切,並會至始至終地爭辯。他們的爭辯相當絕對,比如“這個總是比那個要好”,或“這就是解決事情的唯一方法”等。專家則幾乎不會那樣做。他們知道,一切事情取決於具體情況(也就是“具體情況,具體分析”),開發人員所掌握的技能,公司所選擇的工具,公司政策,個人喜好等等。沒有經驗的開發人員(和普通人)一般都認為“世界是非白即黑”。而專家知道,世界還充滿了灰色區域,甚至還有其他大量顏色和色調。

如何成為一名專家

對於大多數你需要學習的技能,這裡有四個步驟,以助你成為一名專家。在大多數情況下,你可以按照順序完成如下步驟,也可以從上至下重複如下步驟:

1. 學習技能;

2. 實踐技能;

3. 討論技能;

4. 傳授技能;

 

學習技能

在你掌握一門技能之前,你必須先學習相關理論。你可以通過書籍和教程,或課程教育,或綜合前面這些方法來學習理論。

實踐技能

一旦你掌握了技能相關理論,你需要在現實中運用該技能。通過實踐,你會知道你所學的理論,哪些地方正確,哪些地方有誤。當然了,你在大學中所學到的理論,通常在現實中並不奏效,或者根本不適合你所處的環境。

討論技能

一旦你使用技能已有很長一段時間,並且發現自己能解決很多需要該技能的問題,那這時候你應該和其他經驗人士討論它了。討論使用該技能的最佳方法,技能相關理論的侷限是什麼,還可以增加什麼東西等等。簡而言之,討論如何進一步推動該技能。(比如一個API,如何優化/改進它等。)

傳授技能

向他人傳授技能,無疑是完善自身技能的一種好辦法。可能有很多事情只顧著做了,但並未考慮為什麼要那樣做。因為必須(向他人)解釋你的方法,這會迫使你自己重新思索“為什麼要做”和“做了什麼”。

此外,你的技能上或許有些邊邊角角事從來都不需要掌握的。(比如,Web服務規範的邊邊角角)。因為要傳授自己的技能,這迫使你也要掌握這些空白了,這會讓你更上一層樓。

如何成為一名專家級的開發人員

既然我已經談論瞭如何成為一名普遍意義上的專家,我將進一步談論如何成為一名專家級的開發人員。

作為一名開發人員,你將很可能在特定行業(至少有一段時間)做軟體開發,使用特定的平臺。如果不是,如果你一直在選擇工具或行業,就像一些Web開發人員一樣,那麼你很可能將永遠不會成為一名真正的專家。你會成為萬金油或三腳貓(在某些方面還是挺有用)。如果你沒有專注某一平臺或行業,而你又想成為一名專家,那你要學會專注了。

1998年,那是一個春天,我開始做Web應用,開始了我的職業生涯。我發現自己一直在更換著工具,也就是說我並沒有真正擅長於某種工具。我只是一直在為新工具而戰。後來,我決定專注一門物件導向語言和一個平臺,並選擇了Java。那時候還沒有.Net。所以從1999年開始,我一直只用Java。

在成長為專家的路上,你必須要選擇一個平臺,可能還有一個行業。行業並不特別重要,但擁有業務領域知識,這將真正增強你的實力。

在你學習一個平臺時,你可以選擇一門語言來入手。比如,Java語言。在你學習語言之後,則需要學習一個平臺(包括所有的API和工具)。在Java中,有兩大平臺:標準版(J2SE)和企業版(J2EE)。(編者注:還有微型版(J2ME))

一旦你開始掌握選擇的平臺,你應當開始學習獨立於平臺的技能,比如模式設計、分散式系統設計、系統機構和可用性等等。在你取得進步時,你將要花更多的時間來學習這些技能。這是好事。因為這些技能不受平臺限制,更容易轉移新的技術平臺。

最後,你或許會脫離軟體開發,轉入到諸如專案管理或架構師的完全不同的業務領域。請謹記,一旦你停止使用你的開發技能,你的專家之路將更加長遠了。

下面有一張關於你的“專家之路”的圖表。你從最低端開始,逐層上升。藍色層表示獨立於平臺的技能。其他顏色層表示特定的平臺。即便下圖中並沒有你的平臺,你也可以自行新增。


(圖:“專家之路”:語言 -> 平臺 -> 獨立於平臺的技能)

你必須根據你所處的行業、所在的公司和所使用的平臺來填入具體的工具和技術等。這些事情,我無法一勞永逸地為各位一次性做好。

怎麼知道自己該學習什麼,檢視招聘廣告不失為一個好辦法。看看最常用的工具和技術?閱讀一些線上軟體雜誌,看看行業人士討論最多的技術是什麼?泡相關論壇和部落格,看看他們最常問的問題是什麼?還有,人們談論最多的技術是什麼?總之一句話,什麼技術是明天的熱點?

相關文章