第一篇:程序员能力评估矩阵
程序员能力评估矩阵
计算机科学 COMPUTER SCIENCE 2n(Level 0)n2(Level 1)n(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)n(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)n(Level 2)log(n)(Level 3)问题分解 只有直线式的代码,通过复制粘贴来复用 能够把问题分散到多个函数中
能够想出可复用的函数/对象来解决大题的问题
使用适宜的数据结构和算法,写出通用的/面向对象的代码来封装问题的易改变的层面。
如果不在同系统分解 想不出比单一的文件/类更好的层面 一平台或没采用相同的技术,能够把问题空间和设计方案分解。
能够设计跨技术/平台的系统。
能够在多个产品线和与外部体系一体化中虚拟化和设计复制的系统。同时也能够设计支持系统监视、报告、故障恢复等。
不能向同伴表达想交流 法/主意。匮乏拼写和语法的能力。同伴能了解你在说什么。有良好的拼写和语法能力。
能够和同伴进行高效的交流
能够使用清晰的方式了解和交流想法/设计/主意/细则,能适应每种环境的交流
同一文件中代码组织 同一文件中组织没有依据 按照逻辑性或者易接近的方法
代码分块,引用其他源文件时有良好的注释
文档头部有许可声明,总结,良好的注释,一致的空格缩进。文档外观美观。
2n(Level 0)n2(Level 1)n(Level 2)log(n)(Level 3)跨文件代码组织 没够想过给代码跨文件组织 相关文件按文件夹分组
每个物理文件都有独立的目的,比如一个类的定义,一个特性的实现等。
代码在物理层组织紧密,在文件名上与设计和外观相匹配,可以通过文件分布方式洞察设计理念。
源码树组织 一切都放在一个文件夹内 初步地将代码分散进对应逻辑的文件夹。
源码树的物理布局与
没有循环依赖,二进制文件,库,文档,构建,第三方的代码都组织进合适的文件夹内。
逻辑层次、组织方式相匹配。可以通过目录名称和组织方式洞察设计理念。
单音节的代码可读性 名称(在国内应该是那些类似用汉语拼音命名的习惯)对文件、变量、类、方法等,有良好的命名。
没有长函数、注释解释不常规的代码,bug修复,代码假设。
代码假设验证使用断言,自然的代码流,没有深层嵌套的条件和方法
防御性编码 不知道这个概念 检查代码中所有的参数,对关键的假设进行断言
确保检查了返回值和使代码失败的异常。
有自己的库来帮助防御性编程、编写单元测试模拟故障
2n(Level 0)n2(Level 1)n(Level 2)log(n)(Level 3)错误处只给乐观的情形编基本的代码错误处理,抛出异常/生成确保错误/异常留在程序中有良好的状态,资源,连接,内存都有被合适
在编码之前察觉可能出现的异常,在代码的所有层次中维持一致理 码 错误 的清理。性的异常处理策略,提出整个系统的错误处理准则。
IDE大部IDE 分用来进行文本编辑 了解其周围的接口,能够高效地通过菜单来使用IDE
了解最常操作的键盘快捷键
编写自定义宏
API 需要频繁地查阅文档 把最频繁使用的API记在脑子里
广阔且深入的API知识。
为了使实际任务中常用API使用更加便捷,编写过API的上层库,填补API之间的缺口。
没有使用框架 过主平台外的任何框架 听过但没用过平台下流行的可用框架
在专业的职位中使用过一个以上的框架,通晓各框架的特色。
某框架的作者
2n(Level 0)n2(Level 1)n(Level 2)log(n)(Level 3)需求分析 接受给定的需求和代码规格 能对规格的遗漏提出疑问
了解全面情况,提出需要被规格化的整体范围。
能够提出更好的可选方案,根据经验的浮现给出需求
脚本 不具备脚本工具的知识 批处理文件/shell脚本
Perl/Python/Ruby/VBScript/Powershell
写过并且发表过可重用的代码 知道基本的数据库概念,规范化、ACID(原子性Atomicity、数据库 认为Excel就是数据库 一致性Consistency、隔离性Isolation、持久性Durability)、事务化,能够写简单的select语句
能够牢记在运行时必要查询中设计良好的规范化数据库模式,精通用户视图,存储过程,触发器和用户定义类型。知道聚集与非聚集索引之间的差异。精通使用ORM(Object Relational Mapping对象关系映射)工具
能做基本的数据库管理,性能优化,索引优化,编写高级的select查询,能够使用相关sql来替换游标,理解数据内部的存储,了解如何镜像、复制数据库。知道两段数据提交如何工作
经验 EXPERIENCE 2n(Level 0)n2(Level 1)n(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)n(Level 2)log(n)(Level 3)仅限于主工具知识 要的IDE(VS.Net, Eclipse等)知道一些流行和标准工具的备选方案
对编辑器、调试器、IDE、开源的备选方案有很好的了解。比如某人了解大多数Scott Hanselman的威力工具列表中的工具,使用过ORM工具。
实际地编写过工具和脚本,如果这些被发布则有加分
语言接触 命令式语言、命令式语言和面向对象语言 面向对象语言和说明型语言(SQL),如果了解静态类型vs动
函数式语言,如果了解延缓求值、局部套用函数、continuations(源于scheme中的一种高级控制结构)则有加分
并发语言(Erlang, Oz)逻辑语言(Prolog)态类型、弱类型vs强类型则有加分
代码库知识 从来没有查询过代码库 基本的代码层知识,了解如果构建系统
实现了代码库中多个
良好的代码库工作知识,实现过几次bug修复或者完成了一些细小的特性
大型特性,能够轻松地将多数特性的需求变更具体化,从容地处理bug修复。
下一代技术知识 从来没听说过即将到来的技术 听说过某领域即将到来的技术
试用过预览版而且实
下载过alpha preview/CTP/beta版本,并且读过一些文章和手册
际地构建过某物,如果共享给其他人的话则有加分
2n(Level 0)n2(Level 1)n(Level 2)log(n)(Level 3)平台内部
编写过增强平台或者对平台内部毫无所知 有平台基本的内部工作的知识
深度的平台内部知识,能够设想平台如何将程序转换成可执行代码。
为其平台内部提供信息的工具。比如,反汇编工具,反编译工具,调试工具等。
《计算机程序设计与菜鸟系列,书籍 21天系列,24小时系列,蠢货系列...《代码大全》,《别让我思考》, 《精通正则表达式》
《设计模式》,《人件》,《代码珠玑》,《算法设计手册》,《程序员修炼之道》,《人月神话》
解释》,《事务处理:概念与技术》,《计算机程序设计模型》《计,算机程序设计艺术》,《数据库系统导论》 C.J Date版,《Thinking Forth》,《Little Schemer》(没找到其中译本)
阅读一些科听过但是博客 从来抽不出空去接触 技/编程/软件工程的博客,并且经常的收听一些播客
维护一些博客的链接,收集博主分享的有用的文章和工具
维护一个在编程方面,分享有个人见解和思考的博客
第二篇:企业文化评估矩阵
企业文化评估矩阵
企业文化评估矩阵概述
企业文化评估矩阵又称为企业文化诊断与评估系统(Corporate-Culture Measurement and Assessment System,CMAS),我国大部分企业文化研究者和企业文化咨询师在企业文化的诊断与评估上一般只是直接应用国外现有的企业文化测量工具,由于大部分企业文化从业人员来自文科背景,往往缺乏用数据模型解释企业文化现象和本质的能力。
实际上,在国外经过多年研究开发出来的企业文化诊断工具,在直接应用于中国文化背景下的企业时,往往会发生解释上的困难。
北京仁达方略管理咨询公司较早地认识到了这个问题,从1995年起,在10多年的企业文化研究与咨询实践中,积累了大量的企业文化案例,跨度达电力、石油、煤炭、金属和矿产、房地产、金融、航空航天、制造、旅游、IT等多个行业领域,并于2001年投入大量资金组建了面向中国企业的企业文化诊断评估工具研发团队,并开发出了中国第一套企业文化综合诊断评估系统(Corporate-CultureMeasurementandAssessmentSystem,CMAS)。
[编辑]
企业文化评估矩阵分析
企业文化评估矩阵包含12个维度(Dimensionality),33个要素(Factor)。利用CMAS系统所测定的企业文化的12个维度,包括工作环境、组织制度、管理方式、内部沟通、员工激励、领导和决策、培训与员工发展、员工工作动机、员工满意度、员工忠诚度、文化建设以及理念与价值观,这12个维度涵盖了企业文化的理念层、制度层和行为层三个层次的内容,同时与现代企业管理的主要职能和要素有着很好的对接,该评估结果将比较全面和准确的反映我国企业文化的综合竞争力状况。
通过数据的计算,中国企业文化现状的综合评分为3.50分(采用5点计分法)。该得分总体上比较高,这与我国近几年来企业文化建设的大环境有着重要的关系。
从各维度的具体数据中我们就可以看得出来,理念与价值观(3.69)、文化建设(3.66)、员工工作动机(3.69)以及组织制度(3.62)这四个维度评分最高,领导和决策(3.51)略高于平均分。而其他七个维度得分则略为偏低,其中管理方式(3.22)、内部沟通(3.22)和员工忠诚度(3.25)分数最低,其次是员工满意度(3.45)、工作环境(3.47)、员工激励(3.46)、培训与员工发展(3.40)。
[编辑]
企业文化评估矩阵的应用
企业文化评估矩阵可以广泛运用于各种企业、团队、以及个人。通过对在国内多家机构的应用来看,该矩阵的调查问卷具有良好的信度和效度,问卷的信度系数(Alpha)在0.72至0.93之间,能够全面反映被测试机构的文化现状,从而为企业文化的提升和完善提供量化的依据。一般的企业运用该模型可以达到以下目的。
1.了解并熟悉企业当前的组织氛围、员工态度与企业文化现状,对目前企业文化优势 和不足做出基本评价。
2.与行业平均企业文化水平或者其他经营业绩好的企业文化进行比较分析,根据企业所期望的业绩确定文化变革的目标。
3.明确企业文化变革的短期、中期和长期目标和任务。
4.提高领导者个人对企业文化的认识,进一步引导他们积极发挥企业文化的作用。
5.提供个人和企业双方都可以使用的企业文化诊断评估报告,形成共同认可的企业文化建设思路,建设科学的、合理的企业文化体系。
第三篇:供应商能力评估
关于供应商技术能力评审的
整改报告
浙江坚铭建筑五金有限公司
2014年5月28日
关于供应商技术能力评审的整改报告
苏州罗普斯金铝业股份有限公司:
首先感谢贵公司对我公司的信任,按照贵公司对我公司实地评审检查所指出的问题,我公司进行了全面的整改,现将整改情况逐项报告如下:
一、关于研发技术能力。
我公司原研发部只有1名工程师,为了开发更多新产品来拓展市场,目前编制增加为3人,负责人由公司技术总监李平凡同志兼任。
研发部职能岗位说明见,(附件一:研发部职能说明书)。
二、关于公司产品的中国金属结构协会推荐情况。
目前公司4项产品(见附件二)为中国金属结构协会推荐产品。2014年公司增加2项产品申请中国金属结构协会推荐,目前已送交样品。今后公司将申请更多产品成为中国金属结构协会的推荐产品。
三、关于产品检测能力。
针对贵公司提出的检测设备缺少定期校验问题。该项工作的组织部门为公司品管部,属于工作中疏忽,已责成相关责任人作出检查,并将全部量具送瑞安市计量测试检定所进行检定(检定报告见附件三)。
四、关于公司产品的第三方检测报告(见附件四)。
五、关于公司产品的专利实施情况,公司申报的瑞安市专利示范企业
已获批准(证书见附件五)。
六、关于ISO9000认证和ISO1400认证情况。
公司ISO9000质量管理体系自2010年已取得认证。因公司相关人员工作疏忽,致使认证期届满而未及时续期办理。现公司已重新在2014年3月续期办理ISO9000认证(见附件六);关于ISO1400认证,因公司现厂房为租赁,出租方建设该房产时间较早,手续不完备,致使我公司无法取得必要的ISO1400认证手续文件,我公司已筹划在瑞安开发区购买土地20亩,计划按国家标准建设新厂区,届时,公司将按ISO1400的要求,办理认证,敬请贵公司谅解。
以上为整改情况,特此报告。
浙江坚铭建筑五金有限公司 2014年5月28日
第四篇:程序员的沟通能力测试
每道题目可以根据自己的符合程度打分,分值从1分至5分,1分表示完全不符合,5分表示非常符合,然后把总分除以题目总数(10),看看自己可以得到五分制测试中的几分,进而了解自己的职场沟通能力。
1、你们公司的软件出现了一个BUG,客户希望三天内解决,而你初步估计需要大概两周左右的时间才可以完全修复。你是否能够在维持双方良好关系的前提下,调整客户的期望值,在矛盾不激化的情况下解决问题。
2、你在程序开发时遇到了一个问题不知如何解决,在技术社区寻求帮助。你发的帖子是否能够让别人清楚的知道你所遇到问题的背景、现象、操作步骤、系统环境等等相关因素,并有一个明确的标题,而不是如“冰天雪地360度裸身跪求”之类的不知所云。
3、求职面试时你是否可以控制整个会谈的节奏,能把谈话引向你擅长的方向,碰到难以回答的问题或者自己的弱项也可以给出合理的解释及应对。
4、客户突然提出需要增加一个新的功能,你是否能够先了解他需要这个功能的动机或想法、重要程度以及能够接受的代价等等因素,然后确定是否是协议之外的要求,与客户良好的沟通处理。
5、你的同事负责技术架构的设计,你觉得其中有一个不合理的地方,但是他技术很牛,同时也比较固执坚持自己的立场。你是否能够说服他改变设计。
6、在软件开发过程中,你的主管基本能够掌握你的工作进度;而不是直到他认为你能够如期交付代码的前四天,你才告诉他由于这样或那样的问题,你还需要一个月的时间才能赶上进度。
7、在召开项目会议时,你可以做出一个条理清楚的会议记录,让大家对于当前的工作进度、存在的主要风险、下一步的行动计划、每个部分的负责人及完成时间等,一目了然。
8、你是否能够在三分钟之内,向一位不太懂技术的潜在客户介绍你们公司的产品,并让他对你们的产品产生兴趣。
9、你负责进行软件功能设计,根据你写出的软件功能规格说明书,业务、开发、测试等各方面的人员都能够基本清楚的了解软件的功能,并且以此为基础,进行自身的工作(并不是说你可以写出一份一步到位完美的设计文档)。而不需要一遍又一遍的拷问你,并且从你的嘴里得出N个不同版本的答案。
10、快过年了,你希望增加五百元的薪水。你能够就此与主管(或老板)进行气氛融洽的协商。并且不论结果如何,不会影响你与主管(或老板)之间的关系。
第五篇:程序员能力的四个境界
无意中看到程序员杂志中 关于编程的四个境界,觉得非常有意思,也比较有道理,想想自己也是这么过来的无意识无能力(不知道自己不知道)
这个时候是刚开始接触编程到编程有差不多一年左右的时间,大多数这个时候在大学生涯,年少轻狂,激情四射,学习起来超级有干劲,尤其当自己知道一个个编程法则,写出很自己认为很牛逼的程序,研究过高深的算法,做过几个项目,觉得编程很简单。我当初就是这样的,在大学的时候会用 spring,hibernate,tapestry(貌似这个不是很流行),struts做过两个中型项目,学习过设计模式,部署过ejb,看过soa相关的皮毛知识,觉得自己无敌了,都不知道学习什么了,觉得所有框架都会用了,好牛逼啊,不知道自己学习啥子了。有意识无能力(知道自己不知道)
这个阶段应该是编码超过一年,接触过比较大型的项目,在工作中遇到一些自己无法独立解决的问题。会经常请教一些前辈们。对于编程,知其然,不知其所以然。这个时候大概应该参加工作了,因为工作过程中会遇到很多在校园里面无法遇到的技术问题,比如性能,可用性等等。这个时候没有当初的那种轻狂,开始虚心学习,研究事物的本质。我在刚工作3个月时候,才发现自己水平很菜。虽然会用spring,但是无法领会其精髓。以前做的项目都是自己搭建工程的,而公司有一套标准化的开发,测试,打包,构建工具。开始接触越来越多的技术,遇到很多无法独立解决的问题。这个时候感觉自己的成长很快,慢慢开始走上职业程序员之路。有意识有能力(知道自己知道)
经过有意识无能力的阶段,这个时候,由于自己接触的东西已经非常多,职业水平已经达到一个台阶。经历过几千小时的编码生涯,解决过各种棘手的技术问题,对于遇到的大多数问题都知道其发生的原因以及解决方案。在这个阶段里面,已经是一个很有水平的程序员,能够独立解决自己遇到过的所有问题。我在公司的前几年,正好遇到公司的快速发展,公司的技术架构经历了巨大的变化,从单系统架构到分布式架构,从单系统发展到上百系统,日独立PV从几十W发展到接上亿,每天上亿的交易数据。这个阶段自己在 编码技巧,设计模式,消息中间件,分布式系统设计,领域驱动设计,集群,数据库拆分,架构设计 都有很大提升。基本上能够解决遇到所有的问题。无意识有能力(不知道自己知道)
这个阶段就是融会贯通的时候。如果说第三个阶段是能够解决自己遇到的所有问题,这个阶段就是能够解决他人遇到的但是自己还没有碰到的问题。这个阶段就是抽象思维能力不断提高能够达到的境界。如果说第三个阶段能够解决某一个问题。这个阶段能够解决某一类问题。能够把自己在第三阶段遇到的问题抽象化一类问题,例如如何解决一个系统的性能问题。我最近在做ios相关的开发,自己之前从未学习过objective c,但是因为对java底层实现以及设计模式和mvc设计了解,对cocoa 中UIKit设计图看一下就知道大概是如何实现的了。还有就是目前比较火爆的 函数式编程的高阶函数 和 java中的模板模式与 回调机制有点类似。这就是融汇贯通的结果。目前觉得个人能力已经基本在这个阶段。
ps:看到很多吐槽,其实真的木有必要,你在哪个阶段,是现在的你对于自己的认知情况。随着自己的越来越了解,可能阶段也会发生变化。这个阶段本来就比较主观的。其实程序员最关键的是需要思考,就好比,如果你觉得你真的达到第四个阶段,那你后续还需要提升的是什么?程序员限定的范围是什么?程序
员的职责是什么,程序员未来的发展是什么?只有不断的思考,才会脱离这个阶段之争。有一些程序员是可以成为项目经理,有一些程序员可以架构师,有一些程序员可以成为科学家,但是他们不一定真的是编码高手,所以不能狭隘的认为程序员就是coder!