{译}程序员能力矩阵

来源:互联网 发布:苍蝇水在淘宝上叫什么 编辑:程序博客网 时间:2024/04/29 17:04

http://blog.csdn.net/luckheadline

觉得这个东西实在太好,不翻译不转载一下实在不好意思。

 

程序员能力矩阵

注意每个级别的知识是累加的,即如果你在n阶,则表明你也知道低于n阶的所有知识。

 

计算机科学

 

2n (Level 0)

n2 (Level 1)

n (Level 2)

log(n) (Level 3)

数据结构

不知道数组与链表的区别

能够解释和在实际编程任务中使用数组,链表,字典等

知道基本数据结构的时空开销,如数组对比链表;能够解释如何实现哈希表并能处理冲突,优先队列并知道实现它们的方法

了解高级数据结构,如B-树,二项堆和fibonacci堆,平衡二叉树和红黑树,伸展树,trie树等

算法

不知道如何找出一个数组中的平均数

基本排序,搜索和数据结构遍历与查找算法

树,图,简单贪心与分治算法;能理解其相关知识

能够识别和编码动态规划解决方案;较好的了解图算法;较好的了解数值计算算法;能识别NP问题等。

系统编程

不知道编译器,链接器或解释器是什么

基本了解编译器,链接器和解释器。理解汇编代码并知道在硬件级别是如何工作的。部分了解虚拟内存和页。

理解内核态和用户态,多线程,同步原语以及它们如何实现;能够读懂汇编代码。理解网络如何工作,理解网络协议与socket级别的编程。

理解整个程序栈,硬件,二进制代码,汇编,静态与动态链接,编译,解释,及时编译,垃圾收集,堆,栈,内存地址等等。

 

软件工程

 

2n (Level 0)

n2 (Level 1)

n (Level 2)

log(n) (Level 3)

源代码版本管理

根据日期备份文件夹

VSS使用和初学使用CVS/SVN

精通使用CVSSVN。知道如何分支和合并,使用补丁建立目录属性等。

了解分布式VCS系统。尝试过Bzr/ Mercurial/ Darcs/ Git

Build自动化

只知道如果使用IDEbuild

知道如何使用命令行build系统

能够用脚本build基本系统

能使用脚本build系统,文档,安装,产生发布notes和标记代码

自动化测试

认为所有的测试都是测试人员的工作

写过自动化单元测试并为代码建立好的单元测试用例

使用TDD方式写代码

理解并能建立自动的功能测试,负载/平衡和UI测试

 

编程

 

2n (Level 0)

n2 (Level 1)

n (Level 2)

log(n) (Level 3)

问题分解

仅仅因为重用而直接拷贝粘贴代码

能够将问题分解为多个功能

能够想出重用的功能和对象以解决整体问题

使用合适的数据结构和算法,考虑泛化和面向对象的代码以封装问题易变化的层面

系统分解

不能超出单个文件和类考虑问题

能够打破问题空间并设计解决方案只要它在相同平台和技术范围内

能够跨多个技术领域与平台设计系统

能够利用多个产品线和集成外部系统以虚拟化和设计复杂系统。也能够设计操作以支持系统的monitoring, reporting, fail overs

交流

不能和同事表达思想与想法。较差的拼写与语法。

同事能理解所说的。较好的拼写与语法

能够有效的与同事交流

能够不含糊的理解与交流思想/设计/观点,并能根据环境调整沟通

在一个文件中组织代码

没有明显的组织结构

方法在逻辑与访问方式上被划分

代码被划分为多个域,并通过对其他代码文件的引用加以注释

文件有license头,总结,较好的注释,统一的空行使用。文件看起来美观。

跨文件代码组织

不考虑跨文件的代码组织

相关文件被分组放进一个文件夹

每个物理文件有其独特的目的,例如类定义,功能实现等

物理级别上的代码组织非常匹配于设计,文件名与目录分布都能透视出设计

源代码树管理

所有的都在一个文件夹里

代码基本区分进不同逻辑的文件夹

没有循环依赖,二进制文件,静态库,文档,builds,第三方代码都被组织放在合适的文件夹里

源代码树的物理表现匹配于逻辑组织和管理。目录名和管理提供了对整个系统设计的透视

代码可读性

单音节名

良好的文件名,变量名,类名及方法名

没有长方法,对不寻常代码,bug修改,代码假设加上注释

代码假设使用断言证明,自然的代码流,无深度的条件或方法嵌套

防御性编码

不理解这个概念

检查所有的参数并对代码中重要的假设加上断言

确保检查返回值并对代码可能失败的异常进行检查

拥有自己的库以帮助防御性编码,通过单元测试模拟错误

错误处理

只对愉快的case编码

对代码有基本的错误处理以能够抛出异常或产生错误

确保错误与异常处理,资源,连接和内存都被合理的清理

编码以提前识别可能的异常,在所有代码层面统一的维护异常处理,对整个系统的异常处理建立统一的方针

IDE

通常使用IDE作为文本编辑

能够有效通过菜单使用IDE

知道常用的快捷键

写过定制宏

API

需要经常查找帮助文档

记住常用的API

广泛而深入的了解API

针对API写过库以简化经常使用的任务并填补API空隙

框架

除了核心平台没有使用任何框架

听说但没有使用流行的框架

使用过超过一个框架并熟知框架的惯用语

框架作者

需求

采用已有的需求与代码去实现

关心未考虑的情况以考虑问题

理解整个picture并对整个领域考虑

能够根据经验对已有需求提出额外的选择和流程

脚本

不知道脚本工具

批处理文件或shell脚本

Perl/Python/Ruby/ VBScript/Powershell

写过并发布过可重用代码

数据库

认为Excel是一个数据库

了解基本数据库概念,规范化,ACID,事务,并能写简单的查询语句

能够设计良好和规范的数据库结构并记住将会运行的查询;擅长使用视图,存储过程,触发器和自定义类型。知道簇与非簇索引的区别。擅长使用ORM工具

能做基本数据库管理,性能优化,索引优化,写高级的查询语句;能够用对应的sql语句代替游标的使用;理解索引在内部如何实现;理解数据库如何被镜像,复制等;理解两个段提交如何工作

 

经验

 

2n (Level 0)

n2 (Level 1)

n (Level 2)

log(n) (Level 3)

对语言的专业经验

命令或面向对象

命令,面向对象和陈述(SQL),如果理解静态和动态类型,弱和强类型,静态推理类型将获得额外奖励

函数语言,如果理解晚绑定,currying, continuations,将获得额外奖励

并发(Erlang, Oz)和逻辑(Prolog)

对平台的专业经验

1

2-3

4-5

6+

专业经验年限

1

2-5

6-9

10+

领域知识

没有领域知识

在某个领域至少工作从事一个产品

在相同领域从事工作多个产品

领域专家。在领域内设计和实现多个产品与解决方案。熟知和理解领域内的术语与协议

 

知识

 

2n (Level 0)

n2 (Level 1)

n (Level 2)

log(n) (Level 3)

工具知识

局限于主要的IDE

知道流行与标准工具的其他选择

熟知编辑器,debuggerIDE,开源的选择等等。使用过ORM工具

实际写过工具和脚本,如果发布将获得额外奖励

代码库知识

未看过代码库

基本了解代码表现并知道如何build系统

较好了解代码库,实现过一些bug修补和一些小的功能

对代码库实现了多个大的功能,并能轻易的实现需要的修改

对流行技术的了解

没听说过流行的技术

听说过领域内的流行技术

下载过测试版本并读过一些文章与手册

玩过预览版并实际用它建立过一些

 

 

原创粉丝点击