你马上就要进行一次大的投资,也许并不是要投入大笔金钱,而是时间,是你的一生。大都数人对待工作的态度往往都是顺其自然,走一步看一步——我们刚刚深入了解了Java或者VB,老板有一天突然参加了一个热门技术的培训,于是我们就转而学习新技术,直到有人又把新的东西递到我们手里。我们的职业道路就是由一连串没有方向的偶然构成的。
在《程序员修炼之道》一书中,Dave Thomas和Andy Hunt谈到了编程中的偶然性。下面这个场景,会引起大部分编程员的共鸣:当你开始做一个程序的时候,或许手头上有一个从网上复制的示例程序,看上去这个程序可以使用。为了满足你的需要,你会对这个程序稍加改动——添加一些代码,再加一点。你根本就不知道自己在做什么,只是不断地做一些小的修改,直到这个程序完全满足你的需要。但问题是,这样做就像是用纸牌搭建房子,每增添一张纸牌,就增加了一分纸房子坍塌的危险。你根本就不知道这个程序是如何工作的,所以你每做一点儿改动,都有可能导致你的程序完全失败。
作为软件开发人员,用这种投机取巧的方式来编程显然不是什么好主意。但是很多人正是让偶然来决定职业道路上的各种选择。我们应该在哪种技术上投资?应该专注于哪个领域?是应该扩展知识面,还是深入学习一门学问?这些问题都是值得我们细细斟酌的。
想象一下你开了一家公司,现在正要生产你们的明星产品。如果这个产品失败了,公司就会破产。你会花多少精力来思考此产品的消费者是谁?在产品进入生产流程之前,你又会用多少时间来弄明白这个产品到底是什么?我相信你肯定会仔仔细细地考虑其中的每个小细节,然后亲自做出决定。
但是,在职业道路上,面临选择的时候,我们为什么就缺少了这番心思呢?如果你把自己的职业当成是一门生意(事实上它就是一门生意),那么你的“产品”就是由你提供的服务构成的。这些服务是什么?你又会把它们出售给谁?接下来的一年,对此种商品的需求是会增加还是减少呢?在这些选择上你愿意投下多少赌注?
稳定成熟的技术还是未成熟的新技术?
如果你想投资,可以有许多方法。你可以把钱存进银行,但是利息的增长往往跟不上通货膨胀的速度。买国债也是个办法,但同样,收益也不会很高。不过,这两种投资方法都无需承担什么风险。
你也可以选择把钱投入一个小规模的创业公司。投入几千美金换取公司的一小部分股份。如果公司的决策正确,而且这个决策被有效地执行了,那么你就有可能挣一大笔钱,否则就有可能会血本无归。
风险收益平衡不是什么新概念。小时候玩追人游戏的时候,如果我一直不停地跑到中间,大家都会觉得吃惊,但这样做就没人能追到我。这一概念充斥在我们的日常生活中。你要去参加一个会议,可已经迟到了,在考虑如何选择一条最快的路线时,就用到了风险收益平衡。你会想,如果交通畅通,我从第32大街走的话,就可以提前15分钟到;如果交通拥堵,我就彻底没希望了。
在有目的地选择投资哪种技术和领域时,风险收益平衡是一个很重要的权衡因素。15年前,学会如何用COBOL编程是一项低风险的投资。那个时候,COBOL程序员的竞争很激烈,平均工资并不高。掌握这门技术,你很容易就可以找到工作,但这份工作的经济回报较低。这就是低风险,低回报。
同样在那个时期,如果你选择学习了Sun公司的新语言Java,或许你不能轻易找到工作,因为那时候使用Java编程的公司很少。谁都不知道Java到底能用来做什么。
但是如果在那一时期你仔细观察这个行业,就像Sun公司一样,你或许会发现Java的特别之处。你可能会预感到Java一定会火。投资越早,你就越有可能成为这个新技术潮流的领导者。
这样,你的决定就是正确的。如果你做事用心,恰到好处,那你在Java上的投资会给你带来可观的收益,也就是我们所说的高风险,高回报。
还是15年前,假如你看到了Be公司新产品BeOS的演示,那个时候这是个令人赞叹的产品。利用多处理器技术,这项产品强大的多媒体处理能力令人震惊。这个平台一鸣惊人,评论员们也开始头晕目眩,预测这项技术必将成为操作系统中的有力竞争者。有了这个新的平台,新的编程方法、新的API和新的用户界面概念也就应运而生了。要学的东西很多,但是看起来这些努力似乎都是值得的。你倾注了大量的努力来成为第一个创造FTP客户端,或者是第一个创造BeOS个人信息管理系统的人。当Be公司刚发行了与Intel兼容的操作系统时,就开始有传言说Apple要收购这家公司,使用它的技术作为新一代Macintosh操作系统的基础。
但结果是Apple并没有收购Be公司。事实上,Be公司的产品就连高度专门化的小市场也没能打进去。这个产品没有得到进一步发展。那些为BeOS环境编程的开发人员慢慢痛苦地认识到,从长远看,他们的投资不会得到回报。最后,Be公司被Palm收购,这个操作系统也无疾而终。BeOS是一项高风险但是极具吸引力的技术投资,但是对那些投资者来说,这项新技术并没有给他们带来具体的长远收益。这就是高风险,零收益。
现在,我已经谈论了选择一项全新但是不稳定的技术和选择稳定成熟的技术的不同之处。选择一项已经进入商业生产流程的稳定技术,投资风险很低,但是与投资那些无人开发的很炫的新技术相比,收益也会比较低。那么,那些即将完成使命的技术呢?只需轻轻一推,这些技术就跌进了坟墓。
那谁又是推动者呢?你或许会想到最后仅剩的几位RPG程序员,他们都已头发花白,数着日子等着退休。而新一代的程序员可能听都没听说过RPG,他们学的都是Java和.Net。不难想象,一项陈旧的即将被淘汰的技术,它仅存的几名拥趸的职业生涯走向结束的过程,和这项技术本身走向终结的道路是一样的。
但是,旧的系统不是灭亡,而是被取代。在新旧交替的过程中,旧的系统需要与新系统对话。必须有人知道如何将新系统与旧系统融合,反之亦然。但是一般来说,新一代的程序员和那些即将退休的老程序员都不知道或者很想知道如何才能将两代系统的特点很好地融合起来。
所以,这就需要精明的技术人员来充当“技术收容所”的角色——帮助旧系统舒服且有尊严地消失。这项工作的重要性是绝对不能被低估的。就像大多数人在沉船之前会跳海一样,那些老的程序员要么就干脆退休,要么就向另一技术领域跨一步。作为一项仍然重要的技术的最后支持者,你当然是权威。但这也是极具风险的,一旦这个技术彻底退出游戏,那你就成了一种根本不存在的技术的专家了。但是,如果你行动得够快,还可以选择下一个正在衰退的系统,然后再来一遍。
选择是把双刃剑,决定权还是在你手里。