人们都会期望随着岁数的增加,个人条件受到限制的时候,你会放弃现实里的一些工作,如编程。从而转向更加高大上的任务,比如管理一个团队或者融资。
这在“真正的教授”决定细节的学术界确实如此,只保留“大方向的东西”。换句话说,组织正面向垂直协作:顶层的管理者管理一个平行结构中的一些(更廉价的)雇员。在研究机构中,高级科学家提出想法,而初级科学家的任务就是来实现这些想法。随时间的推移,高级科学家可能不会做初级科学家会做的事情,但是他们会变成融资方面的专家。因此,就出现了这么一个可扩展的模型:高级科学家可以让中层科学家指导初级科学家等等。Jorge Cham 将这种模型称之为 Profzi scheme,因为一旦资金方面非常充足的话,它的表现就异常的优异。
同行间横向协作
在此模型中,高级科学家做所有事情,从点子到实现。他们喜欢尽可能地自动避免繁杂的工作。合作主要是用来得到一个不同的角度和专业互补点。这种模式在资金缺乏的前提下仍然可以良好的运行,但是它不能够适应参与者过多的现象:横向协作关系过于紧密。
每个模型支持不同类型的工作。我认为,垂直协作有利于长期的和可预测的工作。而横向协作有助于偶然情况和“狂野”的想法。
我愿意花宝贵时间去编程的理由
我比较赞成横向协作,这也正是为什么我老了但是我还在编程的原因。这看上去很不寻常,也许有人对此很不解。有些编程需要花费很多时间,我一年当中用在编程上的时间有两三个月之久。虽然我的时间很宝贵,我也可以将我的这些工作花点钱外包出去也行,但是我还是愿意自己亲手做这样的在别人看来浪费精力的事情,为什么呢?这里我引用 Donald Knuth 的话来做解释:
那些致力于更高层次和抽象思维的人们通常会错误地认为低层次的具体想法相对而言没有价值而且很可能被人遗忘。恰恰相反,最好的计算机科学家需要透彻地了解计算机实际运行的基本概念,而且计算机科学的精髓就在于能够同时理解众多层次抽象的能力。
但我也有我自己的观点:
我希望我的工作是重要的且能产生影响力的。然而,即使是被广泛引用的研究论文都很少有人详读细看,也是因为很少有研究论文能够产生显著的影响力。然而,从事与软件相关的事情是比较容易的。例如,最近Facebook的一个团队集成了我发布的一个 Apache Hive 中的压缩位图索引库:基于Hadoop 数据仓库框架。在 Apache 的配置单元我压缩的位图索引库之一:基于Hadoop框架的数据仓库。但是我敢打赌,Facebook 团队里肯定没人去花时间阅读我写的这个软件的原始论文。
一次又一次实践经历只是为了让自己更好的理解自己的想法。常见的情况是一些听起来似乎很有道理的想法却无法通过实践途径实现。我也经常通过执行我的数学论证发现bug。我能把这个工作外包给别人吗?也许可以。但结果估计不会是很让人满意。
随着时间的推移,你在编程上的运作做得会更好,驾轻就熟。几十年来,我一直在锻炼我自己的专业技能。如果你在哪一天从头开始,在数天内解决了一个难题,特别是当你知道别人可能需要数周或数月才能解决问题的时候,那种感觉是很享受的。
如果我的论点是合理的,就连 Donald Knuth 也支持我的观点的话,为何当我承认自己是一个程序员科学家的时候仍有人大跌眼镜?我觉得可能是大部分人都会拒绝编程这样低层次的工作吧,这一点从《闲人阶级理论》这可以得到证实。实际上,我们往往追求名望而不是实用。为了最大限度地提高信誉,必须了解休闲阶层的含义:你的工作 一定不要产生实际的作用。因此,成为一名CEO或政客要比成为护士或者厨师带来更大的声望。那些离现实世界更远的科学家们会更加有声望。编程是一项类似制 作工具的工作,因此来自有闲阶级的人们不会喜欢。人们会把自己称作工程师、分析师或是开发者,但很少称自己为“程序员”,因为这会显得太功利。
所以,并不是每个人都应该去学习编程。它是一个耗时的活动。我编写了这么多的程序,花了那么时间以至于很多令人兴奋的事情我都做不了。
老程序员还会出现哪些下场呢?
之前在“外刊IT评论”上看到一篇文章,讲的就是一位55岁的老程序员的感慨,对自己变老之后的境遇痛心不已。
50多岁时你的职业仕途会成为一个问题。如果你有很好的技术,有人雇你,你会有一个很高的职衔,或你是一个专家,或有很好的人际关系,你都有可能找到一个新的职务。否则,你会从衣食无忧沦落为无家可归。这是真的。我55岁,我的简历会让你感觉非常优秀,10年前我能挣到多达100万美元。现在我是一个流浪汉。我身体不是很好,没有医险,没有牙医。能找到的工作只是一些基本不需要技术的体力劳动,我也干不了。
不希望年轻的程序员以后也变成这样,只能给你们下面的一些建议:
- 职场上往上爬,不要停。
- 成为某一方面的专家——虽然保持足够宽的技术面也很重要,这样你才不会被淘汰。
- 建立一个人际圈。扩大它。
- 多样化你的投资。
- 有工作时医疗保险一定要上,这方面不要出问题。如果你没了工作,没了钱,医疗保险也没有,这将会成为一个严重的问题。
- 与人为善。但也不要犯傻。大部分你帮助过的人不会回报你。
- 提早打算,人生不如意十有八九。
程序员的出路在哪?
有着10年软件行业从业经验,专注于微软.NET技术领域及项目管理的徐洪军根据自己的现状总结出了三条出路,希望对你有用。
自己也是一个程序员,整天coding, debugging,有时候也在想,真的有一天写不动了,或者公司更倾向于用年轻人做这些事,因为便宜而且有精力,那我怎么办?虽然国外也有很多老程序员,像我认识的几个德国同事,年纪一大把了,还是个软件工程师,干得还有滋有味。他们不在乎名也不在乎利,全在兴趣。可我不一样啊!国内和国外的环境也不同。时常到网上了解一些程序员的出路问题,总结起来觉得下面三条比较可行。
出路一:向IT培训师转型
分析:IT企业在招聘新人后,一般都须经过培训才能上岗,这个培训有时是在岗位上进行的,由富有实践经验的“老人”负责。年轻人想要进入IT行业,必须接受这样的专业培训。如今IT培训市场蛋糕相当大,利润空间可观,行业发展前景看好。无论是在IT公司内部转型担任培训工作,还是到IT培训机构担任教师,都应该有发展空间。这样的工作不会有太大压力,且比较稳定,对年龄也没什么要求。而且也没有脱离本行。
优势:在这个行业工作多年,拥有丰富编程、项目经验,曾参与过许多成功案例。而多年积攒的行业人脉关系,还可以帮助我们发展企业客户,顺便担任市场拓展工作。
挑战:缺少培训工作经验。如果要向培训师转型,可能需要接受一些专业训练,提高担任培训师的能力。
出路二:向IT营销转型
分析:IT与其它行业不同,由于技术性较强,营销人员一般也须有较强的技术背景,且最好有着丰富经验。互联网公司、
电子商务公司、软件公司目前都需要有技术背景的营销人员;另外,电子商务的再度火爆,使得传统企业开始重视电子商务营销,也需要有技术背景的营销人员。这类工作薪水不低,加上提成应该可以拿到高于程序员的薪水,同时也比较稳定。
优势:深厚的技术背景,广泛涉猎了各种编程软件和工具,对IT行业也有相对深入的了解,这些都是比较大的优势。
挑战:程序员一般都很少与人打交道,口才也不太好,而营销工作恰恰需要跟人打交道,这可能是最大的挑战,要求彻底改变工作方式,加强沟通能力与人际交往能力;此外,营销工作会面临销售指标的压力,这些问题都是转型前必须深入考虑的。
出路三:向项目管理努力
分析:如果说前面两条出路转型的成分多,那么项目管理可以说是更为便捷的发展之路。目前,软件项目经理是人才市场上炙手可热的人才,有丰富经验、外语好的软件项目经理是抢手的香饽饽,供不应求,薪水自然也是水涨船高。在上海市劳动部门新发布的2005年软件行业薪资调查中,项目主管的薪水是同层次主管中最高的,年薪高位数达到211011元,平均年薪达109414元。最重要的是,一个优秀的项目经理可以在这个岗位上长久工作下去,并且有向高层进一步提升的可能。
优势:对有经验、有技术、有人脉、有能力、参与过多个软件开发、有一定经验的人,项目管理无疑是发展的一个很好的方向。
挑战:可能有些程序员在项目团队里一直是参与工作,很少担任过项目带头人。而很多公司在招聘项目经理时,都需要有带领团队进行项目开发的经验,这是一个劣势。最好参加一些项目管理方面的培训课程,自学相关的知识,增长自己在流程管理、沟通协调等方面的能力,以便积累资本,逐步向项目管理岗位迈进。
英文原文:Why I still program