[译文]程序员能力矩阵ProgrammerCompetencyMatrix

注意:每个层次的知识都是渐增的,位于层次n,也蕴涵了你需了解所有低于层次n的知识。
计算机科学 Computer Science 2n (Level 0)n2 (Level 1)n (Level 2)log(n) (Level 3)Comments数据结构不知道数组和链表的差异能够解释和使用数组,链表,字典等,并且能够用于实际的编程任务。了解基本数据结构时间和空间的折中,比如数组vs 链表,能够解释如何实现哈希表和处理冲突,了解优先队列及
其实现。高等的数据结构的知识,比如B-树、二项堆、斐波那契堆、AVL树、红黑树、伸展树、跳跃表以及前缀树等。算法不能够找出一个数组各数的平均值(这令人难以置信,
但是我的确在应聘者中遇到过)基本的排序,搜索和数据的遍历和检索算法。树,图,简单的贪婪算法和分而治之算法,能够适度了解矩阵该层的含义。能够辨识和编写动态规划方案,良好的图算法知识,良好的数值估算的知识,能够
辨别NP问题等。Working with someone who has a good topcoder ranking would be an unbelievable piece of luck!编程体系不知道何为编译器、链接器和解释器。对编译器、链接器、解释器有基本的了解。知道什么是汇编代码以及在硬件层如何工作。有一些虚拟内存和分页知识。了解内核模式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系统的知识。尝试过Bzr/Mercurial/Darcs/Git自动化编译只知道在IDE下编译知道如何编译在命令行下编译系统能够安装一个脚本构建基本的系统能够安装一个脚本来构建系统并且归档,安装程序,生成发布记录和给源码控制中的代码分配标签。自动化测试认为所有的测试都是测试员的工作。能够编写自动化的单元测试,能够为正在编写的代码提出良好的测试用例。按照TDD (Test Driven Development)方式编写代码。了解并且能够有效自动化安装,载入/性能和UI测试程序设计 Programming 2n (Level 0)n2 (Level 1)n (Level 2)log(n) (Level 3)Comments问题分解只有直线式的代码,通过复制粘贴来复用能够把问题分散到多个函数中能够想出可复用的函数/对象来解决大题的问题使用适宜的数据结构和算法,写出通用的/面向对象的代码来封装问题的易改变的层面。系统分解N想不出比单一的文件/类更好的层面如果不在同一平台或没采用相同的技术,能够把问题空间和设计方案分解。能够设计跨技术/平台的系统。能够在多个产品线和与外部体系一体化中虚拟化和设计复制的系统。同时也能够设计支持系统监视、报告、故障恢复等。交流不能向同伴表达想法/主意。匮乏拼写和语法的能力。同伴能了解你在说什么。有良好的拼写和语法能力。能够和同伴进行高效的交流能够使用清晰的方式了解和交流想法/设计/主意/细则,能适应每种环境的交流This is an often under rated but 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.同一文件中代码组织同一文件中组织没有依据按照逻辑性或者易接近的方法代码分块和对于其他源文件来说是易于是释,引用其他源文件时有良好的注释文档头部有许可声明,总结,良好的注释,一致的空格缩进。文档外观美观。 2n (Level 0)n2 (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修复,代码假设。代码假设验证使用断言,自然的代码流,没有深层嵌套的条件和方法防御性编码不知道这个概念检查代码中所有的参数,对关键的假设进行断言确保检查了返回值和使代码失败的异常。有自己的库来帮助防御性编程、编写单元测试模拟故障 2n (Level 0)n2 (Level 1)n (Level 2)log(n) (Level 3)Comments错误处理只给乐观的情形编码基本的代码错误处理,抛出异常/生成错误确保错误/异常留在程序中有良好的状态,资源,连接,内存都有被合适的清理。在编码之前察觉可能出现的异常,在代码的所有层次中维持一致性的异常处理策略,提出整个系统的错误处理准则。IDEIDE大部分用来进行文本编辑了解其周围的接口,能够高效地通过菜单来使用IDE了解最常操作的键盘快捷键编写自定义宏API需要频繁地查阅文档把最频繁使用的API记在脑子里广阔且
深入的API知识。为了使实际任务中常用API使用更加便捷,编写过API的上层库,填补API之间的缺口。E.g. of API can be Java library, .net framework or the custom API for the application框架没有使用过主平台外的任何框架听过但没用过平台下流行的可用框架在专业的职位中使用过一个以上的框架,通晓各框架的特色。某框架的作者 2n (Level 0)n2 (Level 1)n (Level 2)log(n) (Level 3)Comments需求分析接受给定的需求和代码规格能对规格的遗漏提出疑问了解全面情况,提出需要被规格化的
整体范围。能够提出更好的可选方案,根据经验的浮现给出需求脚本不
具备脚本工具的知识批处理文件/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)n (Level 2)log(n) (Level 3)Comments专业语言经验命令式语言和面向对象语言命令式语言,面向对象语言和说明型语言(SQL),如果了解静态类型vs动态类型,弱类型vs强类型则有加分函数式语言,如果了解延缓求值,局部套用函数,延续则有加分并发语言(Erlang, Oz) 逻辑语言(Prolog)专业平台经验12-34-56+专业经验年龄12-56-910+领域知识没有该领域的知识在该领域中曾经至少为一个产品工作过在同一领域中为多个产品工作过领域专家。在该领域设计和实现数种产品/方案。精通该领域使用的标准条款和协议学识 Knowledge 2n (Level 0)n2 (Level 1)n (Level 2)log(n) (Level 3)Comments工具知识仅限于主要的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)n (Level 2)log(n) (Level 3)Comments平台内部对平台内部毫无所知有平台基本的内部工作的知识深度的平台内部知识,能够设想平台如何将程序转换成可执行代码。编写过增强平台或者为其平台内部提供信息的工具。比如,反汇编工具,反编译工具,调试工具等。书籍菜鸟系列,21天系列,24小时系列,蠢货系列...《代码大全》,《别让我思考》, 《精通正则表达式》《设计模式》,《人件》,《代码珠玑》,《算法设计手册》,《程序员修炼之道》,《人月神话》《计算机程序设计与解释》,《事务处理:概念与技术》,《计算机程序设计模型》,《计算机程序设计艺术》,《数据库系统导论》 C.J Date版,《Thinking Forth》 ,《Little Schemer》(没找到其中译本)博客听过但是从来抽不出空去接触阅读一些科技/编程/软件工程的博客,并且经常的收听一些播客维护一些博客的链接,收集博主分享的有用的文章和工具维护一个在编程方面,分享有个人见解和思考的博客

