5千和2萬,普通程序員和熟練開發者的差別

5千和2萬,普通程序員和熟練開發者的差別

我們根據職場發展通路和能力水平,把程序員分成如下四個等級:

  1. 普通開發者
  2. 熟練開發者、高級開發工程師、技術組長
  3. 技術專家、架構師、一線經理
  4. 科學家、首席(資深)架構師、部門研發總監

今天這篇文章,我們來討論普通開發者如何進階為熟練開發者。

我們會先定義普通開發者應該達到的能力水平,然後再介紹他應該在哪方面提升才可能進到下一個階段。

普通開發者的能力水平

先看我經常提到的一張圖——技術成長階段圖:

5千和2萬,普通程序員和熟練開發者的差別

普通開發者處在第一個成長階段:專項能力提升。

專項能力提升階段是初級階段,你為了搞定事情,必須先具備某些基礎能力,比如某種編程語言(Java / C++ / Python / JavaScript 等)、某個IDE (Visual Studio / Qt Creator / Android Studio / Eclipse / WebStorm 等)、某種技術框架(Netty / Qt / SSH / MyBatis / AngularJS 等)。

這個階段最重要的就是提升專項能力,讓自己能夠迅速搞定一些別人安排給你的事情,體現出你的價值。

在這個階段,最起碼達到下列水準:

  • 能理解並完成別人分解好的葉子任務
  • 能自己完成一個功能模塊的開發

以前端開發者為例,在這個階段,你必須能將從 UI 過來的某個頁面原型轉換為可運行、可操作的真實 Web 頁面。比如登錄頁面、比如商品詳情展示頁面,要能做到實現可視化頁面和業務邏輯跳轉。

以 Android App 開發者為例,在這個階段,你必須能搞定類似登錄、支付等這類功能。以 App 的登錄功能為例,你要能使用特定的佈局和組件實現自適應的登錄界面,還要能學習使用類似微信、微博等第三方賬戶的 SDK ,實現第三方賬戶登錄。

你可能很難自己設計一套完整的登錄功能(包含口令加密、單點登錄、Cookie 使用、驗證碼、密碼找回、第三方登錄、多終端同步、角色鑑權、用戶數據存儲等),但是當熟練開發者或者高級開發者完成了設計,把某個小功能分配給你的時候,你要能夠理解這個設計,並將這個設計實現出來,和整個登錄系統整合在一起,能夠正常運轉。

當你能夠搞定這些事情的時候,你的專項技術水平起碼是這樣的:

  • 能熟練搭建需要的開發和測試環境
  • 熟悉所用編程語言的基礎語法,有這門語言的知識地圖,熟悉該語言本身的各種基礎功能,瞭解這門語言的高級功能
  • 能調用已有技術框架的 API 來實現特定功能
  • 能在實現同一功能的多組 API 之間選擇合適的那一組
  • 能熟練使用開發環境和各種輔助工具進行調試
  • 可以解決易復現的、邏輯簡單的軟件 Bug
  • 能自主學習某個新框架的基礎 API ,參考 DEMO 完成某個功能的基本實現

我的總結可能不完善或存在 Bug ,請大家在留言區指正、補充。

我想到一個身邊的例子,剛好和我們討論的這個話題契合。

有一次和朋友 G 聊天,他說他部門有位做前端開發的程序員 X ,一直在用 jQuery 實現各種頁面,代碼冗餘,結構凌亂。Vue.js 出來後,G 想在新版本中使用,就安排 X 學習 Vue.js ,讓他參考公司產品某兩個頁面的功能和佈局,簡化設計,做兩個帶異步數據請求功能的頁面出來看看效果, 結果一個星期過後,X 告訴 G ,Vue.js 太複雜,開發文檔看不明白,代碼也搞不懂,進行不下去……

如果你像 X 這樣的狀態,就說明你還停留在普通開發者階段,只能在他人指導和安排下編碼實現特定的細分功能。

要想進階,就要先在專項技術能力上達到我們前面所列清單描述的水平(那是基礎要求),然後再對照熟練開發者的能力要求,有針對性的去學習提高,穩步進入下個階段。

普通和熟練的關鍵區別

對照前面的技術成長階段圖,熟練開發者處在中間階段,擁有自己的技能體系。

為了搞明白擁有自己的技能體系是什麼概念,我們先來看兩組概念:

  1. 知識、知識體系
  2. 技能、技能體系

簡單說,知識是能引發改變的信息,技能是運用知識解決問題的一系列思維和動作的組合。但這樣講不大容易明白,我們舉個軟件開發領域的例子。 C++ 中的虛函數是一個知識點,用虛函數這個特性定義模塊接口,實現模塊的動態加載,就是技能。

接下來為了行文方便,我不再區分知識和技能,直接把知識等同於技能,甚至用知識一詞代替技能。請在閱讀時根據上下文加以區分。

知識和知識體系的關係,技能和技能體系的關係,就像樹木和森林的關係,就像瑞士軍刀上小刀、小剪子、小螺絲刀和瑞士軍刀的關係。

這樣打個比方,應該可以體會到“體系”是什麼了。

所謂知識體系,就是若干相互聯繫的、可以用來解決特定場景問題的知識的組合。

Ok,現在回頭來看普通開發者和熟練開發者的區別,就簡單多了。

普通開發者因為不斷完成任務,不斷做項目,接觸、使用了各種各樣的“知識點”,於是擁有了各種離散的知識,但這個知識和那個知識很少關聯,他擁有的知識,是散兵遊勇,如下圖所示:

5千和2萬,普通程序員和熟練開發者的差別

當你的知識點各不關聯時,你在遇到問題時,就很難進行系統思考,就很難獲得解決辦法。

而熟練開發者,則(被動或主動)經歷了知識點的梳理、整合過程,把零散的知識點圍繞著某個應用場景聯繫起來,形成了知識體系。就像下圖:

5千和2萬,普通程序員和熟練開發者的差別

當你有了知識體系之後,遇到和你知識體系對應的場景相關的問題,就可以快速找到相關的知識,系統的分析問題,最終解決問題。

你看,是否擁有知識體系,導致了熟練開發者和普通開發者的一個非常重要的區別:熟練開發者能夠獨立負責一個模塊或子系統的設計和開發工作,擁有分析問題、解決問題的能力和任務分解的能力,可以分配任務給普通開發者。

進階修煉方向

好啦,從技術水平的角度講,普通開發者和熟練開發者的區別就在於:普通開發者的知識不成體系,而熟練開發者構建了與某個應用場景相關的知識體系。

這樣看來,普通開發者要想進階,方向就非常明確了:構建自己的知識體系。


分享到:


相關文章: