程序员能力矩阵 Programmer Competency Matri

注意:每个层次的知识都是渐增的,位于层次n,也蕴涵了你需了解所有低于层次n的知识。

计算机科学 Computer Science
  2n (Level 0) n2 (Level 1) (Level 2) log(n) (Level 3)  
数据结构 不知道数组和链表的差异 能够解释和使用数组,链表,字典等,并且能够用于实际的编程任务。 了解基本数据结构时间和空间的折中,比如数组vs 链表,能够解释如何实现哈希表和处理冲突,了解优先队列及其实现。 高等的数据结构的知识,比如B-树、二项堆、斐波那契堆、AVL树、红黑树、伸展树、跳跃表以及前缀树等。  
算法 不能够找出一个数组各数的平均值(这令人难以置信,但是我的确在应聘者中遇到过) 基本的排序,搜索和数据的遍历和检索算法。 树,图,简单的贪婪算法和分而治之算法,能够适度了解矩阵该层的含义。 能够辨识和编写动态规划方案,良好的图算法知识,良好的数值估算的知识,能够辨别NP问题等。  
编程体系 不知道何为编译器、链接器和解释器。 对编译器、链接器、解释器有基本的了解。知道什么是汇编代码以及在硬件层如何工作。有一些虚拟内存和分页知识。 了解内核模式vs用户模式,多线程,同步原语以及它们如何实现,能够阅读汇编代码。了解网络如何工作,了解网络协议和socket级别编程。 了解整个程序堆栈、硬件(CPU+内存+中断+微码)、二进制代码、汇编、静态和动态链接、编码、解释、JIT(just-in-time)编译、内存碎片回收、堆、栈、存储器编址…  
软件工程 Software Engineering
  2n (Level 0) n2 (Level 1) (Level 2) log(n) (Level 3)  
源码版本控制 通过日期备份文件夹 VSS和初级的CVS/SVN用户 熟练地使用CVS和SVN特性。知道如何分支和归并,使用程序库补丁安装特性等 有分布式VCS系统的知识。尝试过Bzr/Mercurial/Darcs/Git  
自动化编译 只知道在IDE下编译 知道如何编译在命令行下编译系统 能够安装一个脚本构建基本的系统 能够安装一个脚本来构建系统并且归档,安装程序,生成发布记录和给源码控制中的代码分配标签。  
自动化测试 认为所有的测试都是测试员的工作。 能够编写自动化的单元测试,能够为正在编写的代码提出良好的测试用例。 按照TDD (Test Driven Development)方式编写代码。 了解并且能够有效自动化安装,载入/性能和UI测试  
程序设计 Programming
  2n (Level 0) n2 (Level 1) (Level 2) log(n) (Level 3)  
问题分解 只有直线式的代码,通过复制粘贴来复用 能够把问题分散到多个函数中 能够想出可复用的函数/对象来解决大题的问题 使用适宜的数据结构和算法,写出通用的/面向对象的代码来封装问题的易改变的层面。  
系统分解 N想不出比单一的文件/类更好的层面 如果不在同一平台或没采用相同的技术,能够把问题空间和设计方案分解。 能够设计跨技术/平台的系统。 能够在多个产品线和与外部体系一体化中虚拟化和设计复制的系统。同时也能够设计支持系统监视、报告、故障恢复等。  
交流 不能向同伴表达想法/主意。匮乏拼写和语法的能力。 同伴能了解你在说什么。有良好的拼写和语法能力。 能够和同伴进行高效的交流 能够使用清晰的方式了解和交流想法/设计/主意/细则,能适应每种环境的交流  
同一文件中代码组织 同一文件中组织没有依据 按照逻辑性或者易接近的方法 代码分块和对于其他源文件来说是易于是释,引用其他源文件时有良好的注释 文档头部有许可声明,总结,良好的注释,一致的空格缩进。文档外观美观。  
  2n (Level 0) n2 (Level 1) (Level 2) log(n) (Level 3)  
