计算机科学
2n (0级) | n2 (1级) | n(2级) | log(n)(3级) | |
数据结构 | 不知道数组和链表的区别 | 能够解释和使用数组、链表、字典等在实际的编程任务 | 知道时间和空间权衡的基本数据结构,数组和链表,能够解释如何实现哈希和能够处理冲突,优先级队列和方法实施等。 | 先进的数据结构的知识,比如b -树、二项和斐波那契堆AVL /红黑树,倾斜的树木,跳跃表、尝试等。 |
算法 | 无法找到数组中数字的平均值(很难相信但是我采访的候选人) | 基本的排序、搜索和遍历数据结构和检索算法 | 树,图,简单的贪婪和分而治之算法,能够理解这个矩阵的水平的相关性。 | 能够识别和代码动态规划解决方案,熟悉图算法,数值计算算法的知识,能够识别NP问题等。 |
系统编程 | 不知道编译器、链接器或翻译 | 基本的了解编译器、连接器和解释器。 知道什么是汇编代码和如何在硬件级别的工作。 虚拟内存和分页的一些知识。 | 了解内核模式和用户模式,多线程,同步原语以及他们是如何实现,能够阅读汇编代码。 了解网络如何工作,理解网络协议和套接字编程水平。 | 理解整个程序堆栈、硬件(CPU +内存缓存+ +中断+微码),二进制代码,组装、静态和动态链接,编译、解释,JIT编译,垃圾收集、堆、栈内存寻址… |
软件工程
2n (0级) | n2 (1级) | n(2级) | log(n)(3级) | |
源代码版本控制 | 按日期文件夹备份 | VSS和CVS / SVN用户开始 | 精通使用CVS和SVN特性。 知道如何分支和归并,使用程序库补丁安装特性等。 | 分布式VCS系统的知识。 有/ hg / Darcs / Git吗 |
构建自动化 | 只知道如何构建IDE | 知道如何从命令行构建系统 | 能够安装一个脚本构建基本的系统 | 能够安装一个脚本来构建系统并且文档,安装程序,生成发布说明和标签中的代码源控制 |
自动化测试 | 认为所有的测试是测试人员的工作 | 写自动化单元测试并提出了良好的单元测试用例编写的代码吗 | 写了代码以TDD方式 | 理解并能够设置自动化功能,负载/性能和用户界面测试 |
编程
2n (0级) | n2 (1级) | n(2级) | log(n)(3级) | |
问题分解 | 只有直线和复制粘贴代码重用 | 问题分解成多个函数 | 能够想出可复用的函数/对象,解决整个问题 | 使用适当的数据结构和算法,提出了通用的/面向对象的代码来封装方面的问题,有可能发生变化。 |
系统的分解 | 不能认为以上级别的一个的那一的文件/类 | 能够解决问题空间和设计方案,只要它是在相同的平台/技术 | 能够设计跨越多个技术/平台的系统 | 能够想象和设计复杂 的系统早多个产品线和与外部系统集成。也应该能够设计支持系统监测、报告、故障恢复等。 |
沟通 | 不能表达想法/主意同行。 糟糕的拼写和语法。 | 同伴能了解你。 有良好的拼写和语法能力。 | 能有效地与同事沟通 | 能够理解和交流想法/设计/创意/规格以明确的方式和调整沟通按照上下文 |
代码组织在一个文件中 | 没有证据表明组织在一个文件中 | 按照逻辑性或者易接近的方法 | 代码分为区域和易于解释,引用其他源文件 | 文件许可标题,摘要,良好的注释,空间使用。 文件应该看起来很漂亮 |
2n (0级) | n2 (1级) | n(2级) | log(n)(3级) | |
跨文件代码组织 | 没有考虑到组织代码文件 | 相关文件被分组到一个文件夹中 | 每个物理文件都有一个惟一的目的,比如一个类的定义,一个特性的实现等。 | 在物理层代码组织匹配设计和看文件名和文件夹分布提供了洞察设计 |
源码树组织 | 一切都放在一个文件夹 | 基本代码划分成不同的逻辑文件夹。 | 没有循环依赖,二进制文件,库,文档,构建,第三方的代码都组织到相应的文件夹 | 源码树的物理布局与逻辑层次、组织方式相匹配。 目录名称和组织提供见解的设计系统。 |
代码的可读性 | 单音节的名字 | 好名字的文件、变量、类、方法等。 | 没有长函数、注释解释不常规的代码,bug修复,代码假设 | 代码假设验证使用断言,自然的代码流,没有深层嵌套的条件和方法 |
防御性编码 | 不理解这个概念 | 在代码中检查所有参数和断言关键假设 | 确保检查返回值和检查异常的代码可以失败 | 有自己的库来帮助防守编码,写单元测试,模拟故障 |
2n (0级) | n2 (1级) | n(2级) | log(n)(3级) | |
错误处理 | 只有代码快乐的情况下 | 基本的错误处理代码,可以抛出异常/生成错误 | 确保错误/异常离开程序处于良好状态,资源,连接和记忆都清理干净 | 代码检测之前可能是个例外,保持一致的异常处理策略在所有层代码中,提出的指导方针为整个系统的异常处理。 |
IDE | 主要为文本编辑使用IDE | 了解其周围的接口,能够高效地通过菜单来使用IDE | 了解最常操作的键盘快捷键。 | 写自定义宏 |
API | 经常需要查找文档 | 最常用的api在内存吗 | 巨大的API和深入的知识 | 写库的API来简化常用任务和API,以填补空白 |
框架 | 未使用核心平台外的任何框架 | 听过但不使用流行的框架可用的平台 | 在专业的职位中使用过一个以上的框架,通晓每个框架的特色 | 框架的作者 |
2n (0级) | n2 (1级) | n(2级) | log(n)(3级) | |
需求 | 将给定的需求和代码规范 | 想出问题错过了规范病例 | 了解全貌,提出整个地区,需要规范 | 能够提出更好的选择和刘翔需求基于经验 |
脚本 | 没有脚本工具知识 | 批处理文件/shell脚本 | Perl / Python / Ruby /改变/ Powershell | 编写和出版的可重用的代码吗 |
数据库 | 认为excel是一个数据库 | 知道基本的数据库概念,规范化、ACID,事务,可以编写简单的选择 | 能够设计良好的和标准化的数据库模式记住要运行的查询,精通使用视图、存储过程、触发器和用户定义的类型。 知道聚集和非聚集索引的区别。 精通使用ORM工具。 | 能做基本的数据库管理,性能优化,索引优化,编写高级select查询,能够使用相关sql替换光标,了解数据存储在内部,了解内部索引存储,了解如何镜像数据库,复制等理解两阶段提交是如何工作的。 |
经验
2n (0级) | n2 (1级) | n(2级) | log(n)(3级) | |
语言与专业经验 | 命令式语言和面向对象 | 命令式语言,面向对象语言和说明型语言(SQL),额外的好处如果了解静态类型vs动态类型,弱类型vs强类型和静态隐式类型 | 功能,额外的好处,如果他们理解延迟评价,鞭笞,延续 | 并发语言(Erlang,Oz)逻辑语言(Prolog) |
平台与专业经验 | 1 | 2-3 | 4-5 | 6+ |
多年的专业经验 | 1 | 2-5 | 6-9 | 10+ |
领域知识 | 没有知识的领域 | 工作至少一个产品领域 | 在同一领域中为多个产品工作过 | 领域专家。 已经在领域设计和实现数种产品/方案。 熟悉与标准条款、协议中使用的域。 |
知识
2n (0级) | n2 (1级) | n(2级) | log(n)(3级) | |
工具知识 | 限于主要IDE(VS.Net,Eclipse等等)。 | 知道一些流行和标准工具的备选方案。 | 知识编辑器、调试器、ide、开源的备选方案有如有人从Scott Hanselman谁知道的大多数工具电动工具的列表。 使用ORM工具。 | 实际上写的工具和脚本,额外的好处,如果他们已经出版。 |
语言接触 | 命令式语言和面向对象 | 命令式语言,面向对象语言和说明型语言(SQL),额外的好处如果了解静态类型vs动态类型,弱类型vs强类型和静态隐式类型 | 功能,额外的好处,如果他们理解延迟评价,鞭笞,延续 | 并发语言(Erlang,Oz)逻辑语言(Prolog) |
代码库知识 | 从来没有看代码 | 代码布局的基本知识以及如何构建系统 | 良好的代码库工作知识,实现了一些bug修复,也许一些小功能 | 实现了代码库中多个大型特性,能够轻松地将多数特性的可视化所需的更改或bug修复 |
即将到来的技术知识 | 没有听说过即将到来的技术知识 | 听说过即将到来的技术在这个领域 | 下载了alpha preview / CTP / beta和阅读一些文章/手册吗 | 玩了预览和已经创造出来的东西和共享给其他人作为奖励呢 |
2n (0级) | n2 (1级) | n(2级) | log(n)(3级) | |
平台内部 | 0平台内部的知识 | 内部的基本知识平台是如何工作的 | 平台内部的深入了解,可以设想平台如何将程序并将其转换为可执行的代码。 | 写了工具来增强或内部提供信息平台。 如反汇编器、反编译器、调试器等。 |
书 | 释放系列,21天系列,24小时系列、假人系列… | 代码完成,不要让我思考,掌握正则表达式 | 设计模式、人件编程珍珠,算法设计手册,务实程序员,神秘的男人 | 计算机程序,概念的结构和解释技术,计算机编程模型,计算机编程艺术,数据库系统,通过c J日期、思考,小阴谋家 |
博客 | 有听说过但没有时间。 | 读软件工程技术/程序/博客和经常听播客。 | 维护一个博客链接和一些有用的文章和工具的集合,他/她已经收集了 | 维护一个博客,个人见解和想法编程是共享的 |