程序员从初级到高级的蜕变

程序员从初级到高级的蜕变
软件开发是一个奇怪的行业,市场远远供不应求。这是一个已经存在多年的问题,而且随着时间的流逝,愈演愈烈。
我们严重缺乏能够满足需求的人才。这个行业相当年轻。大多数软件项目是失败的。几乎所有的项目都会超出预算。我们解决问题的最佳指导方针可以归结为——“用一些通用方法去解决问题,当然这些方法常常不管用,于是,唯一能做的就是不断地尝试,逐个看看是否奏效”。
现在我们把淫浸代码时间超过3年的开发人员称为“高级开发人员”。这些人通常把持领导岗位,最终做出来的东西,你懂的——非常糟糕。
软件开发人员的成长阶段
作为程序员,我们生活在复杂的系统和变量世界中。可以这么说,即使是执行一个简单的,定义明确的,重点突出的任务,都令人难以置信的难,尤其是如果你对你手头的工具,或者是你正在工作的代码库不是那么有经验的话。
一、 初级程序员
初级开发人员是这样的,刚从学校出来,就像坐井观天中的青蛙一样,自认为什么都会。突然间,你发现自己面对的问题,靠学校中的那点知识是远远不够的。问题要更复杂,更凌乱,没有理论上说的那么纯粹。你正处于放弃还是坚持的分叉路口,你不知道该怎么办。
对策就是专心致志,专心致志地竭尽全力学习。初级开发人员需要大量的指导、监督和辅导,否则他们将会在这一阶段呆上很长一段时间。因此,实际上你也可以将这一阶段视为策略和日常技术的吸收消化时期。
初级开发人员关注代码,而不注重开发,他们不明白两者之间的区别。如果一个程序员表示“要是代码不需要面向所有用户,那他们会更喜欢编码”,那么我可以判断这是一个初级开发人员。
一个优秀的初级开发人员给定一个已知任务之后,就能够迅速良好地执行。
中级开发人员逐渐能够意识到失败(通常是他们自己的失败)模式,并认识到比起实际构建匆匆忙忙去做重点任务其实所需要的时间和精力更多,并且也不会因为有人说要改一改而一下子垂头丧气。他们也经历过自以为写出了引以为豪的内容,实际上证明是垃圾的悲惨遭遇。
二、 中级程序员
中级开发人员寻寻觅觅于用正确的方法去构建,去解决问题,他们会通过实验、文献和与其他程序员的讨论去发现这些正确的方法。这实际上已经是学习软件架构的水准,而不再是构建代码(我们在学校里学的就是这个)水平。
没有受到监督的中级开发人员构建的系统之所以失败的原因和初级开发人员的失败原因截然不同。初级开发人员会构建一堆稍微有点用的算法。而优秀的中级开发人员会跳出《Design Patterns》和《Domain Driven Design》的禁锢。虽然这些都是学习构建大型OO系统的好书,但是直接应用理论只会导致死板的设计结果,不重要的地方灵活多变,重要的地方却又死板无法更改。
你可以信任中级开发人员构建的系统,他们的系统毫无疑问比初级开发人员做的要好,但是时间久了,依然会有各种问题出现,成为拦路虎。一个可悲的事实是,绝大多数高级开发人员,甚至团队领导者其实都还只是——中级开发人员。当然,大多数人都没有这样的自我觉悟,原因是他们根本没有和更高水平的人一起工作过。
一个优秀的中级开发人员应该懂得使用代码来解决问题只是一种手段而不是目的。然而,他们仍然深爱着纯粹的设计,仍然渴望寻求所谓“正确的方式”来构建软件。
优秀的中级开发人员依然需要少量的监管。毫无疑问,他们能够提升代码设计,并在设计讨论中发挥重要作用。他们是开发团队中的主力。但是,对于他们,进一步的指导和更高层次的监管依然至关重要。
三、 高级程序员
高级开发人员熟悉失败。他们已经经历过编写的代码在低于设计和超越设计的情况下都失败的情况。他们深思熟虑,在面对问题时,能够心智成熟地评估成功与失败。高级开发人员已经跳出了中级开发人员深爱的复杂性,开始沉迷于简单。
高级开发人员悉知自己的长处和短处,力争尽可能地扬长避短。
高级开发人员深知理论联系实际的重要。他们明白,世上没有所谓的构建软件的“正确方式”,建立良好软件的唯一途径是要将理论适应客户、代码库、团队、工具和组织的需求。
高级开发人员理解并权衡领域涉及的一切,同时会思考如何去支持设计模式、库、框架和流程。
高级开发人员不仅仅了解自我,还知晓组织和客户的工作方式和价值观,以及对于组织和客户而言成功相关的重要和不重要的因素。一旦出现问题,高级开发人员会想方设法地去解决。“这不是我的工作”——他们永远,永远也不会说这样的话语。
高级开发人员心里明白,他们的工作应该是提供解决问题的办法,而不是写代码。
不像中级开发人员辛苦耕耘于枯燥的日常工作,高级开发人员会退一步,去思考是什么导致了这些无聊的工作。他们会评估修复根本问题的成本,要么直接解决这些问题,要么研究起来以便于最终彻底解决。
高级开发人员明白,单枪匹马是搞不定项目的。他们的主要作用是帮助团队变得更好,同时争取个人共同进步。
高级开发人员深刻理解,领导一职代表的不是权力,而是授权,不是方向,而是服务。
如果你的团队中一个高级开发人员都没有起到领导作用,那么你的项目是注定要失败的。一队伟大的中级开发人员固然能让你走得很远,但是他们构建的软件的好日子却是屈指可数的,其最终结果要么是关门大吉,要么是高风险高成本的重写。高级开发人员才是唯一能胜任选择技术和平台的人。
简单粗暴的分类方法
我非常讨厌现在流行的根据工作经验年限来给程序员划分档次的方法。多年的经验的确能让你增加见识,但这都是一些几乎毫无意义的背景信息。
更重要的是,我们的行业需要刚从大学毕业活力四射的年轻人,也需要那些有着15—20年工作经验的老程序员。我们应该从团队和企业的角度来思考人才组成。

