【ZT】[譯文]程序員能力矩陣 Programmer Competency Matrix
Posted on 2010-03-14 23:35 深夜兩點(diǎn) 閱讀(245) 評(píng)論(0) 編輯 收藏轉(zhuǎn)自http://static.icybear.net/%5BCN%5DProgrammer%20competency%20matrix.htm
[譯文]程序員能力矩陣 Programmer Competency Matrix
注意:每個(gè)層次的知識(shí)都是漸增的,位于層次n,也蘊(yùn)涵了你需了解所有低于層次n的 知識(shí)。
計(jì)算機(jī)科學(xué) Computer Science | |||||
---|---|---|---|---|---|
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
數(shù)據(jù)結(jié)構(gòu) | 不知道數(shù)組和鏈表的差異 | 能夠解釋和使用數(shù)組, 鏈表,字典等,并且能夠用于實(shí)際的編程任務(wù)。 | 了解基本數(shù)據(jù)結(jié)構(gòu)時(shí)間和空間的折中,比如數(shù)組vs 鏈表,能夠解釋如何實(shí)現(xiàn)哈希表和處理沖突,了解優(yōu)先隊(duì)列及其實(shí)現(xiàn)。 | 高等的數(shù)據(jù)結(jié)構(gòu)的知識(shí),比如B-樹、二項(xiàng)堆、斐波那契堆、AVL 樹、紅黑樹、伸展樹、跳躍表以及前綴樹等。 | |
算法 | 不能夠找出一個(gè)數(shù)組各數(shù)的平均值(這令人難以置信,但是我的確在應(yīng)聘者 中遇到過) | 基本的排序,搜索和數(shù)據(jù)的遍歷和檢索算法。 | 樹,圖,簡單的貪婪算法和分而治之算法,能夠適度了解矩陣該 層的含義。 | 能夠辨識(shí)和編寫動(dòng)態(tài)規(guī)劃方案,良好的圖算法知識(shí),良好的數(shù)值估算的知識(shí),能夠辨別NP問題等。 | Working with someone who has a good topcoder ranking would be an unbelievable piece of luck! |
編程體系 | 不知道何為編譯器、鏈接器和解釋器。 | 對(duì)編譯 器、鏈接器、解釋器有基本的了解。知道什么是匯編代碼以及在硬件層如何工作。有一些虛擬內(nèi)存和分頁知識(shí)。 | 了解內(nèi)核模式vs用戶模式, 多線程,同步原語以及它們?nèi)绾螌?shí)現(xiàn),能夠閱讀匯編代碼。了解網(wǎng)絡(luò)如何工作,了解網(wǎng)絡(luò)協(xié)議和socket級(jí)別編程。 | 了解整個(gè)程序堆棧、 硬件(CPU+內(nèi)存+中斷+微碼)、二進(jìn)制代碼、匯編、靜態(tài)和動(dòng)態(tài)鏈接、編碼、解釋、JIT(just-in-time)編譯、內(nèi)存碎片回收、堆、棧、存 儲(chǔ)器編址… | |
軟件工程 Software Engineering | |||||
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
源碼版本控制 | 通過日期備份文件夾 | VSS和初級(jí)的 CVS/SVN用戶 | 熟練地使用CVS和SVN特性。知道如何分支和歸并,使用程序庫補(bǔ)丁安裝特性等 | 有分布式VCS 系統(tǒng)的知識(shí)。嘗試過Bzr/Mercurial/Darcs/Git | |
自動(dòng)化編譯 | 只知道在IDE下編譯 | 知道如何編譯在命令行 下編譯系統(tǒng) | 能夠安裝一個(gè)腳本構(gòu)建基本的系統(tǒng) | 能夠安裝一個(gè)腳本來構(gòu)建系統(tǒng)并且歸檔,安裝程序,生成發(fā)布記錄和給源 碼控制中的代碼分配標(biāo)簽。 | |
自動(dòng)化測試 | 認(rèn)為所有的測試都是測試員的工作。 | 能夠編寫 自動(dòng)化的單元測試,能夠?yàn)檎诰帉懙拇a提出良好的測試用例。 | 按照TDD (Test Driven Development)方式編寫代碼。 | 了解并且能夠有效自動(dòng)化安裝,載入/性能和UI測試 | |
程序設(shè)計(jì) Programming | |||||
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
問題分解 | 只有直線式的代碼,通過復(fù)制粘貼來復(fù)用 | 能夠把 問題分散到多個(gè)函數(shù)中 | 能夠想出可復(fù)用的函數(shù)/對(duì)象來解決大題的問題 | 使用適宜的數(shù)據(jù)結(jié)構(gòu)和算法,寫出通用的/面向 對(duì)象的代碼來封裝問題的易改變的層面。 | |
系統(tǒng)分解 | N想不出比單一的文件/類更好的層面 | 如果不在 同一平臺(tái)或沒采用相同的技術(shù),能夠把問題空間和設(shè)計(jì)方案分解。 | 能夠設(shè)計(jì)跨技術(shù)/平臺(tái)的系統(tǒng)。 | 能夠在多個(gè)產(chǎn)品線和 與外部體系一體化中虛擬化和設(shè)計(jì)復(fù)制的系統(tǒng)。同時(shí)也能夠設(shè)計(jì)支持系統(tǒng)監(jiān)視、報(bào)告、故障恢復(fù)等。 | |
交流 | 不能向同伴表達(dá)想法/主意。匱乏拼寫和語法的能力。 | 同 伴能了解你在說什么。有良好的拼寫和語法能力。 | 能夠和同伴進(jìn)行高效的交流 | 能夠使用清晰的方式了解和交流想法/設(shè)計(jì) /主意/細(xì)則,能適應(yīng)每種環(huán)境的交流 | This is an often under rated but very critical criteria for judging a programmer. With the increase in outsourcing of programming tasks to places where English is not the native tongue this issue has become more prominent. I know of several projects that failed because the programmers could not understand what the intent of the communication was. |
同一文件中代碼組織 | 同一文件中組織沒有依據(jù) | 按照邏輯 性或者易接近的方法 | 代碼分塊和對(duì)于其他源文件來說是易于是釋,引用其他源文件時(shí)有良好的注釋 | 文檔頭部有許可聲 明,總結(jié),良好的注釋,一致的空格縮進(jìn)。文檔外觀美觀。 | |
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
跨文件代碼組織 | 沒夠想過給代碼跨文件組織 | 相關(guān)文件按文件 夾分組 | 每個(gè)物理文件都有獨(dú)立的目的,比如一個(gè)類的定義,一個(gè)特性的實(shí)現(xiàn)等。 | 代碼在物理層組織緊密,在文件名上與 設(shè)計(jì)和外觀相匹配,可以通過文件分布方式洞察設(shè)計(jì)理念。 | |
源碼樹組織 | 一切都放在一個(gè)文件夾內(nèi) | 初步地將代碼分散進(jìn) 對(duì)應(yīng)邏輯的文件夾。 | 沒有循環(huán)依賴,二進(jìn)制文件,庫,文檔,構(gòu)建,第三方的代碼都組織進(jìn)合適的文件夾內(nèi)。 | 源碼樹的 物理布局與邏輯層次、組織方式相匹配??梢酝ㄟ^目錄名稱和組織方式洞察設(shè)計(jì)理念。 | The difference between this and the previous item is in the scale of organization, source tree organization relates to the entire set of artifacts that define the system. |
代碼可讀性 | 單音節(jié)的名稱 (在國內(nèi)應(yīng)該是那些類似用漢語拼音命名的習(xí)慣) | 對(duì)文件、變量、類、方法等,有良好的命名。 | 沒有長函數(shù)、注釋解釋不常規(guī)的代碼,bug修復(fù),代碼假設(shè)。 | 代 碼假設(shè)驗(yàn)證使用斷言,自然的代碼流,沒有深層嵌套的條件和方法 | |
防御性編碼 | 不知道這個(gè)概念 | 檢查代碼中所有的參數(shù),對(duì)關(guān)鍵 的假設(shè)進(jìn)行斷言 | 確保檢查了返回值和使代碼失敗的異常。 | 有自己的庫來幫助防御性編程、編寫單元測試模擬故障 | |
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
錯(cuò)誤處理 | 只給樂觀的情形編碼 | 基本的代碼錯(cuò)誤處理,拋出 異常/生成錯(cuò)誤 | 確保錯(cuò)誤/異常留在程序中有良好的狀態(tài),資源,連接,內(nèi)存都有被合適的清理。 | 在編碼之前察覺可能 出現(xiàn)的異常,在代碼的所有層次中維持一致性的異常處理策略,提出整個(gè)系統(tǒng)的錯(cuò)誤處理準(zhǔn)則。 | |
IDE | IDE大部分用來進(jìn)行文本編輯 | 了解其周圍的接 口,能夠高效地通過菜單來使用IDE | 了解最常操作的鍵盤快捷鍵 | 編寫自定義宏 | |
API | 需要頻繁地查閱文檔 | 把最頻繁使用的API記在腦 子里 | 廣闊且深入的API知識(shí)。 | 為了使實(shí)際任務(wù)中常用API使用更加便捷,編寫過API的上層庫,填補(bǔ)API之間 的缺口。 | E.g. of API can be Java library, .net framework or the custom API for the application |
框架 | 沒有使用過主平臺(tái)外的任何框架 | 聽過但沒用過平臺(tái)下 流行的可用框架 | 在專業(yè)的職位中使用過一個(gè)以上的框架,通曉各框架的特色。 | 某框架的作者 | |
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
需求分析 | 接受給定的需求和代碼規(guī)格 | 能對(duì)規(guī)格的遺漏提出 疑問 | 了解全面情況,提出需要被規(guī)格化的整體范圍。 | 能夠提出更好的可選方案,根據(jù)經(jīng)驗(yàn)的浮現(xiàn)給出需求 | |
腳本 | 不具備腳本工具的知識(shí) | 批處理文件/shell腳本 | Perl/Python/Ruby/VBScript/Powershell | 寫過并且發(fā)表過可重用的代碼 | |
數(shù)據(jù)庫 | 認(rèn)為Excel就是數(shù)據(jù)庫 | 知道基本的數(shù)據(jù)庫概 念,規(guī)范化、ACID(原子性Atomicity、一致性Consistency、隔離性Isolation、持久性Durability)、事務(wù)化,能 夠?qū)懞唵蔚膕elect語句 | 能夠牢記在運(yùn)行時(shí)必要查詢中設(shè)計(jì)良好的規(guī)范化數(shù)據(jù)庫模式, 精通用戶視圖,存儲(chǔ)過程,觸發(fā)器和用戶定義類型。知道聚集與非聚集索引之間的差異。精通使用ORM(Object Relational Mapping對(duì)象關(guān)系映射)工具 | 能做基本的數(shù)據(jù)庫管理,性能優(yōu)化,索引優(yōu)化,編寫高級(jí)的select查詢,能夠使用相關(guān)sql來替 換游標(biāo),理解數(shù)據(jù)內(nèi)部的存儲(chǔ),了解如何鏡像、復(fù)制數(shù)據(jù)庫。知道兩段數(shù)據(jù)提交如何工作 | |
經(jīng)驗(yàn) Experience | |||||
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
專業(yè)語言經(jīng)驗(yàn) | 命令式語言和面向?qū)ο笳Z言 | 命令式語言,面向?qū)ο笳Z言和說明型語言(SQL),如果了解靜態(tài)類型vs動(dòng)態(tài)類型,弱類型vs強(qiáng)類型則有加分 | 函數(shù)式語言,如果了解延 緩求值,局部套用函數(shù),延續(xù)則有加分 | 并發(fā)語言(Erlang, Oz) 邏輯語言(Prolog) | |
專業(yè)平臺(tái)經(jīng)驗(yàn) | 1 | 2-3 | 4-5 | 6+ | |
專業(yè)經(jīng)驗(yàn)?zāi)挲g | 1 | 2-5 | 6-9 | 10+ | |
領(lǐng)域知識(shí) | 沒有該領(lǐng)域的知識(shí) | 在該領(lǐng)域中曾經(jīng)至少為一個(gè) 產(chǎn)品工作過 | 在同一領(lǐng)域中為多個(gè)產(chǎn)品工作過 | 領(lǐng)域?qū)<?。在該領(lǐng)域設(shè)計(jì)和實(shí)現(xiàn)數(shù)種產(chǎn)品/方案。精通該領(lǐng)域使用的標(biāo)準(zhǔn)條款 和協(xié)議 | |
學(xué)識(shí) Knowledge | |||||
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
工具知識(shí) | 僅限于主要的IDE(VS.Net, Eclipse等) | 知 道一些流行和標(biāo)準(zhǔn)工具的備選方案 | 對(duì)編輯器、調(diào)試器、IDE、開源的備選方案有很好的了解。比如某人了解大多數(shù)Scott Hanselman的威力工具列表中的工具,使用過ORM工具。 | 實(shí)際地編寫過工具和腳本,如果這些被發(fā)布則有加分 | |
語言接觸 | 命令式語言和面向?qū)ο笳Z言 | 命令式語言、面向?qū)ο? 語言和說明型語言(SQL),如果了解靜態(tài)類型vs動(dòng)態(tài)類型、弱類型vs強(qiáng)類型則有加分 | 函數(shù)式語言,如果了解延緩求值、局部套用函 數(shù)、continuations (源于scheme中的一種高級(jí)控制結(jié)構(gòu))則有加分 | 并發(fā)語言(Erlang, Oz) 邏輯語言(Prolog) | |
代碼庫知識(shí) | 從來沒有查詢過代碼庫 | 基本的代碼層知識(shí),了 解如果構(gòu)建系統(tǒng) | 良好的代碼庫工作知識(shí),實(shí)現(xiàn)過幾次bug修復(fù)或者完成了一些細(xì)小的特性 | 實(shí)現(xiàn)了代碼庫中多個(gè)大型特 性,能夠輕松地將多數(shù)特性的需求變更具體化,從容地處理bug修復(fù)。 | |
下一代技術(shù)知識(shí) | 從來沒聽說過即將到來的技術(shù) | 聽說過某領(lǐng) 域即將到來的技術(shù) | 下載過alpha preview/CTP/beta版本,并且讀過一些文章和手冊(cè) | 試用過預(yù)覽 版而且實(shí)際地構(gòu)建過某物,如果共享給其他人的話則有加分 | |
2n (Level 0) | n2 (Level 1) | n (Level 2) | log(n) (Level 3) | Comments | |
平臺(tái)內(nèi)部 | 對(duì)平臺(tái)內(nèi)部毫無所知 | 有平臺(tái)基本的內(nèi)部工作的 知識(shí) | 深度的平臺(tái)內(nèi)部知識(shí),能夠設(shè)想平臺(tái)如何將程序轉(zhuǎn)換成可執(zhí)行代碼。 | 編寫過增強(qiáng)平臺(tái)或者為其平臺(tái)內(nèi)部提供信息的 工具。比如,反匯編工具,反編譯工具,調(diào)試工具等。 | |
書籍 | 菜鳥系列,21天系列,24小時(shí)系列,蠢貨系列... | 《代 碼大全》,《別讓我思考》, 《精通正則表達(dá)式》 | 《設(shè)計(jì)模式》,《人件》,《代碼珠璣》,《算法設(shè)計(jì)手冊(cè)》,《程序員修煉之道》, 《人月神話》 | 《計(jì)算機(jī)程序設(shè)計(jì)與解釋》,《事務(wù)處理:概念與技術(shù)》,《計(jì)算機(jī)程序設(shè)計(jì)模型》,《計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》,《數(shù)據(jù)庫系統(tǒng) 導(dǎo)論》 C.J Date版,《Thinking Forth》 ,《Little Schemer》(沒找到其中譯本) | |
博客 | 聽過但是從來抽不出空去接觸 | 閱讀一些科技/編程 /軟件工程的博客,并且經(jīng)常的收聽一些播客 | 維護(hù)一些博客的鏈接,收集博主分享的有用的文章和工具 | 維護(hù)一個(gè)在編程方 面,分享有個(gè)人見解和思考的博客 |
程序員能力矩陣 by XGuru is licensed under a Creative Commons 署名-非商業(yè)性使用-相同方式共享 2.5 中國大陸 License. 原文請(qǐng)看 這 里。
Thanks to bearice for debugging.
Thanks to John Haugeland for a reformatting of it that works much more nicely on the web.