跨文件代码组织 没够想过给代码跨文件组织 相关文件按文件夹分组 每个物理文件都有独立的目的,比如一个类的定义,一个特性的实现等。 代码在物理层组织紧密,在文件名上与设计和外观相匹配,可以通过文件分布方式洞察设计理念。  
源码树组织 一切都放在一个文件夹内 初步地将代码分散进对应逻辑的文件夹。 没有循环依赖,二进制文件,库,文档,构建,第三方的代码都组织进合适的文件夹内。 源码树的物理布局与逻辑层次、组织方式相匹配。可以通过目录名称和组织方式洞察设计理念。  
代码可读性 单音节的名称 (在国内应该是那些类似用汉语拼音命名的习惯) 对文件、变量、类、方法等,有良好的命名。 没有长函数、注释解释不常规的代码,bug修复,代码假设。 代码假设验证使用断言,自然的代码流,没有深层嵌套的条件和方法  
防御性编码 不知道这个概念 检查代码中所有的参数,对关键的假设进行断言 确保检查了返回值和使代码失败的异常。 有自己的库来帮助防御性编程、编写单元测试模拟故障  
  2n (Level 0) n2 (Level 1) (Level 2) log(n) (Level 3)  
错误处理 只给乐观的情形编码 基本的代码错误处理,抛出异常/生成错误 确保错误/异常留在程序中有良好的状态,资源,连接,内存都有被合适的清理。 在编码之前察觉可能出现的异常,在代码的所有层次中维持一致性的异常处理策略,提出整个系统的错误处理准则。  
IDE IDE大部分用来进行文本编辑 了解其周围的接口,能够高效地通过菜单来使用IDE 了解最常操作的键盘快捷键 编写自定义宏  
API 需要频繁地查阅文档 把最频繁使用的API记在脑子里 广阔且深入的API知识。 为了使实际任务中常用API使用更加便捷,编写过API的上层库,填补API之间的缺口。  
框架 没有使用过主平台外的任何框架 听过但没用过平台下流行的可用框架 在专业的职位中使用过一个以上的框架,通晓各框架的特色。 某框架的作者  
  2n (Level 0) n2 (Level 1) (Level 2) log(n) (Level 3)  
需求分析 接受给定的需求和代码规格 能对规格的遗漏提出疑问 了解全面情况,提出需要被规格化的整体范围。 能够提出更好的可选方案,根据经验的浮现给出需求  
脚本 不具备脚本工具的知识 批处理文件/shell脚本 Perl/Python/Ruby/VBScript/Powershell 写过并且发表过可重用的代码  
数据库 认为Excel就是数据库 知道基本的数据库概念,规范化、ACID(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)、事务化,能够写简单的select语句 能够牢记在运行时必要查询中设计良好的规范化数据库模式, 精通用户视图,存储过程,触发器和用户定义类型。知道聚集与非聚集索引之间的差异。精通使用ORM(Object Relational Mapping对象关系映射)工具 能做基本的数据库管理,性能优化,索引优化,编写高级的select查询,能够使用相关sql来替换游标,理解数据内部的存储,了解如何镜像、复制数据库。知道两段数据提交如何工作  
经验 Experience
  2n (Level 0) n2 (Level 1) (Level 2) log(n) (Level 3)  
专业语言经验 命令式语言和面向对象语言 命令式语言,面向对象语言和说明型语言(SQL),如果了解静态类型vs动态类型,弱类型vs强类型则有加分 函数式语言,如果了解延缓求值,局部套用函数,延续则有加分 并发语言(Erlang, Oz) 逻辑语言(Prolog)  
专业平台经验 1 2-3 4-5 6+  
专业经验年龄 1 2-5 6-9 10+  
领域知识 没有该领域的知识 在该领域中曾经至少为一个产品工作过 在同一领域中为多个产品工作过 领域专家。在该领域设计和实现数种产品/方案。精通该领域使用的标准条款和协议  
学识 Knowledge
  2n (Level 0) n2 (Level 1) (Level 2) log(n) (Level 3)  
