至少20年前,绝望的经理和老板一直欺骗自己说软件开发是一种机械化的生产流程。制定出规格标准,架构师把这些规格标准转化为高层次的技术层面。设计师再把详细的设计文档填入这个框架,然后交给像机器人一样工作的程序员,他们一只手拿着低俗小说,另一只手慵懒地敲入设计执行方案。最后,Inspector 12收到完整的编码,经测试符合最初的规格标准后,准许通过。
经理们都希望软件开发机械化,这并不是什么奇怪的事。他们了解怎么做好机械化工作。几十年的经验教会了我们如何有效精确地制造有形的东西。所以,把我们从机械生产中学到的经验运用到软件开发上,我们就可以将其优化成一系列的生产流程。
在这个所谓的软件工厂中,雇员都是专才。他们坐在流水线旁自己的座位上,把Java的部件组合在一起,或者在软件车床上打磨一个VB的应用程序。Inspector 12是测试员。软件组件随着流水线向下流动,Inspector 12每天以同样的方式测试这些组件并盖章以示合格。J2EE设计师设计J2EE的应用,C++的编码师在C++环境下编码。这个工厂中,一切都划分得很分明,安排得有条有序。
但是,这个类比并不成立。软件至少应该适应软件需求。这个行业已经变了,商业人士知道软件很“温柔”,可以根据需求做出改变。但这也就意味着构建、设计、编码和测试环节也要相应地变得更加灵活,这些都是机械化生产过程无法满足的。
在变化如此迅速的环境下,灵活才能制胜。聪明的生意人在碰到难题时,会向身边的专业软件师寻求帮助。那么,你怎么才能成为这些生意人遇到困难时首先想到的“英雄”呢?答案就是——能够解决一切可能出现的难题。
但是这些难题是什么呢?没错,你我都一样,我们无法预测会产生什么难题。我只知道这些问题非常多样化,诸如严重的设计缺陷需要立刻修补,异构系统的集成,以及ad hoc报告的生成。面对这么多种问题,可怜的Inspector12可能会命不久矣了。
有句话是“什么都懂点,但什么都不专”,一般来说,这句话是贬义的,是说这个人没有专注于某一项领域,并深入学习,成为这方面的专家。但是,当你的购物网站“提交订单”出了故障,每个小时你都会损失上百个订单时,那这个“什么都懂点,但什么都不专”的人可能既知道这个程序代码是怎么运行的,还会做些简单的UNIX调试,分析RDBMS规范中潜在的性能瓶颈,并能检查网络路由器配置看是否存在某些隐蔽的问题,更重要的是,找出这些问题后,这个人可以很快做出架构和设计决定,纠正代码,部署一个新的系统。这样看来,机械化生产模式看起来就非常奇怪,而且具有很多的缺陷。
另外一个机械化生产模式无法立足的原因是:这种生产线使工作按照稳定的步伐直线进行,而软件项目通常是具有循环性的。不仅项目的流动是循环的,一个项目内部的工作也是循环的。在制定完软件的规格、架构和设计之前,程序员要么坐在椅子上等,要么在这段时间着手做其他项目。但这种同时参加多个项目的问题是,不管这个软件的开发目的是什么,当程序员要大展身手的时候,必须要依赖前后流程和经验。规格、架构和设计文档可能非常出色,但是如果程序员不懂这个系统是用来做什么的,他就不能很好地实现这个系统。
当然,我所说的不仅适用于程序员。软件开发上的任何一个职位都是如此。由于前后流程的问题,同时参加多个项目并不可行。结果是,我们的生产系统是低效率的。在机械化生产模式中,有各种各样的方法尝试解决效率低下的问题。但是,我们还没有想出办法来优化我们的软件工厂,使它变得更有效率。
如果你只是一名程序员、测试员、设计师或者架构师,那你很可能会坐在那里无所事事,或者当你的项目快要结束时,你却在忙忙碌碌。如果你只是一个J2EE程序员或者是一个.NET程序员,或者是UNIX系统管理员,那当一个项目或者一个公司的关注点开始转移出你擅长的技术领域时,你就会发现你不再发挥作用了。这不是说在一个项目的流程中,你的价值有多大(架构师的价值往往最大),而是说你可以在多广的范围内发挥作用。
如果你想在这个行业站稳脚跟,那我建议你要成为通才。如果你害怕你的部门裁员,那你就该知道精简团队的时候,一个只会测试或者只会编码的人肯定会被裁掉的。如果你就是单纯地想要卓越,那更好,你要动动脑筋掌握大局。
我编程,我快乐——7 做一名通才
书名: 我编程,我快乐
作者: [美] Chad Fowler
出版社: 人民邮电出版社
原作名: The Passionate Programmer:Creating A Remarkable Career In Software Development
副标题: 程序员职业规划之道
译者: 于梦瑄
出版年: 2010-8
页数: 202
定价: 39.00元
装帧: 平装
ISBN: 9787115233523