软件开发是一个奇怪的行业,市场远远供不应求。这是一个已经存在多年的问题,而且随着时间的流逝,愈演愈烈。

我们严重缺乏能够满足需求的人才。这个行业相当年轻。大多数软件项目是失败的。几乎所有的项目都会超出预算。我们解决问题的最佳指导方针可以归结为——“用一些通用方法去解决问题,当然这些方法常常不管用,于是,唯一能做的就是不断地尝试,逐个看看是否奏效”。

现在我们把淫浸代码时间超过3年的开发人员称为“高级开发人员”。这些人通常把持领导岗位,最终做出来的东西,你懂的——非常糟糕。

软件开发人员的成长阶段

作为程序员,我们生活在复杂的系统和变量世界中。可以这么说,即使是执行一个简单的,定义明确的,重点突出的任务,都令人难以置信的难,尤其是如果你对你手头的工具,或者是你正在工作的代码库不是那么有经验的话。

一、 初级程序员

初级开发人员是这样的,刚从学校出来,就像坐井观天中的青蛙一样,自认为什么都会。突然间,你发现自己面对的问题,靠学校中的那点知识是远远不够的。问题要更复杂,更凌乱,没有理论上说的那么纯粹。你正处于放弃还是坚持的分叉路口,你不知道该怎么办。

对策就是专心致志,专心致志地竭尽全力学习。初级开发人员需要大量的指导、监督和辅导,否则他们将会在这一阶段呆上很长一段时间。因此,实际上你也可以将这一阶段视为策略和日常技术的吸收消化时期。

初级开发人员关注代码,而不注重开发,他们不明白两者之间的区别。如果一个程序员表示“要是代码不需要面向所有用户,那他们会更喜欢编码”,那么我可以判断这是一个初级开发人员。

一个优秀的初级开发人员给定一个已知任务之后,就能够迅速良好地执行。

中级开发人员逐渐能够意识到失败(通常是他们自己的失败)模式,并认识到比起实际构建匆匆忙忙去做重点任务其实所需要的时间和精力更多,并且也不会因为有人说要改一改而一下子垂头丧气。他们也经历过自以为写出了引以为豪的内容,实际上证明是垃圾的悲惨遭遇。

二、 中级程序员

中级开发人员寻寻觅觅于用正确的方法去构建,去解决问题,他们会通过实验、文献和与其他程序员的讨论去发现这些正确的方法。这实际上已经是学习软件架构的水准,而不再是构建代码(我们在学校里学的就是这个)水平。

没有受到监督的中级开发人员构建的系统之所以失败的原因和初级开发人员的失败原因截然不同。初级开发人员会构建一堆稍微有点用的算法。而优秀的中级开发人员会跳出《Design Patterns》和《Domain Driven Design》的禁锢。虽然这些都是学习构建大型OO系统的好书,但是直接应用理论只会导致死板的设计结果,不重要的地方灵活多变,重要的地方却又死板无法更改。

你可以信任中级开发人员构建的系统,他们的系统毫无疑问比初级开发人员做的要好,但是时间久了,依然会有各种问题出现,成为拦路虎。一个可悲的事实是,绝大多数高级开发人员,甚至团队领导者其实都还只是——中级开发人员。当然,大多数人都没有这样的自我觉悟,原因是他们根本没有和更高水平的人一起工作过。

一个优秀的中级开发人员应该懂得使用代码来解决问题只是一种手段而不是目的。然而,他们仍然深爱着纯粹的设计,仍然渴望寻求所谓“正确的方式”来构建软件。

优秀的中级开发人员依然需要少量的监管。毫无疑问,他们能够提升代码设计,并在设计讨论中发挥重要作用。他们是开发团队中的主力。但是,对于他们,进一步的指导和更高层次的监管依然至关重要。

三、 高级程序员

高级开发人员熟悉失败。他们已经经历过编写的代码在低于设计和超越设计的情况下都失败的情况。他们深思熟虑,在面对问题时,能够心智成熟地评估成功与失败。高级开发人员已经跳出了中级开发人员深爱的复杂性,开始沉迷于简单。

高级开发人员悉知自己的长处和短处,力争尽可能地扬长避短。

高级开发人员深知理论联系实际的重要。他们明白,世上没有所谓的构建软件的“正确方式”,建立良好软件的唯一途径是要将理论适应客户、代码库、团队、工具和组织的需求。

高级开发人员理解并权衡领域涉及的一切,同时会思考如何去支持设计模式、库、框架和流程。

高级开发人员不仅仅了解自我,还知晓组织和客户的工作方式和价值观,以及对于组织和客户而言成功相关的重要和不重要的因素。一旦出现问题,高级开发人员会想方设法地去解决。“这不是我的工作”——他们永远,永远也不会说这样的话语。

高级开发人员心里明白,他们的工作应该是提供解决问题的办法,而不是写代码。

不像中级开发人员辛苦耕耘于枯燥的日常工作,高级开发人员会退一步,去思考是什么导致了这些无聊的工作。他们会评估修复根本问题的成本,要么直接解决这些问题,要么研究起来以便于最终彻底解决。

高级开发人员明白,单枪匹马是搞不定项目的。他们的主要作用是帮助团队变得更好,同时争取个人共同进步。

高级开发人员深刻理解,领导一职代表的不是权力,而是授权,不是方向,而是服务。

如果你的团队中一个高级开发人员都没有起到领导作用,那么你的项目是注定要失败的。一队伟大的中级开发人员固然能让你走得很远,但是他们构建的软件的好日子却是屈指可数的,其最终结果要么是关门大吉,要么是高风险高成本的重写。高级开发人员才是唯一能胜任选择技术和平台的人。

