程序员能力模型评测

欢迎参加本次测试
基本信息
姓名:    ____________
应聘职位:    ____________

计算机科学

数据结构
不知道数组和链表的差异
能够解释和使用数组,链表,字典等,并且能够用于实际的编程任务
了解基本数据结构时间和空间的折中,比如数组VS链表,能够解释如何实现哈稀表和处理冲突,了解优先队列及其实现。
高等的数据结构知识,比如B——树、二项堆,斐波那契堆、AVL树、红黑树、伸展树、跳跃表以及前缀树等。
算法
不能够找出一个数组各数的平均值
基本的排序,搜索和数据的遍历和检索方法。
树,图,简单的贪婪算法和分而治之算法,能够适度了解炬阵该层的含义。
能够辨识和编写动态规划方案,良好的图算法知识,良好的数值估算的知识,能够辨别NP问题等。
编程体系
不知道何为编译器、连接器和解释器
对编译器、连接器、解释器、有基本的了解。知道什么是汇编代码以及在硬件层如何工作,有些虚拟内存和分页知识。
了解内核模式VS用户模式,多线程,同步原语以及它们如何实现,能够阅读汇编代码。了解网络如何工作,了解网络协议,和socket级别编程。
了解整个程序堆栈、硬件(cpu+内存+中断+微码)、二进制代码。汇编、静态、和动态链接、编码、解释、JIT(just-in-time)编译、内存碎片回收、堆、栈、存储器编址....

软件工程

源码版本控制
通过日期备份文件夹
熟练地使用CVS和SVN特性。知道如何分支和归并,使用程序库补丁安装特性等
VSS和初级的CVS/SVN用户
有分布式VCS系统的知识。尝试过bzr/Mercurial/Darcs/Git
自动化编译
只知道在IDE下编译
知道如何编译在命令下编译系统
能够安装一个脚本构建基本的系统
能够安装一个脚本构建系统并且归档,安装程序,生成打不记录和给源码控制中的代码分配标签。
自动化测试
认为所有的测试都是测试员工的工作
能够编写自动化的单元测试,能够为正在编写的代码提出良好的测试用例。
按照TDD(Test Driven Development)方式编写代码
了解并且能够有效自动化安装,载入/性能和UI测试

程序设计

