设为首页 加入收藏

TOP

1.6 程序员的理想
2013-10-07 12:56:16 来源: 作者: 【 】 浏览:80
Tags:1.6 程序员 理想

1.6 程序员的理想

我们希望从自己的程序中获得什么?我们通常(而不是从特定程序的特定功能)希望获得什么?我们希望保证正确性和作为其中一部分的可靠性。如果程序没有按照设想工作, 没有按我们可以信赖的方式工作, 小则是一个严重干扰、 大则是一个危险。我们希望它得到良好的设计, 这样它可以很好地满足实际需要; 如果它所做的事情与我们无关, 或者以某种我们厌烦的方式完成, 则不能说程序是正确的。我们同样希望可以负担得起; 我可能喜欢用Rolls Royce汽车或行政专机作为日常交通工具, 但是除非我是一名亿万富翁, 否则开销会影响我的选择。

这些方面是软件(工具、 系统)能得到外部的、非程序员的赞赏的所在。如果我们希望开发出成功的软件, 那么这些内容必须成为程序员的理想, 我们必须将它们永远记在心中, 特别是在程序开发的早期阶段。此外, 我们必须关注与代码本身相关的理想: 我们的代码必须是可维护的, 那些没有编写它的人可以理解它的结构和进行修改。一个成功的程序可以“生存”很长时间(通常有几十年)并经过反复修改。例如, 它将会移植到新的硬件上, 它将会增加新的功能, 它将会修改以使用新的I/O设备(屏幕、 视频、 音频), 它将会用新的自然语言进行交互等。只有失败的程序才永远不会被修改。为了保证可维护性, 一个程序必须只与它的需求相关, 它的代码必须直接体现 泶锏乃枷搿8丛有允羌虻バ院涂晌 ば缘牡腥耍 它对程来说可能是必需的(在那种情况下我们不得不处理它), 但是也可能是由于没有用代码清晰地表达出思想而产生。我们必须通过良好的编码风格来尽量避免它——风格是很重要的!

这听起来不太难, 但是做起来确实很难。为什么?编程(www.cppentry.com)基本上是简单的: 就是告诉机器你打算做什么。但是, 为什么编程(www.cppentry.com)中要面对很多挑战?计算机基本上是简单的, 它只能做很少几种操作, 例如两个数相加和基于两个数的比较来选择要执行的下一条指令。问题是我们并不希望计算机做简单的事情。我们希望“机器”帮助我们做那些难以完成的事, 但是计算机是挑剔的、 无情的和不会说话的东西。另外, 这个世界 任颐撬 嘈诺母 丛樱 因此我们并不能理解自己需求的实际含义。我们只是希望一个程序能够“像这样做一些事情”, 但是我们并不希望被技术细节所困扰。我们通常假设“基本常识”。不幸的是, 人们认为很普通的基本常识, 在计算机中通常完全不存在(通过某些精心设计的程序, 可以在具体的、 很好理解的情况下模拟它)。

这种思路导致的想法是“编程(www.cppentry.com)就是理解”: 当你需 嘈匆桓鋈挝袷保 你需要理解它。相反, 当你彻底理解一个任务, 你可以编写程序去执行它。换句话说, 我们可以将编程(www.cppentry.com)看做努力去彻底理解一个课题的一部分。程序是我们对一个课题的理解的精确表示。

当你在进行编程(www.cppentry.com)时, 你会花费很多时间尝试理解你试图自动化的任务。

我们可以将描述开发程序的过程分为四个阶段:

分析: 问题是什么?用户想要做什么?用户需要什么?用户可以负担什么?我们需要哪种可靠性?

设计: 我们如何解决问题?系统的整体结构将是怎样的?系统包括哪些部分?这些部分之间如何通信?系统与用户之间如何通信?

编程(www.cppentry.com): 用代码表达问题(或设计)求解的方法,以满足所有约束(时间、 空间、 金钱、 可靠性等)的方式编写代码。保证这些代码是正确的和可维护的。

测试: 系统化地尝试各种况,保证系统在所要求的所有情况下都能正确工作。

