中国有句古话,“男怕入错行,女怕嫁错郎”,可见行业的选择对于一个人来说具有多么深远的意义。如果说有哪些行业既符合普遍高薪收入,又符合长远的发展前景,还要拥有不可替代的重要地位,那么IT互联网可以说是完全匹配。
近些年来越来越多的大学生选择了这个行业,即便是非相关专业的毕业生为了进入这个行业不惜放弃专业转行,那么大家真的了解IT互联网这个行业吗?对于这个行业内的岗位是怎样选择的呢?
首先,我们看一下这个行业各个岗位的薪资分布是什么样的,以年二季度为例:
从上图可以看出,IT互联网行业薪资最高的岗位以技术岗为主。既然如此,我们就来深度剖析一下技术开发相关岗位的发展路线。
从上面两张图可以看得出,如果你懂技术,那么你在这个行业的发展路线可谓是多种多样,不做技术开发,也可以选择销售方、产品方向、培训方向、管理方向,创业等等。
如果你坚持技术开发,那么我想这条路线才最适合你:
初级程序员(工程师)---中/高级/资深程序员(工程师)---系统架构师---初级/高级技术经理----技术(研发)总监---CTO
那么作为一名技术开发人员,从初级到最后的CTO需要具备哪些条件呢?
(内容较多,耐心看完会发现对你的职业规划有很大帮助)
初级程序员
工作内容:
参与需求分析、设计、评审工作;
执行上级主管安排的工作任务,对负责模块进行数据库表设计、接口文档设计与开发、核心功能开发、冒烟测试d等;
对自己负责的工作质量进行把关,主动进行技术与业务知识总结;责项目的日常开发维护工作等;
对线上产品出现的较为重大的故障进行分析、排查并且解决或协助解决问题,使产品恢复正常使用;
完成上级安排的其他工作。
技术要求(以Java为例):
Java基础扎实,熟悉JSP/Servlet、Spring、Springmvc等;
熟悉HTML、CSS、jQuery、AJAX、JavaScript等前端技术;
熟悉SQL语法、Oracle数据库;熟悉SQL语法、Oracle数据库;
此阶段大概要经历3年,主要是打基础的为主,积累自己的开发经验,掌握开发技巧,熟悉开发流程,也同步锻炼自己的综合素质,比如:总结汇报、演讲、资源协调等等。
在这个阶段,如果你发现自己不适合做开发,可以转向技术之外的岗位:测试、产品、售前等。
中/高级/资深程序员
工作内容:
核心技术方案设计、封装组件、核心功能/逻辑代码开发、技术评审等工作;
负责后端的模块设计和开发,并负责完成核心代码;
完成模块的设计、编码、测试工作,编写各类技术文档等;
支持解决各项目中提出的定制需求,协调人员及进度控制,把控产品的研发质量;
配合前端开发人员进行程序调试测试,最好也能掌握基本的前端开发技巧;
能够按照负责人的要求进行系统程序设计和数据库设计;
指导中初级软件工程师完成工作任务。
技术要求(以Java为例):
掌握Java语言,熟练使用servlet、JDBC、多线程、网络、IO等技术,熟悉常见算法及数据结构,有良好的编码习惯;
熟练使用Spring,SpringCloud等开源主流框架,了解框架设计思想及其实现原理;
熟悉Linux/Unix系统,熟悉Oracle、SQLServer、MySQL等关系型数据库,SQL功底扎实;
熟悉Reids、MongoDB等NoSQL数据库;
具备良好的识别和设计通用框架及模块的能力。
到了这个阶段,你不仅可以完成任务,开始注重代码的质量,能够写出工业级的代码。
你的经验可胜任模块级的系统设计,承担完成较为复杂的技术,能有效的自我管理,有帮助别人快速解决问题(troubleshooting)的能力。
此阶段你需要经历到7、8年左右的体验,中间要经历一段深刻自我历练的过程。如果在此期间你不再喜欢开发,可尝试转为其它角色,如产品经理,售前售后支持等岗位。
当你做到中高级程序员,基本上组织也会让你当个小组长/主管之类的岗位,让你管理几个小组员,你的思维就要从个人思维转向团队思维了,要多思考团队何去何从。
系统架构师
工作内容:
需求分析管理。技术支持,风险预判,工期等解决方案;
架构设计。列出功能树,分层管理。达成高扩展,高可用,高性能,高安全,易运维,易部署,易接入等能力;
功能设计与实现。对架构设计的底层代码级别实现;
负责核心系统的架构设计,重构、优化现有的技术架构,及关键架构设计的落地实现;
重点难点技术攻坚,主导核心编码和上线;
项目售前支持,在技术方面配合客户立项及标书规范的制定、规划设计方案、商务报价、合同相关条款等事宜;
不断优化架构设计的全局性和前瞻性,推动周边系统和相关团队完成系统架构落地,解决业务发展遇到的架构问题,持续提升系统平台能力。
技术要求(以Java为例):
本科或以上学历,6年以上工作经验,3年以上系统架构设计经验;
掌握微服务框架、分布式架构、缓存、日志、消息等大规模集群技术;
熟悉虚拟化以及Docker、kubernetes等容器技术;
熟悉掌握Nginx/ElasticSearch/Redis/RabbitMQ等中间件;
主导并参与过大型项目的系统设计与研发;
深刻理解大数据处理(流计算、分布式计算、分布式文件系统、分布式存储等相关技术和实现方法,有架构和设计实践经验;
熟悉大数据解决方案包括Hadoop、Spark、Storm、机器学习、深度学习等大数据解决方案;
精通Java、scala、python中的一种或多种语言;
成为架构师至少要6~8年,经历大大小小的项目。架构下一步可以继续往技术方向深度发展,也可以往技术管理岗发展。
技术经理
技术经理坦率的讲,就是从高级程序员开始分化而来,一部分同学选择继续专研技术,往纵向发展,一部分同学打算觉得未来管理这条路很好,主动选择开始转型管理这个方向,于是才有里技术主管或者经理经理这个称谓。
还是以阿里为参考,阿里的M代表管理方向,你可以通过下图可以清晰的看见P系列和T系列对应的级:
这个时候你就非常清晰了,技术经理本身就是从资深工程师发展而来,很多公司的技术经理根本没有从一线研发做起,大部分就是一个项目经理,带带项目为主,根本无法胜任刚才我讲到的技术经理的工作。
技术总监
如果一个研发团队超过20人,有多条产品线或业务量很大,这时已经有多个技术经理在负责每个业务,这时需要一位技术总监进行整体的业务管理。这个岗位不仅要求有过硬的技术功底,同时也需要熟练团队管理能力。
CTO
首席技术官,英文名ChiefTechnologyOfficer。是与CEO、COO、CFO同级的领导者,是技术和业务融合的领袖。
在国内,CTO大部分则偏重于研发管理,相当于技术总监的Plus版。大部分CTO的是领导技术团队开发各类产品,解决技术问题,管理不同的项目,排期交付。还有一部分的职能类似于架构师或总工程师,作为技术侧的权威,为下一步的发展方向做研究探讨,为CEO提供建设型决定参考。
以上就是对程序员这一岗位的深度刨析,并着重介绍的了一下技术发展路线,如果是你,你会选择纯技术路线,还是其他路线呢?
部分内容来自“bug随身行,less亦可期”原文网址:
bugless.site/articles//08/03/2.html