計算機科學
2n (0級) | n2 (1級) | n(2級) | log(n)(3級) | |
數據結構 | 不知道數組和鏈表的區別 | 能夠解釋和使用數組、鏈表、字典等在實際的編程任務 | 知道時間和空間權衡的基本數據結構,數組和鏈表,能夠解釋如何實現哈希和能夠處理衝突,優先級隊列和方法實施等。 | 先進的數據結構的知識,比如b -樹、二項和斐波那契堆AVL /紅黑樹,傾斜的樹木,跳躍表、嘗試等。 |
算法 | 無法找到數組中數字的平均值(很難相信但是我採訪的候選人) | 基本的排序、搜索和遍歷數據結構和檢索算法 | 樹,圖,簡單的貪婪和分而治之算法,能夠理解這個矩陣的水平的相關性。 | 能夠識別和代碼動態規劃解決方案,熟悉圖算法,數值計算算法的知識,能夠識別NP問題等。 |
系統編程 | 不知道編譯器、鏈接器或翻譯 | 基本的瞭解編譯器、連接器和解釋器。 知道什麼是彙編代碼和如何在硬件級別的工作。 虛擬內存和分頁的一些知識。 | 瞭解內核模式和用戶模式,多線程,同步原語以及他們是如何實現,能夠閱讀彙編代碼。 瞭解網絡如何工作,理解網絡協議和套接字編程水平。 | 理解整個程序堆棧、硬件(CPU +內存緩存+ +中斷+微碼),二進制代碼,組裝、靜態和動態鏈接,編譯、解釋,JIT編譯,垃圾收集、堆、棧內存尋址… |
軟件工程
2n (0級) | n2 (1級) | n(2級) | log(n)(3級) | |
源代碼版本控制 | 按日期文件夾備份 | VSS和CVS / SVN用戶開始 | 精通使用CVS和SVN特性。 知道如何分支和歸併,使用程序庫補丁安裝特性等。 | 分佈式VCS系統的知識。 有/ hg / Darcs / Git嗎 |
構建自動化 | 只知道如何構建IDE | 知道如何從命令行構建系統 | 能夠安裝一個腳本構建基本的系統 | 能夠安裝一個腳本來構建系統並且文檔,安裝程序,生成發佈說明和標籤中的代碼源控制 |
自動化測試 | 認爲所有的測試是測試人員的工作 | 寫自動化單元測試並提出了良好的單元測試用例編寫的代碼嗎 | 寫了代碼以TDD方式 | 理解並能夠設置自動化功能,負載/性能和用戶界面測試 |
編程
2n (0級) | n2 (1級) | n(2級) | log(n)(3級) | |
問題分解 | 只有直線和複製粘貼代碼重用 | 問題分解成多個函數 | 能夠想出可複用的函數/對象,解決整個問題 | 使用適當的數據結構和算法,提出了通用的/面向對象的代碼來封裝方面的問題,有可能發生變化。 |
系統的分解 | 不能認爲以上級別的一個的那一的文件/類 | 能夠解決問題空間和設計方案,只要它是在相同的平臺/技術 | 能夠設計跨越多個技術/平臺的系統 | 能夠想象和設計複雜 的系統早多個產品線和與外部系統集成。也應該能夠設計支持系統監測、報告、故障恢復等。 |
溝通 | 不能表達想法/主意同行。 糟糕的拼寫和語法。 | 同伴能瞭解你。 有良好的拼寫和語法能力。 | 能有效地與同事溝通 | 能夠理解和交流想法/設計/創意/規格以明確的方式和調整溝通按照上下文 |
代碼組織在一個文件中 | 沒有證據表明組織在一個文件中 | 按照邏輯性或者易接近的方法 | 代碼分爲區域和易於解釋,引用其他源文件 | 文件許可標題,摘要,良好的註釋,空間使用。 文件應該看起來很漂亮 |
2n (0級) | n2 (1級) | n(2級) | log(n)(3級) | |
跨文件代碼組織 | 沒有考慮到組織代碼文件 | 相關文件被分組到一個文件夾中 | 每個物理文件都有一個惟一的目的,比如一個類的定義,一個特性的實現等。 | 在物理層代碼組織匹配設計和看文件名和文件夾分佈提供了洞察設計 |
源碼樹組織 | 一切都放在一個文件夾 | 基本代碼劃分成不同的邏輯文件夾。 | 沒有循環依賴,二進制文件,庫,文檔,構建,第三方的代碼都組織到相應的文件夾 | 源碼樹的物理佈局與邏輯層次、組織方式相匹配。 目錄名稱和組織提供見解的設計系統。 |
代碼的可讀性 | 單音節的名字 | 好名字的文件、變量、類、方法等。 | 沒有長函數、註釋解釋不常規的代碼,bug修復,代碼假設 | 代碼假設驗證使用斷言,自然的代碼流,沒有深層嵌套的條件和方法 |
防禦性編碼 | 不理解這個概念 | 在代碼中檢查所有參數和斷言關鍵假設 | 確保檢查返回值和檢查異常的代碼可以失敗 | 有自己的庫來幫助防守編碼,寫單元測試,模擬故障 |
2n (0級) | n2 (1級) | n(2級) | log(n)(3級) | |
錯誤處理 | 只有代碼快樂的情況下 | 基本的錯誤處理代碼,可以拋出異常/生成錯誤 | 確保錯誤/異常離開程序處於良好狀態,資源,連接和記憶都清理乾淨 | 代碼檢測之前可能是個例外,保持一致的異常處理策略在所有層代碼中,提出的指導方針爲整個系統的異常處理。 |
IDE | 主要爲文本編輯使用IDE | 瞭解其周圍的接口,能夠高效地通過菜單來使用IDE | 瞭解最常操作的鍵盤快捷鍵。 | 寫自定義宏 |
API | 經常需要查找文檔 | 最常用的api在內存嗎 | 巨大的API和深入的知識 | 寫庫的API來簡化常用任務和API,以填補空白 |
框架 | 未使用核心平臺外的任何框架 | 聽過但不使用流行的框架可用的平臺 | 在專業的職位中使用過一個以上的框架,通曉每個框架的特色 | 框架的作者 |
2n (0級) | n2 (1級) | n(2級) | log(n)(3級) | |
需求 | 將給定的需求和代碼規範 | 想出問題錯過了規範病例 | 瞭解全貌,提出整個地區,需要規範 | 能夠提出更好的選擇和劉翔需求基於經驗 |
腳本 | 沒有腳本工具知識 | 批處理文件/shell腳本 | Perl / Python / Ruby /改變/ Powershell | 編寫和出版的可重用的代碼嗎 |
數據庫 | 認爲excel是一個數據庫 | 知道基本的數據庫概念,規範化、ACID,事務,可以編寫簡單的選擇 | 能夠設計良好的和標準化的數據庫模式記住要運行的查詢,精通使用視圖、存儲過程、觸發器和用戶定義的類型。 知道聚集和非聚集索引的區別。 精通使用ORM工具。 | 能做基本的數據庫管理,性能優化,索引優化,編寫高級select查詢,能夠使用相關sql替換光標,瞭解數據存儲在內部,瞭解內部索引存儲,瞭解如何鏡像數據庫,複製等理解兩階段提交是如何工作的。 |
經驗
2n (0級) | n2 (1級) | n(2級) | log(n)(3級) | |
語言與專業經驗 | 命令式語言和麪向對象 | 命令式語言,面嚮對象語言和說明型語言(SQL),額外的好處如果瞭解靜態類型vs動態類型,弱類型vs強類型和靜態隱式類型 | 功能,額外的好處,如果他們理解延遲評價,鞭笞,延續 | 併發語言(Erlang,Oz)邏輯語言(Prolog) |
平臺與專業經驗 | 1 | 2-3 | 4-5 | 6+ |
多年的專業經驗 | 1 | 2-5 | 6-9 | 10+ |
領域知識 | 沒有知識的領域 | 工作至少一個產品領域 | 在同一領域中爲多個產品工作過 | 領域專家。 已經在領域設計和實現數種產品/方案。 熟悉與標準條款、協議中使用的域。 |
知識
2n (0級) | n2 (1級) | n(2級) | log(n)(3級) | |
工具知識 | 限於主要IDE(VS.Net,Eclipse等等)。 | 知道一些流行和標準工具的備選方案。 | 知識編輯器、調試器、ide、開源的備選方案有如有人從Scott Hanselman誰知道的大多數工具電動工具的列表。 使用ORM工具。 | 實際上寫的工具和腳本,額外的好處,如果他們已經出版。 |
語言接觸 | 命令式語言和麪向對象 | 命令式語言,面嚮對象語言和說明型語言(SQL),額外的好處如果瞭解靜態類型vs動態類型,弱類型vs強類型和靜態隱式類型 | 功能,額外的好處,如果他們理解延遲評價,鞭笞,延續 | 併發語言(Erlang,Oz)邏輯語言(Prolog) |
代碼庫知識 | 從來沒有看代碼 | 代碼佈局的基本知識以及如何構建系統 | 良好的代碼庫工作知識,實現了一些bug修復,也許一些小功能 | 實現了代碼庫中多個大型特性,能夠輕鬆地將多數特性的可視化所需的更改或bug修復 |
即將到來的技術知識 | 沒有聽說過即將到來的技術知識 | 聽說過即將到來的技術在這個領域 | 下載了alpha preview / CTP / beta和閱讀一些文章/手冊嗎 | 玩了預覽和已經創造出來的東西和共享給其他人作爲獎勵呢 |
2n (0級) | n2 (1級) | n(2級) | log(n)(3級) | |
平臺內部 | 0平臺內部的知識 | 內部的基本知識平臺是如何工作的 | 平臺內部的深入瞭解,可以設想平臺如何將程序並將其轉換爲可執行的代碼。 | 寫了工具來增強或內部提供信息平臺。 如反彙編器、反編譯器、調試器等。 |
書 | 釋放系列,21天系列,24小時系列、假人系列… | 代碼完成,不要讓我思考,掌握正則表達式 | 設計模式、人件編程珍珠,算法設計手冊,務實程序員,神祕的男人 | 計算機程序,概念的結構和解釋技術,計算機編程模型,計算機編程藝術,數據庫系統,通過c J日期、思考,小陰謀家 |
博客 | 有聽說過但沒有時間。 | 讀軟件工程技術/程序/博客和經常聽播客。 | 維護一個博客鏈接和一些有用的文章和工具的集合,他/她已經收集了 | 維護一個博客,個人見解和想法編程是共享的 |