{譯}程序員能力矩陣

http://blog.csdn.net/luckheadline

覺得這個東西實在太好,不翻譯不轉載一下實在不好意思。

 

程序員能力矩陣

注意每個級別的知識是累加的,即如果你在 n 階,則表明你也知道低於 n 階的所有知識。

 

計算機科學

 

2n(Level 0)

n2(Level 1)

n (Level 2)

log(n) (Level 3)

數據結構

不知道數組與鏈表的區別

能夠解釋和在實際編程任務中使用數組,鏈表,字典等

知道基本數據結構的時空開銷,如數組對比鏈表;能夠解釋如何實現哈希表並能處理衝突,優先隊列並知道實現它們的方法

瞭解高級數據結構,如 B- 樹,二項堆和 fibonacci 堆,平衡二叉樹和紅黑樹,伸展樹, trie 樹等

算法

不知道如何找出一個數組中的平均數

基本排序,搜索和數據結構遍歷與查找算法

樹,圖,簡單貪心與分治算法;能理解其相關知識

能夠識別和編碼動態規劃解決方案;較好的瞭解圖算法;較好的瞭解數值計算算法;能識別 NP 問題等。

系統編程

不知道編譯器,鏈接器或解釋器是什麼

基本瞭解編譯器,鏈接器和解釋器。理解彙編代碼並知道在硬件級別是如何工作的。部分了解虛擬內存和頁。

理解內核態和用戶態,多線程,同步原語以及它們如何實現;能夠讀懂彙編代碼。理解網絡如何工作,理解網絡協議與 socket 級別的編程。

理解整個程序棧,硬件,二進制代碼,彙編,靜態與動態鏈接,編譯,解釋,及時編譯,垃圾收集,堆,棧,內存地址等等。

 

軟件工程

 

2n(Level 0)

n2(Level 1)

n (Level 2)

log(n) (Level 3)

源代碼版本管理

根據日期備份文件夾

VSS 使用和初學使用 CVS/SVN

精通使用 CVS SVN 。知道如何分支和合並,使用補丁建立目錄屬性等。

瞭解分佈式 VCS 系統。嘗試過 Bzr/ Mercurial/ Darcs/ Git

Build 自動化

只知道如果使用 IDE build

知道如何使用命令行 build 系統

能夠用腳本 build 基本系統

能使用腳本 build 系統,文檔,安裝,產生髮布 notes 和標記代碼

自動化測試

認爲所有的測試都是測試人員的工作

寫過自動化單元測試併爲代碼建立好的單元測試用例

使用 TDD 方式寫代碼

理解並能建立自動的功能測試,負載 / 平衡和 UI 測試

 

編程

 

2n(Level 0)

n2(Level 1)

n (Level 2)

log(n) (Level 3)

問題分解

僅僅因爲重用而直接拷貝粘貼代碼

能夠將問題分解爲多個功能

能夠想出重用的功能和對象以解決整體問題

使用合適的數據結構和算法,考慮泛化和麪向對象的代碼以封裝問題易變化的層面

系統分解

不能超出單個文件和類考慮問題

能夠打破問題空間並設計解決方案只要它在相同平臺和技術範圍內

能夠跨多個技術領域與平臺設計系統

能夠利用多個產品線和集成外部系統以虛擬化和設計複雜系統。也能夠設計操作以支持系統的 monitoring, reporting, fail overs

交流

不能和同事表達思想與想法。較差的拼寫與語法。

同事能理解所說的。較好的拼寫與語法

能夠有效的與同事交流

能夠不含糊的理解與交流思想 / 設計 / 觀點,並能根據環境調整溝通

在一個文件中組織代碼

沒有明顯的組織結構

方法在邏輯與訪問方式上被劃分

代碼被劃分爲多個域,並通過對其他代碼文件的引用加以註釋

文件有 license 頭,總結,較好的註釋,統一的空行使用。文件看起來美觀。

跨文件代碼組織

不考慮跨文件的代碼組織

相關文件被分組放進一個文件夾

每個物理文件有其獨特的目的,例如類定義,功能實現等

物理級別上的代碼組織非常匹配於設計,文件名與目錄分佈都能透視出設計

源代碼樹管理

