我们根据职场发展通路和能力水平,把程序员分成了如下四个等级:
普通开发者
熟练开发者、高级开发工程师、技术组长
技术专家、架构师、一线经理
科学家、首席(资深)架构师、部门研发总监
今天这篇文章,我们来讨论 普通开发者 如何进阶为 熟练开发者。
我们会先定义 普通开发者 应该达到的能力水平,然后再介绍他应该在 哪方面 提升才可能进到 下一个阶段。
1 普通开发者的能力水平
先看我经常提到的一张图——技术成长阶段图:
普通开发者处在第一个成长阶段:专项能力 提升。
专项能力提升阶段是 初级阶段。为了搞定事情,你必须先具备某些基础能力,比如:
某种编程语言(Java / C++ / Python / JavaScript 等)
某个IDE (Visual Studio / Qt Creator / Android Studio / Eclipse / WebStorm 等)
某种技术框架(Netty / Qt / SSH / MyBatis / AngularJS 等)
这个阶段,最重要的就是提升专项能力,让自己能够迅速搞定一些别人安排给你的事情,体现出你的价值。
在这个阶段,最起码达到下列水准:
能理解并完成别人分解好的 叶子任务
能自己完成一个 功能模块 的开发
以 前端开发者 为例,在这个阶段,你必须能将从 UI 过来的某个页面原型转换为可运行、可操作的真实 Web 页面。比如登录页面、比如商品详情展示页面,要能做到实现可视化页面和业务逻辑跳转。
以 Android App 开发者 为例,在这个阶段,你必须能搞定类似登录、支付等这类功能。以 App 的登录功能为例,你要能使用特定的布局和组件实现自适应的登录界面,还要能学习使用类似微信、微博等第三方账户的 SDK ,实现第三方账户登录。
你可能很难自己设计一套完整的登录功能(包含口令加密、单点登录、Cookie 使用、验证码、密码找回、第三方登录、多终端同步、角色鉴权、用户数据存储等),但是 当熟练开发者或者高级开发者完成了设计,把某个小功能分配给你的时候,你要能够理解这个设计,并将这个设计实现出来,和整个登录系统整合在一起,能够正常运转。
当你能够搞定这些事情的时候,你的专项技术水平起码是这样的:
能熟练 搭建 需要的 开发和测试环境
熟悉所用编程语言的 基础语法,有这门语言的 知识地图
熟悉该语言本身的各种 基础功能,了解这门语言的 高级功能
能调用已有技术框架的 API 来实现特定功能
能在实现同一功能的多组 API 之间选择 合适的那一组
能熟练使用 开发环境 和各种 辅助工具 进行 调试
可以解决易复现的、逻辑简单的软件 Bug
能自主学习某个新框架的基础 API ,参考 DEMO 完成 某个功能的基本实现
我的总结可能不完善或存在 Bug ,请大家在留言区指正、补充。
我想到一个身边的例子,刚好和我们讨论的这个话题契合。
有一次和朋友 G 聊天,他说他部门有位做前端开发的程序员 X ,一直在用 jQuery 实现各种页面,代码冗余,结构凌乱。Vue.js 出来后,G 想在新版本中使用,就安排 X 学习 Vue.js ,让他参考公司产品某两个页面的功能和布局,简化设计,做两个带异步数据请求功能的页面出来看看效果, 结果一个星期过后,X 告诉 G ,Vue.js 太复杂,开发文档看不明白,代码也搞不懂,进行不下去……
如果你像 X 这样的状态,就说明你还停留在 普通开发者 阶段,只能在他人 指导和安排 下,编码实现特定的细分功能。
要想进阶,就要先在专项技术能力上,达到我们前面所列清单描述的水平(那是基础要求),然后再对照熟练开发者的能力要求,有针对性的去学习提高,稳步进入下个阶段。
2 普通和熟练的关键区别
对照前面的技术成长阶段图,熟练开发者 处在中间阶段,拥有自己的技能体系。
为了搞明白拥有自己的技能体系是什么概念,我们先来看两组概念:
知识、知识体系
技能、技能体系
简单说,知识是能引发改变的信息,技能是运用知识解决问题的一系列思维和动作的组合。但这样讲不大容易明白,我们举个软件开发领域的例子。 C++ 中的虚函数是一个知识点,用虚函数这个特性定义模块接口,实现模块的动态加载,就是技能。
接下来为了行文方便,我不再区分知识和技能,直接把知识等同于技能,甚至用知识一词代替技能。请在阅读时根据上下文加以区分。
知识 和 知识体系 的关系,技能 和 技能体系 的关系,就像 树木 和 森林 的关系,就像 瑞士军刀上面 小刀、小剪子、小螺丝刀 和 瑞士军刀 的关系。
这样打个比方,应该可以体会到“体系”是什么了。
所谓知识体系,就是若干相互联系的、可以用来解决特定场景问题的知识的组合。
Ok,现在回头来看普通开发者和熟练开发者的区别,就简单多了。
普通开发者 因为不断完成任务,不断做项目,接触、使用了各种各样的“知识点”,于是拥有了各种 离散的知识,但这个知识和那个知识很少关联,他拥有的知识,是散兵游勇,如下图所示:
当你的知识点各 不关联 时,你在遇到问题时,就很难进行 系统思考,就很难获得解决办法。
而 熟练开发者,则(被动或主动)经历了 知识点的梳理、整合 过程,把零散的知识点围绕着某个 应用场景 联系起来,形成了知识体系。就像下图:
当你有了知识体系之后,遇到和你知识体系对应的 场景相关 的问题,就可以快速找到相关的知识,系统的分析问题,最终解决问题。
你看,是否拥有知识体系,导致了熟练开发者和普通开发者的一个非常重要的区别:熟练开发者,能够独立负责一个模块或子系统的设计和开发工作,拥有分析问题、解决问题的能力和任务分解的能力,可以分配任务给普通开发者。
3 进阶修炼方向
好啦,从技术水平的角度讲,普通开发者和熟练开发者的区别就在于:
普通开发者的知识不成体系,而熟练开发者构建了与某个应用场景相关的知识体系。
这样看来,普通开发者要想进阶,方向就非常明确了:构建自己的知识体系。
共同学习,写下你的评论
评论加载中...
作者其他优质文章