工具知识 仅限于主要的IDE(VS.Net, Eclipse等) 知道一些流行和标准工具的备选方案 对编辑器、调试器、IDE、开源的备选方案有很好的了解。比如某人了解大多数Scott Hanselman的威力工具列表中的工具,使用过ORM工具。 实际地编写过工具和脚本,如果这些被发布则有加分  
语言接触 命令式语言和面向对象语言 命令式语言、面向对象语言和说明型语言(SQL),如果了解静态类型vs动态类型、弱类型vs强类型则有加分 函数式语言,如果了解延缓求值、局部套用函数、continuations (源于scheme中的一种高级控制结构)则有加分 并发语言(Erlang, Oz) 逻辑语言(Prolog)  
代码库知识 从来没有查询过代码库 基本的代码层知识,了解如果构建系统 良好的代码库工作知识,实现过几次bug修复或者完成了一些细小的特性 实现了代码库中多个大型特性,能够轻松地将多数特性的需求变更具体化,从容地处理bug修复。  
下一代技术知识 从来没听说过即将到来的技术 听说过某领域即将到来的技术 下载过alpha preview/CTP/beta版本,并且读过一些文章和手册 试用过预览版而且实际地构建过某物,如果共享给其他人的话则有加分  
  2n (Level 0) n2 (Level 1) (Level 2) log(n) (Level 3)  
平台内部 对平台内部毫无所知 有平台基本的内部工作的知识 深度的平台内部知识,能够设想平台如何将程序转换成可执行代码。 编写过增强平台或者为其平台内部提供信息的工具。比如,反汇编工具,反编译工具,调试工具等。  
书籍 菜鸟系列,21天系列,24小时系列,蠢货系列... 《代码大全》,《别让我思考》, 《精通正则表达式》 《设计模式》,《人件》,《代码珠玑》,《算法设计手册》,《程序员修炼之道》,《人月神话》 《计算机程序设计与解释》,《事务处理:概念与技术》,《计算机程序设计模型》,《计算机程序设计艺术》,《数据库系统导论》 C.J Date版,《Thinking Forth》 ,《Little Schemer》(没找到其中译本)  
博客 听过但是从来抽不出空去接触 阅读一些科技/编程/软件工程的博客,并且经常的收听一些播客 维护一些博客的链接,收集博主分享的有用的文章和工具 维护一个在编程方面,分享有个人见解和思考的博客  


原文地址:http://static.icybear.net/[CN]Programmer%20competency%20matrix.htm

展开阅读全文

能力素质(Competency)模型的建立及应用

06-10

发信人: 林振华 (转帖) rn标 题: 能力素质(Competency)模型的建立及应用 rnrn 这是一家国际著名的制造型企业。近年来,随着市场竞争的加剧,这家企业在客户满意度方面有一定幅度的下降。经过多方的研究和调查,该公司的管理层认识到,造成这种现象的主要原因是该公司一贯以研发为导向(Research-Focused),不注重关注客户(Customer-Focused),这使得他们在销售和服务客户过程中屡屡出现问题。    rnrn 基于这种情况,该公司的管理层决定改组公司现有的组织结构和流程设置,成立"客户中心(Customer Center)",针对每个重要客户成立专门的客户团队,以保证及时满足客户需求,为客户提供优质高效的服务。    rnrn 但是,在改组的过程中,关键的问题之一是如何在原有的员工队伍中选出合适的人员担任客户团队的领导和成员。这里,首先要确定应该依据什么标准来选拔员工,担任客户团队领导的岗位。 rnrn 如何建立competency模型?    rnrn 由于配合"客户中心"进行改革的任务迫在眉睫,需要在最短的时间内完成。因而管理层选择了 "简化的建模方法"与"折衷的建模方法"之间的一个方法(见《如何建立competency模型》),即在数据收集阶段采用以专家小组为主、BEI(行为事件访谈)为辅,同时参照相关行业competency模型数据库作为验证。这样既考虑了数据收集的质量,又兼顾了时间的紧迫性。    rnrn 项目开始后,我们首先进行了一系列的高层访谈,了解公司的战略方向、组织结构和主要业务流程等。同时我们组织了专家小组讨论新岗位的职责、绩效目标、行为表现等等。我们归纳上述行为期望得出competency初稿,然后作了数名优秀员工的行为事件访谈(BEI)作进一步地补充。将所收集的数据、信息及意见等分类、归纳、整理,参考相关行业的competency数据库并基于多年的建模经验,我们就得出了competency模型的初稿。建立模型的时候我们既考虑该公司的特点和实际情况,又遵循competency层级不重叠、能区分、易理解的建模原则。随后,我们就初稿与管理层充分地沟通和讨论,最大限度地提高competency模型的准确性和可行性。    rnrn 经过约一个月的反复沟通,相关岗位的competency模型终于确定下来了。由于新组织与流程以客户为中心,所以核心competency就围绕着"客户"而存在。如下图所示,competency模型包括三个competency群,十个具体competency。 rnrn competency模型的验证、测评    rnrn 核心competency模型基本成形之后,我们请来了几位较熟悉类似岗位的员工来验证、测评competency模型。首先讨论的是competency模型的分级。我们是否可以将某个熟悉的同事的行为归入相应的competency及对应的级别呢?级别与级别间是否存在明显差异?同一级别中所罗列的行为是否处于同一水平?现有的competency和层级是否足以区分不同员工的competency水平?如"领导力"这一competency模型中,第二级中包括了以下行为描述:    rnrn ? 确保所有的团队成员了解必要的信息,或知道所发生的事情    rn ? 向团队成员解释做出某项决策的原因    rn 而第三级则包括以下行为:    rn ? 采取具体行动促使团队成员达到最佳工作状态(如聘用或解雇、培训、奖惩等)    rn ? 能够为团队能获得最佳表现创造条件(例如:设定明确的目标及建立适当的架构等)    rnrn 那么,第二级和第三级的主要差异是什么?对了,一个是单向沟通和信息传递,而另一个较高的层级则是双向沟通和信息传递的过程。    rnrn 其次要讨论competency的内容是否有重叠、遗漏,逻辑关系和层次是否分明。例如"表达出想要及时了解公司内部及客户组织现状及其变化的愿望"是"除常规了解情况外,还对相关的问题或情况进行深入调查"的基础动机,它们代表信息搜集这一competency的不同competency行为表现,前者是"有愿望、无行动"而后者则是"愿望+主动性行为"。我们需要对所有的competency和层级进行审阅,以保证各层级的描述前后连贯并能明确区分,能够象"光谱"一样容纳不同的行为表现并区分其层级。 rnrn competency测评中心的设计    rnrn 有了competency模型以后,如何考察相关人员以选拔出合适的任职者呢?这就有赖于competency测评中心了。测评中心是根据competency模型运用各种考察手段,测评出相关人员competency水平的过程,通常由专业人员设计并实施。我们首先根据确定的competency种类和公司的特点,在数据库中找到适合的演示、会议讨论、角色扮演等的题材,然后对所有设计方案进行深加工,直至能充分体现客户特点和competency的要求。我们可以模仿相关情景,但又不能完全把角色扮演变为公司实际的情况,因为这样可能会对有过类似工作经验的员工有利,而不能充分表现出个人实际行为特征。例如我们设计了解决客户投诉的情景演练,但其场景是一家银行,因其简单的操作流程和规定较好理解,在角色扮演中员工很容易进入角色。    rnrn 在competency测评中心的设计过程中,每一项活动考察哪几项competency是非常关键的。如果一项活动包含了所有competency,会使测评过程过于复杂、费时、影响准确性。同时,让参加者有机会在不同的活动情景中充分展示自己的行为也能够避免"一锤定音"。因此每个活动测评competency的数量一般为2-4个。如处理客户投诉的案例,所测评的主要competency为:关注客户、人际理解力、影响他人等。 rnrn 测评中心的实施    rnrn 现在到了实施测评阶段了。我们再次强调competency测评中心不是一个实体的概念,而是一个过程,或者说是一系列的步骤,是组织转型中发展员工、进行职业生涯设计中的一个环节。测评必须由经过专门训练、熟悉competency测评工作的专业人员来完成。测评者必须从参加者的语言、动作、表情、态度等各个方面考察参加者,并详细记录每项行为表现,用实际事例证明被测者的行为与对应competency层级间的联系。如"他在听取客户抱怨时一直看着对方的眼睛并不时点头示意,关注她的感受"这个行为属于关注客户第二级,"他在说明本产品的情况时非常注意对方关键决策人物的表情,发现她对其中搜索功能表示兴趣就抓住不放"就属于关注客户第三级等等。有经验的测评员一次可以同时观察数个参与者,但事前需要合理分配测评和被测对象,以便每个参与者都能被不同的测评员有效地观察和测评。    rnrn 测评员针对每个活动整理出测评对象的competency分析报告之后,将由特定的专业人员根据观察记录和competency分析报告,撰写总结报告,以使每个被测者清晰地了解自己的competency测评结果并明确发展方向。 rnrn competency测评结果及发展计划的应用与实施    rnrn 测评中心的活动结束后,每个被测评的员工就有了自己的competency分析报告。根据我们事先确定的岗位competency要求,对照每个员工的测评结果,我们就可以进行相应岗位任职者的选拔工作了。    rnrn competency测评的结果不仅可用于选拔任职者,日后这些任职者的绩效考核和职业发展也将和competency紧密联系。有了competency模型,任职者可以了解自己的competency状况和目标要求,提高改进也就有了具体目标和方向。同时,对照不同岗位的核心competency要求,员工和企业都可以根据competency状况设计职业生涯和发展方向,规划职业发展。当然,这里需要强调的是,competency的建立是企业人力资源管理体系中的一个组成部分,它不能独立于其它管理体系,如组织结构、流程、薪酬、绩效管理、培训和职业生涯发展等而孤立存在。只有与其它体系紧密配合,competency模型才能发挥其应有的作用。 rn 论坛

发挥程序员能力及想象力

03-26

我现在有一个问题,现在一直无法解决,,,,,想了三天,也想了很多,主要是想用程序实现!rnrnrn要求如下:rnrnrn现在一个网站www.abc.com 现在有二个页面,www.abc.com/a.asp 与 www.abc.com/b.asprnrn在www.abc.com/a.asp放了一个上海的电话号码,如:021-54747412rn在www.abc.com/b.asp放了一个北京的电话号码,如:010-15254851rnrn当有人看打开A.ASP页面时,就会看到上海这个电话号码,同时客户会直接打这个电话..我如何知道这个人是不是打了这个电话!rnrnrn想过一些方法如下:rnrn1\我在www.abc.com/a.asp放电话号码的地方这样写: 点击查看上海电话 然后,弹出一个浮动层,层里面要求客户填自己联系人,联系电话,然后客户提交,这时就会显示出上海的电话,这样做的话,一是:不管客户是不是最后真打了上海的电话,但最少,我们得到客户的联系方式,可以以后以售后服务的方式回访客户,以达到监控上海电话跑单rnrn2\通过网络电话回拨电话,实现,这种方式就是:点击后,提示输入客户自己的联系电话,这地会自动连接上海的电话号码上面,同时会在这个网络电话的后台有通话记录! 问题是:每分钟0.28元!,比我现在用的400电话还贵rnrn当然,有人问我,为什么不统一使用400电话,这个我想过,一是:全用400,400只会会部转到一个电话上面,这样每天打电话的人太多,客服实在是忙不过来!所以我想都转到分店,但现在就是无法监控分店rnrnrn谁还有办法,帮我想想,怎么解决!rn 论坛

程序员的独立思考能力

02-24

程序员的独立思考能力rn rn以前和现在的学校中,学生们往往被告知学习后将全部成为合格的接班人。通过排斥、隐瞒、丑化任何非接班人所需要的东西,教育获得了极大的成功(至少是从它的出发点来看)。我们也都是从学校里走出来的,虽然脱离了学校,但是又无时无刻不被学校留给我们的思维方式所左右,习惯性的接受权威的思想,很多人忘记了自己与生俱来的思辨能力。。rnrn让我们来看两段网上常见的话:rn其一:不懂…(一般是指系统分析),你就只能永远是个程序员!rn这是典型的“万般皆下品,唯有分析高”论调。这句话通常是技术论坛中的大哥级人物的杀手锏,大有此言一出谁与争锋之势。这话反反复复的听人说,好象已经变成了真理,大家床头放的书一下子都从unp变成了软件需求。具体的理由大概可以归纳如下:rn# 分析员挣的多rn# 分析员是白领,程序员是蓝领rn# 迟早要走分析员这条路rnrn蛮有道理,不是吗?为了向更高层次发展,为什么不尝试一下呢?可是现实是什么样子的呢?你所在的开发团队目前是否迫切需要一个系统分析员?用系统分析员作为关键字到招聘的网站上去查一查,有多少公司在虚席以待?这是现实需求角度的问题,还有我们可以从现在国内软件公司的现状再来分析,是否有了一个系统分析员后,就可以让开发团队脱离目前的窘境?是否现有的系统分析员在做外行指导内行的事(不懂具体业务,或者不懂具体的技术问题)?一个即使是称职的系统分析员对公司在技术方面的决策以及对团队中的程序员又有多大的影响力度?rnrn从人力资源的需求角度来说,我所在的几个公司都没有对系统分析员的强烈需求,一般公司很少会从外面找项目经理及以上的技术人员,培养自己的人(提升常作为对技术人员的一种认可或者奖励)不是更好么?如果要从外面找这样的人,最关键的还是看应聘者对本公司业务领域的熟悉程度,一个做金融领域的公司,干什么非要找个做电子政务的“高手”来分析?rnrn从系统分析员在软件公司的作用来说,现在国内软件公司的问题是一个综合问题,系统工程,远非换一两个零件就可以解决的。一个优秀的系统分析员在一个乱烘烘的公司,作用未必比一个优秀的程序员大。rnrn从个人提升的角度来说,如果你希望通过走程序员-系统分析员-项目经理-部门经理-CTO这样的路,那么我劝你还是要慎重。首先,如果希望当官,当初就不应该跑来设计程序,干别的当上的官比写程序当上的官可爽多了。其次,迫不得已,已经走上这条路了,也用不着费尽心思妄图通过个人的技术提升(包括在分析、设计方面的提升)做出一两个漂亮的项目来博得上司青睐。这基本上也是不现实的,因为在大多数公司中,阻碍项目的都是你所不能控制的问题,即使你是CTO,什么O都没用。你得想别的办法,又能当上官,又不负责任,挣钱又多。你别笑,这样的人不是没有,而是很多,但人家都不是走你想象的那条路的。rnrn我的意思并非因为有大哥贬低程序员而我就要贬低分析员,只是提醒大家如果再有大哥说鄙夷程序员的话,我想每个人是否都应该想一想,不一定是想想我这里的话,而是用自己的方式去考虑一下?rnrn这还关系到另外一个话题,就是很多媒体鼓吹的蓝领程序员的事,这里就不批驳他们了,有机会再说。rnrn现在再来说说第二个常见论调:“一定要有面向对象的思想”。言必称面向对象,也是现在比较流行的。这个实在不值一哂,在Unix世界里,一直是C一统天下。谁又能说Unix因此而不优秀呢?在没有面向对象的“黑暗”年代,人们一样在软件领域创造出无数辉煌。怎么现在又突然变的没有面向对象地球就不转了呢?举个简单的例子,电信领域的操作支撑系统(OSS),是有几十年历史的系统,在这个系统的需求下,还曾催生了诸如IPC这样伟大的技术。多少年来不知道全世界有多少OSS在跑,但有多少用是面向对象来解决业务领域问题的呢?Internet上成千上万的服务器程序,又有多少是面向对象技术的成果呢?rnrn我不否认面向对象技术所取得的巨大成功,但是我们是否一定要跟风?现在新技术很多,我们是否也必须要每阵风来了都哆嗦哆嗦?计算机领域,甚至只是软件领域,分支学科也非常多,为什么一定要厚此薄彼呢?为什么遇到问题都要祭出“面向对象”来拉大旗做虎皮呢?rnrnrn我所说的不一定有道理,只是希望借这两个问题来给日益浮躁的软件行业同行降降温,给忽略了自己的思考能力的朋友们提个醒。rnrn张笑猛rn2003-2 论坛

没有更多推荐了,返回首页