所有的都在一個文件夾裏

代碼基本區分進不同邏輯的文件夾

沒有循環依賴,二進制文件,靜態庫,文檔, builds ,第三方代碼都被組織放在合適的文件夾裏

源代碼樹的物理表現匹配於邏輯組織和管理。目錄名和管理提供了對整個系統設計的透視

代碼可讀性

單音節名

良好的文件名,變量名,類名及方法名

沒有長方法,對不尋常代碼, bug 修改,代碼假設加上註釋

代碼假設使用斷言證明,自然的代碼流,無深度的條件或方法嵌套

防禦性編碼

不理解這個概念

檢查所有的參數並對代碼中重要的假設加上斷言

確保檢查返回值並對代碼可能失敗的異常進行檢查

擁有自己的庫以幫助防禦性編碼,通過單元測試模擬錯誤

錯誤處理

只對愉快的 case 編碼

對代碼有基本的錯誤處理以能夠拋出異常或產生錯誤

確保錯誤與異常處理,資源,連接和內存都被合理的清理

編碼以提前識別可能的異常,在所有代碼層面統一的維護異常處理,對整個系統的異常處理建立統一的方針

IDE

通常使用 IDE 作爲文本編輯

能夠有效通過菜單使用 IDE

知道常用的快捷鍵

寫過定製宏

API

需要經常查找幫助文檔

記住常用的 API

廣泛而深入的瞭解 API

針對 API 寫過庫以簡化經常使用的任務並填補 API 空隙

框架

除了核心平臺沒有使用任何框架

聽說但沒有使用流行的框架

使用過超過一個框架並熟知框架的慣用語

框架作者

需求

採用已有的需求與代碼去實現

關心未考慮的情況以考慮問題

理解整個 picture 並對整個領域考慮

能夠根據經驗對已有需求提出額外的選擇和流程

腳本

不知道腳本工具

批處理文件或 shell 腳本

Perl/Python/Ruby/ VBScript/Powershell

寫過併發布過可重用代碼

數據庫

認爲 Excel 是一個數據庫

瞭解基本數據庫概念,規範化, ACID ,事務,並能寫簡單的查詢語句

能夠設計良好和規範的數據庫結構並記住將會運行的查詢;擅長使用視圖,存儲過程,觸發器和自定義類型。知道簇與非簇索引的區別。擅長使用 ORM 工具

能做基本數據庫管理,性能優化,索引優化,寫高級的查詢語句;能夠用對應的 sql 語句代替遊標的使用;理解索引在內部如何實現;理解數據庫如何被鏡像,複製等;理解兩個段提交如何工作

 

經驗

 

2n(Level 0)

n2(Level 1)

n (Level 2)

log(n) (Level 3)

對語言的專業經驗

命令或面向對象

命令,面向對象和陳述 (SQL) ,如果理解靜態和動態類型,弱和強類型,靜態推理類型將獲得額外獎勵

函數語言,如果理解晚綁定, currying, continuations ,將獲得額外獎勵

併發 (Erlang, Oz) 和邏輯 (Prolog)

對平臺的專業經驗

1

2-3

4-5

6+

專業經驗年限

1

2-5

6-9

10+

領域知識

沒有領域知識

在某個領域至少工作從事一個產品

在相同領域從事工作多個產品

領域專家。在領域內設計和實現多個產品與解決方案。熟知和理解領域內的術語與協議

 

知識

 

2n(Level 0)

n2(Level 1)

n (Level 2)

log(n) (Level 3)

工具知識

侷限於主要的 IDE

知道流行與標準工具的其他選擇

熟知編輯器, debugger IDE ,開源的選擇等等。使用過 ORM 工具

實際寫過工具和腳本,如果發佈將獲得額外獎勵

代碼庫知識

未看過代碼庫

基本瞭解代碼表現並知道如何 build 系統

較好了解代碼庫,實現過一些 bug 修補和一些小的功能

對代碼庫實現了多個大的功能,並能輕易的實現需要的修改

對流行技術的瞭解

沒聽說過流行的技術

聽說過領域內的流行技術

下載過測試版本並讀過一些文章與手冊

玩過預覽版並實際用它建立過一些

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章