程序员从初级到高级的蜕变
软件开发是一个奇怪的行业,市场远远供不应求。这是一个已经存在多年的问题,而且随着时间的流逝,愈演愈烈。
我们严重缺乏能够满足需求的人才。这个行业相当年轻。大多数软件项目是失败的。几乎所有的项目都会超出预算。我们解决问题的最佳指导方针可以归结为——“用一些通用方法去解决问题,当然这些方法常常不管用,于是,唯一能做的就是不断地尝试,逐个看看是否奏效”。
现在我们把淫浸代码时间超过3年的开发人员称为“高级开发人员”。这些人通常把持领导岗位,最终做出来的东西,你懂的——非常糟糕。
软件开发人员的成长阶段
作为程序员,我们生活在复杂的系统和变量世界中。可以这么说,即使是执行一个简单的,定义明确的,重点突出的任务,都令人难以置信的难,尤其是如果你对你手头的工具,或者是你正在工作的代码库不是那么有经验的话。
一、 初级程序员
初级开发人员是这样的,刚从学校出来,就像坐井观天中的青蛙一样,自认为什么都会。突然间,你发现自己面对的问题,靠学校中的那点知识是远远不够的。问题要更复杂,更凌乱,没有理论上说的那么纯粹。你正处于放弃还是坚持的分叉路口,你不知道该怎么办。
对策就是专心致志,专心致志地竭尽全力学习。初级开发人员需要大量的指导、监督和辅导,否则他们将会在这一阶段呆上很长一段时间。因此,实际上你也可以将这一阶段视为策略和日常技术的吸收消化时期。
初级开发人员关注代码,而不注重开发,他们不明白两者之间的区别。如果一个程序员表示“要是代码不需要面向所有用户,那他们会更喜欢编码”,那么我可以判断这是一个初级开发人员。
一个优秀的初级开发人员给定一个已知任务之后,就能够迅速良好地执行。
中级开发人员逐渐能够意识到失败(通常是他们自己的失败)模式,并认识到比起实际构建匆匆忙忙去做重点任务其实所需要的时间和精力更多,并且也不会因为有人说要改一改而一下子垂头丧气。他们也经历过自以为写出了引以为豪的内容,实际上证明是垃圾的悲惨遭遇。
二、 中级程序员
中级开发人员寻寻觅觅于用正确的方法去构建,去解决问题,他们会通过实验、文献和与其他程序员的讨论去发现这些正确的方法。这实际上已经是学习软件架构的水准,而不再是构建代码(我们在学校里学的就是这个)水平。
没有受到监督的中级开发人员构建的系统之所以失败的原因和初级开发人员的失败原因截然不同。初级开发人员会构建一堆稍微有点用的算法。而优秀的中级开发人员会跳出《Design Patterns》和《Domain Driven Design》的禁锢。虽然这些都是学习构建大型OO系统的好书,但是直接应用理论只会导致死板的设计结果,不重要的地方灵活多变,重要的地方却又死板无法更改。
你可以信任中级开发人员构建的系统,他们的系统毫无疑问比初级开发人员做的要好,但是时间久了,依然会有各种问题出现,成为拦路虎。一个可悲的事实是,绝大多数高级开发人员,甚至团队领导者其实都还只是——中级开发人员。当然,大多数人都没有这样的自我觉悟,原因是他们根本没有和更高水平的人一起工作过。
一个优秀的中级开发人员应该懂得使用代码来解决问题只是一种手段而不是目的。然而,他们仍然深爱着纯粹的设计,仍然渴望寻求所谓“正确的方式”来构建软件。
优秀的中级开发人员依然需要少量的监管。毫无疑问,他们能够提升代码设计,并在设计讨论中发挥重要作用。他们是开发团队中的主力。但是,对于他们,进一步的指导和更高层次的监管依然至关重要。
三、 高级程序员
高级开发人员熟悉失败。他们已经经历过编写的代码在低于设计和超越设计的情况下都失败的情况。他们深思熟虑,在面对问题时,能够心智成熟地评估成功与失败。高级开发人员已经跳出了中级开发人员深爱的复杂性,开始沉迷于简单。
高级开发人员悉知自己的长处和短处,力争尽可能地扬长避短。
高级开发人员深知理论联系实际的重要。他们明白,世上没有所谓的构建软件的“正确方式”,建立良好软件的唯一途径是要将理论适应客户、代码库、团队、工具和组织的需求。
高级开发人员理解并权衡领域涉及的一切,同时会思考如何去支持设计模式、库、框架和流程。
高级开发人员不仅仅了解自我,还知晓组织和客户的工作方式和价值观,以及对于组织和客户而言成功相关的重要和不重要的因素。一旦出现问题,高级开发人员会想方设法地去解决。“这不是我的工作”——他们永远,永远也不会说这样的话语。
高级开发人员心里明白,他们的工作应该是提供解决问题的办法,而不是写代码。
不像中级开发人员辛苦耕耘于枯燥的日常工作,高级开发人员会退一步,去思考是什么导致了这些无聊的工作。他们会评估修复根本问题的成本,要么直接解决这些问题,要么研究起来以便于最终彻底解决。
高级开发人员明白,单枪匹马是搞不定项目的。他们的主要作用是帮助团队变得更好,同时争取个人共同进步。
高级开发人员深刻理解,领导一职代表的不是权力,而是授权,不是方向,而是服务。
如果你的团队中一个高级开发人员都没有起到领导作用,那么你的项目是注定要失败的。一队伟大的中级开发人员固然能让你走得很远,但是他们构建的软件的好日子却是屈指可数的,其最终结果要么是关门大吉,要么是高风险高成本的重写。高级开发人员才是唯一能胜任选择技术和平台的人。
- 浏览: 94300 次
相关推荐
### 程序员从初级到高级的秘诀(经验之谈) 在IT行业中,从一名初学者成长为一位高级程序员并非易事,它需要时间和努力。本文将深入探讨从程序员到中级程序员所需经历的过程以及如何逐步提升自身技能。下面将根据...
【程序员从初级到高级知识汇集】是一本涵盖了程序员从入门到精通所需掌握的全面知识的资料集合。本书针对初级和高级程序员,旨在提供一个系统化的学习路径,帮助程序员提升技能,成为行业专家。 1. **Java知识** -...
程序员从初级到中级10个秘诀程序员从初级到中级10个秘诀程序员从初级到中级10个秘诀程序员从初级到中级10个秘诀程序员从初级到中级10个秘诀程序员从初级到中级10个秘诀程序员从初级到中级10个秘诀程序员从初级到中级...
【程序员从初级到中级10个秘密】 在IT行业中,程序员的成长之路往往充满挑战与机遇。从初级到中级,这是一个质的飞跃,涉及到技术深度、项目经验、问题解决能力等多方面的提升。以下是对程序员从初级到中级进阶的10...
《软件程序员考试初级真题》是一份集合了2009年至2018年间历年软件程序员考试初级阶段的真实试题的资源。这份压缩包文件,名为"软件程序员考试初级真题.7z",旨在为备考者提供一个全面了解考试趋势、熟悉题型和提升...
【标题】"初级程序员试题 程序员考试类"涉及的知识点主要涵盖以下几个方面: 1. **编程基础**:初级程序员试题通常会包括基本的编程概念,如变量、数据类型、运算符、流程控制(如if语句、for循环、while循环)、...
企业级JAVA开发与架构:专业程序员在实战中的蜕变.part2.rar 大小45.2 MB (此书分三份上传)
在IT行业中,程序员是软件开发的关键角色,而初级程序员与高级程序员之间的差异是明显的,主要体现在技能水平、经验积累、问题解决能力以及对行业的理解等多个方面。以下将详细阐述这两者之间的区别。 首先,技能...
计算机软考初级程序员试题及答案.pdf
软考初级程序员资料
这些都是很经典的资料,里面有些暂时用不到的,大家可以作为开发目录收藏起来,在需要的时候选择下载。 压缩包包含了最全的资料和ANdroid反编译工具! 对学习Android开发又很大的帮助! 【经典收藏】
在编程世界中,成为一名高级程序员是许多码农的追求。这个阶段意味着你已经超越了初学者,具备了深厚的编程基础和实践经验。这份“程序员必经之路~~高级程序员复习资料”显然是为了帮助那些志在提升自己技能的开发者...
【初级程序员模拟试题(附答案)】 这是一套专为初级程序员设计的模拟试题,旨在帮助初学者巩固和测试他们在编程基础知识、算法理解、数据结构掌握以及编程实践方面的能力。试题涵盖的内容广泛,包括但不限于: 1....
这份"PHP高级程序员笔试题(含答案)"是针对那些希望成为或正在寻找PHP高级程序员职位的专业人士的重要资源。这样的题目集可以帮助求职者检验自己的技能水平,了解企业对高级PHP程序员的具体要求。 一、PHP基础 ...
软考初级程序员教程的pdf
软考,程序员初级考试2014—2018考试真题(含上半年下半年真题,含答案) 1. 在答题卡的指定位置上正确写入你的姓名和准考证号,并用正规 2B 铅笔在你写入的准考证号下填涂准考证号。 2. 本试卷的试题中共有 75 个...
【初级程序员考试试题真题】是一份集合了2006年至2009年间的初级程序员考试实际试题的资源,对于准备此类考试的考生来说,这是一个宝贵的复习材料。这份资料涵盖的知识点广泛且深入,旨在帮助考生全面理解和掌握初级...
【初级程序员考试试题】是针对想要参加计算机软件水平考试中的初级程序员级别的一项综合测试。这个考试通常涵盖了计算机基础知识、编程语言、数据结构、算法、操作系统、数据库管理等多个方面,旨在评估考生的基础...
包含了从04年到10年的初级程序员试题和答案,有需要的可下载,。
【初级程序员辅导考试】是针对想要踏入编程领域的初学者或者准备参加初级程序员资格认证的人员设计的一套学习资源。这个资源旨在提供全面、系统的基础IT知识,帮助学习者巩固编程基础,提高解决问题的能力,为考试...