做为程序员,咱们应该如何去规划好本身的职业道路?程序员
做为程序员群体的一员,我发现身边不少同窗都很是的踏实,虽然这是一个很好的素质,但咱们除了踏实作事之外,也须要多抬头看看路。才能让本身在职业道路上走的更稳更长久。面试
身边不少同窗都知道去追求升职加薪,但却不多去考虑一个完整的职业规划,不多去考虑本身的职业目标。对于之后本身是去作 技术管理?仍是作 技术架构?又或者是干脆转行?不多去思考。算法
所以,今天我就来跟你们简单聊一聊程序员的职业发展路径。数据库
在聊程序员的发展以前,咱们先看一下常见的互联网公司技术团队里,程序员这职业的等级是怎么划分的?编程
通常分为如下几个级别,再往上可能就是技术专家或者首席技术官了。数组
初级工程师安全
中级工程师微信
高级工程师数据结构
资深工程师/架构师架构
下面继续看一下每一个级别的素质要求是什么?
初级工程师
初级工程师主要是指刚毕业的,职场上的技术新人。一般这类人会有必定的专业理论知识,因此也可以比较快的学习公司的经常使用框架、工具和开发技术。可以在上级/导师的指导下,理解相关的业务知识。
可以按照研发需求完成部分模块和功能的开发,可以在别人的指导下解决研发中遇到的问题。
中级工程师
中级工程师是大多数三到五年程序员所处的水平。中级工程师必需要可以独立承担开发任务,而且可以独立负责某个模块或小系统。
可以根据本身的历史经验和学习能力,独立解决平常工做中遇到的技术问题。
高级工程师
高级工程师,通常是混迹多年,且有必定技术积累的程序员,有一套本身的开发方法。对于高级工程师要求能快速的理解业务、够独立负责一个中大型系统,且在工做中需具有指导他人的能力,属于团队骨干,在团队中有必定的技术影响力。
资深工程师/架构师
程序员到了资深的级别以后,其实在职业上能够分为两个发展方向。
一个是继续往技术深度上钻研,在某个技术领域内有必定的深度和影响力,咱们称为资深工程师。
还有另外一个方向就是往技术的广度上发展,除自身技术线之外,对周边相关技术也有必定的研究和理解,可以站在更高的维度上去俯视项目里的技术结构,业务理解能力也很强,根据不一样业务,设计出不一样的技术方案,这一类咱们称为架构师。
上面虽然从企业的用人视角来列举了不一样技术层级应具有的要求,但仍是不够具体,不太方便量化和评估,所以,咱们能够根据上面的要求,总结出一套对程序员的评估方法,主要分为三个方面:
通用素质:
用来评估程序员的通用素质水平。好比 系统思惟能力、沟通表达能力、经验开放意识、严谨性、组织能力、影响力等。
知识技能:
用来评估程序员的知识和技术水平。好比 编程语言、安全、框架应用、系统设计等能力。
业务能力:
这个主要用来评估程序员的业务理解能力、业务建模能力等。
在知道了程序员各不一样层级的能力模型后,咱们再来看一下有哪些基础的技术能力是不一样层级都应该具有的,是程序员技术水平的基石:
数据结构
数据结构是基础中的基础。有些人以为数据结构的知识貌似在实际工做中用到不多,反而在面试中问的多,因此就认为这个东西不实用。却不知数据结构是咱们编码的根本。只不过咱们平时用的框架工具多了,不少都被封装好了,你们直接调用便可,致使你们对这一起渐渐忽略了。可是只有真正理解了数据结构,咱们才能写出有质量的代码。
经常使用的数据结构有:数组、链表、堆栈、队列、树、二叉树、图等。
经常使用算法
算法是每个程序员都绕不开的话题。但算法跟数据结构同样也是编程的灵魂,是真正区别出不一样程序员编程水平的地方,每一个技术人都应该学好。
数据存储
存储是每一个项目的必须环节。以数据库举例,有关系型的数据库,还有NoSQL数据库等,另外还有文件存储系统。这些在作项目中均可能遇到,因此须要熟练掌握其原理和用法。
编程规范
编程规范这个天然没必要多说,也是最容易看出程序员水平的地方。虽然不少不规范的代码也能运行,可是做为一个有追求的程序员,理应按照必定的编程规范去管理好本身的代码。优秀的程序员始终要有个理念记在心中:代码的第一做用是给人读的,第二做用才是给机器使用。
开发平台
这里指的是程序员经常使用的编程语言、以及语言所在的生态和框架。以Java程序员举例,必须得深刻了解Java的语言特性,以及Java这个语言平台的生态体系,同时熟练掌握Java的经常使用框架和主流方案,每个语言都有这样的平台与生态。
安全
粗略可分为代码安全和运维安全。
代码安全指的是程序员在开发项目的时候,编写出来的代码应具有必定的安全性,例如 防止XSS跨站攻击、防止SQL注入等等。这些除了写代码的时候要注意,后期也能够经过单元测试、代码评审来发现风险。
运维安全是项目在生产环境下,部署的环境安全、资源隔离、运维操做规范、漏洞扫描等方面的安全工做。
技术的成长是靠一步一步走出来的,不可能一口吃个胖子。既然上面聊了程序员在这条职业道路上应该具有的一些技能和素质。那这里就再补充一下如何去提升这些技能,如何去一步一步走出本身的技术体系。
这个部分也是学习了「 程序员进阶攻略 」后的深入体会。这里我就借鉴《极客时间》中「 程序员进阶攻略 」专栏做者胡峰老师提出的“点-线-面”的成长原则,结合本身的思路跟你们聊一聊:
点
咱们能够把学到的任何一个知识/技能都当作一个「 点 」。好比 咱们刚接触计算机编程的时候学习了 数据结构、后来又学习了 Java基础,而后在工做中又学习了 框架Spring,而后根据项目须要又学习了 Linux、学习了 Hadoop、学习了 JavaScript,等等等等。
咱们在初级阶段的时候,是在不断的学习各类知识技能,这些就像是天上的星星同样,一个一个的零散的知识点,它是不成体系的,咱们须要用到什么就去学习什么。这些不成体系的知识点帮助咱们完成了工做,可是它们又很容易被忘记,且通常都不够深刻。
线
随着咱们学到的「 点 」愈来愈多以后,就会发现里面有些「 点 」是有关联的,甚至是举一反三的。那么这些「 点 」在咱们的脑海中就能够慢慢的造成「 线 」被串起来。它是一个随着累积以后,天然而然的过程,固然也须要咱们不断的去总结知识。
而有一部分知识点可能随着技术的变迁,没有合适的「 线 」去串联,也就慢慢的被咱们所放弃。
「 线 」是由「 点 」汇聚而成。所以要想知识可以造成「 线 」,咱们除了不断学习之外,还须要不断的找出知识技能的共性和规律。
面
「 面 」又是由「 线 」交织而成。这个时候咱们对技能的认知就从一维上升到了二维。这个「 面 」就像一张技能地图同样,全部的知识技能都能在这张地图里面找到位置和关系。咱们再学习新的知识的时候,也只不过是往这张地图里面添加一些锚点,每次添加,都会让这个知识更为牢固和深入。这就是咱们追求的每一个人本身的技术体系图了。
以上,就是对从程序员到架构师成长之路的一些想法,欢迎你们留言交流,或点击文章右下角的“好看”。
本文原创发布于微信公众号「 不止思考 」,欢迎关注,交流 互联网认知、工做成长、大数据、架构、Web等技术。