《程序设计入门经典》
(美)金斯利—休斯著 顾晓峰 译 北京:清华大学出版社,2006.7
1章 编程概述
1.1 编程的发展过程
编程的历史课追溯到1822年,英国剑桥大学的Charles babbage研究差分机以及解析机;
1890年,美国国会人口普查推动了编程的发展;
1945年,bug被引入编程领域;
1954年,IBM开发了FORTRAN语言;
·······
1.2 编程的概念
本书作者给出的一种定义:编程就是利用某种语言与计算机对话,计算机能理解这种编程语言的文法和语法,然后帮助用户完成有用的工作。
编程就是编写代码,就是编写另一个程序可以了理解的代码,这个程序能够把代码翻译成计算机可以理解的代码,该程序称为解释程序。因此,编写代码时不是遵循计算机的规则,二是遵循编译器的规则。
编程的语言有很多种,虽然写出的代码不同,但是结果是相同的。
能编程的程序有开发环境和编译器。开发环境是用于输入代码的程序。
2章 学习编程的原因
在学习的早期阶段做些计划,不仅有助于一开始就能做出正确的选择,节约时间和精力,而不用考虑需要做什么,而且能够明白编程在哪些地方时自己将来事业中所感兴趣的。
2.1 学习的目的
l 为了职业;
l 解决问题;
l 为开源做贡献;
l 仅为娱乐;
l 名望。
2.2 学习的内容
编程的方法可分为传统编程和web编程两种。传统编程时给计算机编写应用程序,这其中有可分为商业编程/应用编程和学习/学术编程两类。Web编程主要是针对Internet的,其分为服务器端编程和客户端编程。
3章 计算机读取代码的方式
1、“自顶向下”的处理过程
这种情况只适合代码不太多的情形,这种方式在处理代码时,代码全部载入内存,占用的系统资源较大。
2、分解代码
把代码分解成较小的部分,不仅易于编写,也易于调试。在这一过程中,语句和函数是重要的手段和元素。
4章 从概念到代码:代码语言
本章主要介绍组成编程语言的一些要素,二进制、十六进制、字符表示以及运算符等。
5章 编程工具
主要是提到的一些提示对自己很有用:
l 做大量笔记;
l 定期练习,在工作时间外,做些自己的项目;
l 如果有机会使用多种编程语言,那么请不要放弃!
l 如果选择学习一种语言,首先要做些调查,选择一种最感兴趣的或最有用的;
l 保留所有的材料并注释——这是获得提高的一种好技巧;
l 保留所有编写的代码——这是以后评价自己成绩的良好方法;
l 刚开始尽量每天做些编程练习,练习的次数越多,编写的程序就越好,进步就越快;
l 编程刚开始是短期的爆发阶段——不超过1小时;
l 如果遇到问题是受到挫折,暂时搁到一边,以后再回来解决,短时间的中断后,可能会觉得注意力和技术都会有所提高;
l 对所做的事情和工作进度做好笔记;
l 如果发现任务变得困难,一个好的办法就是采用回溯法,在学习新知识之前,重新复习一下已熟悉的内容。
6章 简单编码
主要是介绍了注释代码、字符串、处理输入、输出、简单数学等。
注释代码是编程中必须要做的一件重要的事情,这样不仅方便自己学习,还能有效地删除造成错误或不再需要的代码行。
变量可以看成是已命名的数据占位符,并且可以引用。对于变量的命名不同的编程语言有不同的注意点要注意。
7章 编码结构
简单的代码只能实现简单的功能,要想代码实现更多的功能,则需要在代码中添加结构。本章讲述的代码结构主要有函数、条件结构、循环和数组。
在代码中添加结构可以用较少的代码实现较多的功能,使代码更容易阅读和理解,能够把代码分成几个逻辑部分,更容易发现错误的地方,更容易重用代码。
8章 解决问题
编程的主要目的是解决问题,而许多人则认为编程就是学习编写代码,他们忽略了编程的真正目的所在。
要解决问题,第一要清楚需求,即要解决的问题具体内容;第二,要研究解决的方法,研究不理解程序的每一个方面;第三,把问题分解成小问题,如一个应用程序可分为用户输入、屏幕输出、处理、界面4个方面来考虑。最后,开始编写代码。同时要保证应用程序得出正确的结果,确保应用程序给用户提示如何使用它,以及输出的结果是什么意思。
9章 调试
调试主要是为了发现和消除编写的代码或程序中的错误。错误对于编程来讲是不可避免的,在他人使用之前最好能够找到错误并修改它们。
9.1 人为错误
许多编程人员给他人的一种印象就是他们编写的每一行代码都是正确的,运行起来不会出错。这给那些刚开始学习编程的人造成了很到的压力,他们希望自己也能达到这种编程水平。他们很快就会觉得犯错或得出错误的信息会让自己难为情,他们为失败叹息并感到窘迫。
在此要澄清这种想法——错误是每个人都无法避免的,那些自诩可以编写出完美代码的任何编程人员,他们要不就是在撒谎,要不就是没有真正接触太多的编程。坚持编程,就会发现代码中出现的错误越来越少,这是良好的进步,你会感到自豪,但不要认为你的代码就是100%正确的。
9.2 错误类型
在代码中会有许多不同的类型错误存在。可以将它们分为3种:
l 编译器错误;
l 运行库错误;
l 逻辑错误。
9.3 编译器错误
编译器错误是大多数人编程遇到的第一种错误类型。编译器错误是在处理或把代码转换成独立的应用程序时由编译器产生的一种错误。
9.4 运行库错误
运行库错误是程序在运行时出现的错误。已编译过的程序,运行库错误通常意味着必须回到源代码中查看所发生的问题。当使用解释性语言时,对于诸如此类的错误,应重新回到源代码中检查错误。
9.5 逻辑错误
逻辑错误是最难发现的错误,因为这种错误不会影响代码的运行或编译,但会影响到代码的正确工作。
9.6 发现错误
编写完语句后在代码中发现错误是编程人员必须具备的技能。
1. 输入代码后阅读每行代码
这项工作看似简单,但很多人并不会这么做。这不需要太多的时间,所要做的就是快速浏览语句,并自问:
l 代码是否正确;
l 有没有发现打字错误或其他错误;
l 能否实现预定的目标;
l 是否使用了合适的行结束符?
2. 检查之前的语句
检查之前的语句能否实现自己所期望完成的任务,或代码的重点或目标是否改变?另外,通过阅读之前的语句,可以提醒自己想用代码来完成什么?
3. 保持结构清楚
要让代码的布局在自己的控制之下,确保代码中使用了正确的花括号和圆括号。
4. 注释、注释、再注释
用注释标记添加注释时,要注意注释标记是否和使用的编程语言相适应。应避免:
l 使用错误的注释标记;
l 忘了添加注释标记;
l 忘了给后面的代码行添加标记。
5. 删除代码的多义性
在代码紧凑和删除多义性两者之间选择,宁愿选择删除多义性,因为编写代码的人能理解代码,而其他人并不一定能理解。
6.分号
分号是语句的行结束符,在编写代码是一定要注意。
7. 检查变量
如果代码中有许多变量,则在方便的时候定期检查代码中变量的使用是否正确。
10章 界面
一个优秀的程序员不仅要擅长编写代码,让应用程序按要求工作,而且也需要能够让终端用户方便地使用此软件。界面对于用户否充分使用自己设计的程序十分关键。
界面是软件的一部分,当应用程序运行时,终端用户所看到的内容。
如对于基于文本的界面要做到:
l 有一个程序总体纲要,介绍程序的作用;
l 正确提示输入;
l 对输出的结果进行解释;
l 对程序的结束进行确认;
l 添加简单的帮助;
对于文本形式的界面,包含有不同的基本要素,要去了解并学习使用它们,利用它们创建出自己的图形化系统,所以没有人告诉你如何去正确使用每一个元素,一切要自己解决。
11章 综述编程项目
主要介绍编程项目从计划到执行,从开始到结束的整个过程。
11.1 计划编程项目
无计划的结果:
l 代码越多,功能越少;
l 更多的bug;
l 项目会花更长的时间;
l 缺乏功能。
11.2 计划
进行项目编程计划的步骤和阶段;
11.2.1 想法
想法可分为:
l 改良型:对于以实现的项目,考虑如何更好、更容易或以更少的时间或更少的步骤来完成它;
l 新的想法:解决新的碰到的问题;
l 市场短缺:用于解决市场上的某种问题。
有了想法之后,要做的第一件事就是把它记下来,这是因为:会忘记;想法会不断改变。
1. 把想法做成文档
初始清单:
日期:
时间:
用主要的术语描述自己的想法:
软件的主要问题是什么,软件将满足什么需求?
软件处理数据还是让工作自动化?
要满足的是专家需求还是多数人的需求?如果是专家需求,是谁的需求?如果不是专家需求,详细叙述有那些人觉得它有用?
你认为软件是否满足次要需求?
第一次产生或提出这个想法是否有特别的原因?如果有,是什么原因提示了这种想法?
列出想法所包含的关键功能:
想法和现存软件有什么不同?其优点是什么?
关于程序,是否还有任何不清楚的地方?
你认为软件是免费的还是商业性的?
你为什么选择免费或商业性软件?
如果是商业性的,其价格定位是多少?为什么?
如何发布软件?
软件发布后,是否提供技术支持?提供什么类型的支持?
附加/修改清单
日期:
时间:
计划有哪些改动的或附加的地方?
这对最初的想法有什么影响?
2. 时机成熟
一旦记下这些想法,先不要急于开始编程,留出一些时间来仔细考虑这个想法,从各个方面进行考虑,同时要进行调研:
现有的软件能执行最初清单中的多少项?
现有软件的价格?
使用是否普遍?
是否比自己的想法好?
11.2.2 要求
项目要求要详尽地描述最终软件所能够完成的任务。
1. 具体要求
日期:
时间:
应用程序将有哪些主要功能?尽可能地描述清楚。
应用程序的次要功能有哪些?尽可能地描述清楚。
主要功能和次要功能是包含在一个应用程序还是分散在独立的应用程序中?尽可能地描述清楚。
如果应用程序涉及到数据处理,那么数据从何而来?是通过键盘还是通过已处理的文件?
数据处理采用什么格式?
如果应用程序将用来处理数据,将处理过程分解为几个步骤?
将采用什么格式来处理数据?
与软件交互的终端用户有多少?
软件需要何种界面?是命令行,还是可视界面?
如何告诉用户怎么使用软件?(这儿有个窍门,就是考虑其他软件是如何给用户提供帮助和反馈的。)
应用程序是否需要保存文件?如果是,保存什么类型的文件?文件包含什么内容?
应用程序是否需要和其他应用程序交互?如果是,是哪个应用程序?
应用程序是否需要打印?如果是,打印什么?
2. 修改要求
添加新的功能和要求;
修改已有的要求;
删除要求;
为将来的发布推迟需求;
3. 选择语言
简单的项目适合使用脚本语言如VBscript等,复杂的项目则需要使用更高级的、更通用的语言,以及“可视化”语言。
11.3 编程阶段
编写基本的应用程序代码是编程项目的开端。最好的开端是给项目添加一些结构,应关注的方面有:
编写的代码应与终端用户第一次使用应用程序会发生的情况相关;
通过应用程序提供给终端用户的任何提示或指令;
通过终端用户,编写的代码与已有的应用程序发生的情况相关;
编写这类代码允许用户建立代码的大致框架,加入更多的代码,以及继续开发应用程序。
1. 测试
编写过程中要经常测试代码,测试某些特定的功能,可以增加自己编程的信心,同时可以减少项目结束时调试的工作量,有助于继续编码和测试其他的代码。
如果遇到故障,应在项目结束时对其进行处理,并做好详细的记录,因为在项目结束时可能忘记修改它们!!
2.记录错误
日期:
时间:
描述遇到的错误,尽可能地描述这些错误以及它们带来的影响。
你认为是哪部分代码造成的这个错误?
为什么决定不立即修改它?
3.注释代码
对所有的函数、变量甚至是函数块进行注释,即使代码看起来很清晰也要进行注释。
在代码开始的部分,对整个项目添加注释,也称为注释墓碑;
详细地注释每个函数;
详细地注释每个变量的意思;
对函数区作注释。
11.4 测试
在项目完成后,要进行全面的测试,以便更好地了解代码,减少代码的错误。测试应包括以下几个步骤:
测试造成运行问题的真正代码错误;
测试代码中的逻辑错误;
检查设计错误。
11.5 附加功能
对于处于预览测试阶段的程序,可以考虑添加一些附加功能。但要做的第一件事,就是要做好代码备份。任何时候都要做好备份源代码,这尤其主要。编写代码阶段不需要和计划阶段花费那么长的时间。添加一个功能后,就测试它,在继续前进。保留一份所做修改的清单,直到软件将来版本发布。
11.6 整理代码
首先,检查代码中是否存在没有用到的函数或代码;
其次,注意代码能不能紧凑或压缩。
11.7 最终测试
最终测试阶段只需集中查找并消除故障,在这个阶段,不用关心新的功能和新的想法。
12章 操作文件
操作文件的目的就是为了保存源代码,以便以后用时,能够及时的检索到。文件的生命周期包括4个阶段:创建、编辑、发布、存档/删除。
对于保存代码,可以通过编写相应的代码和函数来实现,至于如何保存,可有多种选择,可以选择创建单一文件或多个文件,或创建文件夹,以及弹出对话框来实现对文件的命名。同时,还可以编译已有的文件,以及对文件的内容进行追加。通过代码语句来控制文件的属性。
13章 注册表
通过编程来操作注册表。但是在使用时要注意一些问题:
使用注册表具有潜在危险性,会对系统造成严重的损坏;
不要轻易使用注册表;
一些编程工具不能访问注册表。
14章 组织、计划和版本控制
随着编程的深入,编写的代码文件会越来越多,如果早期不采取正确的措施,以后查找这些文件将会花费大量的时间和精力,并令人感到厌倦和受挫,甚至会丢失自己编写好的代码。所以,要学会控制代码,并让它们一直处于控制之下,在需要时能马上查找到它。
14.1 组织自己
首先,是对项目的计划,计划的越详细越清楚,事情就越好做。
其次,规划好时间。成功的关键是要诚实看待自己的实力和能够支配的时间,以小项目开始,逐步建立。这样,才能建立自己的编程框架,才能从事更大的项目,同时也能提高自己的计划能力。
再者,组织好自己的工作空间,
14.2 组织自己的PC
一是,电脑工作的环境的设置,根据自己的爱好和习惯进行设置。
二是,对文件夹进行分类组织。
三是,对文件的内容进行注释。
14.3 版本控制
一是,在代码注释区中添加版本信息。
二是,为文件添加摘要信息。
15章 编译代码和编译方法
编译代码需要花很长的时间来完成,每一次编译代码就意味着向完成编码更进一步。
15.1 编译代码
编译代码就是把手工输入的代码转换成计算机可以理解的一个过程。另外,所有的编译器并不相同,虽然,应用程序的运行方式相同,但是不同的编译器所创建的文档样式相当不同。
15.2 编译的作用
保护职能属性:编译过的代码可防止和剪切。
速度:计算机运行编译过的代码比较快。
功能提升、安全性、调试等。
15.3 编译代码的其他方法
使代码不易被别人阅读,可采用:模糊变量名、空白、脚本编码等等。
16章 发布项目
项目发布可选择实体发布或虚拟发布。实体发布就是利用CD、DVD等媒介来发布。虚拟发布就是通过Internet来发布。