程序员如何成为独立开发者?
普通显影剂
熟练的开发人员、高级开发工程师和技术团队领导
技术专家、架构师、一线经理
科学家,总(高级)建筑师,R&D系主任
在今天的文章中,我们将讨论普通开发人员如何成为熟练的开发人员。
我们先来定义一个普通开发者应该达到的能力水平,然后介绍他应该提高什么,才能进入下一个阶段。
普通开发者的能力水平
我们来看一个我经常提到的图片——技术成长阶段的图片:
普通开发者处于第一个成长阶段:特殊能力的提升。
特殊能力的提升阶段是初级阶段。要想把事情做好,首先要具备一些基本的能力。比如一门编程语言(Java/C++/ Python/JavaScript等。),一个IDE(Visual Studio/Qt Creator/Android Studio/Eclipse/web storm等)。)和一个技术框架(Netty/Qt/SSH/MyBatis/AngularJS等)。).
这个阶段最重要的是提升自己的特殊能力,让自己快速的得到别人安排给你的事情,展现自己的价值。
在这一阶段,至少要达到以下标准:
能够理解并完成别人分解的叶子任务。
能独立完成一个功能模块的开发。
以前端开发者为例。在这个阶段,您必须能够将UI中的页面原型转换为可以运行和操作的真实网页。比如登录页面,比如产品详情展示页面,要能实现可视化页面和业务逻辑跳转。
以Android应用开发者为例。在这个阶段,你必须能够处理登录和支付等功能。以App的登录功能为例。你要能使用特定的布局和组件实现自适应的登录界面,也要能学会使用微信、微博等第三方账号的SDK实现第三方账号登录。
你可能很难设计一套完整的登录功能(包括密码加密、单点登录、Cookie使用、验证码、密码检索、第三方登录、多终端同步、角色认证、用户数据存储等。),但是当一个熟练的开发人员或者高级开发人员完成设计,分配给你一个小功能的时候,你应该能够理解设计并实现,能够和整个登录系统集成,正常工作。
当你能处理这些事情的时候,你的特殊技术水平至少是这样的:
巧妙地构建所需的开发和测试环境。
熟悉编程语言的基本语法,有语言的知识图谱,熟悉语言本身的基本功能,了解语言的高级功能。
可以调用现有技术框架的API实现特定功能。
可以在实现相同功能的多组API中选择合适的组。
能熟练使用开发环境和各种辅助工具进行调试。
可以解决容易重现、逻辑简单的软件bug。
能独立学习一个新框架的基本API,参考DEMO完成一个功能的基本实现。
我的总结可能不完善或者有bug,请在留言区修正补充。
我想起身边的一个例子,和我们正在讨论的话题不谋而合。
有一次和朋友G聊天,他说他部门做前端开发的程序员X一直在用jQuery实现各种页面,代码冗余,结构凌乱。Vue.js出来后,G想在新版本中使用,于是安排X学习Vue.js,让他参考公司产品的一两个页面的功能和布局,简化设计,用异步数据请求功能做两个页面,看看效果。结果一周后,X告诉G,Vue.js太复杂,理解不了开发文档和代码,无法继续...
如果你处于X这样的状态,说明你还处于普通开发者的阶段,只能在别人的指导和安排下编码和实现具体的细分功能。
想要进阶,首先要达到上面列出的列表中所描述的水平(那是基本要求),然后根据熟练开发者的能力要求有针对性的学习和提升,稳步进入下一阶段。
普通和熟练的关键区别。
与之前的技术成长阶段图相比,熟练开发者处于中间阶段,有自己的技能体系。
为了理解拥有自己的技能体系是什么概念,我们先来看两组概念:
知识,知识体系
技能和技能系统
简单来说,知识是可以引发变化的信息,技能是运用知识解决问题的一系列思想和行动的组合。但这并不容易理解。我们举一个软件开发领域的例子。C++中的虚函数是一个知识点。用虚函数的这种特性定义模块接口,实现模块的动态加载,是一种技巧。
接下来,为了写作方便,我不再区分知识和技能,而是直接把知识等同于技能,甚至用知识这个词来代替技能。阅读时请根据上下文区分。
知识和知识体系、技能和技能体系的关系,就像树和森林的关系,就像瑞士军刀上的刀、剪刀、螺丝刀和瑞士军刀的关系。
比如,我们应该能够理解什么是“系统”。
所谓知识体系,就是可以用来解决特定场景问题的几个相互关联的知识的组合。
好了,现在回头看普通开发者和熟练开发者的区别就容易多了。
普通开发人员因为不断完成任务,不断做项目,接触和使用各种“知识点”,所以有各种离散的知识,但是这些知识很少和那个知识相关。他所拥有的知识是散兵游勇,如下图所示:
当你的知识点没有关联的时候,你很难在遇到问题的时候进行系统的思考,得到解决方案。
而熟练的开发者,则经历了对知识点的梳理和整合过程,围绕一个应用场景,将分散的知识点连接起来,形成知识体系。就像下图一样:
当你有了知识体系,当你遇到与你的知识体系对应的场景相关的问题时,你可以快速的找到相关的知识,系统的分析问题,最终解决问题。
你看,有没有知识体系导致了熟练开发者和普通开发者的一个很重要的区别:熟练开发者可以独立负责一个模块或子系统的设计开发,有分析解决问题的能力和任务分解的能力,可以给普通开发者分配任务。
高级培养方向
好吧,从技术层面来看,普通开发者和熟练开发者的区别在于,普通开发者的知识并不系统,而熟练开发者构建了一个应用场景相关的知识体系。
这样,普通开发者想要进阶,方向就很明确了:构建自己的知识体系。
那么,如何构建知识体系呢?首先参考我的另一篇文章:构建知识图谱让自己更有价值。如果以后有机会,我会重构一篇新的文章,谈谈构建知识体系的话题。