{译}程序员能力矩阵

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

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

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

Build 自动化

只知道如果使用 IDE build

知道如何使用命令行 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

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

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

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

代码库知识

未看过代码库

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

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

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

对流行技术的了解

没听说过流行的技术

听说过领域内的流行技术

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

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值