您的位置:首页 > 职场人生

程序员能力矩阵

2009-07-30 18:00 204 查看
一个有意思的能力评价表:

Programmer Competency Matrix

http://www.starling-software.com/employment/programmer-competency-matrix.html

一.计算机科学(Computer Science)


数据结构(data structures

Level
0:不知道Array和LinkedList的区别
Level
1:实际编程中能解释和使用Array,LinkedList,Dictionaries等
Level
2:了解基本数据类型(Array vs LinkedList)在空间和时间上的权衡,能够解释哈希表如何实现,如何处理冲突(collisions),优先队列(Priority Queue)及如何实现等。
Level
3:了解如B-trees,二项式堆和斐波那契堆(binomial and fibonacci heaps),AVL树和红黑树(AVL/Red Black trees),伸展树(Splay Trees),跳跃表(Skip Lists),进行尝试等

算法(algorithms

Level
0:无法找到数组的平均值
Level
1:简单的排序、查找,数据结构的遍历和检索算法
Level
2:树、图、简单的贪婪和分治算法,能够理解这个矩阵水平的相关性
Level
3:能够识别和编写动态规划解决方案,良好的图算法知识,良好的数值计算算法知识,能够识别NP-问题等

系统编程(systems programming

Level
0:不知道什么是编译器,连接器或解释器
Level
1:对编译器,连接器和解释器有基本的了解,理解汇编代码及在硬件级别如何运作,一些虚拟内存和页面的知识
Level
2:理解内核模式和用户模式,多线程,同步基础,以及它们如何实现,能阅读汇编代码,理解网络如何运作,理解网络协议和socket级编程

Level 3:了解整个程序堆栈,硬件(CPU + 存储器 + 缓存 + 中断 + 微代码),二进制代码,汇编代码,静态和动态链接,编译,解释,JIT编译,垃圾回收,堆,栈,内存寻址……

二.软件工程(Software Engineering)

源代码版本控制(source code version
control)

Level
0:加日期的文件夹进行备份
Level
1:VSS和初始CVS/SVN用户
Level
2:熟练使用CVS和SVN功能,知道如何分支和合并,使用补丁安装库等特性
Level
3:了解分布式VCS系统,已经试用Bzr/Mercurial/Darcs/Git

构建自动化(build automation)

Level
0:仅知道如何使用IDE进行构建
Level
1:知道如何从命令行构建系统
Level
2:能够设置脚本构建基本系统
Level
3:能够设置脚本构建系统以及文档,安装包,生成发行说明和标记源码控制的代码

自动测试(automated testing)

Level
0:认为所有测试都是测试员的工作
Level
1:已经编写自动单元测试,为正在编写的代码提出很好的单元测试用例
Level
2:按TDD(测试驱动开发)方式编写代码
Level
3:理解并能设置自动功能,负载/性能和用户界面测试(Understands and is able to setup automated functional,
load/performance and UI tests)

三.编程(Programming)

问题分解(problem
decomposition)

Level
0:只是使用复制粘贴的复用方式,进行直线编码
Level
1:能够将问题分成多个函数
Level
2:能够拿出可重复使用的函数/对象,解决整个问题
Level
3:使用适当的数据结构和算法,并提出了泛型/面向对象的代码封装问题的各个方面,应对问题进行变化

系统分解(systems
decomposition)

Level
0:不能超过单个文件/类的级别进行思考
Level
1:在同一个平台/技术上,能分解问题空间和设计解决方案
Level
2:能够设计系统,跨越多个技术/平台
Level
3:能够可视化和设计多种产品线的复杂系统,并与外部系统集成

交流能力(communication)

Level
0:不能向同行表述思路/想法,在修辞和语法方面较差
Level
1:同行能理解你所说的话,良好的修辞和语法
Level
2:能与同行高效地沟通
Level
3:能够清楚地理解和交流思维/设计/想法/规范,在各背景下调整交流

单文件代码组织(code organization
within a file)

Level
0:在文件中没有组织的迹象
Level
1:方法依逻辑和可访问性进行分组
Level
2:代码分组为不同区域,对引用的其他源代码有良好的注释
Level
3:文件有license头,摘要,良好的注释,统一的空白使用,文件看起来很美观

跨多文件代码组织(code organization across
files)

Level
0:没有想过跨文件组织代码
Level
1:相关文件组织到同一文件夹中
Level
2:每个物理文件拥有唯一的用途,例如一个类的定义,一个特性的实现等
Level
3:代码组织在物理级别严密符合设计,文件名和文件夹的结构分布,能提供对设计的见解

源码树组织(source tree
organization)

Level
0:所有东西放到一个文件夹中
Level
1:把代码基本分类到逻辑文件夹
Level
2:没有循环依赖,二进制文件,库,文档,构建,第三方代码都组织到适当的文件夹
Level
3:源树物理布局符合逻辑层次结构和组织,目录的名称和组织反映系统的设计见解

代码易读性(code readability)

Level
0:单音节的名字
Level
1:良好的文件名,变量名,类名,方法名等
Level
2:没有过长的函数,对特殊的代码进行注释,bug修正,代码预测(code assumptions)
Level
3:使用断言进行代码预测,代码流程自然,没有过深的条件语句和方法嵌套

防御性编程(defensive coding)

Level
0:不了解这个概念
Level
1:检查代码中所有引数(argument)并对关键预测进行断言
Level
2:确保检查返回值,检查可能失败的代码异常
Level
3:有自己的库帮助进行防御性编程,编写模拟故障的单元测试

错误处理(error handling)

Level
0:仅编写情况良好的(the happy case)代码
Level
1:围绕代码进行基本的错误处理,能够抛出异常/产生错误
Level
2:确保错误/异常以良好的方式离开程序,资源,连接和内存都被正确清理
Level
3:代码检测到可能的异常前,在代码的各个层面保持一致的异常处理策略,为整个系统提出异常处理准则

集成开发环境(IDE)

Level
0:主要采用IDE进行文本编辑
Level
1:知道它们的接口方式,能够有效地利用IDE使用菜单
Level
2:知悉最常用操作的快捷方式
Level
3:写了自定义宏

应用编程接口(API)

Level
0:需要频繁查看文档
Level
1:记住最常用的API
Level
2:广泛而深入的API知识
Level
3:在API之上编写了库,以简化常用任务,填补API的空白

框架(frameworks)

Level
0:没有使用过核心平台以外的任何框架
Level
1:听说过,但没有使用过平台流行的框架
Level
2:在专业级别上使用一个以上的框架,通晓框架的风格特色(idiom)
Level
3:框架的作者

需求(requirements)

Level
0:接受给定的需求并按照规格编程
Level
1:对规格中遗漏的方面提出质疑
Level
2:了解全貌,提出需要制定的所有领域(entire areas)
Level
3:能够基于自身经验,对给定的需求提出更好的选择和流程

脚本(scripting)

Level
0:不了解脚本工具
Level
1:批处理文件/shell脚本
Level
2:Perl/Python/Ruby/VBScript/Powershell
Level
3:已编写和发布可重用代码

数据库(database)

Level
0:认为Excel就是数据库
Level
1:了解基本的数据库概念,规范,ACID(数据库事务正确执行的四个基本要素,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),事务,能编写简单的select语句
Level
2:能够设计良好和标准化的database schemas,牢记这将不得不运行,熟练使用视图,存储过程,触发器和用户自定义类型,了解聚集索引和非聚集索引的区别,熟练使用ORM(对象关系映射)工具

Level 3:能够进行基本的数据库管理,性能优化,索引优化,编写高级的select查询,能用关系sql取代游标的使用,理解内部如何存储数据,如何存储索引,理解数据库可以被镜像、复制等,理解两阶段递交是如何运作的(how the two phase commit works)

四.经验(Experience)

语言专业经验(languages with
professional experience)

Level
0:指令式(Imperative)或面向对象(Object Oriented)编程
Level
1:指令式(Imperative),面向对象(Object Oriented)和宣告式(declarative)(SQL)编程,如果了解静态和动态类型、强类型和弱类型则加分
Level
2:函数式(Functional)编程,懒惰计算法(lazy evaluation),科里化(Currying is the process of transforming a function
that takes multiple arguments into a function that takes just a single argument
and returns another function if any arguments are still needed.),延续(Continuations)
Level
3:并行(Concurrent)(Erlang, Oz)和逻辑(Logic)(Prolog)编程

平台专业经验(platforms with
professional experience)

Level
0:1
Level
1:2-3
Level
2:4-5
Level
3:6+

经验年限(years of
professional experience)

Level
0:1
Level
1:2-5
Level
2:6-9
Level
3:10+

领域知识(domain knowledge)

Level
0:没有相关领域知识
Level
1:做领域中至少一种产品的工作
Level
2:做同领域中多种产品的工作
Level
3:领域专家,曾设计和实现领域中多个产品/解决方案,精通领域中使用的标准条款和协议

五.知识(Knowledge)

工具知识(tool knowledge)

Level
0:仅限于主要的IDE(VS.Net, Eclipse等)
Level
1:了解一些流行和标准工具的替代品
Level
2:掌握编辑器,调试器,IDE,开源替代品等,例如知道Scott Hanselman的power
tools list中所列的绝大多数工具,使用过ORM工具
Level
3:在实际中已编写工具和脚本,如已发布则加分

语言涉及(languages exposed to)

Level
0:指令式(Imperative)或面向对象(Object Oriented)语言
Level
1:指令式(Imperative),面向对象(Object Oriented)和宣告式(declarative)(SQL)语言,如果了解静态和动态类型、强类型和弱类型则加分
Level
2:函数式(Functional)语言,懒惰计算法(lazy evaluation),科里化(Currying is the process of transforming a function
that takes multiple arguments into a function that takes just a single argument
and returns another function if any arguments are still needed.),延续(Continuations)
Level
3:并行(Concurrent)(Erlang, Oz)和逻辑(Logic)(Prolog)编程语言

代码库知识(codebase knowledge)

Level
0:从没看过代码库
Level
1:具有代码布局以及如何构建系统的基本知识
Level
2:良好的代码库的工作知识,实现了一些bug修正甚至一些小特性
Level
3:已实现代码库中多个的较大的特性,能够很方便地显示大部分特性和bug修正

关于即将到来技术的知识(knowledge of
upcoming technologies)

Level
0:没听过即将到来的新技术
Level
1:听说到领域中即将到来的新技术
Level
2:已下载Alpha预览版本/CTP版(Community Test Preview 社区测试试用版)/beta版,阅读相关文章和用户手册
Level
3:

平台内部原理(platform internals)

Level
0:完全不懂平台内部原理
Level
1:对平台内部如何运作有基本认识
Level
2:深入理解平台内部原理,能想象平台如何处理程序并将之转换为可执行代码
Level
3:已经为平台内部编写工具以强化机能和提供信息,如反汇编器(disassemblers),反编译器(decompilers),调试器(debuggers)等

书籍(books)

Level
0:入门系列(Unleashed
series),21天系列(21 days series),24小时系列(24 hour series),傻瓜系列(dummies series)
Level
1:《Code
Complete(代码大全)》,《Don't
Make me Think》,《Mastering
Regular Expressions(精通正则表达式)》
Level
2:《Design
Patterns(设计模式)》,《Peopleware(人件)》,《Programming Pearls(编程珠玑)》,《Algorithm Design Manual(算法设计手册)》,《Pragmatic Programmer(卓有成效的程序员)》,《Mythical Man month(人月神话)》
Level
3:《Structure
and Interpretation of Computer Programs(计算机程序的构造和解释)》,《Concepts
Techniques, Models of Computer Programming》,《Art of Computer Programming(计算机编程艺术)》,《Database
systems , by C. J Date》,《Thinking
Forth》,《Little
Schemer》

博客(blogs)

Level
0:听过但没时间
Level
1:阅读技术/编程/软件工程的博客,定义发表博客
Level
2:维护一个链接博客,存放已收集的一些有用的文章和工具的链接集合

Level 3:维护一个博客,与他人分享自己对于编程的见解和想法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: