双色球基本走势图体坛网|双色球基本走势图50期|
首页»程序人生»程序员能力矩阵Programmer Competency Matrix

程序员能力矩阵Programmer Competency Matrix

来源:guxiang 发布时间:2014-05-01 阅读次数:

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

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

  原?#27169;?a href="http://sijinjoseph.com/programmer-competency-matrix">http://sijinjoseph.com/programmer-competency-matrix

QQ群:WEB开发者官方群(515171538),验证消息:10000
微信群:?#26377;?#32534;微信 849023636 邀请您加入,验证消息:10000
提示:更多精彩内容关注微信公众号:全栈开发者中?#27169;╢sder-com)
网友评论(共0条评论) 正在载入评论......
理智评论文明上网,拒绝恶意谩骂 发表评论 / 共0条评论
登录会员中心
双色球基本走势图体坛网
加拿大快乐8开奖数据 福彩3d复式投注技巧 大乐透复式如何兑奖 波克城市官网 彩票预测软件 福建11选5怎么杀号 百变王牌投注技巧 极速飞艇全天计划 宁夏11选5走势分析 双色球码到成功140期杀蓝球