計(jì)算機(jī)科學(xué) Computer Science |
數(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í)和編寫(xiě)動(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用戶(hù)模式,
多線(xiàn)程,同步原語(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 |
源碼版本控制 |
通過(guò)日期備份文件夾 |
VSS和初級(jí)的
CVS/SVN用戶(hù) |
熟練地使用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è)試員的工作。 |
能夠編寫(xiě)
自動(dòng)化的單元測(cè)試,能夠?yàn)檎诰帉?xiě)的代碼提出良好的測(cè)試用例。 |
按照TDD (Test Driven
Development)方式編寫(xiě)代碼。 |
了解并且能夠有效自動(dòng)化安裝,載入/性能和UI測(cè)試 |
|
程序設(shè)計(jì) Programming |
問(wèn)題分解 |
只有直線(xiàn)式的代碼,通過(guò)復(fù)制粘貼來(lái)復(fù)用 |
能夠把
問(wèn)題分散到多個(gè)函數(shù)中 |
能夠想出可復(fù)用的函數(shù)/對(duì)象來(lái)解決大題的問(wèn)題 |
使用適宜的數(shù)據(jù)結(jié)構(gòu)和算法,寫(xiě)出通用的/面向
對(duì)象的代碼來(lái)封裝問(wèn)題的易改變的層面。 |
|
系統(tǒng)分解 |
N想不出比單一的文件/類(lèi)更好的層面 |
如果不在
同一平臺(tái)或沒(méi)采用相同的技術(shù),能夠把問(wèn)題空間和設(shè)計(jì)方案分解。 |
能夠設(shè)計(jì)跨技術(shù)/平臺(tái)的系統(tǒng)。 |
能夠在多個(gè)產(chǎn)品線(xiàn)和
與外部體系一體化中虛擬化和設(shè)計(jì)復(fù)制的系統(tǒng)。同時(shí)也能夠設(shè)計(jì)支持系統(tǒng)監(jiān)視、報(bào)告、故障恢復(fù)等。 |
|
交流 |
不能向同伴表達(dá)想法/主意。匱乏拼寫(xiě)和語(yǔ)法的能力。 |
同
伴能了解你在說(shuō)什么。有良好的拼寫(xiě)和語(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é),良好的注釋?zhuān)恢碌目崭窨s進(jìn)。文檔外觀美觀。 |
|
跨文件代碼組織 |
沒(méi)夠想過(guò)給代碼跨文件組織 |
相關(guān)文件按文件
夾分組 |
每個(gè)物理文件都有獨(dú)立的目的,比如一個(gè)類(lèi)的定義,一個(gè)特性的實(shí)現(xiàn)等。 |
代碼在物理層組織緊密,在文件名上與
設(shè)計(jì)和外觀相匹配,可以通過(guò)文件分布方式洞察設(shè)計(jì)理念。 |
|
源碼樹(shù)組織 |
一切都放在一個(gè)文件夾內(nèi) |
初步地將代碼分散進(jìn)
對(duì)應(yīng)邏輯的文件夾。 |
沒(méi)有循環(huán)依賴(lài),二進(jìn)制文件,庫(kù),文檔,構(gòu)建,第三方的代碼都組織進(jìn)合適的文件夾內(nèi)。 |
源碼樹(shù)的
物理布局與邏輯層次、組織方式相匹配。可以通過(guò)目錄名稱(chēng)和組織方式洞察設(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é)的名稱(chēng)
(在國(guó)內(nèi)應(yīng)該是那些類(lèi)似用漢語(yǔ)拼音命名的習(xí)慣)
|
對(duì)文件、變量、類(lèi)、方法等,有良好的命名。 |
沒(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)幫助防御性編程、編寫(xiě)單元測(cè)試模擬故障 |
|
錯(cuò)誤處理 |
只給樂(lè)觀的情形編碼 |
基本的代碼錯(cuò)誤處理,拋出
異常/生成錯(cuò)誤 |
確保錯(cuò)誤/異常留在程序中有良好的狀態(tài),資源,連接,內(nèi)存都有被合適的清理。 |
在編碼之前察覺(jué)可能
出現(xiàn)的異常,在代碼的所有層次中維持一致性的異常處理策略,提出整個(gè)系統(tǒng)的錯(cuò)誤處理準(zhǔn)則。 |
|
IDE |
IDE大部分用來(lái)進(jìn)行文本編輯 |
了解其周?chē)慕?
口,能夠高效地通過(guò)菜單來(lái)使用IDE |
了解最常操作的鍵盤(pán)快捷鍵 |
編寫(xiě)自定義宏 |
|
API |
需要頻繁地查閱文檔 |
把最頻繁使用的API記在腦
子里 |
廣闊且深入的API知識(shí)。 |
為了使實(shí)際任務(wù)中常用API使用更加便捷,編寫(xiě)過(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)下
流行的可用框架 |
在專(zhuān)業(yè)的職位中使用過(guò)一個(gè)以上的框架,通曉各框架的特色。 |
某框架的作者 |
|
需求分析 |
接受給定的需求和代碼規(guī)格 |
能對(duì)規(guī)格的遺漏提出
疑問(wèn) |
了解全面情況,提出需要被規(guī)格化的整體范圍。 |
能夠提出更好的可選方案,根據(jù)經(jīng)驗(yàn)的浮現(xiàn)給出需求 |
|
腳本 |
不具備腳本工具的知識(shí) |
批處理文件/shell腳本
|
Perl/Python/Ruby/VBScript/Powershell |
寫(xiě)過(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í)必要查詢(xún)中設(shè)計(jì)良好的規(guī)范化數(shù)據(jù)庫(kù)模式,
精通用戶(hù)視圖,存儲(chǔ)過(guò)程,觸發(fā)器和用戶(hù)定義類(lèi)型。知道聚集與非聚集索引之間的差異。精通使用ORM(Object Relational
Mapping對(duì)象關(guān)系映射)工具 |
能做基本的數(shù)據(jù)庫(kù)管理,性能優(yōu)化,索引優(yōu)化,編寫(xiě)高級(jí)的select查詢(xún),能夠使用相關(guān)sql來(lái)替
換游標(biāo),理解數(shù)據(jù)內(nèi)部的存儲(chǔ),了解如何鏡像、復(fù)制數(shù)據(jù)庫(kù)。知道兩段數(shù)據(jù)提交如何工作 |
|
經(jīng)驗(yàn) Experience |
專(zhuān)業(yè)語(yǔ)言經(jīng)驗(yàn) |
命令式語(yǔ)言和面向?qū)ο笳Z(yǔ)言 |
命令式語(yǔ)言,面向?qū)ο笳Z(yǔ)言和說(shuō)明型語(yǔ)言(SQL),如果了解靜態(tài)類(lèi)型vs動(dòng)態(tài)類(lèi)型,弱類(lèi)型vs強(qiáng)類(lèi)型則有加分 |
函數(shù)式語(yǔ)言,如果了解延
緩求值,局部套用函數(shù),延續(xù)則有加分 |
并發(fā)語(yǔ)言(Erlang, Oz) 邏輯語(yǔ)言(Prolog) |
|
專(zhuān)業(yè)平臺(tái)經(jīng)驗(yàn) |
1 |
2-3 |
4-5 |
6+ |
|
專(zhuān)業(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 |
工具知識(shí) |
僅限于主要的IDE(VS.Net, Eclipse等) |
知
道一些流行和標(biāo)準(zhǔn)工具的備選方案 |
對(duì)編輯器、調(diào)試器、IDE、開(kāi)源的備選方案有很好的了解。比如某人了解大多數(shù)Scott
Hanselman的威力工具列表中的工具,使用過(guò)ORM工具。 |
實(shí)際地編寫(xiě)過(guò)工具和腳本,如果這些被發(fā)布則有加分 |
|
語(yǔ)言接觸 |
命令式語(yǔ)言和面向?qū)ο笳Z(yǔ)言 |
命令式語(yǔ)言、面向?qū)ο?
語(yǔ)言和說(shuō)明型語(yǔ)言(SQL),如果了解靜態(tài)類(lèi)型vs動(dòng)態(tài)類(lèi)型、弱類(lèi)型vs強(qiáng)類(lèi)型則有加分 |
函數(shù)式語(yǔ)言,如果了解延緩求值、局部套用函
數(shù)、continuations (源于scheme中的一種高級(jí)控制結(jié)構(gòu))則有加分 |
并發(fā)語(yǔ)言(Erlang, Oz)
邏輯語(yǔ)言(Prolog)
|
|
代碼庫(kù)知識(shí) |
從來(lái)沒(méi)有查詢(xún)過(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ò)某物,如果共享給其他人的話(huà)則有加分 |
|
平臺(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í)行代碼。 |
編寫(xiě)過(guò)增強(qiáng)平臺(tái)或者為其平臺(tái)內(nèi)部提供信息的
工具。比如,反匯編工具,反編譯工具,調(diào)試工具等。 |
|
書(shū)籍 |
菜鳥(niǎo)系列,21天系列,24小時(shí)系列,蠢貨系列... |
《代
碼大全》,《別讓我思考》, 《精通正則表達(dá)式》 |
《設(shè)計(jì)模式》,《人件》,《代碼珠璣》,《算法設(shè)計(jì)手冊(cè)》,《程序員修煉之道》,
《人月神話(huà)》 |
《計(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)解和思考的博客 |
|