程序员能力矩阵
菲律宾商报-医院半年工作总结
[
译文
]
程序员能力矩阵
Programmer
Competency Matrix
注意
:
每个层次的知识都是渐增的,位于层次<
br>n
,也蕴涵了你需了解所有低于层次
n
的知识。
计算机科学
Computer Science
数
据
结
构
2
n
(Level
0)
不知道数组和
链表的差异
n
2
(Level 1)
能
够解释和使用
数组,链表,字
典等,并且能够
用于实际的编程
任务。
n (Level 2)
了解基本数据结构时间和空间的折中
,比如数组
vs
链表,能够解释如何
实现哈希表和处理冲突,了解优先队
列及其实现。
log(n)
(Level 3)
高等的数据结构的知识
,比如
B-
树、二项堆、
斐波那契堆、
AVL
树、
红黑树、伸展树、跳跃
表以及前缀树等。
能
够辨识和编写动态规
划方案,良好的图算法
知识,良好的数值估算
的知识,能够辨别<
br>NP
问
题等。
了解整个程序堆栈、硬
件
(CPU+
内
存
+
中断
+
微码
)
、二进制代码、
汇编、静态和动
态链接
、编码、解释、
JIT
(
just-in-time
)编译<
br>、内存碎片回收、堆、
栈、存储器编址
…
Comments
算
法
不能够找出一
个数组各数的
平均值
(
这令
人难以置信,<
br>但是我的确在
应聘者中遇
到过
)
基本的排序,搜
索和数据的遍
历
和检索算法。
树,图,简单的贪婪算法和分而治之
算法,能够适度了解矩阵该层的含
义
。
Working with someone who has
a good
topcoder ranking would
be an unbelievable piece
of luck!
编
程
体
系
不知道何为编
译器、链接器和解释器。
对编译器、链
接器、解释器有
基本的了解。知
道什么是汇编代
码以及在硬件层
如何工作。有一
些虚拟内存和分
页知识。
了解内核模
式
vs
用户模式
,
多线程,
同步原语以及它们如何实现,能够阅读汇编代码。了解网络如何工作,了
解网络协议和
socket
级别编程。
软件工程
Software Engineering
源
码
版
本
控
制
自
动
化
编
译
自
动
化
测
试
2
n
(Level 0)n
2
(Level 1)
VSS
和初级
的
CVSSVN
用户
n
(Level 2)
熟练地使用
CVS
和
SVN
特性。知道如
何分支和归并,使用程序库补丁安装
特性等
log(n) (Level 3)
有分
布式
VCS
系统的
知识。尝试
过
BzrMercurialDarc
sGit
Comments
通过日期备份
文件夹
只知道在
IDE下编译
知道如何编译在
命令行下编译
系统
能够编写自动化
的单元
测试,能
够为正在编写的
代码提出良好的
测试用例。
能够安装一个脚本构建基
本的系统
能够安装一个脚本来构
建系统并且归档,安装
程序,生成发布记录和
给源码控制中的代码分
配标签。
了解并且能够有效自动
化安装,载入
性能和
UI
测试
认为所有的测
试都是测试员
的工作。
按照<
br>TDD
(
Test Driven
Development
)方式编写代码。
程序设计
Programming
问
题
分
解
系
统
分
解
2
n
(Level
0)
只有直线式的
代码,通过复
制粘贴来复用
n
2
(Level 1)
能够把问题分散
到多个函数中
n (Level
2)
能够想出可复用的函数
对象来解决
大题的问题
log(n)
(Level 3)
使用适宜的数据结构和
算法,写出通用的
面向
对
象的代码来封装问题
的易改变的层面。
能够在多个产品线和与
外部体系一体化中虚拟<
br>化和设计复制的系统。
同时也能够设计支持系
统监视、报告、故障恢
复等。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.
同
一
文
件
中
代
码
组
织
同一文件中组
织没有依据
按照逻辑性或者
易接近的方法
代码分块和对于其他源文件来说是易
于是释
,
引用其他源文件时有良好的
注释
文档头部有许可声明,
总
结,良好的注释,一
致的空格缩进。文档外
观美观。
跨
文
件
代
码
组
织
源
码
树
组
织
代
码
可
读
性
防
御
性
编
码
2
n
(Level 0)n
2
(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
修复
,
代码假设。
代码假设验证使用断言
,自然的代码流,没有深层嵌套的条件和方法
不知道这个概
念
检查代码中所有
的参数,对关键<
br>的假设进行断言
确保检查了返回值和使代码失败的
异常。
有自己的库来帮助防御
性编程、编写单元测试
模拟故障
错
误
处
理
2
n
(Level
0)n
2
(Level
1)
基本的代码错误
处理,抛出异常
生成错误
n (Level 2
)
确保错误
异常留在程序中有良好的
状态,资源,连接,内存都有被合适的清理。
log(n) (Level 3)
在编码之前察觉可能出
现的异常,在
代码的所
有层次中维持一致性的
异常处理策略,提出整
个系统的错误处理准则
。
Comments
只给乐观的情
形编码
IDE
来进行文本
编辑
IDE
大部分用
了解其周围的
接口,能够高效
地通过菜单来使<
br>用
IDE
把最频繁使用
的
API
记在脑子里
听过但没
用过平
台下流行的可用
框架
了解最常操作的键盘快捷键编写自定义宏
API<
br>需要频繁地查
阅文档
没有使用过主
平台外的任何
框架
广阔且深
入的
API
知识。
为了使实际任务中常
用
API
使用更加便
捷,
编写过
API
的上层库,
填补
API
之间的缺口。某框架的作者
E.g. of API can be Java
library,
.net framework or the custom
API
for the application
框
架
在专业的职位中使用过一个以上的框架,通晓各框架的特色。
需
求
分
析
脚
本
2
n
(Level 0)
接受给定的需
求和代码规格
不具备脚本工
具的知识
n
2
(Level 1)
能对规格的遗漏
提出疑问
批处理文件<
br>shell
脚本
知道基本的数据
库概念,规
n (Level
2)
了解全面情况,提出需要被规格化的
整体范围。
log(n) (Level 3
)
能够提出更好的可选
方案,根据经验的浮现
给出需求
写过并且发表过可重用
的代码
Comments
PerlPythonRubyVBScriptPower
shell
数
据
库
认为
Excel
就
是数据库
库概念,规
范化、
ACID
(原
子性
Atomi
city
、
一致
性
Consistency
、
隔离性
Isolation
、
持久
性
Durability
)、
事务化,能够写
简单的
select
语句
能够牢记在运行时必要查询中设计良
好的规范化数据库模式,
精通用户
视图,存储过程,触发器和用户定义类型。知道聚集与非聚集索引之间的
差异。精通使用
ORM
(
Objec
t
Relational Mapping
对象关系映射)
工具
能做基本的数
据库管理
,性能优化,索引优化
,编写高级的
select
查询
,能
够使用相关
sql
来替
换游标,理解数据内部
的存储,了解如何镜像
、复制数据库。知道两
段数据提交如何工作
经验
Experience
<
br>专
业
语
言
经
验
专
业
平
台<
br>经
验
专
业
经
验
年
龄
领
域<
br>知
识
2
n
(Level 0)n
2
(Level
1)
命令式语言
,
面向
对象语言和说明
型语言
(SQL),
如果
了解静态类型
vs
动态类型,弱类
型
vs
强类
型则有
加分
n (Level 2)log(n) (Level 3)Comments命令式语言和
面向对象语言
函数式语言
,
如果了解延缓求值,局
部套用函数,延续则有加分
并发语言
(Erlang, Oz)
逻
辑语言<
br>(Prolog)
12-34-56+
12-56-910+
没有该领域的知识
在该领域中曾经
至少为一个产品
工作过
在同一领域中为多个产品工作
过
领域专家。在该领域设
计和实现数种产品
方案
。精通该领域使用的
标
准条款和协议
学识
Knowledge
工
具
知
识
2
n
(Level 0)
仅限
于主要
的
IDE(,
Eclipse
等
)
n
2 (Level 1)
知道一些流行和
标准工具的备选
方案
命令式语言、
面
向对象语言和说
明型语言
(SQL),
如
果了解静态类
型
vs
动态类型、
弱类型
vs
强类型
则有加分
基本的
代码层
知识,了解如果
构建系统
n (Level 2)
对编辑器、调试器、
IDE
、开源的备
选方案有很好的了解。比如某人了解
大多数
Sco
tt Hanselman
的威力工具列
表中的工具,使用过
ORM
工具。<
br>函数式语言
,
如果了解延缓求值、局
部套用函数、
continuat
ions
(源
于
scheme
中的一种高级控制结构)
则有加分<
br>log(n) (Level 3)
实际地编写过工具和
脚本,如果这些被发布
则有加分
Comments
语
言
接
触
命令式语言和
面向对象语言
并发语言
(Erlang, Oz)
逻
辑语言
(Pr
olog)
代
码
库
知
识
下
一
代
技
术
知
识
从来没有查询
过代码库
良好的代码库工作知识,实现
过几
次
bug
修复或者完成了一些细小的
特性
实现了代码库中多个大
型特性,能够轻松地将
多数特性的需求变更具
体化,从容地处理
bug
修复。
从来没听说过
即将到来的
技术
听说过某领域即
将到来的技术
下载过
alpha previewCTPbeta
版本,
并且读过一些文章
和手册
试用过预览版而且实际
地构建过某物,如果共
享给其他人的话则有加
分
平
台
2
n
(Level 0)n
2
(Level 1)
n (Level 2)log(n) (Level 3)
编写过增强平
台或者为
其平台内部提供信息的
Comments
台
内
部
对平台内部毫
无所知
有平台基本的内
部工作的知识
深度的平台内
部知识,能够设想平台
如何将程序转换成可执行代码。
其平台内部提供信息的
工具。比
如,反汇编
工具,反编译工具,调
试工具等。
《计算机程序设计与
解释》,《
事务处理
:
概
念与技术》,《计算机
程序设计模型》,《计
算机程序
设计艺术》
,《数据库系统导论》
C.J
Date
版,《
Thinking
Forth
》
,《Little
Schemer
》(没找到其
中译本)
维护一个在编程方面
,
分享有个人见解和思考
的博客
书
籍
菜鸟系列,
21
天系列,
24
小
时系列,蠢货
系列
...
《代码大全》<
br>,《别让我
思考》
,
《精通正
则表达式》
《设计模式》,《
人件》,《代码
珠玑》,《算法设计手册》,《程序
员修炼之道》,《人月神话》
博<
br>客
听过但是从来
抽不出空去
接触
阅读一些科技
编程<
br>
软件工程的
博客,并且经常
的收听一些播客
维护一些博客的链接,收集
博主分享
的有用的文章和工具
程序员能力矩阵
by XGuru is
licensed under a Creative Commons
署名
-
非商业性使用
-
相同方式共享
2.5
中国大陆
License.
原文请看
这
里。
Thanks to bearice for
debugging.
Thanks to John Haugeland for a
reformatting of it that works much more nicely on
the web.