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