前言
岁月是把杀猪刀,老了码农,白了头发,残了身体,消磨了意志。
码农老矣,尚能码否?
这是一个老话题了,按照一些人的说法,这是月经贴,最近才在博客园上看见这样的帖子。
今天在cnBeta上看见了这个帖子:年过50,还能继续当码农吗,本来只是在闪存发发牢骚,后来想想,干脆写个帖子,写得长点,打发一下时间也好。
我主要谈谈我的经历。
背景
对那些不知道我的情况的同学,我简单说说我的背景,1993年开始学编程,大学读的不是计算机,而是英语高级翻译,毕业10年,2年前移民澳洲,现在33岁,仍然在做码农。
国内
现实是非常残酷的,无论你是否接受!
在中国,软件开发这行太固执于年龄了,主要有3个观点
- 年纪大了,思维跟不上,不能学习新技术
- 呆久了,老油条,不怎么干活,效率低下
- 当然是待遇了,呆了那么多年,工资越来越高,公司成本压力越来越大
现在国内的物价飞涨,人员的待遇也被迫提高了很多,相比几年前,甚至以倍数算。现实有点荒谬,老人多年加薪,比不上新人入职薪酬起点,如果关注新闻的,那些或许部分被夸张的某某IT巨头的毕业生入职20/30万起跳。这对老人来说,情何以堪啊!
对开发来说,码农资历越深,经验越丰富,要解决关键问题,还是要靠扎实经验,学习新技术也应该是驾轻就熟。
举个例子,没有实际业务系统开发经验的,遇到技术问题,一般都是上网搜索,如果没找到,就去stackoverflow之类的网站提问。但如果身边有个经验丰富的,能给你解决的情况就比你自己慢慢研究要来得快吧?
再举个例子,刚入门的同学,不都是喜欢拜师,找前辈学习的吗?没有这些前辈,那学习的过程会相当周折。
再举个例子,没有一定的经验的同学,要实现某个功能,譬如excel文件的读写,除了office automation(不建议),更应该去找第三方的组件(相比商业组件,大家都喜欢开源的吧?)。如果平时积累了丰富的经验同学,需要用到某个功能(如之前说的excel文件的读写),直接就知道可以用如NPOI这样的组件。
最后再举个例子,10年前,对.net一窍不通。记得9年前,一个同事,老程序员了,很热衷学习新技术。当时.net出了beta,他买了本书,新建了个winform,拖放了个DataGrid,再用DataAdapter从数据库取了数据库之后绑定到DataGrid,数据显示了,有点RAD的味道,他还演示了master-detail的功能,当时觉得好神奇。当时一起做同事的,还有另外一个老程序员,记忆中超过40岁了,跟我们一起做开发,写起程序来一点都不含糊。
如果我是招聘者,2个应聘者,关键技术要求都符合,撇除非技术考量(譬如个性等),一个28岁,一个40岁,我会选40岁的。
我的学习经历
学习编程,开始于1992年,初一,学校开了计算机课程,当时是novell无盘工作站,后来用上了DOS 3.x。先用的GWBASIC,后来接触了Quick BASIC和pasal。当时跟几个同学在一起研究,有1年暑假,我们约定要写个程序出来,比一下谁写得更好。其中一个同学用Quick BASIC实现了类似x-windows的图形化的界面,带输入法,支持鼠标(当年dos下都是文字界面,要支持鼠标和图形化,要用asm写),可以显示图片,播放音乐和动画,我觉得好牛。
在中国的时候,经常加班,离开中国前的那个公司,我在那里工作了5年,星期六还要上大半天,觉得还挺累的。
写商业软件这10年来,经验是逐点逐点积累的。我9年前开始在sourceforge写开源项目,大约9年前开始在codeproject写开源文章,8年多前开始在博客园上写博客,每天下班后,再花4-5个小时学习,写开源项目,写商业软件。
直到现在,我每天下班,仍然是上技术网站看文章,譬如codeproject,当然也包括博客园。也会去开源项目网站看看,譬如 sourceforge和codeplex,说起codeplex,这应该是当年那个微软为了推广.net而推出的gotdotnet网站的继任者,虽然 codeporoject越来越多的.net文章,但codeplex更纯粹的是微软为了推广.net而架设的,所以从事.net开发的同学,应该会留意到这个网站绝大部分项目都是.net写的。
我喜欢看开源项目的代码,首先了解某个项目的主要功能,然后看代码项目结构,不调试,直接从主类入手,看设计思想和新技巧,基本上半个小时可以看几千行吧。
我更喜欢通过写开源项目来学习新技术,譬如之前写的那个SQL Monitor,就用了C#4。
最近去了新公司,做新项目的开发,因为老系统的设计有严重缺陷,无法应付大访问量的情况,所以和技术总监研究分析后,决定采用ASP.NET MVC 4 + Knockout + bootstrap。
国外
围城,外面看里面好,里面看外面好。那我们看看外国多少50岁+的程序员吧,为什么我们要对那些大牛致以崇高的敬意,因为他们经过多年的技术钻研,在某个领域达到一个高度,可以给后来者各种帮助、影响,可以指出技术发展路线。举个例子,pascal/delphi/c#之父Anders Hejlsberg,没有他,估计也就没pascal/delphi/c#,那软件开发领域少了多少色彩。
正是由于这个不可改变的国内大环境,我选择了移民。在外国,对工作人员的年龄没多少要求和“歧视”。应聘的那些公司,从来不会问你年龄,只会纯粹地要求你多少年的xx技术经验。
p.s.外国的待遇比中国好很多,码农的待遇还是可以过上不错的日子的。
何去何从
对大龄码农来说,出路主要有以下几条:
- 继续开发生涯,做资深码农,从senior、team lead、tech lead到principal,如果你无欲无求,可以安心做个普通的码农,跟少林的扫地僧那样,隐藏得很深,很深。。。
- 转做设计和架构,譬如architect
- 转型做咨询,譬如consultant,这个在外国很流行,收入也比普通开发人员高
- 转型做管理,譬如project manager,CTO等
- 转型做测试,遇到过这样的同事,计算机科班,硕士,做了10多年开发,后来转做测试,也相当的成功
- 转型做业务分析,用丰富的经验,去分析业务,相信可以驾轻就熟
- 转型做技术支持,相信有丰富开发经验的开发人员,可以解决各种客户提出的技术问题
- 创业,估计有不少开发人员有这个想法,始终流水的兵,创业可以赚更多,不过风险也高。如果你有很好的创意,相信可以吸引到投资,创一番事业。身边有几个朋友经过多年的开发,现在在搞创业
- 转行,认识几个人,转行了,就跟当年一些同学,从别的专业转到开发人员一样。至于行业的选择,那是因人而异,有做售前的,也有做售后客服的,当然也有跟开发没有啥关系的,譬如网站管理。更有甚者完全脱离IT行业,譬如去淘宝开网店。。。
出路是因人而异的,没有模式。一些同学蠢蠢欲动,但对前景又没有信心,彷徨,犹豫,随着时间流逝,年龄越来越大,心里越是没底,就跟一个没跟的浮萍,走一步看一步,其实这样是没有办法中的一个办法。当你没有相当的信心,不贸然下决定去改变前途,这是可以理解的。但岁月不能因此而蹉跎啊,今天30 岁,一眨眼,明天就是40岁了。我仍然清晰记得20年刚开始学编程的日子呢,那个时候是纯粹的信徒,对计算机编程,那是比刘姥姥进大观园还要惊讶,觉得写个代码就可以显示这么神奇的东西。
说到出国,这只能算半个出路,因为出国了,你还是从事软件开发的话,那就不是转型了,只是换了个工作环境。
我的选择
我热爱编程,编程是我的第二生命。
从学编程开始到现在,已经20年了,如果说不累,那是不可能的。10年的商业软件开发,每天10多小时在电脑面前写代码,落下了一身的毛病,严重的颈椎病,肩周炎,慢性胃炎,吃止痛药比吃零食还来得频繁。
码农,牺牲太多了,过度的加班不提也罢,长期在电脑面前,脸部油脂分泌也多,皮肤干燥,容貌憔悴,尤其显得比同龄人苍老。不知道我真实年龄的,都猜我40来岁。而且IT圈子还流行一个段子,说码农因为接受的辐射太多,所以生女儿的几率很高,那些还幻想子承父业的,估计要崩溃。
说到牺牲,更加别提那些暴毙的码农了。
如果我不喜欢编程,我不会弄到现在全身的病痛,我可以活得更舒服,早睡晚起,无需无休止的加班,无需挑灯夜战,更加没有那些无休止的病痛,无需吃那些止痛药,可以有更多时间陪伴家人,可以有更多的时间去看电影,听音乐,休息,过舒坦的生活。
不过,做一行,爱一行,专一行。即便你觉得累,如果你真心喜欢开发,也会继续做下去。如果你不喜欢,纯粹是当年高考计算机专业热门而入了行,那每天也是煎熬。
某样事情,你重复做20年,你总有觉得身心俱疲的时候。你可以连续加班几天,甚至一周,但如果你每天都要加班,你必然有崩溃的一天。
每当这个时候,你应该好好坐下来,休息一下,想想何去何从。软件开发,跟其它工作一样,首先是要养家糊口,一般来说,大家会选择收入可观的行业,幸运的时候,IT相比其它行业,收入还是算不错的。
每当你想放弃的时候,认真想想,软件开发生涯,到底是不是到尽头了。
就目前的情况来说,我还是满意现在的工作内容的,因为可以学到新东西,也可以用自己的经验给同事解决问题。
在未来的几年里,我仍然会选择继续做软件开发。
原文链接:http://www.cnblogs.com/unruledboy/archive/2012/09/20/OldCoder.html