程序员自我修养1:能力矩阵

程序员自我修养1:能力矩阵


资料来自与网络整理,仅供学习参考,不用于商业用途


请注意,每个级别的知识都是累积的。在 n级意味着您还了解,若低于n的水平,说明还需要努力学习,掌握

前言

程序员能力矩阵可以一定程度上反应自己当前的能力水平,同时也给自己一个努力的方向,让自己找到要努力的方向和目标。
本文可供大家检测自己目前所在的能力水平,同时也方便大家制定自己下一步需要努力的方向,使自己早日称为优秀的程序员,资深专家

程序员能力图

Part1: 计算机科学

chart1: 数据结构

1. 级别说明
  • 2n(Level 0):不知道Array和LinkedList之间的区别
  • n2(Level 1):能够在实际编程任务中解释和使用数组,链接列表,字典等
  • n(Level 2):了解基本数据结构的空间和时间权衡,数组与链接列表的关系,能够解释如何实现哈希表并可以处理冲突,优先级队列及其实现方式等。
  • log(n)(Level 3):了解高级数据结构,例如B树,二项式和斐波那契堆,AVL /红黑树,Splay树,跳过列表,尝试等

chart2: 算法

1. 级别说明
  • 2n(Level 0):无法找到数组中数字的平均值
  • n2(Level 1):基本的排序,搜索和数据结构遍历和检索算法
  • n(Level 2):树,图,简单的贪婪以及分而治之算法,能够理解该矩阵级别的相关性
  • log(n)(Level 3):能够识别和编程动态编程解决方案,具有图形算法的丰富知识,具有数值计算算法的丰富知识,能够识别NP问题等

chart3: 系统编程

1. 级别说明
  • 2n(Level 0):不知道什么是编译器,链接器或解释器
  • n2(Level 1):基本了解编译器,链接器和解释器。了解什么是汇编代码以及它们在硬件级别如何工作。关于虚拟内存和分页的一些知识。
  • n(Level 2):了解内核模式与用户模式,多线程,同步原语及其实现方式,能够读取汇编代码。了解网络如何工作,了解网络协议和套接字级别的编程。
  • log(n)(Level 3):了解整个编程堆栈,硬件(CPU +内存+高速缓存+中断+微代码),二进制代码,汇编,静态和动态链接,编译,解释,JIT编译,垃圾回收,堆,堆栈,内存寻址

Part2: 软件工程

chart1: 源代码版本控制

  • 2n(Level 0):按日期备份文件夹
  • n2(Level 1):Git / SVN等代码管理工具初始用户
  • n(Level 2):熟练使用Git或SVN功能。知道如何分支和合并,使用修补程序设置存储库属性等
  • log(n)(Level 3):分布式VCS系统的知识。已经尝试过Bzr / Mercurial / Darcs / Git

chart2: 构建自动化

  • 2n(Level 0):只知道如何从IDE构建
  • n2(Level 1):知道如何从命令行构建系统
  • n(Level 2):可以设置脚本来构建基本系统
  • log(n)(Level 3):可以设置脚本来构建系统,还可以建立文档,安装程序,生成发行说明并在源代码管理中标记代码

chart3: 自动化测试

  • 2n(Level 0):认为所有测试都是测试人员的工作
  • n2(Level 1):编写了自动化的单元测试,并针对要编写的代码提出了良好的单元测试用例
  • n(Level 2):以TDD方式编写代码
  • log(n)(Level 3):了解并能够设置自动化的功能,负载/性能和UI测试

Part3: 程序设计

chart1: 问题分解

  • 2n(Level 0):只有带有复制粘贴的直线代码才能重复使用
  • n2(Level 1):能够将问题分解为多种功能
  • n(Level 2):能够提出解决整个问题的可重用功能/对象
  • log(n)(Level 3):使用适当的数据结构和算法,并提供通用/面向对象的代码,这些代码封装了可能会发生变化的问题的各个方面

chart2: 系统分解

  • 2n(Level 0):无法在单个文件/类的层次上思考
  • n2(Level 1):只要位于相同的平台/技术中,便能够打破问题空间并设计解决方案
  • n(Level 2):能够设计跨越多种技术/平台的系统
  • log(n)(Level 3):能够可视化和设计具有多个产品线并与外部系统集成的复杂系统。还应该能够设计运营支持系统,例如监视,报告,故障转移等

chart3: 协作交流

  • 2n(Level 0):无法向同伴表达想法/想法。拼写和语法不佳。
  • n2(Level 1):同行可以理解所讲的内容。良好的拼写和语法
  • n(Level 2):能够与同龄人有效沟通
  • log(n)(Level 3):能够以明确的方式理解和交流思想/设计/思想/规范,并根据上下文调整交流

chart4: 文件中的代码组织

  • 2n(Level 0):文件中没有组织的证据
  • n2(Level 1):代码按逻辑或可访问性分组
  • n(Level 2):代码分为多个区域,并通过引用其他源文件得到了很好的注释
  • log(n)(Level 3):文件具有许可证标头,摘要,注释良好,一致的空格使用情况。该文件应该看起来很漂亮

chart5: 跨文件的代码组织

  • 2n(Level 0):不考虑跨文件组织代码
  • n2(Level 1):相关文件被分组到一个文件夹中
  • n(Level 2):每个物理文件都有独特的用途,例如一种类定义,一种功能实现等。
  • log(n)(Level 3):物理级别的代码组织与设计紧密匹配,并且查看文件名和文件夹分布可深入了解设计

chart6: 源树组织

  • 2n(Level 0):一切都在一个文件夹中
  • n2(Level 1):将代码基本分离到逻辑文件夹中
  • n(Level 2):没有循环依赖项,二进制文件,库,文档,内部版本,第三方代码都组织到适当的文件夹中
  • log(n)(Level 3):源树的物理布局与逻辑层次结构和组织匹配。目录名称和组织提供了对系统设计的见解

chart7: 代码可读性

  • 2n(Level 0):单音节名称
  • n2(Level 1):文件,变量类,方法等的好名字
  • n(Level 2):没有长函数,注释说明异常代码,错误修复,代码假设
  • log(n)(Level 3):使用断言来验证代码假设,代码自然地流过-没有条件或方法的深层嵌套

chart8: 防御性代码

  • 2n(Level 0):不懂这个概念
  • n2(Level 1):检查所有参数并在代码中声明关键假设
  • n(Level 2):确保检查返回值,并检查可能失败的代码周围的异常
  • log(n)(Level 3):有自己的库来帮助进行防御性编码,编写模拟故障的单元测试

chart9: 错误处理

  • 2n(Level 0):只编码良好的情况
  • n2(Level 1):围绕可能引发异常/生成错误的代码进行基本错误处理
  • n(Level 2):确保错误/异常使程序保持良好状态,正确清理了资源,连接和内存
  • log(n)(Level 3):在发现可能的异常之前,在所有代码层中维护一致的异常处理策略的代码,以及整个系统异常处理的准则

chart10: IDE

  • 2n(Level 0):通常使用IDE进行文本编辑
  • n2(Level 1):知道他们围绕界面的方式,能够通过菜单有效地使用IDE
  • n(Level 2):了解大多数常用操作的键盘快捷键
  • log(n)(Level 3):编写了自定义宏

chart11: API

  • 2n(Level 0):需要经常查找文档
  • n2(Level 1):内存中使用最频繁的API
  • n(Level 2):丰富而深入的API知识
  • log(n)(Level 3):编写了位于API顶部的库,以简化常用任务并填补API中的空白

chart12: 构架

  • 2n(Level 0):尚未在核心平台之外使用任何框架
  • n2(Level 1):听说过但未使用该平台的流行框架
  • n(Level 2):已经以一种专业的身份使用了多个框架,并且对框架的习惯非常熟悉
  • log(n)(Level 3):框架的作者

chart13: 要求

  • 2n(Level 0):将给定的要求和代码规范化
  • n2(Level 1):在规范中提出有关遗漏案件的问题
  • n(Level 2):了解完整图片并提出需要指定的整个区域
  • log(n)(Level 3):能够根据经验为给定要求提出更好的替代方案和流程

chart14: 脚本编写

  • 2n(Level 0):不懂脚本工具
  • n2(Level 1):批处理文件/ shell脚本
  • n(Level 2):Perl / Python / Ruby / VBScript / Powershell
  • log(n)(Level 3):编写并发布了可重用的代码

chart15: 数据库

  • 2n(Level 0):认为Excel是数据库
  • n2(Level 1):了解基本的数据库概念,规范化,ACID,事务并可以编写简单的选择
  • n(Level 2):能够设计良好且规范化的数据库架构,同时牢记必须运行的查询,熟练使用视图,存储过程,触发器和用户定义的类型。知道聚簇索引和非聚簇索引之间的区别。熟练使用ORM工具
  • log(n)(Level 3):可以进行基本的数据库管理,性能优化,索引优化,编写高级选择查询,能够用关系sql代替游标用法,了解如何在内部存储数据,了解如何在内部存储索引,了解如何进行镜像,复制等。了解两阶段提交的工作方式