问题分析
只有直线式的代码,通过复制粘贴来复用
能够把问题分散到多个函数中
能够想出可复用的函数、对象来解决大的问题
使用适宜的数据结构和算法,写出通用的/面向对象的代码来封装问题的易改变的层面。
系统分解
想不出的比单一的文件/类更好的层面
如果不在同一平台或没采用相同的技术,能够把问题空间和设计方解。
能够设计跨技术/平台的系统。
能够在多个产品线和与外部提现一体化中虚拟化和设计复制的系统。同时也能够设计支持系统监视、报告、故障恢复等。
交流
不能向同伴表达想法/主意。匮乏拼写和语法的能力
同伴能了解你在说什么。有良好的拼写和语法能力。
能够和同伴进行高效的交流。
能够使用清晰的方式了解和交流想法/设计/主意/细则,能够适应每种环境的交流
同一文件中的代码组织方式
较随意,没特别组织
按照逻辑性或者容易阅读的方式
代码分块和对于其他原文件来说是易于注释,引用其它源文件时有良好的注释。
文档头部有许可声明,总结,良好的注释,一致的空格缩进。文档外观美观。
多个文件的代码组织方式
没想过给代码分布在多个文件里面
相关文件按文件夹分组
每个物理文件都有相关的目的,比如一个类的定义,一个特定性的实现等。
代码在物理组织紧密,在文件名上与设计和外观相匹配,可以通过文件分布方式洞察设计理念。
源码树组织
一切都放在一个文件夹内
初步地将代码分散进对应逻辑的文件夹
没有循环依赖,二进制文件,库,文档,构建,第三方的代码都进合适的文件夹内。
源码数的物理布局与逻辑层次、组织方式相匹配。可以通过目录名称和组织方式洞察设计理念。
代码可读性
有用汉语拼音命名的习惯
对文件、变量、类、方法等,有良好的命名。
没有长函数,注释解释不常规的代码,bug修复,代码假设。
代码假设验证使用断言,自然的代码流,没有深层嵌套的条件和方法。
防御性编码
不知道这个概念
检查代码中所有的参数,对关键的假设进行断言。
确保检查了返回值和使代码失败的异常。
有自己的库来帮助防御性编程、编写单元测试模拟的故障,
错误处理
只给乐观的情形编码
基本的代码处理,抛出异常/生成错误
确保错误/异常留在程序中有良好的状态,资源,链接,内存都有被合适的清理。
在编码之前洞察可能出现的异常,在代码的所有层次中,维持一致性的异常策略,提出整个系统的错误处理准则。
IDE
IDE大部分用来进行文本编辑
了解周围的接口,能够高效的通过菜单来使用IDE
了解最常操作的键盘快捷键
编写自定义宏。
API
需要频繁地查阅文档
把最频繁使用API记在脑子里
广阔且深入的API知识
为了使实际任务中常用API使用更加编辑,编写过API的上层库,填补API之间的缺口。
框架
没使用过主平台外的任何框架
听过但没用过平台下流行的的可用框架
在专业的职位中使用过一个以上的框架,通晓各框架的特色
某框架的作者
需求分析
接手给定的需求和代码规格
能对规格的遗漏提出疑问
了解全面情况提出需要被规格化的整体范围
能够提出更好的可选方案,根据经验的浮现给出需求
脚本
不具备脚本的工具知识
批处理文件/shell脚本
Perl/Python/Ruby/VBScript/Powershell
写过并且发表过可重要的代码
数据库
Excel是数据库的全部
知道基本的数据概念,规范化,ACID(原子性Atomicity,一致性 Consistency,隔离性Isolation.持久性Durability).事务化,能够写简单的select语句
能够牢记在运行时必要查询中设计良好的规范化数据库模式,精通用户视图,存储过程,融发器和用户定义类型。知道聚集与非聚集索引之间的差异,精通使用ORM(Object Relational Mapping 对象关系映射)工具
能够基本的数据库管理,性能优化,编写高级的select查询,能够使用相关sql来替换游标,理解数据内部的存储,了解如何镜像,复制数据库。知道两端数据提交如何工作。

学识

工具知识
仅限于主要的IDE(VS.NET,Eclipse等)
知道一些流行和标准工具的备选方案
对编辑器、调节器、IDE、开源的备选方案有很好的了解。比如某人了解大多数Scott Hanselman 的威力工具列表中的工具,使用过ORM工具。
实际地编写工具和脚本,如果这些被发布则有加分
语言接触
命令语言和面向对象语言
命令式语言,面向对象语言和说明型语言(SQL),如果了解静态类型vs动态类型、弱类型VS强类型则有加分。
函数式语言,如果了解延缓求值,局部套用函数、continuations(源于scheme中的一种高级控制结构)则有加分
并发语言(Erlang,Oz)逻辑语言(prolog
代码库知识
从来没有查询过代码库
基本的代码层知识,了解如何构建系统
良好的代码库工作知识,实现过几次bug修复或者完成了一些细小的特征。
实现了代码库中多个大型特性,能够轻松的将多数特性的需求变更具体化,从容的处理bug修复
下一代技术知识
从来没听过即将到来的的技术
听说过某领域即将到来的技术
下载过alpha preview/CTP/beta版本,并且读过一些文章和手册
使用过预览版而且实际的构建过某物,如果共享给他人的话则有加分
平台内部
不清楚平台内部相关知识
有平台基本的内部工作的知识
深度的平台内部知识,能够设想平台如何将程序转换成可执行代码
编写过增强平台或者为其平台内部提供信息的工具。比如,反汇编工具,反编译工具,调试工具等。
书籍
21天系列,24小时系列
《代码大全》,《别让我思考》,《精通正则表达式》
《人件》,《代码珠玑》,《算法设计手册》《程序员修炼之道》,《人月神话》.
《计算机程序设计与解释》,《事务处理:概念与技术》,《计算机程序设计模型》,《计算机程序设计艺术》,《数据库系统导论》C.J Date版,《Thinking Forth》,《Little Scheme》
博客
听过但从来抽空去接触
阅读一些科技/编程/软件工程的博客,并且经常的收听收看一些播客
维护一些博客的链接,收集博主分享的有用的文章和工具
维护一个在编程方面,分享有个人见解和思考的博客。

33题 | 被引用11次

使用此模板创建