轉(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-樹(shù)、二項(xiàng)堆、斐波那契堆、AVL 樹(shù)、紅黑樹(shù)、伸展樹(shù)、跳躍表以及前綴樹(shù)等。
          算法 不能夠找出一個(gè)數(shù)組各數(shù)的平均值(這令人難以置信,但是我的確在應(yīng)聘者 中遇到過(guò)) 基本的排序,搜索和數(shù)據(jù)的遍歷和檢索算法。 樹(shù),圖,簡(jiǎn)單的貪婪算法和分而治之算法,能夠適度了解矩陣該 層的含義。 能夠辨識(shí)和編寫動(dòng)態(tài)規(guī)劃方案,良好的圖算法知識(shí),良好的數(shù)值估算的知識(shí),能夠辨別NP問(wèn)題等。 Working with someone who has a good topcoder ranking would be an unbelievable piece of luck!
          編程體系 不知道何為編譯器、鏈接器和解釋器。 對(duì)編譯 器、鏈接器、解釋器有基本的了解。知道什么是匯編代碼以及在硬件層如何工作。有一些虛擬內(nèi)存和分頁(yè)知識(shí)。 了解內(nèi)核模式vs用戶模式, 多線程,同步原語(yǔ)以及它們?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
          源碼版本控制 通過(guò)日期備份文件夾 VSS和初級(jí)的 CVS/SVN用戶 熟練地使用CVS和SVN特性。知道如何分支和歸并,使用程序庫(kù)補(bǔ)丁安裝特性等 有分布式VCS 系統(tǒng)的知識(shí)。嘗試過(guò)Bzr/Mercurial/Darcs/Git
          自動(dòng)化編譯 只知道在IDE下編譯 知道如何編譯在命令行 下編譯系統(tǒng) 能夠安裝一個(gè)腳本構(gòu)建基本的系統(tǒng) 能夠安裝一個(gè)腳本來(lái)構(gòu)建系統(tǒng)并且歸檔,安裝程序,生成發(fā)布記錄和給源 碼控制中的代碼分配標(biāo)簽。
          自動(dòng)化測(cè)試 認(rèn)為所有的測(cè)試都是測(cè)試員的工作。 能夠編寫 自動(dòng)化的單元測(cè)試,能夠?yàn)檎诰帉懙拇a提出良好的測(cè)試用例。 按照TDD (Test Driven Development)方式編寫代碼。 了解并且能夠有效自動(dòng)化安裝,載入/性能和UI測(cè)試
          程序設(shè)計(jì) Programming
            2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level 3) Comments
          問(wèn)題分解 只有直線式的代碼,通過(guò)復(fù)制粘貼來(lái)復(fù)用 能夠把 問(wèn)題分散到多個(gè)函數(shù)中 能夠想出可復(fù)用的函數(shù)/對(duì)象來(lái)解決大題的問(wèn)題 使用適宜的數(shù)據(jù)結(jié)構(gòu)和算法,寫出通用的/面向 對(duì)象的代碼來(lái)封裝問(wèn)題的易改變的層面。
          系統(tǒng)分解 N想不出比單一的文件/類更好的層面 如果不在 同一平臺(tái)或沒(méi)采用相同的技術(shù),能夠把問(wèn)題空間和設(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á)想法/主意。匱乏拼寫和語(yǔ)法的能力。 同 伴能了解你在說(shuō)什么。有良好的拼寫和語(yǔ)法能力。 能夠和同伴進(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.
          同一文件中代碼組織 同一文件中組織沒(méi)有依據(jù) 按照邏輯 性或者易接近的方法 代碼分塊和對(duì)于其他源文件來(lái)說(shuō)是易于是釋,引用其他源文件時(shí)有良好的注釋 文檔頭部有許可聲 明,總結(jié),良好的注釋,一致的空格縮進(jìn)。文檔外觀美觀。
            2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level 3) Comments
          跨文件代碼組織 沒(méi)夠想過(guò)給代碼跨文件組織 相關(guān)文件按文件 夾分組 每個(gè)物理文件都有獨(dú)立的目的,比如一個(gè)類的定義,一個(gè)特性的實(shí)現(xiàn)等。 代碼在物理層組織緊密,在文件名上與 設(shè)計(jì)和外觀相匹配,可以通過(guò)文件分布方式洞察設(shè)計(jì)理念。
          源碼樹(shù)組織 一切都放在一個(gè)文件夾內(nèi) 初步地將代碼分散進(jìn) 對(duì)應(yīng)邏輯的文件夾。 沒(méi)有循環(huán)依賴,二進(jìn)制文件,庫(kù),文檔,構(gòu)建,第三方的代碼都組織進(jìn)合適的文件夾內(nèi)。 源碼樹(shù)的 物理布局與邏輯層次、組織方式相匹配。可以通過(guò)目錄名稱和組織方式洞察設(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é)的名稱 (在國(guó)內(nèi)應(yīng)該是那些類似用漢語(yǔ)拼音命名的習(xí)慣) 對(duì)文件、變量、類、方法等,有良好的命名。 沒(méi)有長(zhǎng)函數(shù)、注釋解釋不常規(guī)的代碼,bug修復(fù),代碼假設(shè)。 代 碼假設(shè)驗(yàn)證使用斷言,自然的代碼流,沒(méi)有深層嵌套的條件和方法
          防御性編碼 不知道這個(gè)概念 檢查代碼中所有的參數(shù),對(duì)關(guān)鍵 的假設(shè)進(jìn)行斷言 確保檢查了返回值和使代碼失敗的異常。 有自己的庫(kù)來(lái)幫助防御性編程、編寫單元測(cè)試模擬故障
            2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level 3) Comments
          錯(cuò)誤處理 只給樂(lè)觀的情形編碼 基本的代碼錯(cuò)誤處理,拋出 異常/生成錯(cuò)誤 確保錯(cuò)誤/異常留在程序中有良好的狀態(tài),資源,連接,內(nèi)存都有被合適的清理。 在編碼之前察覺(jué)可能 出現(xiàn)的異常,在代碼的所有層次中維持一致性的異常處理策略,提出整個(gè)系統(tǒng)的錯(cuò)誤處理準(zhǔn)則。
          IDE IDE大部分用來(lái)進(jìn)行文本編輯 了解其周圍的接 口,能夠高效地通過(guò)菜單來(lái)使用IDE 了解最常操作的鍵盤快捷鍵 編寫自定義宏
          API 需要頻繁地查閱文檔 把最頻繁使用的API記在腦 子里 廣闊且深入的API知識(shí)。 為了使實(shí)際任務(wù)中常用API使用更加便捷,編寫過(guò)API的上層庫(kù),填補(bǔ)API之間 的缺口。 E.g. of API can be Java library, .net framework or the custom API for the application
          框架 沒(méi)有使用過(guò)主平臺(tái)外的任何框架 聽(tīng)過(guò)但沒(méi)用過(guò)平臺(tái)下 流行的可用框架 在專業(yè)的職位中使用過(guò)一個(gè)以上的框架,通曉各框架的特色。 某框架的作者
            2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level 3) Comments
          需求分析 接受給定的需求和代碼規(guī)格 能對(duì)規(guī)格的遺漏提出 疑問(wèn) 了解全面情況,提出需要被規(guī)格化的整體范圍。 能夠提出更好的可選方案,根據(jù)經(jīng)驗(yàn)的浮現(xiàn)給出需求
          腳本 不具備腳本工具的知識(shí) 批處理文件/shell腳本 Perl/Python/Ruby/VBScript/Powershell 寫過(guò)并且發(fā)表過(guò)可重用的代碼
          數(shù)據(jù)庫(kù) 認(rèn)為Excel就是數(shù)據(jù)庫(kù) 知道基本的數(shù)據(jù)庫(kù)概 念,規(guī)范化、ACID(原子性Atomicity、一致性Consistency、隔離性Isolation、持久性Durability)、事務(wù)化,能 夠?qū)懞?jiǎn)單的select語(yǔ)句 能夠牢記在運(yùn)行時(shí)必要查詢中設(shè)計(jì)良好的規(guī)范化數(shù)據(jù)庫(kù)模式, 精通用戶視圖,存儲(chǔ)過(guò)程,觸發(fā)器和用戶定義類型。知道聚集與非聚集索引之間的差異。精通使用ORM(Object Relational Mapping對(duì)象關(guān)系映射)工具 能做基本的數(shù)據(jù)庫(kù)管理,性能優(yōu)化,索引優(yōu)化,編寫高級(jí)的select查詢,能夠使用相關(guān)sql來(lái)替 換游標(biāo),理解數(shù)據(jù)內(nèi)部的存儲(chǔ),了解如何鏡像、復(fù)制數(shù)據(jù)庫(kù)。知道兩段數(shù)據(jù)提交如何工作
          經(jīng)驗(yàn) Experience
            2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level 3) Comments
          專業(yè)語(yǔ)言經(jīng)驗(yàn) 命令式語(yǔ)言和面向?qū)ο笳Z(yǔ)言 命令式語(yǔ)言,面向?qū)ο笳Z(yǔ)言和說(shuō)明型語(yǔ)言(SQL),如果了解靜態(tài)類型vs動(dòng)態(tài)類型,弱類型vs強(qiáng)類型則有加分 函數(shù)式語(yǔ)言,如果了解延 緩求值,局部套用函數(shù),延續(xù)則有加分 并發(fā)語(yǔ)言(Erlang, Oz) 邏輯語(yǔ)言(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í) 沒(méi)有該領(lǐng)域的知識(shí) 在該領(lǐng)域中曾經(jīng)至少為一個(gè) 產(chǎn)品工作過(guò) 在同一領(lǐng)域中為多個(gè)產(chǎn)品工作過(guò) 領(lǐng)域?qū)<摇T谠擃I(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、開(kāi)源的備選方案有很好的了解。比如某人了解大多數(shù)Scott Hanselman的威力工具列表中的工具,使用過(guò)ORM工具。 實(shí)際地編寫過(guò)工具和腳本,如果這些被發(fā)布則有加分
          語(yǔ)言接觸 命令式語(yǔ)言和面向?qū)ο笳Z(yǔ)言 命令式語(yǔ)言、面向?qū)ο? 語(yǔ)言和說(shuō)明型語(yǔ)言(SQL),如果了解靜態(tài)類型vs動(dòng)態(tài)類型、弱類型vs強(qiáng)類型則有加分 函數(shù)式語(yǔ)言,如果了解延緩求值、局部套用函 數(shù)、continuations (源于scheme中的一種高級(jí)控制結(jié)構(gòu))則有加分 并發(fā)語(yǔ)言(Erlang, Oz) 邏輯語(yǔ)言(Prolog)
          代碼庫(kù)知識(shí) 從來(lái)沒(méi)有查詢過(guò)代碼庫(kù) 基本的代碼層知識(shí),了 解如果構(gòu)建系統(tǒng) 良好的代碼庫(kù)工作知識(shí),實(shí)現(xiàn)過(guò)幾次bug修復(fù)或者完成了一些細(xì)小的特性 實(shí)現(xiàn)了代碼庫(kù)中多個(gè)大型特 性,能夠輕松地將多數(shù)特性的需求變更具體化,從容地處理bug修復(fù)。
          下一代技術(shù)知識(shí) 從來(lái)沒(méi)聽(tīng)說(shuō)過(guò)即將到來(lái)的技術(shù) 聽(tīng)說(shuō)過(guò)某領(lǐng) 域即將到來(lái)的技術(shù) 下載過(guò)alpha preview/CTP/beta版本,并且讀過(guò)一些文章和手冊(cè) 試用過(guò)預(yù)覽 版而且實(shí)際地構(gòu)建過(guò)某物,如果共享給其他人的話則有加分
            2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level 3) Comments
          平臺(tái)內(nèi)部 對(duì)平臺(tái)內(nèi)部毫無(wú)所知 有平臺(tái)基本的內(nèi)部工作的 知識(shí) 深度的平臺(tái)內(nèi)部知識(shí),能夠設(shè)想平臺(tái)如何將程序轉(zhuǎn)換成可執(zhí)行代碼。 編寫過(guò)增強(qiáng)平臺(tái)或者為其平臺(tái)內(nèi)部提供信息的 工具。比如,反匯編工具,反編譯工具,調(diào)試工具等。
          書籍 菜鳥(niǎ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ù)庫(kù)系統(tǒng) 導(dǎo)論》 C.J Date版,《Thinking Forth》 ,《Little Schemer》(沒(méi)找到其中譯本)
          博客 聽(tīng)過(guò)但是從來(lái)抽不出空去接觸 閱讀一些科技/編程 /軟件工程的博客,并且經(jīng)常的收聽(tīng)一些播客 維護(hù)一些博客的鏈接,收集博主分享的有用的文章和工具 維護(hù)一個(gè)在編程方 面,分享有個(gè)人見(jiàn)解和思考的博客
          Creative Commons License
          程序員能力矩陣 by XGuru is licensed under a Creative Commons 署名-非商業(yè)性使用-相同方式共享 2.5 中國(guó)大陸 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.


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 巴塘县| 铅山县| 晴隆县| 砀山县| 宁化县| 洞头县| 闻喜县| 绵竹市| 库伦旗| 扬中市| 襄城县| 墨竹工卡县| 禹州市| 扎囊县| 怀安县| 普洱| 凉山| 洛南县| 平塘县| 冕宁县| 涟源市| 乳山市| 修水县| 西藏| 水城县| 昌乐县| 阿瓦提县| 浪卡子县| 绥化市| 通城县| 武强县| 鄂州市| 太原市| 阳信县| 邢台县| 巨鹿县| 齐河县| 于都县| 清新县| 南召县| 会昌县|