简单粗暴的分类方法

我非常讨厌现在流行的根据工作经验年限来给程序员划分档次的方法。多年的经验的确能让你增加见识,但这都是一些几乎毫无意义的背景信息。

更重要的是,我们的行业需要刚从大学毕业活力四射的年轻人,也需要那些有着15—20年工作经验的老程序员。我们应该从团队和企业的角度来思考人才组成。

免费领取LAMP兄弟连原创PHP视频教程光盘/《细说PHP》精要版,详情咨询官网客服:

http://www.lampbrother.net

【兄弟连IT教育】学PHP、Linux、HTML5、UI、Android等视频教程(课件+笔记+视频)!

网盘教程下载:http://pan.baidu.com/s/1mg8ANMg

参加活动领取兄弟连原创视频教程光盘合集:http://www.lampbrother.net/newcd.html

程序员从初级到高级的蜕变相关推荐

  1. 程序员从初级到中级10个秘诀 【转载】

    Justin James曾发表过一篇博文<10 tips for advancing from a beginner to an intermediate developer>,为我们分享 ...

  2. 转载:程序员从初级到中级10个秘诀

    Justin James曾发表过一篇博文<10 tips for advancing from a beginner to an intermediate developer>,为我们分享 ...

  3. 程序员从初级到中级10个秘诀

    Justin James曾发表过一篇博文<10 tips for advancing from a beginner to an intermediate developer>,为我们分享 ...

  4. 程序员薪资怎么论高级还是初级_和程序员一样高薪,却过着清闲生活,测试员什么人都可做吗?...

    答案是:可以. 大家好,我是热搜通,一名新媒体运营转软件测试的96年妹子. 生活中很多人都羡慕程序员的高薪工资,却害怕繁乱的代码. 其实,在软件这个行业,还有一个工种和程序员享受着一样的高薪,工作的压 ...

  5. 程序员薪资怎么论高级还是初级_Java程序员的薪水取决于年龄还是技术?

    1.薪资的高低与经验挂钩,但是经验的多少与从业年限没有必然的联系! 如果你工作以后,一直在别人设置的框架系统中编写代码,即使你工作再久,也依然知识一个初级程序员! 如果你工作以后,不断探索研究自己的框 ...

  6. 如何从初级程序员顺利晋升到高级程序员?

    文共3080字,预计学习时长9分钟 来源:Pexels 按经验级别划分的软件开发人员可能如下: · 初级:拥有两到三年的经验 · 高级:拥有十年以上的经验 · 中等或 "中级水平" ...

  7. 高级前端程序员和初级前端程序员的区别

    简单的来说,初级程序员和高级程序员的差别是: 初级多在写代码,高级多在设计代码: 初级多在解决一个问题,高级多在解决一类问题: 初级多在考虑技术问题,高级还要参与业务上的需求: 初级工程师只管接需求, ...

  8. 程序员输入法_搜狗输入法高级玩法:如何1秒录入30000字

    今天想来说说我们常用的搜狗输入法 前不久脑洞大开发现了它的一个高级玩儿法 在电脑里我喜欢给我的文件用当天的时间来命名: 但是每次都需要手动输入日期 真的很浪费时间 很没有效率 (我绝对不是一个没效率的 ...

  9. 安卓开发重磅炸弹!程序员福利!《高级Kotlin强化实战学习手册(附Demo)》开放下载!

    前言 自Google宣布将 Kotlin 作为 Android 开发的首选语言 (Kotlin-first),现已有60% 的专业 Android 开发者已经采用了该编程语言.在 Google Pla ...

最新文章

  1. 前端红宝书《JavaScript高级程序设计》核心知识总结
  2. SecureCRT设置和Xshell一样的快速命令集(使用快捷键输入命令和密码)
  3. 人工智能未来读后感 ----by RayKurzweil
  4. 浅谈HashMap的实现原理
  5. 红帽7 su命令与sudo服务
  6. 2021牛客暑期多校训练营9
  7. 服务台与事件管理解决方案
  8. word-wrap、word-break、white-space
  9. 天天Android: (EditText明文、密文切换)
  10. Eclipse is running in a JRE, but a JDK is requi...
  11. QImage、QPainter绘图
  12. 如何查html病毒svchost.exe,网站快照劫持又一例:svchost.exe病毒快照劫持的解决办法...
  13. 解决Windows无法访问指定设备路径或文件,您可能没有合适的权限访问这个项目
  14. 充电水滴融合特效 html+css
  15. python登录qq邮箱爬邮件_python3+selenium实现qq邮箱登陆并发送邮件功能
  16. Dell Precision M4800 VoodooPS2Controller 键盘/触控驱动修复过程
  17. python爬虫系列——开始入土(二)数据解析
  18. Python练习(四)
  19. JSON是什么?JSON字符串是什么?JSON对象又是什么?
  20. TCP FIN_WAIT2由来

热门文章

  1. ditto工具的使用方法介绍
  2. 下载pyboard的flash中的驱动程序_NVIDIA提供了STUDIO图形驱动程序版本441.12--立即下载...
  3. 什么样的网站可以作为百科词条的参考文献?
  4. Bootstrap Timepicker使用
  5. Cisco Packet Tracer(思科模拟器)的安装及配置
  6. 未明学院:二流的学校背景,如何拥有一流的人生履历?这里有4个真实故事
  7. node ping ip
  8. 石昊独立高峰前, 其背如深渊, 其眼似苍穹
  9. java abstract方法_java – 默认实现或抽象方法?
  10. 华为m3现在还能用吗_华为m3怎么样 值得买吗【图文】