软件开发这个行业往往是供不应求,这跟开发人员的素质有很大的关系,在这个浮躁的圈子里,能在一家公司呆上三年以上的程序员,通常就会把持领导岗 位,结果做出来的东西大多非常糟糕。这也说明了,程序员的能力不能完全靠工作年限来划分。怎么样才可以成为一名合格的高级程序员?今天为大家解析程序员的 几个成长阶段。
初级程序员
初级开发人员是这样的,刚从学校出来,就像坐井观天中的青蛙一样,自认为什么都会。突然间,你发现自己面对的问题,靠学校中的那点知识是远远不够的。问题要更复杂,更凌乱,没有理论上说的那么纯粹。你正处于放弃还是坚持的分叉路口,你不知道该怎么办。
对策就是专心致志,专心致志地竭尽全力学习。初级开发人员需要大量的指导、监督和辅导,否则他们将会在这一阶段呆上很长一段时间。因此,实际上你也可以将这一阶段视为策略和日常技术的吸收消化时期。
初级开发人员关注代码,而不注重开发,他们不明白两者之间的区别。如果一个程序员表示“要是代码不需要面向所有用户,那他们会更喜欢编码”,那么我可以判断这是一个初级开发人员。
一个优秀的初级开发人员给定一个已知任务之后,就能够迅速良好地执行。
中级开发人员逐渐能够意识到失败(通常是他们自己的失败)模式,并认识到比起实际构建匆匆忙忙去做重点任务其实所需要的时间和精力更多,并且也不会因为有人说要改一改而一下子垂头丧气。他们也经历过自以为写出了引以为豪的内容,实际上证明是垃圾的悲惨遭遇。
中级程序员
中级开发人员寻寻觅觅于用正确的方法去构建,去解决问题,他们会通过实验、文献和与其他程序员的讨论去发现这些正确的方法。这实际上已经是学习软件架构的水准,而不再是构建代码(我们在学校里学的就是这个)水平。
没有受到监督的中级开发人员构建的系统之所以失败的原因和初级开发人员的失败原因截然不同。初级开发人员会构建一堆稍微有点用的算法。而优秀的中级 开发人员会跳出《Design Patterns》和《Domain Driven Design》的禁锢。虽然这些都是学习构建大型OO系统的好书,但是直接应用理论只会导致死板的设计结果,不重要的地方灵活多变,重要的地方却又死板无 法更改。
你可以信任中级开发人员构建的系统,他们的系统毫无疑问比初级开发人员做的要好,但是时间久了,依然会有各种问题出现,成为拦路虎。一个可悲的事实 是,绝大多数高级开发人员,甚至团队领导者其实都还只是——中级开发人员。当然,大多数人都没有这样的自我觉悟,原因是他们根本没有和更高水平的人一起工 作过。
一个优秀的中级开发人员应该懂得使用代码来解决问题只是一种手段而不是目的。然而,他们仍然深爱着纯粹的设计,仍然渴望寻求所谓“正确的方式”来构建软件。
优秀的中级开发人员依然需要少量的监管。毫无疑问,他们能够提升代码设计,并在设计讨论中发挥重要作用。他们是开发团队中的主力。但是,对于他们,进一步的指导和更高层次的监管依然至关重要。
高级程序员
高级开发人员熟悉失败。他们已经经历过编写的代码在低于设计和超越设计的情况下都失败的情况。他们深思熟虑,在面对问题时,能够心智成熟地评估成功与失败。高级开发人员已经跳出了中级开发人员深爱的复杂性,开始沉迷于简单。
高级开发人员悉知自己的长处和短处,力争尽可能地扬长避短。
高级开发人员深知理论联系实际的重要。他们明白,世上没有所谓的构建软件的“正确方式”,建立良好软件的唯一途径是要将理论适应客户、代码库、团队、工具和组织的需求。
高级开发人员理解并权衡领域涉及的一切,同时会思考如何去支持设计模式、库、框架和流程。
高级开发人员不仅仅了解自我,还知晓组织和客户的工作方式和价值观,以及对于组织和客户而言成功相关的重要和不重要的因素。一旦出现问题,高级开发人员会想方设法地去解决。“这不是我的工作”——他们永远,永远也不会说这样的话语。
高级开发人员心里明白,他们的工作应该是提供解决问题的办法,而不是写代码。
不像中级开发人员辛苦耕耘于枯燥的日常工作,高级开发人员会退一步,去思考是什么导致了这些无聊的工作。他们会评估修复根本问题的成本,要么直接解决这些问题,要么研究起来以便于最终彻底解决。
高级开发人员明白,单枪匹马是搞不定项目的。他们的主要作用是帮助团队变得更好,同时争取个人共同进步。
高级开发人员深刻理解,领导一职代表的不是权力,而是授权,不是方向,而是服务。
如果你的团队中一个高级开发人员都没有起到领导作用,那么你的项目是注定要失败的。一队伟大的中级开发人员固然能让你走得很远,但是他们构建的软件 的好日子却是屈指可数的,其最终结果要么是关门大吉,要么是高风险高成本的重写。高级开发人员才是唯一能胜任选择技术和平台的人。
简单粗暴的分类方法
我非常讨厌现在流行的根据工作经验年限来给程序员划分档次的方法。多年的经验的确能让你增加见识,但这都是一些几乎毫无意义的背景信息。
更重要的是,我们的行业需要刚从大学毕业活力四射的年轻人,也需要那些有着15—20年工作经验的老程序员。我们应该从团队和企业的角度来思考人才组成。
推荐阅读:
相关推荐
根据给定的信息,本文将对“程序员九重境界”这一概念进行详细解析,并结合部分文本内容,探讨不同阶段程序员的特点及成长路径。 一、初窥门径:此阶段的程序员通常刚入门,对编程有着浓厚的兴趣,但技能尚显稚嫩。...
这篇文档从入门新手到顶尖专家,详细描绘了程序员在技术成长过程中的十个不同阶段,每个阶段都有其特定的技术要求、思维模式以及挑战。下面,我们将逐一解析这十个层次,并探讨每个层次的核心要点。 第一层:初学者...
以下是对这五个阶段的详细解析: **第一阶段:基础熟练阶段** 在这个阶段,程序员通常会掌握一门编程语言,如C++、Java或Python等,能够熟练地编写基本的代码,理解语言的基本语法和数据类型。这一阶段的重点在于...
在这篇实习报告中,作者分享了他的经历和感悟,从中我们可以提炼出以下几个重要的知识点: 1. **基础知识的重要性**:在实习初期,作者意识到对软件工程、编程语言(如JAVA、JSP、XML)的陌生,让他感到困惑。这...
这些刷题网站通常拥有以下几个核心特点:一是题目分类清晰,便于用户根据自己的学习阶段和兴趣点选择练习;二是解析详尽,不仅提供答案,还深入剖析解题思路,帮助用户理解题目背后的逻辑和原理;三是支持在线编程...
这些刷题网站通常拥有以下几个核心特点:一是题目分类清晰,便于用户根据自己的学习阶段和兴趣点选择练习;二是解析详尽,不仅提供答案,还深入剖析解题思路,帮助用户理解题目背后的逻辑和原理;三是支持在线编程...
要成为一名软件架构师,通常需要经历以下几个阶段的发展: 1. **架构师胚胎(程序员阶段)**:在这个阶段,需要掌握编程基础,如Java、C++、C#,以及设计基础如UML、RUP和XML。此外,还需要了解基本的通信协议和...
【林锐——大学十年】这篇文章讲述了作者林锐作为一个程序员的成长历程,从他的大学生活到个人发展,揭示了他在IT行业的起点和心路历程。文章分为两部分,以下是详细的知识点解析: 1. **早期经历**:林锐在1973年...
在源码中,我们可以预期找到以下几个关键部分: 1. **连接管理**:这部分代码会处理与SMSC建立和维护TCP连接,可能包括连接的创建、心跳维持、断线重连等逻辑。 2. **协议解析**:SMGP协议定义了特定的数据格式和...
诺兰阶段模型是描述信息系统发展过程的一个理论模型,由美国管理学家理查德·诺兰提出,将信息系统的成长过程划分为若干个阶段。 **选项解析:** - A选项“四个”不符合诺兰阶段模型的实际划分。 - B选项“六个”...
源码中的关键部分可能包含以下几个方面: 1. **数据结构**:游戏可能会使用数组或链表来存储作物的状态,如生长阶段、是否缺水等信息。数组可以方便地进行批量操作,而链表则允许动态添加和删除作物。 2. **循环与...
以下是根据文档部分内容详细解析的几个关键知识点: 1. 职位系统:职位系统是公司内部组织结构的基础,它定义了各个职位的角色、责任和权限。在这样的系统中,每个职位都有明确的职责描述,确保工作流程的高效运行...
接下来,我们将详细介绍几个含金量较高的编程比赛及其特点。 ### 一、ACM国际大学生程序设计竞赛(ICPC) **简介:** ACM国际大学生程序设计竞赛(International Collegiate Programming Contest,简称ICPC)是...
根据提供的文档信息,可以总结和提炼出以下几个关键知识点: ### 1. 信息系统项目管理师考试案例分析题解答概述 信息系统项目管理师是一项高级别的认证,旨在评估个人在信息系统项目管理方面的专业技能和知识水平...
“极客为极客,黑客等级,力码”这几个关键词,暗示了这个压缩包的内容不仅限于基础的编程挑战,更涵盖了不同层次和难度的问题,旨在满足不同程度的开发者需求。从初级的“极客”,逐步进阶到能够应对更高级别挑战的...
在这个图书馆管理系统中,C++的主要应用体现在以下几个方面: 1. **数据结构与算法**:图书馆管理系统的核心是管理图书和读者的信息。这需要利用到数据结构,如链表、数组、队列或树等,来存储和检索数据。比如,...
根据给定文件的信息,我们可以提炼出以下几个重要的知识点: ### 一、基础知识 1. **算法的基本操作**: - **逻辑运算**:如与、或、非等逻辑判断。 - **算术运算**:包括加减乘除等数学运算。 - **数据比较**...
针对文中提到的“学无所用”问题,我们可以从以下几个方面入手,提高自身的竞争力: - **紧跟技术趋势:**了解当前和未来市场需求,掌握最新技术动态。例如,React、Vue等前端框架的熟练运用已成为企业招聘时的重要...
语法错误是程序员在编写代码时违反了Python的语法规则,导致编译器无法解析代码。例如,忘记在语句末尾添加冒号、括号不匹配等,都会引发这种错误。解决这类问题通常需要仔细检查代码,确保遵循正确的语法结构。 ...