程序员能力矩阵

来源:互联网 发布:暴风影音mac 加载字幕 编辑:程序博客网 时间:2024/05/16 18:08

一个有意思的能力评价表:

Programmer Competency Matrix

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


一.计算机科学(Computer Science


数据结构(data structures

Level0:不知道ArrayLinkedList的区别

Level1:实际编程中能解释和使用ArrayLinkedListDictionaries

Level2:了解基本数据类型(Array vs LinkedList)在空间和时间上的权衡,能够解释哈希表如何实现,如何处理冲突(collisions),优先队列(Priority Queue)及如何实现等。

Level3:了解如B-trees,二项式堆和斐波那契堆(binomial and fibonacci heaps),AVL树和红黑树(AVL/Red Black trees),伸展树(Splay Trees),跳跃表(Skip Lists),进行尝试等


算法(algorithms

Level0:无法找到数组的平均值

Level1:简单的排序、查找,数据结构的遍历和检索算法

Level2:树、图、简单的贪婪和分治算法,能够理解这个矩阵水平的相关性

Level3:能够识别和编写动态规划解决方案,良好的图算法知识,良好的数值计算算法知识,能够识别NP-问题等


系统编程(systems programming

Level0:不知道什么是编译器,连接器或解释器

Level1:对编译器,连接器和解释器有基本的了解,理解汇编代码及在硬件级别如何运作,一些虚拟内存和页面的知识

Level2:理解内核模式和用户模式,多线程,同步基础,以及它们如何实现,能阅读汇编代码,理解网络如何运作,理解网络协议和socket级编程

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


二.软件工程(Software Engineering


源代码版本控制(source code versioncontrol

Level0:加日期的文件夹进行备份

Level1VSS和初始CVS/SVN用户

Level2:熟练使用CVSSVN功能,知道如何分支和合并,使用补丁安装库等特性

Level3:了解分布式VCS系统,已经试用Bzr/Mercurial/Darcs/Git


构建自动化(build automation

Level0:仅知道如何使用IDE进行构建

Level1:知道如何从命令行构建系统

Level2:能够设置脚本构建基本系统

Level3:能够设置脚本构建系统以及文档,安装包,生成发行说明和标记源码控制的代码


自动测试(automated testing

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

Level1:已经编写自动单元测试,为正在编写的代码提出很好的单元测试用例

Level2:按TDD(测试驱动开发)方式编写代码

Level3理解并能设置自动功能,负载/性能和用户界面测试Understands and is able to setup automated functional,load/performance and UI tests


三.编程(Programming


问题分解(problemdecomposition

Level0只是使用复制粘贴的复用方式,进行直线编码

Level1:能够将问题分成多个函数

Level2能够拿出可重复使用的函数/对象,解决整个问题

Level3使用适当的数据结构和算法,并提出了泛型/面向对象的代码封装问题的各个方面,应对问题进行变化


系统分解(systemsdecomposition

Level0:不能超过单个文件/类的级别进行思考

Level1在同一个平台/技术上,能分解问题空间和设计解决方案

Level2能够设计系统,跨越多个技术/平台

Level3能够可视化和设计多种产品线的复杂系统,并与外部系统集成


交流能力(communication

Level0:不能向同行表述思路/想法,在修辞和语法方面较差

Level1:同行能理解你所说的话,良好的修辞和语法

Level2能与同行高效地沟通

Level3:能够清楚地理解和交流思维/设计/想法/规范,在各背景下调整交流


单文件代码组织(code organizationwithin a file

Level0:在文件中没有组织的迹象

Level1:方法依逻辑和可访问性进行分组

Level2:代码分组为不同区域,对引用的其他源代码有良好的注释

Level3:文件有license头,摘要,良好的注释,统一的空白使用,文件看起来很美观


跨多文件代码组织(code organization acrossfiles

Level0:没有想过跨文件组织代码

Level1:相关文件组织到同一文件夹中

Level2:每个物理文件拥有唯一的用途,例如一个类的定义,一个特性的实现等

Level3:代码组织在物理级别严密符合设计,文件名和文件夹的结构分布,能提供对设计的见解

 

源码树组织(source treeorganization

Level0:所有东西放到一个文件夹中

Level1:把代码基本分类到逻辑文件夹

Level2:没有循环依赖,二进制文件,库,文档,构建,第三方代码都组织到适当的文件夹

Level3:源树物理布局符合逻辑层次结构和组织,目录的名称和组织反映系统的设计见解


代码易读性(code readability

Level0:单音节的名字

Level1:良好的文件名,变量名,类名,方法名等

Level2:没有过长的函数,对特殊的代码进行注释,bug修正,代码预测(code assumptions

Level3:使用断言进行代码预测,代码流程自然,没有过深的条件语句和方法嵌套


防御性编程(defensive coding

Level0:不了解这个概念

Level1:检查代码中所有引数(argument)并对关键预测进行断言

Level2:确保检查返回值,检查可能失败的代码异常

Level3:有自己的库帮助进行防御性编程,编写模拟故障的单元测试


错误处理(error handling

Level0:仅编写情况良好的(the happy case)代码

Level1:围绕代码进行基本的错误处理,能够抛出异常/产生错误

Level2:确保错误/异常以良好的方式离开程序,资源,连接和内存都被正确清理

Level3:代码检测到可能的异常前,在代码的各个层面保持一致的异常处理策略,为整个系统提出异常处理准则


集成开发环境(IDE

Level0:主要采用IDE进行文本编辑

Level1:知道它们的接口方式,能够有效地利用IDE使用菜单

Level2:知悉最常用操作的快捷方式

Level3:写了自定义宏


应用编程接口(API

Level0:需要频繁查看文档

Level1:记住最常用的API

Level2:广泛而深入的API知识

Level3:在API之上编写了库,以简化常用任务,填补API的空白


框架(frameworks

Level0:没有使用过核心平台以外的任何框架

Level1:听说过,但没有使用过平台流行的框架

Level2:在专业级别上使用一个以上的框架,通晓框架的风格特色(idiom

Level3:框架的作者


需求(requirements

Level0:接受给定的需求并按照规格编程

Level1:对规格中遗漏的方面提出质疑

Level2:了解全貌,提出需要制定的所有领域(entire areas

Level3:能够基于自身经验,对给定的需求提出更好的选择和流程


脚本(scripting

Level0:不了解脚本工具

Level1:批处理文件/shell脚本

Level2Perl/Python/Ruby/VBScript/Powershell

Level3:已编写和发布可重用代码


数据库(database

Level0:认为Excel就是数据库

Level1:了解基本的数据库概念,规范,ACID(数据库事务正确执行的四个基本要素,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),事务,能编写简单的select语句

Level2:能够设计良好和标准化的database schemas,牢记这将不得不运行,熟练使用视图,存储过程,触发器和用户自定义类型,了解聚集索引和非聚集索引的区别,熟练使用ORM(对象关系映射)工具


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


 

四.经验(Experience


语言专业经验(languages withprofessional experience

Level0:指令式(Imperative)或面向对象(Object Oriented)编程

Level1:指令式(Imperative),面向对象(Object Oriented)和宣告式(declarative)(SQL)编程,如果了解静态和动态类型、强类型和弱类型则加分

Level2:函数式(Functional)编程,懒惰计算法(lazy evaluation),科里化(Currying is the process of transforming a functionthat takes multiple arguments into a function that takes just a single argumentand returns another function if any arguments are still needed.),延续(Continuations

Level3:并行(Concurrent)(Erlang, Oz)和逻辑(Logic)(Prolog)编程


平台专业经验(platforms withprofessional experience

Level01

Level12-3

Level24-5

Level36+


经验年限(years ofprofessional experience

Level01

Level12-5

Level26-9

Level310+


领域知识(domain knowledge

Level0:没有相关领域知识

Level1:做领域中至少一种产品的工作

Level2:做同领域中多种产品的工作

Level3:领域专家,曾设计和实现领域中多个产品/解决方案,精通领域中使用的标准条款和协议


五.知识(Knowledge


工具知识(tool knowledge

Level0:仅限于主要的IDEVS.Net, Eclipse等)

Level1:了解一些流行和标准工具的替代品

Level2:掌握编辑器,调试器,IDE,开源替代品等,例如知道Scott Hanselmanpowertools list中所列的绝大多数工具,使用过ORM工具

Level3:在实际中已编写工具和脚本,如已发布则加分

 

语言涉及(languages exposed to

Level0:指令式(Imperative)或面向对象(Object Oriented)语言

Level1:指令式(Imperative),面向对象(Object Oriented)和宣告式(declarative)(SQL)语言,如果了解静态和动态类型、强类型和弱类型则加分

Level2:函数式(Functional)语言,懒惰计算法(lazy evaluation),科里化(Currying is the process of transforming a functionthat takes multiple arguments into a function that takes just a single argumentand returns another function if any arguments are still needed.),延续(Continuations

Level3:并行(Concurrent)(Erlang, Oz)和逻辑(Logic)(Prolog)编程语言

 

代码库知识(codebase knowledge

Level0:从没看过代码库

Level1:具有代码布局以及如何构建系统的基本知识

Level2:良好的代码库的工作知识,实现了一些bug修正甚至一些小特性

Level3:已实现代码库中多个的较大的特性,能够很方便地显示大部分特性和bug修正

 

关于即将到来技术的知识(knowledge ofupcoming technologies

Level0:没听过即将到来的新技术

Level1:听说到领域中即将到来的新技术

Level2:已下载Alpha预览版本/CTP版(Community Test Preview 社区测试试用版)/beta版,阅读相关文章和用户手册

Level3

 

平台内部原理(platform internals

Level0:完全不懂平台内部原理

Level1:对平台内部如何运作有基本认识

Level2:深入理解平台内部原理,能想象平台如何处理程序并将之转换为可执行代码

Level3:已经为平台内部编写工具以强化机能和提供信息,如反汇编器(disassemblers),反编译器(decompilers),调试器(debuggers)等

 

书籍(books

Level0:入门系列(Unleashedseries),21天系列(21 days series),24小时系列(24 hour series),傻瓜系列(dummies series

Level1:《CodeComplete(代码大全)》,《Don'tMake me Think》,《MasteringRegular Expressions(精通正则表达式)》

Level2:《DesignPatterns(设计模式)》,《Peopleware(人件)》,《Programming Pearls(编程珠玑)》,《Algorithm Design Manual(算法设计手册)》,《Pragmatic Programmer(卓有成效的程序员)》,《Mythical Man month(人月神话)》

Level3:《Structureand Interpretation of Computer Programs(计算机程序的构造和解释)》,《ConceptsTechniques, Models of Computer Programming》,《Art of Computer Programming(计算机编程艺术)》,《Databasesystems , by C. J Date》,《ThinkingForth》,《LittleSchemer

 

博客(blogs

Level0:听过但没时间

Level1:阅读技术/编程/软件工程的博客,定义发表博客

Level2:维护一个链接博客,存放已收集的一些有用的文章和工具的链接集合

 

Level 3:维护一个博客,与他人分享自己对于编程的见解和想法


原创粉丝点击