您现在的位置是: 主页 > 个人博客日记 > 程序人生 > 程序人生
5千和2万,普通程序员和熟练开发者的差别
2019-10-19 14:55
【程序人生】
人已围观
简介: 在开发者山行图:程序员层级划分一文中,我们根据职场发展通路和能力水平,把程序员分成了如下四个等级: 普通开发者 熟练开发者、高级开发工程师、技术组长 技术专家、架构师、一线经理 科学家、首席(资深)架构师、部门研发总监 今天这篇文章,我们来讨论普通开发者如何进阶为熟练开发者。 我们会先定义普通开发者应该达到的能力水平,然后再介绍他应该在哪方面...
在“开发者山行图:程序员层级划分”一文中,我们根据职场发展通路和能力水平,把程序员分成了如下四个等级:
-
普通开发者
-
熟练开发者、高级开发工程师、技术组长
-
技术专家、架构师、一线经理
-
科学家、首席(资深)架构师、部门研发总监
今天这篇文章,我们来讨论普通开发者如何进阶为熟练开发者。
我们会先定义普通开发者应该达到的能力水平,然后再介绍他应该在哪方面提升才可能进到下一个阶段。
普通开发者的能力水平
先看我经常提到的一张图——技术成长阶段图:
技术成长阶段图
普通开发者处在第一个成长阶段:专项能力提升。
专项能力提升阶段是初级阶段,你为了搞定事情,必须先具备某些基础能力,比如某种编程语言(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 这样的状态,就说明你还停留在普通开发者阶段,只能在他人指导和安排下编码实现特定的细分功能。
要想进阶,就要先在专项技术能力上达到我们前面所列清单描述的水平(那是基础要求),然后再对照熟练开发者的能力要求,有针对性的去学习提高,稳步进入下个阶段。
普通和熟练的关键区别
对照前面的技术成长阶段图,熟练开发者处在中间阶段,拥有自己的技能体系。
为了搞明白拥有自己的技能体系是什么概念,我们先来看两组概念:
-
知识、知识体系
-
技能、技能体系
简单说,知识是能引发改变的信息,技能是运用知识解决问题的一系列思维和动作的组合。但这样讲不大容易明白,我们举个软件开发领域的例子。 C++ 中的虚函数是一个知识点,用虚函数这个特性定义模块接口,实现模块的动态加载,就是技能。
接下来为了行文方便,我不再区分知识和技能,直接把知识等同于技能,甚至用知识一词代替技能。请在阅读时根据上下文加以区分。
知识和知识体系的关系,技能和技能体系的关系,就像树木和森林的关系,就像瑞士军刀上小刀、小剪子、小螺丝刀和瑞士军刀的关系。
这样打个比方,应该可以体会到“体系”是什么了。
所谓知识体系,就是若干相互联系的、可以用来解决特定场景问题的知识的组合。
Ok,现在回头来看普通开发者和熟练开发者的区别,就简单多了。
普通开发者因为不断完成任务,不断做项目,接触、使用了各种各样的“知识点”,于是拥有了各种离散的知识,但这个知识和那个知识很少关联,他拥有的知识,是散兵游勇,如下图所示:
知识点
当你的知识点各不关联时,你在遇到问题时,就很难进行系统思考,就很难获得解决办法。
而熟练开发者,则(被动或主动)经历了知识点的梳理、整合过程,把零散的知识点围绕着某个应用场景联系起来,形成了知识体系。就像下图:
知识体系
当你有了知识体系之后,遇到和你知识体系对应的场景相关的问题,就可以快速找到相关的知识,系统的分析问题,最终解决问题。
你看,是否拥有知识体系,导致了熟练开发者和普通开发者的一个非常重要的区别:熟练开发者能够独立负责一个模块或子系统的设计和开发工作,拥有分析问题、解决问题的能力和任务分解的能力,可以分配任务给普通开发者。
进阶修炼方向
好啦,从技术水平的角度讲,普通开发者和熟练开发者的区别就在于:普通开发者的知识不成体系,而熟练开发者构建了与某个应用场景相关的知识体系。
这样看来,普通开发者要想进阶,方向就非常明确了:构建自己的知识体系。
很赞哦! ( )
下一篇:编程高手的秘密:知识矩阵
推荐内容
随机图文
-
Java多线程数据共享神器
ThreadLocal内部结构和作用 从ThreadLocal源码中可以看到其提供了3个方法,分别是get/set/remove。维护了一个ThreadLocalMap的数据结构。在多线程环境下能正确地获取共享的数据变量或值。 ThreadLocal应用原理 -
JavaSpring框架和体系零基础
很多人或许刚接触Java Spring或许接触Java Spring有些时间了,但你们真的知道Spring框架是什么吗? Spring 是另一个主流的 Java Web 开发框架,该框架是一个轻量级的应用框架,具有很高的凝聚力和吸引力 -
一文带你走进 Java 8 Lambd
Java 8 新特性 - 引入 Lambda 表达式 Java 8 最大的特性就是引入 Lambda 表达式,可以用简洁的代码完成一个功能,即函数式编程,它的核心思想是将面向对象中的传递数据变成传递行为,使用不可变值与 -
为什么不建议使用Date, 而
Java 8:新的时间和日期API 在Java 8之前,所有关于时间和日期的API都存在各种使用方面的缺陷,因此建议使用新的时间和日期API,分别从旧的时间和日期的API的缺点以及解决方法、Java 8 新的时间和日 -
写爬虫, 用什么编程语言好
用Python写爬虫就很low?你赞同嘛?为何不建议使用python写爬虫呢,是有什么因素吗,难道用python写爬虫不好吗? 之前换了份工作,不再是单纯的Web开发了,要学习的东西真的挺多的。入职的第1天,就让 -
程序员必知必会数据库乐
我们平时编写程序的时候,有很多情况下需要考虑线程安全问题,一个全局的变量如果有可能会被多个同时执行的线程去修改,那么对于这个变量的修改就需要有一种机制去保证值的正确性和一致 -
35岁只是普通程序员, 还有
还有救吗? 看这个标题,就感觉是一篇焦虑文。 好了,本草核儿今天的确是来贩卖一些焦虑的,但是,放心,按照我的尿性,正文的最后部分都是正能量的。 35岁只是普通程序员,还有救吗? 我 -
学Java为什么要学Spring, 原
就现在的趋势来说,Spring无疑是一家独大的,它有太多优点 目前在Java EE开发中,Spring已经成为和Java核心库一样的基础设施,所以说如果想成为一个合格的Java程序员,Spring肯定绕不开。另一方面,
文章评论
点击排行

标签云
猜你喜欢
站点信息
- 建站时间 :2019-6-18
- 共有会员 : 2名
- 共有文章 :3138篇
- 今日更新 :11篇
-
百度收录:
- 文章阅读 :433604人次
- 公众号 :扫描二维码,关注我们
