程序员等级划分

一 缘由

最近因为找工作的原因,开始规划对自己的下一步发展和职业规划进行了深入的思考.总结自己的职业发展轨迹,想对自己是一步步成长的有个了解,所以就开始思考对目前很常见的对技术人员的初级,中级和高级的划分标准的问题.根据互联网上一些技术大神和职场专家的观点,再结合自己的工作经验.我总结了一些自己对这个问题的看法. 总的来说的话, 我认为可以使用下面这些判断标准:

1)初级技术人员: 功能实现.

2)中级技术人员: 模块级别的设计优化,以及性能优化.

3)高级技术人员: 系统级别的问题的排查, 性能调优, 一定的技术选型能力, 知识与技术的广度和深度, 以及一定的团队管理经验和能力.

4)架构师: 系统架构选型,搭建和优化,以及系统架构的重构.

当然,这样分类的边界并不是特别清楚或固定,但是大体上可以根据这几个标准来判断.

二 初级

对于初级程序员,他们的能力相对弱,决定了他们的关注点是: 业务功能的实现.他们所依赖的技术基础的级别往往是语言的语法规则等.他们平时的迫切任务也主要是拼命地完成上级分配给自己的任务.由于技术基础薄弱,他们通常为了完成任务而疲于奔命.自己手上的事情都来不及完成,所以导致他们没有时间停下了思考或者没有意识去思考.

下面这些问题是大多数初级程序员经常遇到的困惑:

1) apche与tomcat不都是网站服务器吗?为什么公司会同时使用这两个东西啊?(想当年,我刚毕业的时候也是搞不懂这两个东西的区别~~, 往事不堪回首啊, 哈哈……)

2)jsp中直接写java代码不是更加简单直观吗?为什么好像别人都在使用jstl和模板引擎(freemaker,velocity)这些东西啊?

3)不重视使用配置文件,甚至很多参数直接在代码里面写死了.

4)很多技术在宣传的时候往往又吹嘘自己的功能强大,丰富.实际情况是,除了核心功能会经常被使用之外,其实其他的功能都比较鸡肋.或者支持一些插件或模块性的扩展,也敢宣称自己无所不能,其实这类工作对企业和团队要求的投入还是比较大的.在学习技术的时候,这种情况也会让很多初级程序员很困惑.

总结来说的话,初级程序员对技术的认识仅仅停留在功能层面,他们没有足够的视野高度和广度,所以往往看不到这样的现实: 企业是在拼命地追求效率!

在此,有点感触也有些许悲哀: 一个人往往认为自己所看到的就是全部,却没有意识到自己的眼界是存在局限性.

在这个世界,不知道有多少人就活在自己的视野范围内啊! 他们忙碌,自豪甚至小有成就. 但是他们也就那样了,仅此而已.

三 中级

初级人员,随着项目经历的增加,看到了企业和软件系统是怎样的一种存在.尤其是经历过或者意识到重构的初级程序员就进入了中级程序员的行列.我至今无法忘记当我第一次听到了”重构”这个词的时候的震惊程度.入行这几年给我留下类似的这种巨大观念冲击的词语不多,大概有这几个:重现, 重构, 设计模式, 使用场景, 最佳实践, 系统架构等. 重现是软件开发过程中非常基础和重要的策略和原则;重构则是软件产品随着需求的变动和技术的发展经常会面临的问题;设计模式和架构则分别代表模块级别和系统级别的设计的同义词.

理解重构的含义之后,我瞬间明白了我多年的困惑,也精准的描述了我多年的状态.我为什么总是把已开发的软件该来该去?当初写第一行代码的时候怎么就没有想好这些呢?这些都是问题.虽然并不是每个程序员都能明确的意识到这种问题的存在,但是每个人都在被这个问题影响.刚刚认识到重构的时候,一半是豁然开朗,因为知道自己面临什么问题; 另一半则是焦急和渴望,因为迫切的想要找到解决办法.我有一段时间甚至甚至走到了另一个极端——过度设计. 从没有设计意思走到了追求完美的程序,神化设计的方向.

这种状态其实并没有持续多久,因为问题清楚了,答案其实也清楚了. 因为设计模式就天然的和重构联系在一起,这两者的关系是如此的紧密,以至于任何一者出现的地方,你总能看见另一个家伙的影子.设计模式

从这段描述,就能说明中级程序员的典型特点,就是具有一定的设计意识和思想.催生这种思想产生的动力就是:重构.

当然随着技术功底的加强,对于实现功能的任务已经越来越没有挑战性了.中级程序员会逐渐把剩余的生产力投入到软件性能这个层面.随着技术积累和项目积累,对常用技术的认识也就更全面和立体了,而不是像初级程序员那样只看到功能.

四 高级

老实说,我对自己当前的阶段的定位是: 我目前还处在高级程序员的入门口.刚刚跨入这个级别不久.在很多评判的标准上都还达不到或者等待检验.因为还没有完全经历过,所以就不太好谈这个问题.希望自己能够尽快到达这个级别的各个标准. 下面的话只能就自己的理解(而不是切身经历)来谈一谈.

作为高级开发人员的话,工作内容的复杂程度就不再是模块级别的了,而应该是系统级别的问题.随着技术和社会的发展,尤其是互联网的发展,目前的单机软件的地位越来越低.软件行业,可能其他技术行业也是这样,通常是那些最热门的领域,所面对的技术问题最多,因为业务压力和同行竞争对技术的驱动力是非常巨大的,一句露骨的话就是:钱的力量. 就像IT行业,目前最火热的无疑是互联网行业,所以互联网行业所面对的问题就非常的多,高安全,高性能,高可靠等,虽然与其他的领域相比,像人工智能这些领域,互联网的核心技术不一定最复杂,但是其发展速度和面临的挑战确实的非常大的.分布式技术就是应对互联网的这些挑战的最主要的解决方案.分布式技术这几年的发展离不开互联网行业的蓬勃发展.可以说互联网和大数据对分布式的发展起到了很大的推动作用.由于分布式技术的发展和成熟,也导致分布式技术和一些思想被其他IT领域采用,这又对技术人员提出了新的挑战.这样技术和业务就形成了良性的循环.

鉴于当前的行业的技术形态的特点,很多软件能力,就是以系统形式存在.所以,技术人员所面对的很多复杂的问题,都是系统级的问题.这就是为什么说高级程序员的处理的问题的级别是系统级别的.

除了工作或问题的复杂度,高级技术人员还应该在系统级别的性能调优,技术选型能力,知识的广度与深度以及团队管理等方面有扎实的功力. 这也是我目前需要努力的方向!

五 架构师

这个留待以后补充吧.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>