老早网上有人说,软件开发干不过30岁,后来又有人说干不过35岁,后来又有人说干不过40岁,后来又有人说干不过45岁……各种说法很多,所以我写了一篇文章,题为“程序员的年龄天花板”来讨论这个问题,感兴趣的可以跟进去看看。
这里我采取通俗的说法,认为过了30岁的程序员算是大龄程序员,只是为了讨论方便,不同意的请保留自己的意见。
人生的阶段发展理论
《论语•为政》篇:
子曰:“吾十有五而志于学,三十而立,四十而不惑,五十而知天命,六十而耳顺,七十而从心所欲,不逾矩。”
这是至圣先师孔老夫子对人一生的发展阶段的精辟概括,里面谈到三十而立。所谓三十而立,是指人在三十岁之后,就应该在稳定在某一个职业上,有所建树。
现代社会,对人生职业发展阶段研究最为著名的学者是美国的舒伯(D.E.Super),他是世界职业规划发展史上里程碑式的人物。舒伯对人的生命发展过程,提出了以成长、探索、确立、维持、衰退为中心的五个阶段模型。每个阶段都有不同的职业课题需要完成,当前阶段的职业课题没有完成的话,就会影响后续的职业发展和人生生活。
对舒伯感兴趣的可以问下贴心的度娘,她会微微一笑很倾城地告诉你舒伯职业生涯阶段理论的细节。我这里只涉及与大龄程序员相关的阶段。
在舒伯的生涯阶段里有个确立阶段,25岁~44岁。在这个阶段,职业上的发展课题有这些:
-
逐渐稳定于一项工作
-
确立自己将来的保障
-
发现适当的晋升路线
作为程序员,请先好好理解一下这个老前辈提出的这些课题,反观自身,自省三分钟再往下看。
确立阶段又可以细分为两个小阶段:
-
25~30岁,修正期
-
31~44岁,安定期
如你所见,我们所说的大龄程序员,就是30岁往后,即过了孔老夫子所说的三十而立阶段的程序员,大龄程序员基本也是处在舒伯老前辈提出的安定期内。你要说你超过44岁了,噢卖糕的,按孔老夫子所说,应该不惑了。
31~44岁这个安定期,其实是人生最富有创造力的阶段,如果能稳定到一项工作上,一定可以有所成就,为将来打下保障。
30岁这个年龄,是每个人都会遇到的,不单是程序员、软件开发工程师,它是人生的一个节点。所以,你不是一个人在困惑,程序员,世界上所有的人都会经历这个阶段。而且,已经有人经历过并提出了一些有效的应对措施。
还有一点很重要,25~32岁是人的婚育高峰,所以,此时人会面临工作、生活的双重压力,事业家庭两头忙,身心俱疲。假如两头都不定,那就基本没法愉快地生活了。
我不想扯到太原,还是要聚焦在程序员身上来。
技术人生的三个方面
这节会谈到对程序员来讲至关重要的三点:
-
知识、技术
-
技术能力和阅历
-
业务积累
前文书咱说过,30岁是所有人都会面临的人生转折节点,那对于程序员来讲,这样的节点,有什么特殊的表现和含义呢?且来水水。
软件现在已经成为各行各业的基础服务,它具有非常特别的属性:软件本身形成了一种产业,它又和其他产业结合形成了交叉领域。
说白点,纯粹的代码没有意义,解决现实问题是软件存在的最大意义。而现实问题来自各行各业,所以,大部分的软件产品,是软件技术和行业需求的有机结合。
所以,多数程序员的工作方式是这样的:使用某种开发工具、通过编程语言来实现一个解决特定问题和需求的软件。有了这样的界定,真的可以开始水了。
知识、技术
程序员需要掌握编程语言、应用框架、开发工具等这些具体的知识和技术。这是第一点,必须的。 不同的语言和技术,都有特定的应用场景,这种语言解决这种问题效率高,那种语言解决那种问题效率高。
随着人类社会的不断发生发展,随着信息化和互联网化的不断深入深化,现实问题越来越多,越来越复杂,老的知识、技术在面对新的问题时可能力不从心或效率低下,所以不断有新的语言和技术问世,比如Go、比如Scala、比如SwIFt、比如ROR,都才出现没多久,都是因为特定领域问题而出现的。没有最好的语言,只有最合适的语言。
面对这样的现状,程序员就需要保持学习,为了更好的解决问题,可能需要掌握多种语言和技术,而且会随着社会的发展和技术的发展不断地调整自己的知识、技术图谱。
所以,早在几千年前,我们的儒家经典《大学》就预料到了将来会有程序员这种人群,对他们的生活做出了概括性的预言:“苟日新,日日新,又日新”。
OK,这就是程序员面临的知识、技术现状,所以有人觉得过了30岁奔四张去的时候,家庭事业两头忙,身心疲惫精力不足没时间充电没时间学习不再适合做程序员了。
这是一种现状,当然它对某些人如此,对另外一些人则不然。其实,31~44岁,正是人年富力强精力旺盛创造力爆棚学习能力焕发第二春的黄金阶段啊。不信你去看看舒伯的生涯彩虹图,一看便知。
举个例子,王江民就是这个时候(38岁)转做软件开发,后来(45岁)一骑独行白衣飘飘杀进中关村创造了江民杀毒的传奇历史,塑造了一代软件神话。
在30岁到44岁这个阶段,如果你还在做程序员,对自己的学习模式一定有所了解了,加上之前的积累,学起新东西来很快,应该会不断收获举一反三触类旁通的愉快体验。
技术能力与阅历
对程序员来讲,知识、技术是一方面,是容易习得的,是较浅的层面。那较深的层面,就是技术能力与阅历。
技术能力是指,对具体的知识和技术的运用水平。它在很大程度上决定了一个程序员身上的技术价值。
技术能力是在不断地运用知识、技书解决现实问题的过程中培养出来的。在这个过程中,有的人爱琢磨好总结能升华,技术能力提升就快,干一年可能能收获一般人两三年的技术经验;有的人可能会停留在写段代码写完了事儿这种层面,那可能干三年不如人家干一年。
《天龙八部》中的神仙姐姐王语嫣,很多少年看了都很喜欢。从IT的角度看,她实际上就是一个掌握了很多知识、技术的字典型程序员,但不会实际开发。当然,她也可以是很妙的程序员鼓励师,既能极大激励程序员的干劲,又能在必要时提供字典式的帮助与指导。
与王语嫣对应的另一个人物是扫地僧,超越了知识、技术,阅历极深,不拘泥于招式,一抬手一投足就拍“死”了慕容博和萧远山这种超强高手。他是我们专业技术者的梦中梦。
扯了这么多,我想说的是,技术能力和阅历,随着程序员年龄和工作经验的增加,其重要性和价值将超越知识、技术本身。这是我们必须意识到的,这也是老江湖的价值所在。
你可以在三两个月学会服务端开发,但如何应对大用户量、大业务量、大数据、大并发带来的挑战,绝对不是一个小白三两个月能搞定的,不积累个五年八年,不随着企业的产品、服务的发展而经历技术架构的变迁,你很难有能力去解决这些问题。
业务积累
大部分软件是技术和业务的结合,甚至有的行业软件,开发技术只占20%,80%的都是业务层面的知识、流程。所以,对于一个程序员来讲,熟悉业务也是非常重要的。做电商网站和测绘软件绝对是天差地别。
业务和行业紧密相关,你选择一个行业,选择一家企业,就会决定你能积累的产业、业务知识、经验。而这部分业务积累,是程序员的重要价值所在,它和技术阅历一样是经得起时间考验的。
有句老话,早已告诉了我们业务积累的重要性:隔行如隔山。还有一句老话也说明了同样的道理:男怕入错行。
学一门编程语言容易,深刻理解业务却没那么简单。而你不理解业务,空有编程语言和应用技术框架,实际上没什么卵用。这就是我们强调业务积累的原因。
企业的分类
-
外包型
-
项目型
-
产品型
外包型公司,通过承接别的企业的部分或全部软件业务来发展。这导致了业务不稳定,编程语言、技术框架等技术方面也不稳定。
外包型公司做软件的心态,是“干活、交活、拿钱、完事儿”。在这样一种心态支配下,程序员较难有机会仔细打磨产品,对技术能力的积累会有一些影响。另一方面,因为业务随时会变,对行业知识积累也会有较大影响。
还有,从企业角度讲,考虑成本的话,更愿意用成本低的年轻人,所以,大龄程序员的将来,在这种公司不够乐观。你一个35岁的程序员和22岁的程序员,做同样的App,老板不会觉得你35岁就比22岁做出来的东西好多少,他会认为年轻人多加个班多改改就差不多了,这时候会产生劣币驱逐良币的效应。
项目型公司通过承接电信、银行、电力、政府或其他单位的软件项目为生,比外包型稍强一些,技术上可以自己选择,也能够在某个行业长期积累经验。如果这类公司的项目规模小而多、行业不集中,那就与外包型公司类似。另外,做项目的心态和外包有些类似,对成本的考量较多,对程序员的持续技术发展不利,比如有新技术出现,公司不一定会用,可能为了快和规避风险而选择较老较趁手的技术来完成项目,这一方面会减缓开发人员的技术更新周期,另一方面也减少了锻炼机会降低了技术成长速度。
产品型公司是最好的,一个产品,要产生竞争力,要么靠对业务的深刻理解,要么靠技术上的领先优势。这类公司是对程序员的技术阅历、业务知识都很有好处,我认为是程序员的较好选择。
大龄程序员的将来
通过前面的分析,我们知道程序员这种技术性职业,价值体现在三点:
-
语言、技术
-
技术能力与阅历
-
业务积累
用一句话来概括,程序员最大的价值就是运用技术解决问题的能力。而这种能力的构成里,技术能力与阅历、业务这两方面是具有经久价值的,是相比语言、技术更耐得住时间考验的。
程序员的将来,就与价值维系有关,可以参看发布在我的微信订阅号“程序视界”的文章“程序员保值的四个秘密”。在我们进一步展开阐述之前,需要先看看四大职能取向。
常见的四种职能取向
一般来讲,有常见的四种职能取向:
-
管理者
-
专业技术者
-
自由职业者
-
创业者
管理者又分为职能管理者和全面管理者。CEO、总经理之类的角色属于全面管理者,开发经理、研发部门经理、项目经理、项目总监、HR经理等属于职能管理者。
专业技术者指靠技术吃饭的人群,比如程序员,比如测试工程师,比如UI设计师,比如会计,比如律师,比如编辑……这些人的一个共同点就是拥有独特手艺和技术,能用自身所掌握的技术为别人解决问题创造价值,他们通常会依附一个组织来工作。
自由职业者首先是一个专业技术者,然后他脱离了特定组织,自己跑单帮了,自己安排自己,今天想干就今天干,老子今天不爽就明天再干。
创业者是特殊的一类职能取向,他们特别想拥有自己的产品和服务,于是就拉一帮人成立一组织,协调各种资源来实现自己的梦想。
程序员的职能取向,多数会落在专业技术者。我个人来讲,做了6、7年管理,现在还是回到了专业技术上来,因为做具体技术工作会让我更自然更自在也更快乐。每一个程序员都应该理清自己的职能取向,只有职能取向清晰了,谈将来才比较靠谱。
所谓“成功”
有人说,三十出头的程序员,如果你混的不够成功,面临的压力就会山大。话听起来没错,不过也不尽然,这里面有个关键的问题需要澄清。那就是“成功”的定义。
世俗的成功,古时候是“十年寒窗无人问,一朝成名天下知”,是“春风得意马蹄疾,一日看遍长安花”。现在也差不多,财富更多,老婆更多,社会地位更高,不过如此吧,你看流布甚广的“当上CEO,迎娶白富美,走上人生巅峰”之类的说法就是这种观念的反应。
但我这里说的成功,是指找到适合自己的职业,完成自我实现。简单点说,就是你在干你想干的事儿,又有成就感又快乐。就这么简单了。
我们不必活在社会统一的价值取向里,也不必活在别人的期望里,你的人生是你自己的,哪怕父母非要你成为一个什么样的人,也不必去听。
有了这样的基本认识,就可以继续了。
程序员在企业中的发展
程序员的直接发展通路如下:初级工程师-->中级-->高级-->架构师(专家)-->技术总监-->CTO。
技术总监和CTO带一些管理职能,也可以从另外一条路上来。这条路就是程序员的管理之路:工程师-->项目组长-->项目经理-->项目总监-->技术总监-->CTO。
一条技术通道,一条管理通道。这是程序员常见的职业晋升通道。
除此之外,还有一些交叉发展的机会。比如开发转测试,开发转产品经理,开发转售前,开发转售后,开发转销售……
最后,还有一个选择,就是离开软件行业,到别的行业里自由自在的飞翔。啊哈,朋友再见,朋友再见,再见吧再见吧。祝你好运。
走管理路线的人十不其一,这次不谈也罢(回头我会写文章聊);转做别的职业的朋友们我已经说了再见了;那剩下的,就只能说说技术这条路的将来了。
走技术路线的程序员怎么办
其实这原本不是一个问题。你说,哪行哪业没有老将?
而这之所以又成为一个问题,是因为程序员是“有知识、有技术、有理想、有焦虑”的四有新人,觉着自己已然学了那么多,付出了那么多,将来总不能停滞不前吧总不能走下坡路吧总得蒸蒸日上吧,所以就焦虑这件事儿,就担心,就困惑,就觉得这行当是青春饭吃不了几年。
其实根据我前面的分析,结论已经呼之欲出了:保持学习能力,丰富技术能力与阅历,积累行业知识与经验,然后就可以持续走下去。即使会有衰退阶段,那也是正常的,人生就如花儿一样,有含苞待放,有盛放,也有枯萎的过程,我们需要自然接纳。
程序员的二八定律
有结论只是第一步,我们还要讲清楚一个事实:程序员群体中的二八定律。
先说技术路线和管理路线的选择,基本上也是二八开(或者一九)。
小部分的人走了管理路线,剩下的大部分程序员,走技术通道。那技术通道,有多少人能成为高级软件工程师、架构师、技术专家、CTO?
百分之二十。
那剩下的百分之八十,在技术路上不能走得更远,但还得维持自己的竞争力,保持价值不衰退,这样才可能继续做下去。怎么维持竞争力,前面已经说过了。
大量的大龄程序员将面临无法晋升和如何维持竞争力的问题,这是每个人都必须看到事实。
从晋升角度看,任何一个行业的从业人员的分布,都是金字塔型的。大锅饭不存在,共产主义按需分配也还没到来,我们必须接受、接纳这个事实,然后才能在此之上谋求发展。
怎样面对将来
前面已经确认,技术路线可以走下去。现在我们来看,如果一个程序员的四大职能取向定位到专业技术者,到30多岁时,该如何走好,如何适应。
-
选择企业
就做技术来讲,如果想维持竞争力,在选择企业时就应当做一些考量,选择将来向好的行业,选择产品型、重视技术的公司,这种选择非常重要。它会严重影响你将来能在技术路线上走多远。
我前阵子找工作,就根据行业、企业、产品,只选了三家来面试。我35岁,需要稳定下来啦。
有人说可否选择创业公司,我的观点是,如果你能承受一定的风险(金钱和时间成本),创业公司的创始团队和产品又都比较靠谱,可以尝试。小米当时创立时,从摩托罗拉等公司找了好大一批开发工程师哦。
-
稳定于一项工作
根据舒伯的职业生涯阶段理论,31~44岁是安定期,程序员应该稳定于一项工作,发现适当的晋升通道,确立自己将来的保障。
在这个时期,频繁的跳槽对将来的发展不利,这是毋庸置疑的,所以选择要慎重。尤其你到了40岁还没在哪个行业长时间待过,技术也换来换去,那再出去找工作,就会遇到比较大的困扰。
到招聘网站遛一遭,看看招聘信息中对年龄的要求,你就知道我所言非虚,除了技术总监、架构师、技术专家、高级软件开发工程师等岗位的年龄区间落在30~45岁,其他岗位,绝大部分都要求你30以下。所以,如果你在不同行业、不同公司晃来晃去,到了三十四五岁还没稳定,也没能达到高级软件开发工程师应有的水平,那再找工作肯定会遭遇比较尴尬的状况。
-
不能晋升怎么办
技术路线,可以初级、中级、高级、架构师(技术专家)……这么走下去,假如一个程序员发现自己到一定程度无法再走下去,就会产生挫折或倦怠。通常这种情况会在你稳定一项工作7年左右出现,所谓七年之痒。对本科毕业来讲,这个年龄就在33~35岁左右。
此时怎么办?这是很现实的问题。
这个我们就要具体问题具体分析:是你很牛X限于企业环境无法晋升?还是你自身能力到了天花板了无法晋升?
不同的原因对应的行动是不一样的,前者的话,可能应该考虑换一下。后者的话,要调试心态,建立第二生活中心,在职业之外发展其他的兴趣爱好来平衡。
在这个年龄阶段,有一大批程序员会因为晋升受挫或倦怠而成为创业者或参与到创业中来。这是需要留意的现象。
-
竞争力有区域性和相对性
程序员的价值和竞争力,其实是相对的。比如你在,牛人太多,无法晋升了,其实别处可能有鸡头的位置等着,比如其他行业内的小公司的技术总监、部门经理,如果你看重职位和头衔,就可以去尝试。这也是典型的一种路线,有部分程序员在大公司镀镀金,回头到其他行业的相对规模较小的公司去做管理或技术专家。
如果你很在意职位等级,很在意比别人更受尊重,那就找一个能凸显出你价值的环境。比如乒乓球运动员何智丽,在39届世乒赛上因为没按领导指示输球,后来被取消参奥资格,在国内无法发展了,她移民日本,继续在乒乓球领域活跃并取得了辉煌战绩,还曾经战胜邓亚萍取得亚运乒乓球女单金牌。类似的还有一些国外的业余足球运动员或退役的足球选手到中国来,迅速成为热门选手受到重视。这都是一个道理。
所以,对于大龄程序员来讲,为了发挥价值和竞争力,还有下面的路径可选择:
到其他公司,不换行业,利用自己的技术优势,谋求管理职能,走管理通道
到能凸显自己技术价值的公司,继续做开发
到平均技术水平较差的地域,继续做开发,彰显自己的优势
-
学习其他技能
哦,亲爱的,如果你有时间,也可以学习其他可以赚钱的技能,因为,虽然我们说大龄程序员可以一直做技术,但能一直做到退休的,估计也只有20%。如果你是那80%,当你不得不离开心爱的开发岗位时,就能够因为有所准备而不至于忽然失重。
-
职业之外的兴趣
这点是我们必须要谈的,程序员的人生里不只有软件和工作,还应当有其他的。生活是多元中心的,要有一些其它的兴趣爱好,能够滋养心灵,修复纯技术工作给心灵带来的磨损。
提笼架鸟,雕刻,书法,围棋,游戏,写作,读书……都挺好的,有比没有强太多了。很多人(包括我)缺乏信仰,再没有点兴趣爱好,那就太容易内分泌失调了。
到底能干到多少岁
还问啊……让星爷来回答你吧:
“曾经,有一份真诚的爱情放在我面前,我没有珍惜,等到我失去的时候才后悔莫及,人世间最痛苦的事莫过于此……如果上天能够给我一个再来一次的机会,我会对那个女孩子说三个字:‘我爱你。’如果非要在这份爱上加上一个期限,我希望是……一万年!”
本来35岁应该是程序员的黄金年龄,经过十年(研究生毕业)左右的历练,对计算机系统的理解已经比较深刻,实践经验足够,该踩的坑也都趟过,逐步已经有一套成型的开发思维体系,无奈的现实告诉你,留给你的时间不多了,中年人碰到这种情况绝不绝望?正上有老,下有小,虽然自己没经历过,但能想象那种痛。