原文来自IT蓝豹:http://www.itlanbao.com/

时间: 2024-10-08 18:48:23

程序员从初级到高级的蜕变的相关文章

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

ustin James曾发表过一篇博文<10 tips for advancing from a beginner to an intermediate developer>,为我们分享如何才能完成程序员从初级到中级的蜕变,现将中文译文转载于此,供大家借鉴. 在一封与TechRepublic会员交流的邮件当中,他提到了面向程序员的博客.文章及杂志分成两类:面向初学者类("hello world"这种类型的教程)以及面向专家类(MSDN杂志).这个观点很好,有关程序员如何从初

Java程序员一年的成长和蜕变

我叫小肖,毕业于湖南农业大学,计算机科学与技术专业学生,从那年07月25日开始工作,距今也已经一年有余.从一个Java入门小白,到现在能独立开发并且胜任独立工作的能力,在此总结一下个人一年来的成长和蜕变,以此和大家共勉! 那年7月份到深圳,信心满满的以为自己找工作会一帆风顺,谁知这成了一部血泪史,带着一份servlet+jdbc做的毕业设计到深圳,简历上三三两两的写了"项目经验":图书管理系统.养老院管理系统,当时还完全不会SSH(struts2+spring+hibernate),然

西安尚学堂 程序员初级、中级和高级的区别在哪里

前言 低级程序员认为自己与高级程序员的区别, 主要是高级程序员任何功能都能编码实现, 编码速度快, 代码无bug.高级程序员认为他们之所以高级, 在于他们认识到代码 bug 是不可避免的, 有千万种理由可以导致 bug,但他们可以在设计和逻辑上保证(追求)滴水不漏,并用逻辑的百分之百准确性还减少代码 bug.同样是程序员,初级.中级与高级的区别究竟在哪里呢? 初级程序员 初级程序员就是传说中的码农,依靠复制粘贴.比葫芦画瓢的方式完成代码的编写,通常一个方法几百行代码,恨不得一个类将所有的功能都实

程序员在实战中的蜕变

