下面摘录《C++沉思录》里面一段:
我们很容易就会注意到:很多最成功的、最有名的软件最初是由少数人开发出来的。这些软件后来可能逐渐成长,然而,令人吃惊的是许多真正的赢家都是从小系统做起的。UNIX操作系统就是最好的例子,C编程语言也是。其他的例子还包括:电子表格、Basic和FORTRAN编程语言、MS-DOS和IBM的VM/370操作系统。VM/370尤其有趣,因为它完全是在IBM正规生产线之外发展起来的。尽管IBM多年来一直不提倡客户使用VM/370,但该操作系统仍牢牢占据IBM大型机的主流市场。
同样令人吃惊的是,很多大项目的最终结果却表现平平。我实在不愿意在公共场合指手画脚,但是我想你自己也应该能举出大量的例子来。
到底是什么使得大项目难以成功呢?我认为原因在于软件行业和其他很多行业不一样,软件制造的规模和经济效益不成正比。绝大多数称职的程序员能在一两个小时内写完一个100行的程序,而在大项目中通常每个程序员每天平均只写10行代码。
开销
有些负面的经济效益是由于项目组成员之间相互交流需要大量时间。一旦项目组的成员多到不能同时坐在一张餐桌旁,交流上的开销问题就相当严重了。基于这一点,就必须要有某种正规的机制,保证每个项目成员对于其他人在做什么都了解得足够清楚,这样才能确保所有的部分最终能拼在一起。随着项目的扩大,这种机制将占用每个人更多的时间,同时每个人要了解的东西也会更多。
我们只需要看一下项目组成员是如何利用时间的,就会发现这些开销是多么明显:管理错误报告数据库;阅读、编写和回顾需求报告;参加会议;处理规范以及做除编程外的任何事情。
由于这些开销是有目共睹的,所以很多人正在寻找减少它的途径。起码到目前为止,我还没有见过什么有效的方法。这是个难题,我们可能没有办法解决。当项目达到一定规模时,尽管作了百般努力,所有的一切好像还是老出错;塔科马海峡大桥和“挑战者号”航天飞机灾难至今仍然历历在目。
质疑软件工厂
有些人认为大项目的开销是在所难免的。这种态度的结果就是产生了有着过多管理开销的复杂系统。然而,更常见的情况是,这些所谓的管理最终不过是另一种经过精心组织的开销。开销还在,只是被放进干净的盒子和图表中,因此也更易于理解。有些人沉迷于这种开销。他们心安理得地那么做,就好像它是件“好事”——就好像这种开销真地能促进而不是阻碍高效的软件开发。毕竟,如果一定的管理和组织是有效的,那么更多的管理和组织就应该更有效。我猜想,这个想法给程序项目引进的纪律和组织,与为工厂厂房引进生产流水线一样。
我希望这些人错了。实际上我所接触过的软件工厂给我的感觉很不愉快。每个单独的功能都是一个巨大机器的一部分,“系统”控制一切,人也要遵从它。正是这种强硬的控制导致生产线成为劳资双方众多矛盾的焦点。
所幸的是,我并不认为软件只能朝这个方向发展。软件工厂忽视了编程和生产之间的本质区别。工厂是制造大量相同(或者基本相同)产品的地方。它讲求规模效益,在生产过程中充分利用了分工的优势。最近,它的目标已经变成了要完全消除人力劳动。相反,软件开发主要是要生产数目相对较少的、彼此完全不同的人造产品。这些产品可能在很多方面相似,但是如果太相似,开发工作就变成了机械的复制过程了,这可能用程序就能完成。因此,软件开发的理想环境应该不像工厂,而更像机械修理厂——在那里,熟练的技术工人可以利用手边所有可用的精密工具来尽可能地提高工作效率。
实际上,只要在能控制的范围内,程序员(当然指称职的)就总是争取让他们的机器代替自己做它们所能完成的机械工作。毕竟,机器擅长干这样的活儿,而人很容易产生厌倦情绪。
随着项目规模越来越大,越来越难以描述,这种把程序员看成是手工艺人的观点也渐渐变得难以支持了。因此,我曾尝试描述应该如何将一个庞大的编程问题当作一系列较小的、相互独立的编程问题看待。为了做到这一点,我们首先必须把大系统中各个小项目之间存在的关系理顺,使得相关人员不必反复互相核查。换言之,我们需要项目之间有接口,这样,每个项目的成员几乎不需要关心接口之外的东西。这些接口应该像那些常用的子程序和数据结构的抽象一样成为程序员开发工具中的重要组成部分。
分享到:
相关推荐
在70年代初期,进一步提出了“软件工厂”理念,强调软件开发的工业化流程,以及“软件过程”和“软件复用”,旨在提高软件质量和效率。软件工程知识体系(SWEBOK)是这个领域的一个重要框架,它定义了软件工程的各个...
而WPA加密虽然相比WEP有了很大的改进,但随着计算能力的提升,其安全性也受到质疑。WPA2加密使用更复杂的算法,大大提升了安全性。但是,即使是最先进的加密方法也不是完全不可攻破的。因此,对于最敏感的数据传输,...
- 题目中提到了“某工厂的仓库管理软件”,它被归类为应用软件,这是用来解决特定业务问题的软件,不同于系统软件,如操作系统,工作软件,或字处理软件。 2. 公文写作规范: - 公文中的“如有异议,请各单位或...
3. 防止抄袭软件的使用:高校考虑启用“反剽窃”软件来防止研究生论文抄袭,表明学术诚信和原创性在教育领域中的重要性。"启用"在这里是采取行动的意思,"启事"通常用于通知或公告,而"启示"则指启发或提示,因此在...
随着软件编程向智能化的转变,如Android操作系统对开发者友好性的提升,我们可以预见未来将有更多智能化的开发工具出现,这将进一步加速人工智能的普及和应用。正如钟义信老师所预言的,人工智能已经迎来了大发展的...
防火墙:质疑声中的凤凰涅磐..............27 病毒木马 毒性更胜AV病毒 禽兽完全解决方案(图) ..............29 宅男黑客放出“死亡问答” 安全公司专杀迅速跟进..............35 杂七杂八 老外利用电磁原理...
"可能是指试题的难度或真实性引发了某些人的质疑。在实际的学习过程中,考试试题的难度设置是合理的,能够反映出学生的真实水平,而试题的真实性和公正性则是保证教育质量的重要因素。 从标签"北大青鸟 Y2结业考试...
这个概念源于对传统网络安全边界的质疑,因为在现代分布式环境中,边界不再清晰,攻击者可能潜伏在内部网络中。 【生命周期安全管理】零信任不仅要覆盖用户访问,还要贯穿整个IT基础设施的生命周期,包括设计、生产...
他的职业生涯涵盖了从农村插队、工厂工作到出国留学、硅谷创业、中国创业以及风险投资的广泛领域。他的演讲强调了创业过程中故事与事实的差异,以及术与道的区别。 在创业故事的背后,陈博士指出,大多数成功的背后...
6. **设计模式**:良好的软件设计往往采用设计模式,如工厂模式用于创建对象,单例模式用于保证类只有一个实例,观察者模式用于事件驱动编程等。 7. **源代码结构**:一份完整的项目应该有清晰的源代码结构,包括主...
3. **设计模式**:设计模式是解决软件设计中常见问题的模板,如单例、工厂、装饰器、观察者等。熟练掌握并能在实际项目中应用这些模式,可以体现面试者的专业水平。 4. **框架**:Spring框架是Java企业级应用的基石...
Rod Johnson在其著作《Expert One-to-One J2EE Design and Development》中对Java EE框架的臃肿和低效提出质疑,并着手探索更加轻量级的开发框架。这一探索的成果便是interface21框架,而Spring正是在此基础上进一步...
- **设计模式的应用**:学习并掌握常用的设计模式(如单例模式、工厂模式等),可以在解决实际问题时提供成熟的解决方案。 #### 4. 工具的选择与使用 高效的开发者会根据项目需求选择合适的开发工具和集成开发环境...
开发者可能会对API的质量、易用性或向后兼容性提出质疑。例如,一个API可能频繁变动,导致依赖它的应用需要不断更新,增加了维护成本。因此,"取消对API的抗辩"意味着要通过改进API设计和管理来提高其质量和稳定性。...
正是因为对这点心知肚明,Googel等科技巨头一直在努力研发属于自己的大脑——运行高度先进软件的多台协同服务器。同时扎克伯格对旧金山科技公司Vicarious下了重注投资,这家公司研究的就是如何复制大脑皮层——这个...
在Wicket的发展过程中,有一些声音质疑其是否必要重新创造一个Web框架。尽管存在这样的争议,但Wicket通过提供一套独特的开发模式和功能集证明了自己的价值。它强调了开发者生产力的重要性,并且设计时充分考虑到了...