程序员能力矩阵
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[译文]程序员能力矩阵 Programmer Competency Matrix 注意:每个层次的知识都是渐增的,位于层次n,也蕴涵了你需了解所有低于层次n的知识。
计算机科学 Computer Science
2n(Level 0)n2(Level 1)n (Level 2)log(n) (Level 3)Comments 数
据结构不知道数组和
链表的差异
能够解释和使用
数组,链表,字
典等,并且能够
用于实际的编程
任务。
了解基本数据结构时间和空间的折中
,比如数组vs 链表,能够解释如何
实现哈希表和处理冲突,了解优先队
列及其实现。
高等的数据结构的知识
,比如B-树、二项堆、
斐波那契堆、AVL树、
红黑树、伸展树、跳跃
表以及前缀树等。
算法不能够找出一
个数组各数的
平均值(这令
人难以置信,
但是我的确在
应聘者中遇
到过)
基本的排序,搜
索和数据的遍历
和检索算法。
树,图,简单的贪婪算法和分而治之
算法,能够适度了解矩阵该层的含义
。
能够辨识和编写动态规
划方案,良好的图算法
知识,良好的数值估算
的知识,能够辨别NP问
题等。
Working with someone who has
a good topcoder ranking would
be an unbelievable piece of luck!
编程体系不知道何为编
译器、链接器
和解释器。
对编译器、链
接器、解释器有
基本的了解。知
道什么是汇编代
码以及在硬件层
如何工作。有一
些虚拟内存和分
页知识。
了解内核模式vs用户模式,多线程,
同步原语以及它们如何实现,能够阅
读汇编代码。了解网络如何工作,了
解网络协议和socket级别编程。
了解整个程序堆栈、硬
件(CPU+内存+中断+
微码)、二进制代码、
汇编、静态和动态链接
、编码、解释、
JIT(just-in-time)编译
、内存碎片回收、堆、
栈、存储器编址…
软件工程 Software Engineering
2n(Level 0)n2(Level 1)n (Level 2)log(n) (Level 3)Comments
源
码
版本控制通过日期备份
文件夹
VSS和初级
的CVS/SVN用户
熟练地使用CVS和SVN特性。知道如
何分支和归并,使用程序库补丁安装
特性等
有分布式VCS系统的
知识。尝试
过Bzr/Mercurial/Darcs/Git
自
动化编译只知道在IDE
下编译
知道如何编译在
命令行下编译
系统
能够安装一个脚本构建基本的系统
能够安装一个脚本来构
建系统并且归档,安装
程序,生成发布记录和
给源码控制中的代码分
配标签。
自
动化测试认为所有的测
试都是测试员
的工作。
能够编写自动化
的单元测试,能
够为正在编写的
代码提出良好的
测试用例。
按照TDD (Test Driven Development
)方式编写代码。
了解并且能够有效自动
化安装,载入/性能和UI
测试
程序设计 Programming
2n(Level 0)n2(Level 1)n (Level 2)log(n) (Level 3)Comments
问题分解只有直线式的
代码,通过复
制粘贴来复用
能够把问题分散
到多个函数中
能够想出可复用的函数/对象来解决
大题的问题
使用适宜的数据结构和
算法,写出通用的/面向
对象的代码来封装问题
的易改变的层面。
系统分解N想不出比单
一的文件/类
更好的层面
如果不在同一平
台或没采用相同
的技术,能够把
问题空间和设计
方案分解。
能够设计跨技术/平台的系统。
能够在多个产品线和与
外部体系一体化中虚拟
化和设计复制的系统。
同时也能够设计支持系
统监视、报告、故障恢
复等。
This is an often under rated but
very critical criteria for judging a
交流不能向同伴表
达想法/主意
。匮乏拼写和
语法的能力。
同伴能了解你在
说什么。有良好
的拼写和语法
能力。
能够和同伴进行高效的交流
能够使用清晰的方式了
解和交流想法/设计/
主意/细则,能适应每种
环境的交流
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.
同一文
件中代码组织同一文件中组
织没有依据
按照逻辑性或者
易接近的方法
代码分块和对于其他源文件来说是易
于是释,引用其他源文件时有良好的
注释
文档头部有许可声明,
总结,良好的注释,一
致的空格缩进。文档外
观美观。
2n(Level 0)n2(Level 1)n (Level 2)log(n) (Level 3)Comments
跨文
件代码组织没够想过给代
码跨文件组织
相关文件按文件
夹分组
每个物理文件都有独立的目的,比如
一个类的定义,一个特性的实现等。
代码在物理层组织紧密
,在文件名上与设计和
外观相匹配,可以通过
文件分布方式洞察设计
理念。
源
码树组织一切都放在一
个文件夹内
初步地将代码分
散进对应逻辑的
文件夹。
没有循环依赖,二进制文件,库,
文档,构建,第三方的代码都组织进
合适的文件夹内。
源码树的物理布局与逻
辑层次、组织方式相
匹配。可以通过目录名
称和组织方式洞察设计
理念。
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.
代码可读性单音节的名
称(在国内应
该是那些类似
用汉语拼音命
名的习惯)
对文件、变量、
类、方法等,有
良好的命名。
没有长函数、注释解释不常规的
代码,bug修复,代码假设。
代码假设验证使用断言
,自然的代码流,没有
深层嵌套的条件和方法
防
御性编码不知道这个概
念
检查代码中所有
的参数,对关键
的假设进行断言
确保检查了返回值和使代码失败的
异常。
有自己的库来帮助防御
性编程、编写单元测试
模拟故障
2n(Level 0)n2(Level 1)n (Level 2)log(n) (Level 3)Comments
错
误处理只给乐观的情
形编码
基本的代码错误
处理,抛出异常/
生成错误
确保错误/异常留在程序中有良好的
状态,资源,连接,内存都有被合适
的清理。
在编码之前察觉可能出
现的异常,在代码的所
有层次中维持一致性的
异常处理策略,提出整
个系统的错误处理准则
。
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
框架没有使用过主
平台外的任何
框架
听过但没用过平
台下流行的可用
框架
在专业的职位中使用过一个以上的
框架,通晓各框架的特色。
某框架的作者
2n(Level 0)n2(Level 1)n (Level 2)log(n) (Level 3)Comments
需
求分析接受给定的需
求和代码规格
能对规格的遗漏
提出疑问
了解全面情况,提出需要被规格化的
整体范围。
能够提出更好的可选
方案,根据经验的浮现
给出需求
脚本不具备脚本工
具的知识
批处理文件/shell
脚本
Perl/Python/Ruby/VBScript/Powershell写过并且发表过可重用
的代码
知道基本的数据
库概念,规