`
javasee
  • 浏览: 922720 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

《软件工艺》——前言

阅读更多

(《软件工艺》一书即将由人民邮电出版社出版,详情参见http://www.china-pub.com/computers/subject/huodong/ry12.23/tyzt.htm。本文是该书的前言。)

前言<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

用“工艺学”来比喻软件开发,这可以看成是对软件开发的一次追根溯源:优秀的软件开发者们一直都知道,编程的确就是一门工艺技巧。不论软件开发者拥有多少纷繁芜杂晦涩难懂的知识,但最终左右着应用程序开发的仍是那种不可言说的感觉和经验。举个最简单的例子:也许有人能够了解Java语言所有深奥幽暗的技术细节,但除非这个人能培养起自己对于软件的审美感觉,否则他永远无法真正精通应用程序的开发。而与此相反,一旦某个人获得了那种软件开发的感觉,特定的技术细节就变得几乎完全无关紧要了。优秀的开发者总是在不断地学习、使用最新的技术和技巧,对于他来说,学习一门新的技术只是软件开发者生涯中的家常便饭而已。

“软件工程”这个词是由NATO属下的一个研究组在1967年提出的,这个研究组还提议召开一次会议,专门讨论“软件所面临的问题”。1968年,由NATO科学委员会主办的这次会议在德国迦米许*召开,会议提交的报告就被命名为《软件工程》[1]。在这份报告中,Peter NaurBrian Randell这样写道:“我们之所以选择了‘软件工程’这个颇具争议性的词,是为了暗示这样一种意见:软件的生产有必要建立在某些理论基础和实践指导之上——在工程学的某些成效卓著的分支领域中,这些理论基础和实践指导早已成为了一种传统教义。”

和他们一样,本书之所以选择了这样一个颇具争议性的书名(并提出了很多颇具争议性的观点),是为了暗示这样一种意见:软件开发的实践者们有必要开始关注软件开发的工艺。软件工艺是如此重要,因为它让我们摆脱“制造业”的隐喻(这个隐喻正是软件工程所带来的),并让我们开始关注从事软件开发工作的。软件工艺带来了另一种隐喻:拥有技术的软件开发者抱定决心要掌握自己所从事的工艺,对自己的劳动成果负责并以之为荣。

软件工艺并非与软件工程或者计算机科学针锋相对格格不入。与科学和工程学相比,软件工艺是另一种完全不同的教义,但又能与这两者很好地共存,并从中获益。现代的铁匠能够因为更好的工具、原料和知识而获益;同样,软件工艺也能够因为更好的计算机、可复用的组件和更先进的编程语言而获益。铁匠们在自己的工作中融入了技巧和艺术,从而超越了科学和工程学的范畴;同样,软件工艺能够指导开发者生产出优秀的应用程序及系统,因此也可以超越计算机科学和软件工程学的范畴。对于这一论点,最好的佐证大概就是UNIX和现在的GNU Linux了——这两个系统之所以能够获得如此巨大的成功,完全是因为它们的创建者拥有精巧的手艺、高超的技术和无私的奉献精神。

很长时间里,人们一直试图强迫商用软件的开发适应软件工程的要求。这种削足适履的做法引发了不少的问题,而软件工艺则给这些问题带来了答案。软件工程的发展,很大程度上是为了满足NATO成员国开发超大型国防系统的需要。而商用软件的开发与军用系统、政府系统的开发却有着天壤之别:商用软件的规模通常比较小,并且开发时间通常不能超过18个月。只有极少数商用软件是由超过20人的团队所开发的,大多数开发团队都不会超过10人。对于拥有200人以上的大型团队,软件工程能够很好地解决他们所遇到的问题;但对于“团队中的个人应该如何锻炼自己的技艺”这个问题,软件工程却几乎没有任何论述。

软件工程鼓励在软件开发中使用人海战术[2]。软件工程不但没有解决“如何培养拥有高超技艺的开发者”这个问题,反而试图降低对软件开发工作的技术要求——软件工程认为:只要投入更多的人手,所有的问题都可以得到解决。这实际上就是在暗示:如果可以拥有大量技术水平较低的开发者,那么我们就不需要那些技术超群的“高手”。

尽管人海战术有时能够成功,但最终得到的软件多半也是垃圾:它们多半臃肿迟钝,总是无法令人满意。用户被眩目的图片和动画搞得晕头转向,但就是无法真正掌握软件的用法。由于无力学会使用整个软件,他们会有强烈的挫折感,并只使用很小一部分功能来满足自己的需要,而更多的功能则根本无人问津。

软件不一定非得要像这样的。

我时常看到这样的软件开发团队:他们开发出真正有价值的应用程序、为用户的业务提供了实实在在的帮助,却因为没有遵循软件工程的最佳实践而懊恼不已。其实,他们大可不必这样想。在我看来,唯一能够检验团队能力的标准,就是看他们能否按时发布用户需要的软件、并在随后的时间里不断地补足、扩展这个软件。按时发布第一个版本固然重要,但始终及时地发布后续版本、并保证每个新版本都在原来的基础上有所提升,这可能是更加重要的。

常常有人问我“如何雇佣好的开发者”。面对这个问题,我的回答总是:去找那些成功地开发过几个应用程序、并在交付后仍然留在项目组中直到下一个升级或维护版本发布的开发者。能够交付最初的产品,就说明这个人有能力开发出可用的产品;参与第二个版本的开发则使他有机会反思自己最初的开发方式带来的效果。如果某个开发者把这样的过程重复了三遍,我敢打赌他在软件开发工艺方面已经拥有了足够的技能和经验,这将使他能够继续获得成功。

在本书的书名中,我把软件工艺称为“新的渴求”。之所以这样说,是因为我发现软件开发社群中的很多人开始盲目地追逐新技术,而忘记了真正重要的东西。软件开发的终极目标是要创建出高质量的、坚固的软件程序,并使之为用户创造价值。现在,我们的当务之急就是要培养出新一代的合格开发者,让他们拥有实现这一目标的能力。

“为用户创建应用程序”的过程曾经是妙趣横生、激动人心的,但软件工程几乎完全抹杀了这种令人愉悦的体验。现在,软件工艺将把软件开发过程中的乐趣和激动重新还给软件开发者。



* 译者注:Garmish,位于阿尔卑斯山区,德国度假胜地。

[1] Peter NaurBrian Randell编辑,《软件工程》(Software Engineering: A Report on a Conference Sponsored by the NATO Science Committee),NATO1969

[2] Steven Levy,《黑客》(Hackers),Penguin Books1994p. 88

分享到:
评论

相关推荐

    定制自己的个性化ROM——前言及基础定制部分

    定制自己的个性化ROM——前言及基础定制部分定制自己的个性化ROM——前言及基础定制部分

    助理业代培训系列——前言.ppt

    助理业代培训系列——前言.ppt

    软件工程——实践者的研究方法

    软件工程——实践者的研究方法 作者简介 译者序 前言 第一部分产品和过程 第 1 章产品 第 2 章过程 第二部分软件项目的管理 第 3 章项目管理的概念 第 4 章软件过程和项目的度量 第 5 章软件项目计划 第 ...

    SCWCD之路——前言

    NULL 博文链接:https://superzhouych.iteye.com/blog/565269

    机票预订系统——大数据库课程设计——设计报告材料.pdf

    机票预订系统——大数据库课程设计——设计报告材料.pdf机票预订系统——大数据库课程设计——设计报告材料.pdf机票预订系统——大数据库课程设计——设计报告材料.pdf机票预订系统——大数据库课程设计——设计报告...

    ug8.0数控编程超级教程——金牌讲解序言

    ug8.0数控编程超级教程——金牌讲解序言

    软件工程-理论与实践(许家珆)习题答案

    还涉及到软件系统的目标、软件系统提供的服务、软件系统的约束和软件系统运行的环境。它还涉及到这些因素和系统的精确规格说明,以及系统进化之间的关系。 需求分析的基本任务包括: (1) 抽取需求 分析现行系统...

    XG系列PLC用户手册(基本指令篇).pdf

    前言 ————————————————— 编程方式概述 ————————————————— 软元件的作用和功能 ————————————————— 基本顺控指令说明 ——————————————...

    商业分析全攻略——用数据分析方法解决商业问题

    一、前言 1、商业分析、数据分析、数据挖掘、人工智能的关联与区别 2、数据分析从业者,如何走上商业分析之路 3、产品、运营、销售、营销、风控、供应链管理人员,需掌握多少商业分析的技能 二、概念篇——数据分析...

    “非物质文化遗产”——守艺人.docx

    前言 非物质文化遗产保护是一项全球性的课题,也是一项世界性的难题。在21 世纪经济全球化和我国加速城镇化发展的背景下,保护和传承非物质文化遗产,已成为文化遗产保护事业新的重要课题。传承人是非物质文化遗产的...

    阿里云 linux服务器安装tomcat(图文详解)

    ————————————————————————————————————————————————————————————————————————————————————————————————————...

    Java集合类——前言

    Java.util 包提供了集合类(也称容器类) Java集合主要有4个部分: List列表 Set集合 Map映射 工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections) 这个图乱的一批o_o … emmmm大致可以看出,上面有...

    商业分析全攻略——用数据分析方法解决商业问题视频课程

    一、前言 1、商业分析、数据分析、数据挖掘、人工智能的关联与区别 2、数据分析从业者,如何走上商业分析之路 3、产品、运营、销售、营销、风控、供应链管理人员,需掌握多少商业分析的技能 二、概念篇——数据分析...

    自动化前言——数据挖掘技术及其应用(177页).pptx

    自动化前言——数据挖掘技术及其应用(177页).pptx

    软件工程

    纲领五个块:软件基础——&gt;软件分类——&gt;软件发展阶段——&gt;软件过程——&gt;软件工程过程——&gt;软件的生存期软件的分类软件的发展阶段软件的发展总是依赖于硬件的发展,每个阶段的硬件水平不同导致软件开发的水平不一...

    大话软件工程-需求分析与软件配套视频

    大话软件工程——需求分析与软件(978-7-302-54442-5)配套视频 1号-前言.mp4 2号-第1篇-知识概述.mp4 3号-第2篇-需求工程.mp4 4号-第3篇-设计工程.mp4 5号-第3篇-设计工程-概要设计.mp4 6号-第4篇-设计工程-详细设计....

    台达UPS监控软件方案——某铁路集中监控方案

    本文主要针对台达UPS采用本身监控软件在某铁路上的方案介绍。关键词:UPS监控方案Abstract:Keyword:一.前言随着UPS技术和IT技术的不断发展,UPS朝着智能化、高频化、网络化等方面实现技术创新,UPS的应用深入各行...

    论文研究-序言——突发事件应急管理.pdf

    论文研究-序言——突发事件应急管理.pdf, 编辑出版突发事件应急管理专刊(本期前14篇论文), 旨在加强非常规突发事件应急管理领域的学术交流, 提升我国在非常规突发事件应急管理研究的整体水平, 促进我国非常规突发...

    《软件文档与标准前言》课件

    软件文档与标准前言,欢迎大家分享并下载、

Global site tag (gtag.js) - Google Analytics