我要翻译《Think Python》-003 第一章 编程之道 (2)

  程序是为实现特定目标或解决特定问题而编写的命令和指令。可能是解决数学问题,例如求方程式或求多项式的根,当然也可能是符号计算,例如搜索或替换文档里的文字或者编译程序。
  不同编程语言会有一些差异,但是所有语言都有相似之处:

  输入:

从键盘输入,从文件读取,或者从其它设备输入

  输出:

显示结果在屏幕上,保存在文件,或者输出到其它设备

  数学:

提供基础数学运算,例如加法和乘法

  条件判断:

验证条件并执行相应的代码

  循环:

提供一些循环操作,通常用来处理一些重复变化

  信不信由你,这些就是编程语言的全部!不管你用过的程序有多么复杂,它都基本都是由这些指令所组成。因此,你可以把编程理解为:把一个很大很复杂的任务拆分成很多小的子任务,直至简单到可以用这些基本的指令来执行为止。此时概念可能会有点模糊,不过待后面我们探讨到算法的时候,我们还会回到这个话题上来的。

1.3 什么是调试?

  编程是容易出错的。程序错误称之为Bug,而跟踪除错的过程称之为调试。
  3种类型的错误可以在程序里抛出:语法错误,运行时错误和语意错误。调试过程中区分这些错误类型可以让你很快的消除错误。

1.3.1 语法错误

  如果没有语法错误,Python就可以运行脚本。否则,解释器就会抛出错误信息。语法是指程序结构和语法结构的规则。例如,括号必须是成对出现,如(1+2)是合法的,而缺一个括号,如 8) 则是是语法错误。
  日常阅读的时候,读者往往可以忍受很多语法错误,因此我们可以无障碍阅读E.E.卡明斯的诗歌。而Python则不同,只要程序中存在任何语法错误,它都会抛出错误信息并终止运行。因此在学习编程的初期,你可能会花费较多的时间去跟踪语法错误,但随着经验的增长,发现和解决语法错误的能力会随之增强。

1.3.2 运行时错误

  第二种类型是运行时错误,顾名思义,这种错误是发生在程序运行的过程中的,也可以称为异常。通常表示运行过程中的突发情况。本书的前几章的范例中很少有这种错误。

1.3.3 语义错误

  第三种就是语义错误。如果程序中有语义错误,虽然程序成功运行起来,并且不会产生任何错误信息。但事实上程序并没有按你所想的那样去执行指令。
  也就是说,程序并非按你的本意去运行的,你写的程序在语义上是不对的。判断语义错误相对比较麻烦,此时你只能通过查看程序的输出结果来搞清楚程序是如何执行指令的。

1.3.4 实验调试

  对程序员而言,调试能力是最重要的能力之一。虽然调试的过程会让你抓狂,但是你不得不承认调试的过程很有挑战性,这恰恰也是编程最大的乐趣。

  在某种程度上,调试过程就像侦探破案一样。各种线索摆在眼前,然后你再推断出导致结果的事件和过程。
  调试也像一门实验科学,一旦你发现程序有问题,你会不断的尝试修改和测试。如果假设是正确的,那测试结果也一定是在预测范围之内,反之亦然。正如夏洛特.福尔摩斯所说:“当你排除了所有的不可能,剩下的不管有多么不可能,那一定就是真相。”(柯南道尔,《四人的标志》)
  对有些人来说,编程就是调试。也就是说,编程就是一个逐步调试的过程,直至程序完成你让它做的事情。在我看来,你可以从头开始做一个程序,逐步修改,调试,直至做完一个完整的程序。
  例如,Linux是一个开源操作系统,它的核心代码有上千行,不可思议的是,Linux是由Linus Torvalds编写的一个探索英特尔80386芯片的一个简单程序。据拉里.格林菲尔德所说,“Linus 早期做的这个项目,最初只是为了切换打印内容,并最终演化成现在的Linux系统。”(Linux用户指南 测试版1)
  在后面的章节里面,我将会对调试和编程实战提出更多的建议。

1.4 正式语言和自然语言

  自然语言:人们日常交流的语言,如英语,西班牙语,法语等等。这完全是自然流露,无需刻意修饰的语言。
  正式语言:人们为特定程序设计的语言。例如,数学家在计算中表示数字与符号之间关系的语言就是正式语言;化学家用分子式表示化学结构也是正式语言。因此最重要的是:

编程语言是设计出来处理运算的正式语言。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyfjg.html