Part4: 经验

chart1: 具有专业经验的语言

  • 2n(Level 0):命令式或面向对象
  • n2(Level 1):命令式,面向对象和声明式(SQL),如果他们了解静态类型与动态类型,弱类型与强类型以及静态推断的类型,则将获得额外的好处
  • n(Level 2):如果他们了解懒惰的评估,计算,连续性,则可以提供实用的额外奖励
  • log(n)(Level 3):并发(Erlang,Oz)和逻辑(序言)

chart2: 具有专业经验的平台

  • 2n(Level 0):1 年
  • n2(Level 1):2-3 年
  • n(Level 2):4-5 年
  • log(n)(Level 3):6 年+

chart3: 多年专业经验

  • 2n(Level 0):1 年
  • n2(Level 1):2-5 年
  • n(Level 2):6-9 年
  • log(n)(Level 3):10 年+

chart4: 领域知识

  • 2n(Level 0):不了解领域
  • n2(Level 1):已在域中开发至少一种产品
  • n(Level 2):在同一个域中从事多种产品的研究
  • log(n)(Level 3):领域专家。在领域中设计并实施了多种产品/解决方案。精通标准术语,该领域中使用的协议

Part5: 知识

chart1: 工具知识

  • 2n(Level 0):限于主要IDE(VS.Net,Eclipse等)
  • n2(Level 1):了解流行和标准工具的一些替代方法
  • n(Level 2):对编辑器,调试器,IDE,开源替代品等有很好的了解。知道Scott Hanselman的电动工具清单中大多数工具的人。已使用ORM工具
  • log(n)(Level 3):实际编写了工具和脚本,如果已经发布,则可以增加奖励

chart2: 接触到的语言

  • 2n(Level 0):命令式或面向对象
  • n2(Level 1):命令式,面向对象和声明式(SQL),如果他们了解静态类型与动态类型,弱类型与强类型以及静态推断的类型,则将获得额外的好处
  • n(Level 2):如果他们了解懒惰的评估,计算,连续性,则可以提供实用的额外奖励
  • log(n)(Level 3):并发(Erlang,Oz)和逻辑(序言)

chart3: 代码库知识

  • 2n(Level 0):从未看过代码库
  • n2(Level 1):代码布局的基本知识以及如何构建系统
  • n(Level 2):良好的代码基础知识,已经实现了一些错误修复,也许还有一些小功能
  • log(n)(Level 3):已在代码库中实现了多个重要功能,并且可以轻松可视化大多数功能或错误修复所需的更改

chart4: 即将到来的技术知识

  • 2n(Level 0):尚未听说即将推出的技术
  • n2(Level 1):听说过该领域即将出现的技术
  • n(Level 2):已下载alpha预览/ CTP / beta并阅读了一些文章/手册
  • log(n)(Level 3):玩过预览,并实际制作了一些东西,并且作为奖励与其他人分享

chart5: 平台内部

  • 2n(Level 0):零知识平台内部
  • n2(Level 1):具有平台内部工作原理的基本知识
  • n(Level 2):对平台内部有深入的了解,可以可视化平台如何采用程序并将其转换为可执行代码
  • log(n)(Level 3):具有编写的工具来增强或提供有关平台内部的信息。例如反汇编器,反编译器,调试器

chart6: books

  • 2n(Level 0):释放系列,21天系列,24小时系列,假人系列
  • n2(Level 1):代码完成,不要让我思考,掌握正则表达式
  • n(Level 2):设计模式,人员软件,编程珠,算法设计手册,实用程序员,神话人月
  • log(n)(Level 3):计算机程序的结构和解释,概念技术,计算机程序设计模型,计算机程序设计艺术,数据库系统,作者:C。J. Date,Thoughtingthth,Little Schemer

chart7: blogs

  • 2n(Level 0):听说过,但没有时间
  • n2(Level 1):阅读技术/编程/软件工程博客,并定期收听播客
  • n(Level 2):维护一个链接博客,其中包含他/她收集的一些有用的文章和工具
  • log(n)(Level 3):维护一个博客,在其中分享有关编程的个人见解和想法
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值