十年前的这个星期,技术股云集的纳斯达克股票交易中心指数达到创纪录的历史高点:5048.52点。这是网络经济空前繁荣时的高点,数千名开发人员都在忙于为应用程序编写数百万行的程序代码,他们希望这些应用程序能带来计算领域的革命并成为网络世界的中流砥柱。那么这些代码现在又在何方呢?
今天的网络开发应用软件与之前的那些应用程序有很大的不同。用C/C++语言编写的耗资巨大的单块集成电路电子商务引擎和目录管理系统已经一去不复返,取而代之的是用更加灵活的编程语言(比如JAVA和PHP)写成的开源软件。同时,像Napster这样曾经前景光明的技术和Flooz, Geocities, and Kozmo.com这些在信息高速公路上驰骋一时的公司都已经如昨日黄花。你还记得ColdFusion吗?
在任何行业里,很多变化都是具有革命性的。但是当涉及到平台时,他们发展的速度通常会超过应用程序开发的速度。举例来说,Java是从网络泡沫时代脱颖而出的重要技术之一,但是现代的Java EE应用软件与早期的控制器程序代码几乎没有相似之处。同样,在网络泡沫时代为Linux编写的代码也不适合在现代服务器上运行。甚至是Apache Web服务器在2000年纳斯达克指数达到顶点之后,也经历了一次重要的体系架构重新设计。
与企业级应用软件相比,这可能意味着他们会继续在10年以上的遗留服务器上运行,大部分为早期网络编写的代码基本已经销声匿迹。这些代码在公司转型后,或者被淘汰,重写或者取消。
从表面上看,网络听起来就像一场大规模的生产力革命。软件开发人员所有的工作和所有的时间都用来开发那些应用程序,我们所做的努力就是为了来展示它吗?如果开发人员吸取了过去10年的教训,他们就能更好的理解在现代网络时代如何做到无往不胜。
第一个教训:强调灵活性
首先,很显然成功的网络项目必然是灵活的。"推出速度快,更新频率高"一直是开源领域的口号,它也适用于网络应用软件。如果我们能够接受真实世界的网络代码作为开发人员的里程碑时代已经过去,那么"毫无理由的会沦为网络项目早期阶段过度结构化的牺牲品",正如Joel Spolsky所言:"及时推出也是一种特性。一种真正重要的特性。你的产品必须具备这种特性"。特别是新兴企业,将产品快速推向市场的能力通常超过了架构搭建的份量。
这并不意味着你应该跳过会影响到安全性或者用户隐私权的领域。在今天的企业气候中,这种失误将是致命的。举例来说,但是可扩展性则是目前在网络项目早期搭建阶段被过份关注的一个领域。在某些情况下,制定为今后的可扩展性重新编写应用程序的计划时需要多加谨慎,也不要为了体系架构的问题而延迟首个版本的推出。
最近几年,我们看到这种快速而松散的方式甚至已经应用到个性鲜明的网站上。举例来说,目前网站可以自行搭建并体验规模的扩展。Twitter已经开始逐步淘汰用Scala编写的最新平台中的Ruby代码(Scala是一种在Java虚拟机上运行的多重范型编程语言)。
其次,研发部门通过编写的无数行代码或者某些类似的评定标准来衡量员工生产力的做法也是完全错误的。如果我们假设为网络应用软件创建的代码寿命本身就短,那么避免浪费员工劳动产出的最佳方法就是编写的代码宜少不宜多。
目前的开发人员可以使用各种用来编写网络应用程序的数据库,框架,服务器和工具。开发人员应该充分利用他们。随着网络应用软件开发逐渐成为配置这些预装组件的过程,开发人员应该将注意力集中在推动应用软件研发的业务逻辑上,而不是把时间浪费在重新编写那些与他们竞争对手的软件没有多大差别的代码上。
代码是消耗品;但开发人员不是
最后,企业应该根据软件的属性去评估他们的软件投资:软件实质上就是一种短期资产。定制网络应用软件的任何一种版本的知识产权价值都是很小的。更大的价值是来自于编写网络应用程序的开发人员,因为他们才是负责去重新编写代码来适应永远都在变化中的业务和技术版图的人。
以谷歌和微软为代表的这些企业都懂得雇佣,维护和激励优秀的软件开发人员的价值所在。他们在这方面也做的很好。但惭愧的还有很多企业将他们最好的编程人才浪费在毫无必要的中层管理职位上,或者让他们完全远离了他们擅长的领域,而不是让他们去发挥作为软件开发人员的价值。
或者网络泡沫经济时代最大的损失就是对软件研发人员的打击,在网络泡沫破灭以后,去专攻计算机科学或者信息技术学位的美国学生数量日渐减少。这是整个行业的耻辱,因为在过去10年里能屹立不倒的网站几乎凤毛麟角,对网络软件的需求也风光不再。
网络应用软件像所有软件一样必须经常进行更新,因为技术在进步,业务需要作出相应的变化。但是这并不意味着编程必须是一项徒劳的任务。对所有被搁置一边的软件来说,今天的网络比起10年前的网络要强大和先进的多。如果我们希望这种进步继续下去,软件开发人员就必须让年轻的从业人员相信软件开发是我们这个行业中发展最快和最至关重要的职业之一。