- 我跟爸爸学编程:从Python到C++
- 叶哲语 叶洪涛
- 5107字
- 2020-11-23 14:59:38
序章 开启你的编程之旅
致初学者
亲爱的读者朋友,如果你是第一次接触编程,你可能首先会问,学编程很难吗?或者其实你想问的是,学编程有意思吗?如果你还是中小学生,我想你大概不会问,学习编程有什么用?只有大人才会问这样的问题。
我可以回答你,编程不难,而且十分有趣。
谁说不难啊?
我刚开始学编程的时候,觉得好难啊!如果说现在觉得不是那么难,也是在学会了一些技巧之后。
确实是这样,对于绝大多数从未接触过编程的初学者来说,要有一个适应的过程。因为它需要你改变常规的思维方式,逐渐形成一种编程思维。对于不同的初学者,这个过程可能很短,也可能很长,少则数日,多则数月。
但这并不等于你最后一定会适应。问题在于,经过这么长的时间,你是否还保持着最初的兴趣。至于它是否有助于你将来考大学、挣大钱,这个毋庸置疑。我不想多加论证,但我从没见过哪一个优秀的程序员是因为这个来学编程的。兴趣才是引导他们进入这个领域,并且获得成功的主要动力。
编程不像你在学校学习其他的知识,即便不是那么喜欢,只要你智商没有问题,外加一定的努力,总能取得不错的成绩。但编程却不是,等到最初的兴趣消耗殆尽,你最有可能的选择就是放弃。而一旦放弃可能就是永远。
虽然将来在大学期间,你仍然可以像应对其他学科一样靠刷题通过计算机等级考试。但是你要知道,手里拿着计算机等级证书却不会编程的大学生,恐怕比持有驾照却不会开车的司机还要多!
本书的目的在于,激发并保持你对于编程的兴趣,并尽快帮助你顺利度过适应期。
你小的时候玩过乐高积木吗?或者是像《我的世界》那样的电子游戏?
其实编程有些像你玩过的乐高积木,无论哪种语言,也无论多么庞大和复杂的计算机程序,基本都是由简单的语句结构和有限的规则重复搭建而成的。而且比乐高积木简便的是,众多相似或者重复的部分并不需要你一块一块地重复构建,而可以通过结构化编程来实现。
如果相比你在学校课堂上所学的语文、数学以及科学课程知识,初学一门计算机语言所应记住和掌握的知识点要少得多。
当然也有这样的孩子,完全不需要适应期,刚一接触就喜欢上了编程,如鱼得水。如果你是这种孩子,那本书就显得没有必要了。不仅本书,所有的实体书对你来说意义都十分有限。
还有的家长可能会说,我家是女孩,听说女孩不适合学编程。这话多少带有一些性别歧视的意味。确实,许多计算机兴趣班很少有女生参加。而且计算机软件的从业人员中,确实男性多于女性。
但是世界顶级的计算机专家中,从来都不乏女性的身影,而且世界上的第一名程序员也是女性。
还有,别忘了,本书的第一作者也是女孩哦!
还有的读者问,我的英文不好,能学编程吗?听说计算机程序都是由英文写成的。
多数计算机语言的关键字都来自英文单词没错,但这是它与英文仅有的联系。而且关键字的数量相当有限。你的英文学得好不好,与你能否学好编程,基本没有什么关系。
本书适合的读者群
本书主要面向10~14岁的中小学生。如果真心想学编程,其实无所谓早晚。学龄前不能说早,大学也不能算晚。现在有不少小学三年级以下的孩子,已经具备了足够的阅读理解能力和数学知识储备,在老师或家长的指导下使用本书,也是没有问题的。
如果你已经上了高中,建议你直接去读面对成人的、讲解更深入的、有针对性的书籍。不过,如果你对那些书中的内容感到费解,有些无所适从,从本书开始依然是一个不错的选择。
市场上还有很多专业计算机书籍,其实并不太适合于初学者。其最大的问题就是过于专业,多注重于理论和算法的阐述,所用的实例也比较深涩,需要足够的背景知识,而这些无疑提高了学习编程的门槛。
如果在你第一次接触乐高玩具的时候,就让你搭建一座紫禁城,那么你一定会说:乐高好难啊!我不想学了。
编程也是一样,也许只是编程教学用的实例很难,或者强调的是某种深奥的算法。这其实取决于你的数学和分析能力,而与编程的难易无关。
本书的内容
本书很可能是你所看到的第一本将Python和C++写在一起的书,而且使用的是相同的实例。Python与C++是两种差别十分巨大的语言,它们的语法和数据结构、运行机理和运行效率、功能与定位都有着很大的不同。
Python是一种解释型的语言,不能脱离开发环境运行。其运行效率较低,但开发效率较高,多用于AI领域。C++是一种编译型语言,生成的执行文件可以脱离开发环境直接在操作系统中运行。其运行效率较高,但开发效率较低,多用于系统开发领域。
那为什么要把它们放在一起讲呢?
本书前言中说过,本书来源于小语的编程学习笔记,是在她学习C语言进入瓶颈期的时候,开始学习的Python。换一种编程语言,反而促进了对第一种语言的理解。在她的笔记中,就是两种语言交叉来记录的。
这也给你提供一个尝试同时学习两种不同计算机语言的机会。通过同样的实例,你可以很容易对两种语言的优劣和异同有一个直观的认识。在将来学习第三种、第四种乃至更多语言的时候,就会比较从容。更不至于在尝试某种AI项目时在学Python还是学C++之间犹豫不决。
本书从第9章开始引入图形绘制的知识,此后的很多重要概念例如函数和类,都是通过绘图实例来讲解的,这也与很多计算机语言类图书不同。我觉得使用图形来展示这些概念和方法要更为直观,也更容易让读者理解和接受。俗话说得好,“一幅好图胜过千言万语”。
不过绘图通常既不是一种计算机语言的基本能力,也不是核心功能。对于Python和C/C++来说,都有多种不同的图形库和绘图模块。有些是开发环境自带的,有些则是第三方插件(就是由其他软件公司或个人开发,可以嵌入编程开发环境的组件)。Python我们选择其自带的Turtle(意思是海龟)绘图模块。C/C++则选用了第三方开发的图形库EGE。
需要说明的是,不同的图形库功能各异,互相之间差异很大,而且互不兼容,可移植性(指一段程序原封不动地应用于另一种编程环境)也很差。不过,如果你熟悉了其中的一两种,再转而使用其他的图形库,操作起来也不难。
基于Windows的窗口编程,Python我们选择的是自带的Tkinter模块,C/C++则选择VS的MFC。关于MFC的地位和它是否已经过时,网上有过很多争论。而我们选择它主要是因为相对于更基本的C++ Windows API,它的面向对象做得更充分,结构化更强,也更容易上手,因而也更适合教学。至于你将来是不是会用它来搞开发,学习它是不是浪费时间等,那是急功近利的成年人才会考虑的问题。
还是那句广为流传的话:
“学习的主要目的不是为了学到什么,而是学会怎样学习。”
关于本书使用的语言区分标记,在此说明一下:
除了本书,我们还需要准备什么?
一台在学习本书时随时可用的计算机,以及相应的编程软件,此外还有网络。
编程必须有计算机才能学会吗?我想是的。
虽然也有这样的程序员,手写一大段程序,中间没有一处错误,但那一定具备了多年机上操作的经验。
只通过自己看书就能写出好程序的初学者,可能存在于40年前,计算机还没有普及的年代。
不仅如此,每编写一个程序都应该上机运行测试。不要试图一开始就写一个很长的、结构复杂的程序,而应从短小的、功能单一的题目做起。否则,当你第一次编译的时候,突然面对上百个意想不到的错误和警告消息的时候,你的信心会崩溃的。
在没有弄懂之前,也不要照抄别人的大段程序。
我初学C语言的时候,有一位同学曾把参考书上一个长达3页的程序代码输入计算机。结果编译时提示有26个错误。因为Turbo C只检查前26个语法错误,26个错误往往意味着无数个错误。直到毕业设计结束,他的这个程序也没能编译通过。
现在网络上有很多现成的共享程序代码,很多程序员拿来就用。对于一名成熟的“码农”来讲,这样做似乎也无可厚非。毕竟可以减少很多学习、开发和调试的时间,而时间往往意味着金钱。但是对于初学者来说,不建议你这样做。
学完这本书,我就能随心所欲地编写各种程序了吗?
你永远不要指望通过一本书就能掌握一门计算机语言。不仅本书,以现在任意一种计算机语言的复杂程度,任何一本实体书都不可能帮你完成这个任务。
当年我初学C语言的时候,曾经买了一套Turbo C用户手册和参考手册。其中包含了Turbo C 2.0版全部库函数的用法,但Turbo C毕竟是一个安装后只有约2MB的小软件。现在的编程软件,连帮助文件都动辄以千万到十亿字节计,一本实体书怎么可能承载那么多的内容呢?
那么,当你想要自己开发一个新程序,需要了解更多的库函数用法时,该怎么办呢?
不建议你去买或者去图书馆查阅很多实体书籍,而应依靠电子文档和网络。Python官方网站上有中文版帮助文档。VS有完整的离线帮助文档MSDN,其中包含全部库函数的用法。在很多网站上也可以查询到Python和C++的开发文档。
或者,用最直接的方式,直接提出你的问题,然后万事问“百度”。
准备好你的编程软件
在正式开始学习编程之前,你的计算机中应该安装好编程所用的软件,也就是编程环境。如果你是在培训机构学习,那么老师应该已经把这些都准备好了。如果是在家里学,父母或者亲朋中有人熟悉相关的软件,你也可以请他们帮你安装并设置好。但如果没人能够帮你,那就只好一切都由自己来做了,好在这个过程并不复杂。
以下列出学习本书所需的编程软件环境。
Python
可以从Python官方网站下载Python的编程环境Python IDLE,目前其较新版本为3.7.4。如果你所用的操作系统还是较早的Windows XP SP3,那么这个版本是无法使用的。支持Windows XP SP3的最高版本为3.4.4。以上版本均可以从Python官方网站下载。
Python官方网站网址为:https://www.Python.org/。
Python文档网址为:https://docs.Python.org/zh-cn/3/。
Python IDLE的安装并不复杂,选择默认安装方式即可。
在某些版本的Windows操作系统中安装Python IDLE并第一次运行时,有可能会出现如下提示:
“无法启动此程序,因为计算机中丢失api-ms-win-crt-process-l1-1-0.dll”
其解决方法如下。
用百度分别搜索如下两个文件:
api-ms-win-crt-process-l1-1-0.dll
api-ms-win-crt-conio-l1-1-0.dll
将它们下载并复制到现在所用的操作系统的windows\system文件夹中即可。
提示:网上有的帖子会告诉你复制到system32文件夹中,或干脆让你更新或重装系统,那可是不管用的。
Python官方网站上提供的Python IDLE文件为英文版,初始运行界面如图0-1所示(Shell窗口)。
编写新程序时,执行File→New File命令,打开文件窗口,如图0-2。
你可以像使用Windows附件中的记事本那样,将Python程序写在里面。
程序编写完成后,执行File→Save命令,将程序保存。
执行Run→Run Module命令运行程序,可以在Shell窗口中看到程序运行的结果。如果你还未命名相应的程序,软件会提示先保存程序。
打开一个已保存的程序,在Shell窗口或文件窗口中执行File→Open命令。
图0-1
图0-2
C/C++
C/C++的编程环境可以选用较庞大的Microsoft Visual Studio(简称VS),也可以选用比较简单的Dev C++,但是本书第18~20章涉及MFC的部分则必须使用VS。
Microsoft Visual Studio
Microsoft Visual Studio(VS)是美国微软公司出品的开发工具集,其中包含C/C++以及其他多种计算机语言(如C#、Java等)的集成开发环境(IDE),其较新版本为VS 2019。
VS分为社区版、专业版和企业版,其中社区版(Community)可免费使用。
VS可以从其官方网站下载,网址为:https://visualstudio.microsoft.com/zh-hans/vs/。
注册方法和使用权限可以查看官方网站上的说明。
VS软件十分庞大,安装需要较长时间,VS C++的运行界面如图0-3所示。
图0-3
使用VS开发C/C++程序,其过程要比Dev C++复杂。在开始学习控制台程序(也称DOS程序或命令行程序)时,需要按以下过程操作。
首先执行“新建”→“项目”命令,弹出“新建项目”对话框,如图0-4所示。
图0-4
在左侧模板栏中选择Visual C++下的Win32,中间部分选择“Win32控制台应用程序”选项,在下方输入自拟的项目名称,单击“确定”按钮。
如图0-5所示,在弹出的“Win32应用程序向导-ts02”对话框中,取消选中“预编译头”复选框,单击“完成”按钮。
这个过程必须照做哦!否则在后面使用EGE图形库时,你的程序将无法编译通过。
此后,你即可在代码窗口中编写你的程序了。
执行“调试”→“开始执行”命令运行程序,可以在一个DOS窗口中看到程序的运行结果。
图0-5
Dev C++
Dev C++是一个Windows环境下,适合初学者使用的轻量级C/C++集成开发环境(IDE),同时也是一款自由软件,其较新版本是5.11。
除了本书第18~20章涉及MFC的部分,其他的C/C++程序在Dev C++中都可以执行。
Dev C++中文版可以从https://pc.qq.com/detail/16/detail_163136.html网址下载。
Dev C++的安装过程并不复杂,选择默认安装方式即可。Dev C++中文版的运行界面如图0-6所示。
图0-6
学习最初的控制台程序时,Dev C++不必像VS那样必须新建一个项目,直接建一个C/C++源程序即可。但在第9章以后使用EGE绘制图形时,也需要先新建一个项目。
新编程序时,执行“文件”→“新建”→“源代码”命令,打开代码窗口。
你可以将C或C++程序写在其中。
程序编写完成后,执行“文件”→“保存”命令,将程序保存。
执行“运行”→“编译运行”命令,运行程序,可以在一个新建的DOS窗口中看到程序的运行结果。与Python IDLE类似,如果你还未命名该程序,软件会提示你先保存程序。
打开一个已保存的程序,执行“文件”→“打开项目或文件”命令即可。
EGE(Easy Graphics Engine)
EGE不是编程环境,而是一套针对Windows中C/C++的简易绘图库。本书第9~17章中C/C++部分的绘图实例均使用EGE完成。之所以选择EGE,是因为相对于其他基于Windows的C/C++绘图库,它更加友好、更容易上手。
EGE可从其官方网站下载,网址为:https://xege.org/。
EGE既可以在VS C++下使用,也可以在Dev C++下使用,具体的安装和使用方法详见本书第9章。