编程(www.cppentry.com)和测试相加通常称为实现。很明显, 将软件开发简单分为四个部分是一种简化。分别针对这四个主题编写的书都很厚, 并且很多书仍在讨论它们之间的关系。需要说明的一件重要的事情是开发的这四个阶段并不是独立的, 并且不一定严格按照顺序依次出现。我们通常从分析开始, 但是通过测试的反馈有助于对编程(www.cppentry.com)的改进; 编程(www.cppentry.com)工作带来的问题可能表明设计带来的问题; 按设计进行工作可能发现在设计中至今仍被忽视的某些方面的问题。系统的实际使用通常会暴露分析中的一些弱点。

这里的关键概念是反馈。我们从经验中学习, 根据学到的东西改变我们的行为。这是高效软件开发的根本。对于很多大的项目, 我们在开始之前不可能理解有关问题的所有事情和解决方案。我们可以尝试自己的想法和从编程(www.cppentry.com)中得到反馈, 但是在开发的早期阶段更容易(更快)从设计方案的书写、 按设计思路编程(www.cppentry.com)和朋友的使用中得到反馈。我们知道的最好的设计工具是黑板。你要尽可能避免独立设计。在已将设计思路解释给其他人之前, 不要开始进行编码工作。在接触键盘之前, 与朋友、 同事、 潜在用户等讨论设计和编程(www.cppentry.com)技术。从简单尝试到阐明思路的过程中, 你所学到的东西是令人惊讶的。最终, 程序只不过是对某些思路的表达(用代码)。

同样, 当你实现一个程序时遇到问题, 将目光从键盘上移开。考虑一下问题本身, 而不是你的不完整的方案。与别人交流: 解释你希望做什么和为什么它不工作。令人惊讶的是, 你向有些人详细解释问题的过程中经常会找到解决方案。除非不得已, 否则不要单独进行调试(找到程序错误)!

本书的重点是实现, 特别是编程(www.cppentry.com)。我们不讲授“解决问题”, 以及提供有关问题的足够例子和它们的解决方案。很多问题的解决是认识到一个已知的问题, 以及使用一个已知的解决方案。只有当大多数子问题以这种方式解决后, 你才可能专注于令人兴奋的和有创造性的“跳出固有模式的思维”。因此, 我们重点介绍如何用代码明确表达思路。

用代码直接表达思路是编程(www.cppentry.com)的基本的理想。这确实是很明显, 但是至今我们还缺少好的例子。我们将会反复回到这里。当我们需要在自己的代码中使用一个整数时, 我们将它保存在一个int类型中, 它会提供基本的整数操作。当我们需要使用一个字符串时, 我们将它保存在一个string类型中, 它会提供基本的文本控制操作。在最基本的层次上, 理想是当我们有一个思路、 概念和实体时, 即那些我们可以作为“事情”考虑的、 可以写在黑板上的、 可以加入讨论的、 (非计算机科学)教科书中讨论的东西, 我们需要这些东西在程序中作为一个命名实体(类型)存在, 并且提供我们需要它们执行的操作。如果我们需要进行数学计算, 则需要一个复数的complex类型和一个线性代数的Matrix类型。如果我们需要进行图形处理, 则需要一个Shape类型、 一个Circle类型、 一个Color类型和一个Dialog_box类型。当我们处理来自比如说一个温度传感器的数据流时, 我们需要一个istream类型(“i”表示输入)。很明显, 每种类型将提供适当的操作, 并且只提供适当的操作。这些只是本书中提到的几个例子。基于上述内容, 我们提供用于构建自己的类型的工具和技术, 以便用程序直接表达你希望体现的概念。

编程(www.cppentry.com)是实践和理论相结合的。如果你只重视实践, 你将制造出不可扩展的、 不可维护的程序。如果你只重视理论, 你将制造出无法使用的(或无法负担的)玩具。

如果你想获得有关编程(www.cppentry.com)理想的不同类型的观点, 以及少数在编程(www.cppentry.com)语言方面对软件做出重要贡献的人, 请看第22章“理想和历史”。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.5.1 有屏幕和没有屏幕 下一篇1.4 计算机科学

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: