资源介绍
著者:Steve McConnell
翻译:天奥
近年来,关于软件开发的研究,进展是非常迅速的,但是开发实践却并非如此。许多程序仍然是错误百出,充斥着过时的技术,从而无法满足用户需要。软件工业界和学术界的研究者们,基本上已经解决了七十年代和八十年代在编程中遇到的问题,并发展了相应的技术。但是直到现在,这些技术中的大部分仍然没有在软件编程中广泛采用,其主要原因是这些研究成果主要发表在高度专业性的学术刊物中,普通的程序员们无心顾及。Sridhar Raghavan 和 Donald Chand(1989)的研究表明,一项新技术从诞生到被工业界广泛采用大约需要 5 到15 年的时间。本书的目的就是希望能够缩短新技术推广周期,使广大的程序员们可以迅速地获得软件开发的最新方法与手段。
本书所面向的对象
本书中所收集的研究和编程经验,将有助于你编写出高质量的软件,并且使得开发周期缩短。通过阅读本书,你将会对自己过去所犯过的错误有更深刻的理解,并懂得今后如何避免它们。同时,书中所收集的丰富的编程经验也将使你在控制大规模项目和按要求对软件进行修改和维护时感到得心应手。下面是适合阅读本书的几类人:
经验丰富的程序员
本书适合于想要得到一本全面易用的软件设计指南的那些资深程序员们阅读。由于本书的中心内容是广大程序员们所熟知的实现过程,因此,无论是受过正规训练而已经验丰富的程序员,还是完全靠自学成长起来的程序员,都能容易读懂本书所论述的先进技术和方法。
自学成才的程序员
本书尤其适合于很少受过正式专业训练的程序员阅读。1988 年有 100,000 人加入了程序员大军,但其中只有 40,000 人是从计算机专业毕业的本科生,其余则几乎全是靠自学成才的。同时,还有不计其数的其他各行各业的人员需要在工作中自己动手编一些程序。无论你所受到的正规计算机专业训练多或少,本书都将使你对有效的编程方法和技巧有更深刻的理解。
学生
本书不仅适于实践经验丰富但理论基础薄弱的自学者阅读,同时也适于那些理论基础较好但几乎不懂得什么编程诀窍的毕业生们阅读。新程序员们的某些实践经验来自于经验丰富的同事.但主要还是靠自己──吃一堑,长一智──获得的,这往往是一个艰苦而缓慢的过程。通过本书,可以使你在短时期内获得大量的经验和技巧,从而脱颖而出,所以,不妨一试。
本书的主要特点
完备的软件创建参考 本书从质量和编程思想等方面论述了软件构造问题。几乎囊括了生成子程序、数据的输入输出与控制结构、调试、代码调整策略与技术等各方面的细节。在使用本书时不必逐页阅读每一个细节,只要在需要时查阅你所感兴趣的章节即可。请把本书作为手册而不是作为教科书来使用。
方便而实用的检查表 书中附有用于检查软件的结构设计、设计方法、模块和子程序等质量的检查表,以供评估软件质量之用。同时,关于变量名、控制结构、方案布置、测试用例等等检查表也将使你获益匪浅。
紧跟潮流的新技术 书中论述了许多目前最先进的技术,其中许多还只是刚刚投入应用。由于本书取材于实践经验和最新研究成果两个方面,因此书中所提供的技术在相当长的时间内都不会过时。
高屋建瓴的观点 阅读本书将使你跳出日常琐碎工作的圈子,对软件开发有一个总体上的把握与认识。繁杂的日常工作往往使程序员们穷于应付而无暇阅读浩如烟海的书籍与资料,本书丰富而翔实的第一手资料将弥补这一缺憾,使你对软件开发的策略作出正确决策而不致陷入旷日持久的消耗战中。
通用的概念 无论你用的是 Pascal、C、C++、Ada、Basic、Fotran 还是 COBOL,都可以从本书所论述的概念、方法和技巧中获得教益。
丰富而典型性的程序示例 书中含有大约 500 多个正反两方面的程序示例。之所以引入这么多的示例,是因为笔者就是从各种例程中吸取了大部分的知识、经验与诀窍,因此笔者认为最好的学习方法是多看例程。例程是用多种语言写成的,因为对于程序员来说,掌握多种语言是其必不可少的基本素质之一。而且,只有掌握了不受语法规则限制的编程准则,才能真正有效地提高你的编程效率和质量。 为了减轻由于使用多种语言所带来的额外负担,在例程中除非确有必要,尽量避开了各个语言过于独特的部分。事实上,如果你真正注意每个例程所要说明的问题的话,那么不必详细理解每个程序段,你也可以清楚地懂得程序的意义。同时,为了进一步减轻读者的负担,对程序中有意义的部分作了标记。
本书的独特内容
本书关于创建活动的内容是从多个渠道获得的。有关创建活动的资料不仅分布得非常分散,而且往往没有成文资料,事实上,卓有成效的优秀程序员们所使用的技术并不神秘,但由于日常事务的繁重和工作任务的重压,程序员们很少有互相交流切磋的时间,因而,他们往往缺乏有关编程技巧的有效信息来源。
本书中所论述的技术不仅填补了初级与高级编程课本之间的空白,而且也为程序员们提供了一个有关编程技巧的信息来源。比如当你读过 C 语言初级教程之后,你可以再读 C 语言高级教程,然后再去读 C 语言高级的高级教程,但读完这些书后,你还能再读什么书呢?你可以再去读关于 PC、Macintosh 或 UNIX 等硬件或操作系统的书或者其它有关编程细节的书——因为你如果不了解实现环境详情的话是无法充分有效地使用语言和程序的。但这只是讨论了编程的一个方面,最有效的编程技术是那些不受实现环境及语言限制的技术。其它书往往忽略了这一点,但这恰恰是本书的重点。
写作本书的目的
需要一本关于软件开发有效技术的书,是软件工程界所公认的。由计算机科学技术委员会所发表的一份报告认为,提高程序质量和生产效率的最有效途径是出版一本关于软件开发有效技术的书,而且这本书应该以手册的形式来组织。
同时,计算机编程技术的发展史也证明急需一本这方面的书,本书正是出于这个目的才出版的。
创建活动未受到应有的重视
在一段时期内,软件开发与编码被当作是一回事,但随着软件开发周期中的其它活动被认识,这一领域内的主要努力全部集中到了项目管理、需求分析、设计和测试等方面,创建活动成了被遗忘的角落。
与这种现象相对应的思想是认为创建活动是软件开发中无关紧要的部分。于是,刚入门的程序员被派去进行创建工作,为那些已经由上一阶段设计好的子程序编码。工作几年之后,他可能会被提升至需求分析或项目管理部门。于是,这位程序员也会自豪地感到他不必再去编码了。
创建活动是非常重要的
创建活动被忽视的另一个原因是:研究者和程序员们错误地认为与其它开发活动相比,创建活动是一相对来说比较机械的活动,没有什么值得改进的。没有什么比这种想法离事实更远了。
在小规模项目中,创建活动约占工作量的 80%,在中型项目中也要占 50%的工作量,而发生在创建活动中的错误则占总错误的 50%到 75%。一项会产生 50%到 75%错误的工作是有许多待改进之处的。
一些人认为,虽然创建时的错误占到总错误的 50%到75%,但修改它们的费用与分析、设计错误相比要少得多。的确,创建时的错误修改费用与前期工作错误修改费用相比是要少一些,但是绝对数并不少。 Gerald Weinbers曾在 1983 年报道过三个错误,每个错误的修改费用都高达数百万美元,而每个错误都是一行编码层次上的代码错误。因此,绝不能以修改费用相对少为理由来忽视创建活动。 具有讽刺意味的是,被忽视的创建活动事实上是唯一任何规模项目都必不可少的活动。需求可以进行猜想而不必分析;结构可以被省略而不必设计。系统测试也可以不进行。但是,如果你想有一个程序的话,你就不得不进行创建活动。
本书的独特性
如果创建活动的重要性是非常明显的话,那么本书恐怕就没有出版的必要了。但事实上几乎没有什么书详细论述了这一主题。只有 15 年前出版过一本类似内容的书,讲述的是 ALGOL、PL/I、Ratfor 等早已过时的语言中的具体问题。其它偶尔也有几本这方面的书,但却是教授们针对教学用的演示性项目而写的,没有涉及到真正的工程问题。有些则偏激地推崇新技术而不恰当地贬低了一些非常实用的成熟技术。总之,就内容的新颖、翔实、丰富和实用来看,目前似乎还没有与本书相匹敌的关于创建活动的书。
翻译:天奥
近年来,关于软件开发的研究,进展是非常迅速的,但是开发实践却并非如此。许多程序仍然是错误百出,充斥着过时的技术,从而无法满足用户需要。软件工业界和学术界的研究者们,基本上已经解决了七十年代和八十年代在编程中遇到的问题,并发展了相应的技术。但是直到现在,这些技术中的大部分仍然没有在软件编程中广泛采用,其主要原因是这些研究成果主要发表在高度专业性的学术刊物中,普通的程序员们无心顾及。Sridhar Raghavan 和 Donald Chand(1989)的研究表明,一项新技术从诞生到被工业界广泛采用大约需要 5 到15 年的时间。本书的目的就是希望能够缩短新技术推广周期,使广大的程序员们可以迅速地获得软件开发的最新方法与手段。
本书所面向的对象
本书中所收集的研究和编程经验,将有助于你编写出高质量的软件,并且使得开发周期缩短。通过阅读本书,你将会对自己过去所犯过的错误有更深刻的理解,并懂得今后如何避免它们。同时,书中所收集的丰富的编程经验也将使你在控制大规模项目和按要求对软件进行修改和维护时感到得心应手。下面是适合阅读本书的几类人:
经验丰富的程序员
本书适合于想要得到一本全面易用的软件设计指南的那些资深程序员们阅读。由于本书的中心内容是广大程序员们所熟知的实现过程,因此,无论是受过正规训练而已经验丰富的程序员,还是完全靠自学成长起来的程序员,都能容易读懂本书所论述的先进技术和方法。
自学成才的程序员
本书尤其适合于很少受过正式专业训练的程序员阅读。1988 年有 100,000 人加入了程序员大军,但其中只有 40,000 人是从计算机专业毕业的本科生,其余则几乎全是靠自学成才的。同时,还有不计其数的其他各行各业的人员需要在工作中自己动手编一些程序。无论你所受到的正规计算机专业训练多或少,本书都将使你对有效的编程方法和技巧有更深刻的理解。
学生
本书不仅适于实践经验丰富但理论基础薄弱的自学者阅读,同时也适于那些理论基础较好但几乎不懂得什么编程诀窍的毕业生们阅读。新程序员们的某些实践经验来自于经验丰富的同事.但主要还是靠自己──吃一堑,长一智──获得的,这往往是一个艰苦而缓慢的过程。通过本书,可以使你在短时期内获得大量的经验和技巧,从而脱颖而出,所以,不妨一试。
本书的主要特点
完备的软件创建参考 本书从质量和编程思想等方面论述了软件构造问题。几乎囊括了生成子程序、数据的输入输出与控制结构、调试、代码调整策略与技术等各方面的细节。在使用本书时不必逐页阅读每一个细节,只要在需要时查阅你所感兴趣的章节即可。请把本书作为手册而不是作为教科书来使用。
方便而实用的检查表 书中附有用于检查软件的结构设计、设计方法、模块和子程序等质量的检查表,以供评估软件质量之用。同时,关于变量名、控制结构、方案布置、测试用例等等检查表也将使你获益匪浅。
紧跟潮流的新技术 书中论述了许多目前最先进的技术,其中许多还只是刚刚投入应用。由于本书取材于实践经验和最新研究成果两个方面,因此书中所提供的技术在相当长的时间内都不会过时。
高屋建瓴的观点 阅读本书将使你跳出日常琐碎工作的圈子,对软件开发有一个总体上的把握与认识。繁杂的日常工作往往使程序员们穷于应付而无暇阅读浩如烟海的书籍与资料,本书丰富而翔实的第一手资料将弥补这一缺憾,使你对软件开发的策略作出正确决策而不致陷入旷日持久的消耗战中。
通用的概念 无论你用的是 Pascal、C、C++、Ada、Basic、Fotran 还是 COBOL,都可以从本书所论述的概念、方法和技巧中获得教益。
丰富而典型性的程序示例 书中含有大约 500 多个正反两方面的程序示例。之所以引入这么多的示例,是因为笔者就是从各种例程中吸取了大部分的知识、经验与诀窍,因此笔者认为最好的学习方法是多看例程。例程是用多种语言写成的,因为对于程序员来说,掌握多种语言是其必不可少的基本素质之一。而且,只有掌握了不受语法规则限制的编程准则,才能真正有效地提高你的编程效率和质量。 为了减轻由于使用多种语言所带来的额外负担,在例程中除非确有必要,尽量避开了各个语言过于独特的部分。事实上,如果你真正注意每个例程所要说明的问题的话,那么不必详细理解每个程序段,你也可以清楚地懂得程序的意义。同时,为了进一步减轻读者的负担,对程序中有意义的部分作了标记。
本书的独特内容
本书关于创建活动的内容是从多个渠道获得的。有关创建活动的资料不仅分布得非常分散,而且往往没有成文资料,事实上,卓有成效的优秀程序员们所使用的技术并不神秘,但由于日常事务的繁重和工作任务的重压,程序员们很少有互相交流切磋的时间,因而,他们往往缺乏有关编程技巧的有效信息来源。
本书中所论述的技术不仅填补了初级与高级编程课本之间的空白,而且也为程序员们提供了一个有关编程技巧的信息来源。比如当你读过 C 语言初级教程之后,你可以再读 C 语言高级教程,然后再去读 C 语言高级的高级教程,但读完这些书后,你还能再读什么书呢?你可以再去读关于 PC、Macintosh 或 UNIX 等硬件或操作系统的书或者其它有关编程细节的书——因为你如果不了解实现环境详情的话是无法充分有效地使用语言和程序的。但这只是讨论了编程的一个方面,最有效的编程技术是那些不受实现环境及语言限制的技术。其它书往往忽略了这一点,但这恰恰是本书的重点。
写作本书的目的
需要一本关于软件开发有效技术的书,是软件工程界所公认的。由计算机科学技术委员会所发表的一份报告认为,提高程序质量和生产效率的最有效途径是出版一本关于软件开发有效技术的书,而且这本书应该以手册的形式来组织。
同时,计算机编程技术的发展史也证明急需一本这方面的书,本书正是出于这个目的才出版的。
创建活动未受到应有的重视
在一段时期内,软件开发与编码被当作是一回事,但随着软件开发周期中的其它活动被认识,这一领域内的主要努力全部集中到了项目管理、需求分析、设计和测试等方面,创建活动成了被遗忘的角落。
与这种现象相对应的思想是认为创建活动是软件开发中无关紧要的部分。于是,刚入门的程序员被派去进行创建工作,为那些已经由上一阶段设计好的子程序编码。工作几年之后,他可能会被提升至需求分析或项目管理部门。于是,这位程序员也会自豪地感到他不必再去编码了。
创建活动是非常重要的
创建活动被忽视的另一个原因是:研究者和程序员们错误地认为与其它开发活动相比,创建活动是一相对来说比较机械的活动,没有什么值得改进的。没有什么比这种想法离事实更远了。
在小规模项目中,创建活动约占工作量的 80%,在中型项目中也要占 50%的工作量,而发生在创建活动中的错误则占总错误的 50%到 75%。一项会产生 50%到 75%错误的工作是有许多待改进之处的。
一些人认为,虽然创建时的错误占到总错误的 50%到75%,但修改它们的费用与分析、设计错误相比要少得多。的确,创建时的错误修改费用与前期工作错误修改费用相比是要少一些,但是绝对数并不少。 Gerald Weinbers曾在 1983 年报道过三个错误,每个错误的修改费用都高达数百万美元,而每个错误都是一行编码层次上的代码错误。因此,绝不能以修改费用相对少为理由来忽视创建活动。 具有讽刺意味的是,被忽视的创建活动事实上是唯一任何规模项目都必不可少的活动。需求可以进行猜想而不必分析;结构可以被省略而不必设计。系统测试也可以不进行。但是,如果你想有一个程序的话,你就不得不进行创建活动。
本书的独特性
如果创建活动的重要性是非常明显的话,那么本书恐怕就没有出版的必要了。但事实上几乎没有什么书详细论述了这一主题。只有 15 年前出版过一本类似内容的书,讲述的是 ALGOL、PL/I、Ratfor 等早已过时的语言中的具体问题。其它偶尔也有几本这方面的书,但却是教授们针对教学用的演示性项目而写的,没有涉及到真正的工程问题。有些则偏激地推崇新技术而不恰当地贬低了一些非常实用的成熟技术。总之,就内容的新颖、翔实、丰富和实用来看,目前似乎还没有与本书相匹敌的关于创建活动的书。