时间: 2024-09-25 15:42:03

[译文]程序员能力矩阵ProgrammerCompetencyMatrix的相关文章

【译文】程序员能力矩阵 Programmer Competency Matrix

注意:每个层次的知识都是渐增的,位于层次n,也蕴涵了你需了解所有低于层次n的知识.[原文] 计算机科学 Computer Science   2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level 3) Comments 数据结构 不知道数组和链表的差异 能够解释和使用数组,链表,字典等,并且能够用于实际的编程任务. 了解基本数据结构时间和空间的折中,比如数组vs 链表,能够解释如何实现哈希表和处理冲突,了解优先队列及其实现. 高等的数据结构的知识

程序员能力的四个境界

1 无意识无能力(不知道自己不知道) 这个时候是刚开始接触编程到编程有差不多一年左右的时间,大多数这个时候在大学生涯,年少轻狂,激情四射,学习起来超级有干劲,尤其当自己知道一个个编程法则,写出很自己认为很牛逼的程序,研究过高深的算法,做过几个项目,觉得编程很简单.我当初就是这样的,在大学的时候会用 spring,hibernate,tapestry(貌似这个不是很流行),struts做过两个中型项目,学习过设计模式,部署过ejb,看过soa相关的皮毛知识,觉得自己无敌了,都不知道学习什么了,觉得

《程序员的呐喊》一一1.4 名词王国里的执行