当一个软件技术人员选择了自己的发展方向后,应该怎么为实现目标打下良好的基础呢?这里,我们要讲述的是软件技术人员需在学习哪教学法知识,以及如果训练自己的思维方式和软件开发习惯. ? 助推器一:软件基础知识 首先,要充分学习软件基础知识,当一个初学者接触软件开发的时候往往想马上就能动手开始开发,这是一个普遍的现象.现代的软件语繁多,很多语言开发起来异常方便,看一本书就可以上手开发了,然后,这样的情形往往会误导技术人员,当你沿着这种"方便"的开发道路走下去的时候,几年后你会发现,自己的进步不

高级程序员和低级程序员的区别

低级程序员认为自己与高级程序员的区别, 主要是高级程序员任何功能都能编码实现, 编码速度快, 代码无 bug. 正如一惯的那样, 低级程序员之所以低级, 正是因为他们勉强能看到(或者根本看不到)事物的表象而看不到本质. 所以, 低级程序员总结出的一切东西, 你都可以大胆的忽略. 所以, 我们来听听高级程序认为自己与低级程序员的区别是什么. 高级程序员之所以高级, 在于他们认识到代码 bug 是不可避免的, 有千万种理由可以导致 bug, 但他们可以在设计和逻辑上保证(追求)滴水不漏, 并用逻辑的

IT程序员怎么分级别,以及每个级别应该会什么内容?

前言: 这是IT修真院自问自答系列第五篇篇,同样是干货和硬广混杂.IT修真院系列 - 收藏夹,顺手推荐一下修真院的专栏,各种IT行业的真实小故事.IT修真院 - 知乎专栏 我想了想,解释这些问题,其实比不上讲一下我朋友"暗灭大人"的成长经历,这样新人们就会对自己未来几年内的大致走向有了一个对比和期待,方向有了,路也明确了,就看你想在什么地方停下来了. PS:本文依然是不对任何人负责,观点依然偏激而且绝不客观. 程序员的级别: 程序员只需要分成三个级别. 初级程序员:能够独立完成一个项目

程序员的职业发展

程序员的职业发展 本文为转载,以供参考.因为找不到原作者的文章出处,故没有原文链接.知道原文地址的朋友麻烦给出链接.谢谢. 作者:IBM 软件集团大中华区总架构师 寇卫东 有一些年轻的程序员向我咨询,将来的路应该怎么走?俗话说,条条大路通罗马.不同的路都能走向成功.到底选哪条路,取决于自己的兴趣.可能有程序员会问: 如果还没找到自己的兴趣怎么办?我的建议是多尝试,努力做,这是职业生涯的必经之路.当你积累了一定的技术和经验之后,就会面临多种选择.选择哪条路,因 人而异. 如果对某一种或几种技术非常

如何成为优秀的程序员php

一.平静的心态 和所有程序员一样,要写一手好的程序,没有好的心态是不行的. 遇事不可急躁,不可轻言放弃. 在程序开发过程中,尤其是初中级程序员,写出的程序或架构会遇到很多问题,其中一些问题比较弱智,而有些问题根本没有碰到过,于是不可太过急躁,应 该逐个排查问题的最初源泉,将其干掉.急躁的心态去开发系统是对项目的一种不负责.急躁会让人学会将就,让人学会逃避.而我个人北京两年的简单生活,给我 其中一个最大的历练也就是:我的心态更加平静了. 相信,这样的心态也会有助于你其他方面的处事能力. 为什么将心

很认真地聊一聊程序员的自我修养

最近看了<浅谈程序员的英语学习>,对于文章中的观点我非常认同,英语是非常重要的,但文章站的高度还是太高,具体表述的学习方法我不是很认同,也认为不太实际,恰好之前有一篇一直没有发表的文章想重新发布,就借此机会和大家很认真的谈一谈程序员的自我修养问题. 先介绍一下利益相关,我的背景: 初中开始参加信息学与数学竞赛,大学本科软件工程专业,毕业后在银行做大数据分析与项目管理,后自主创业,做过传媒公司.软件外包公司,现在中国(南京)软件谷有个工作室,做些自己喜欢的事情.15年编码经验,6年创业经验.主要