1.4 名词王国里的执行 程序员的呐喊 "他们中有些家伙的脾气可大了--特别是动词,最傲气的就是他们--形容词可以随便捏,但动词就不行--不过他们都得听我调遣!不可捉摸!我就说这么多啦!" --矮胖子 1 大家好!今天要讲的是邪恶的Java国王和他满世界消灭动词的故事.(首先要干掉的动词就是"消灭"(to stamp out),取而代之的是VerbEliminatorFactory.create VerbEliminator(currentContext).oper

一个平庸程序员的自白

Jacob Kaplan-Moss 是著名 Python 框架Django 的 Co-Creater 和核心开发者,在 Heroku 担任安全部门的 Director, 他常年参加 Python 社区的年度聚会 PyCon,并经常上台演讲.在这次 PyCon 2015 上,他声称自己顶多只是一个平庸的程序员,幻灯片上也写着: "Hi, I'm Jacob, and I'm a mediocre programmer." 这次演讲非常精彩,视频可以在 Youtube 上看到(如果不想看视

揭秘IT人才特点:中美印日四国程序员比较

最近以裁判的身份参加了公司举办的编程大赛,发现高手云集,对公司内部的程序员能力也有了更深入的了解.我觉得编程能力对程序员而言,虽然很重要,但并不是全部.那么作为一个程序员,到底应该具备什么样的能力呢?这个话题显然太大.不过我觉得可以看看其它国家的程序员,也许可以得到一些借鉴.我有幸和中国,美国,印度和日本四国程序员有比较深入的合作过.虽然他们不一定有代表性,但我觉得他们的共性还是比较明显的. 以下的比较纯属个人见解,欢迎指正. 首先是日本程序员 他们的特点是非常仔细.我认为很主要的一个原因是日本

我眼中的中美印日四国程序员的特点

最近以裁判的身份参加了公司举办的编程大赛,发现高手云集,对公司内部的程序员能力也有了更深入的了解.我觉得编程能力对程序员而言,虽然很重要, 但并不是全部.那么作为一个程序员,到底应该具备什么样的能力呢?这个话题显然太大.不过我觉得可以看看其它国家的程序员,也许可以得到一些借鉴.我有幸 和中国.美国.印度和日本四国程序员有比较深入的合作过.虽然他们不一定有代表性,但我觉得他们的共性还是比较明显的.以下的比较纯属个人见解,欢迎指 正. 日本程序员 他们的特点是非常仔细.我认为很主要的一个原因是日本公

转自51CTO的帖子——宅男程序员给老婆的计算机课程

在51CTO上闲逛的时候,看了这个系列的帖子.感觉不错,特转发于此,留做纪念. 原文链接: 宅男程序员给老婆的计算机课程之0:认清本质 宅男程序员给老婆的计算机课程之1:认清实际 宅男程序员给老婆的计算机课程之2:怎么看待牛人 宅男程序员给老婆的计算机课程之3:架构比较 宅男程序员给老婆的计算机课程之4:SQL vs NoSQL 宅男程序员给老婆的计算机课程之5:设计模式 宅男程序员给老婆的计算机课程之6:模版引擎 宅男程序员给老婆的计算机课程之7:运维的重要性 宅男程序员给老婆的计算机课程之8

读《卓越程序员密码》有感

引言 比喻篇 谨慎使用比喻 规划完备然后开工 象牙塔架构师的传说 扔掉旧代码 多元化胜于专业化 动力篇 工作即福利 从喜欢处下手 莫求全 休息 膨胀的时间 生产力篇 设置一个最后期限 去掉时间表中的细节 个人事项待办清单 提高生产力避谈我们 后序 断章取义一下,"生活不止眼前的代码, 还有诗和远方".下面是我的部分读书笔记. 引言 原书作者谈到自己有两次被代码"逼疯"的经历,追根溯源,还是一开始对于编程的理念的误解导致. 理想总是很丰满,现实却那么骨感. 对于程序过

关于PHP程序员解决问题的能力

这个话题老生长谈了,在面试中必然考核的能力中,我个人认为解决问题能力是排第一位的,比学习能力优先级更高.解决问题的能力既能看出程序员的思维能力,应变能力,探索能力等,又可以看出他的经验.如果解决问题能力不佳是无法通过面试的. 这里举个例子,假如我执行了一个PHP的脚本,如php test.php,预期是可以返回一个字符串.但执行后没有任何信息输出,这时候通过什么方法能知道程序错在哪里?这里可以将解决问题能力分为8个等级,越到后面的表示能力越强. Lv0 查看PHP错误信息 程序没有达到预期效果,