- 我跟爸爸學(xué)編程:從Python到C++
- 葉哲語(yǔ) 葉洪濤
- 5107字
- 2020-11-23 14:59:38
序章 開啟你的編程之旅
致初學(xué)者
親愛的讀者朋友,如果你是第一次接觸編程,你可能首先會(huì)問(wèn),學(xué)編程很難嗎?或者其實(shí)你想問(wèn)的是,學(xué)編程有意思嗎?如果你還是中小學(xué)生,我想你大概不會(huì)問(wèn),學(xué)習(xí)編程有什么用?只有大人才會(huì)問(wèn)這樣的問(wèn)題。
我可以回答你,編程不難,而且十分有趣。
誰(shuí)說(shuō)不難啊?
我剛開始學(xué)編程的時(shí)候,覺(jué)得好難啊!如果說(shuō)現(xiàn)在覺(jué)得不是那么難,也是在學(xué)會(huì)了一些技巧之后。

確實(shí)是這樣,對(duì)于絕大多數(shù)從未接觸過(guò)編程的初學(xué)者來(lái)說(shuō),要有一個(gè)適應(yīng)的過(guò)程。因?yàn)樗枰愀淖兂R?guī)的思維方式,逐漸形成一種編程思維。對(duì)于不同的初學(xué)者,這個(gè)過(guò)程可能很短,也可能很長(zhǎng),少則數(shù)日,多則數(shù)月。
但這并不等于你最后一定會(huì)適應(yīng)。問(wèn)題在于,經(jīng)過(guò)這么長(zhǎng)的時(shí)間,你是否還保持著最初的興趣。至于它是否有助于你將來(lái)考大學(xué)、掙大錢,這個(gè)毋庸置疑。我不想多加論證,但我從沒(méi)見過(guò)哪一個(gè)優(yōu)秀的程序員是因?yàn)檫@個(gè)來(lái)學(xué)編程的。興趣才是引導(dǎo)他們進(jìn)入這個(gè)領(lǐng)域,并且獲得成功的主要?jiǎng)恿Α?/p>
編程不像你在學(xué)校學(xué)習(xí)其他的知識(shí),即便不是那么喜歡,只要你智商沒(méi)有問(wèn)題,外加一定的努力,總能取得不錯(cuò)的成績(jī)。但編程卻不是,等到最初的興趣消耗殆盡,你最有可能的選擇就是放棄。而一旦放棄可能就是永遠(yuǎn)。
雖然將來(lái)在大學(xué)期間,你仍然可以像應(yīng)對(duì)其他學(xué)科一樣靠刷題通過(guò)計(jì)算機(jī)等級(jí)考試。但是你要知道,手里拿著計(jì)算機(jī)等級(jí)證書卻不會(huì)編程的大學(xué)生,恐怕比持有駕照卻不會(huì)開車的司機(jī)還要多!
本書的目的在于,激發(fā)并保持你對(duì)于編程的興趣,并盡快幫助你順利度過(guò)適應(yīng)期。
你小的時(shí)候玩過(guò)樂(lè)高積木嗎?或者是像《我的世界》那樣的電子游戲?
其實(shí)編程有些像你玩過(guò)的樂(lè)高積木,無(wú)論哪種語(yǔ)言,也無(wú)論多么龐大和復(fù)雜的計(jì)算機(jī)程序,基本都是由簡(jiǎn)單的語(yǔ)句結(jié)構(gòu)和有限的規(guī)則重復(fù)搭建而成的。而且比樂(lè)高積木簡(jiǎn)便的是,眾多相似或者重復(fù)的部分并不需要你一塊一塊地重復(fù)構(gòu)建,而可以通過(guò)結(jié)構(gòu)化編程來(lái)實(shí)現(xiàn)。
如果相比你在學(xué)校課堂上所學(xué)的語(yǔ)文、數(shù)學(xué)以及科學(xué)課程知識(shí),初學(xué)一門計(jì)算機(jī)語(yǔ)言所應(yīng)記住和掌握的知識(shí)點(diǎn)要少得多。

當(dāng)然也有這樣的孩子,完全不需要適應(yīng)期,剛一接觸就喜歡上了編程,如魚得水。如果你是這種孩子,那本書就顯得沒(méi)有必要了。不僅本書,所有的實(shí)體書對(duì)你來(lái)說(shuō)意義都十分有限。
還有的家長(zhǎng)可能會(huì)說(shuō),我家是女孩,聽說(shuō)女孩不適合學(xué)編程。這話多少帶有一些性別歧視的意味。確實(shí),許多計(jì)算機(jī)興趣班很少有女生參加。而且計(jì)算機(jī)軟件的從業(yè)人員中,確實(shí)男性多于女性。
但是世界頂級(jí)的計(jì)算機(jī)專家中,從來(lái)都不乏女性的身影,而且世界上的第一名程序員也是女性。
還有,別忘了,本書的第一作者也是女孩哦!

還有的讀者問(wèn),我的英文不好,能學(xué)編程嗎?聽說(shuō)計(jì)算機(jī)程序都是由英文寫成的。
多數(shù)計(jì)算機(jī)語(yǔ)言的關(guān)鍵字都來(lái)自英文單詞沒(méi)錯(cuò),但這是它與英文僅有的聯(lián)系。而且關(guān)鍵字的數(shù)量相當(dāng)有限。你的英文學(xué)得好不好,與你能否學(xué)好編程,基本沒(méi)有什么關(guān)系。
本書適合的讀者群
本書主要面向10~14歲的中小學(xué)生。如果真心想學(xué)編程,其實(shí)無(wú)所謂早晚。學(xué)齡前不能說(shuō)早,大學(xué)也不能算晚。現(xiàn)在有不少小學(xué)三年級(jí)以下的孩子,已經(jīng)具備了足夠的閱讀理解能力和數(shù)學(xué)知識(shí)儲(chǔ)備,在老師或家長(zhǎng)的指導(dǎo)下使用本書,也是沒(méi)有問(wèn)題的。
如果你已經(jīng)上了高中,建議你直接去讀面對(duì)成人的、講解更深入的、有針對(duì)性的書籍。不過(guò),如果你對(duì)那些書中的內(nèi)容感到費(fèi)解,有些無(wú)所適從,從本書開始依然是一個(gè)不錯(cuò)的選擇。
市場(chǎng)上還有很多專業(yè)計(jì)算機(jī)書籍,其實(shí)并不太適合于初學(xué)者。其最大的問(wèn)題就是過(guò)于專業(yè),多注重于理論和算法的闡述,所用的實(shí)例也比較深澀,需要足夠的背景知識(shí),而這些無(wú)疑提高了學(xué)習(xí)編程的門檻。
如果在你第一次接觸樂(lè)高玩具的時(shí)候,就讓你搭建一座紫禁城,那么你一定會(huì)說(shuō):樂(lè)高好難啊!我不想學(xué)了。
編程也是一樣,也許只是編程教學(xué)用的實(shí)例很難,或者強(qiáng)調(diào)的是某種深?yuàn)W的算法。這其實(shí)取決于你的數(shù)學(xué)和分析能力,而與編程的難易無(wú)關(guān)。

本書的內(nèi)容
本書很可能是你所看到的第一本將Python和C++寫在一起的書,而且使用的是相同的實(shí)例。Python與C++是兩種差別十分巨大的語(yǔ)言,它們的語(yǔ)法和數(shù)據(jù)結(jié)構(gòu)、運(yùn)行機(jī)理和運(yùn)行效率、功能與定位都有著很大的不同。
Python是一種解釋型的語(yǔ)言,不能脫離開發(fā)環(huán)境運(yùn)行。其運(yùn)行效率較低,但開發(fā)效率較高,多用于AI領(lǐng)域。C++是一種編譯型語(yǔ)言,生成的執(zhí)行文件可以脫離開發(fā)環(huán)境直接在操作系統(tǒng)中運(yùn)行。其運(yùn)行效率較高,但開發(fā)效率較低,多用于系統(tǒng)開發(fā)領(lǐng)域。
那為什么要把它們放在一起講呢?
本書前言中說(shuō)過(guò),本書來(lái)源于小語(yǔ)的編程學(xué)習(xí)筆記,是在她學(xué)習(xí)C語(yǔ)言進(jìn)入瓶頸期的時(shí)候,開始學(xué)習(xí)的Python。換一種編程語(yǔ)言,反而促進(jìn)了對(duì)第一種語(yǔ)言的理解。在她的筆記中,就是兩種語(yǔ)言交叉來(lái)記錄的。
這也給你提供一個(gè)嘗試同時(shí)學(xué)習(xí)兩種不同計(jì)算機(jī)語(yǔ)言的機(jī)會(huì)。通過(guò)同樣的實(shí)例,你可以很容易對(duì)兩種語(yǔ)言的優(yōu)劣和異同有一個(gè)直觀的認(rèn)識(shí)。在將來(lái)學(xué)習(xí)第三種、第四種乃至更多語(yǔ)言的時(shí)候,就會(huì)比較從容。更不至于在嘗試某種AI項(xiàng)目時(shí)在學(xué)Python還是學(xué)C++之間猶豫不決。
本書從第9章開始引入圖形繪制的知識(shí),此后的很多重要概念例如函數(shù)和類,都是通過(guò)繪圖實(shí)例來(lái)講解的,這也與很多計(jì)算機(jī)語(yǔ)言類圖書不同。我覺(jué)得使用圖形來(lái)展示這些概念和方法要更為直觀,也更容易讓讀者理解和接受。俗話說(shuō)得好,“一幅好圖勝過(guò)千言萬(wàn)語(yǔ)”。
不過(guò)繪圖通常既不是一種計(jì)算機(jī)語(yǔ)言的基本能力,也不是核心功能。對(duì)于Python和C/C++來(lái)說(shuō),都有多種不同的圖形庫(kù)和繪圖模塊。有些是開發(fā)環(huán)境自帶的,有些則是第三方插件(就是由其他軟件公司或個(gè)人開發(fā),可以嵌入編程開發(fā)環(huán)境的組件)。Python我們選擇其自帶的Turtle(意思是海龜)繪圖模塊。C/C++則選用了第三方開發(fā)的圖形庫(kù)EGE。
需要說(shuō)明的是,不同的圖形庫(kù)功能各異,互相之間差異很大,而且互不兼容,可移植性(指一段程序原封不動(dòng)地應(yīng)用于另一種編程環(huán)境)也很差。不過(guò),如果你熟悉了其中的一兩種,再轉(zhuǎn)而使用其他的圖形庫(kù),操作起來(lái)也不難。
基于Windows的窗口編程,Python我們選擇的是自帶的Tkinter模塊,C/C++則選擇VS的MFC。關(guān)于MFC的地位和它是否已經(jīng)過(guò)時(shí),網(wǎng)上有過(guò)很多爭(zhēng)論。而我們選擇它主要是因?yàn)橄鄬?duì)于更基本的C++ Windows API,它的面向?qū)ο笞龅酶浞郑Y(jié)構(gòu)化更強(qiáng),也更容易上手,因而也更適合教學(xué)。至于你將來(lái)是不是會(huì)用它來(lái)搞開發(fā),學(xué)習(xí)它是不是浪費(fèi)時(shí)間等,那是急功近利的成年人才會(huì)考慮的問(wèn)題。
還是那句廣為流傳的話:
“學(xué)習(xí)的主要目的不是為了學(xué)到什么,而是學(xué)會(huì)怎樣學(xué)習(xí)。”

關(guān)于本書使用的語(yǔ)言區(qū)分標(biāo)記,在此說(shuō)明一下:

除了本書,我們還需要準(zhǔn)備什么?
一臺(tái)在學(xué)習(xí)本書時(shí)隨時(shí)可用的計(jì)算機(jī),以及相應(yīng)的編程軟件,此外還有網(wǎng)絡(luò)。
編程必須有計(jì)算機(jī)才能學(xué)會(huì)嗎?我想是的。
雖然也有這樣的程序員,手寫一大段程序,中間沒(méi)有一處錯(cuò)誤,但那一定具備了多年機(jī)上操作的經(jīng)驗(yàn)。
只通過(guò)自己看書就能寫出好程序的初學(xué)者,可能存在于40年前,計(jì)算機(jī)還沒(méi)有普及的年代。

不僅如此,每編寫一個(gè)程序都應(yīng)該上機(jī)運(yùn)行測(cè)試。不要試圖一開始就寫一個(gè)很長(zhǎng)的、結(jié)構(gòu)復(fù)雜的程序,而應(yīng)從短小的、功能單一的題目做起。否則,當(dāng)你第一次編譯的時(shí)候,突然面對(duì)上百個(gè)意想不到的錯(cuò)誤和警告消息的時(shí)候,你的信心會(huì)崩潰的。
在沒(méi)有弄懂之前,也不要照抄別人的大段程序。
我初學(xué)C語(yǔ)言的時(shí)候,有一位同學(xué)曾把參考書上一個(gè)長(zhǎng)達(dá)3頁(yè)的程序代碼輸入計(jì)算機(jī)。結(jié)果編譯時(shí)提示有26個(gè)錯(cuò)誤。因?yàn)門urbo C只檢查前26個(gè)語(yǔ)法錯(cuò)誤,26個(gè)錯(cuò)誤往往意味著無(wú)數(shù)個(gè)錯(cuò)誤。直到畢業(yè)設(shè)計(jì)結(jié)束,他的這個(gè)程序也沒(méi)能編譯通過(guò)。
現(xiàn)在網(wǎng)絡(luò)上有很多現(xiàn)成的共享程序代碼,很多程序員拿來(lái)就用。對(duì)于一名成熟的“碼農(nóng)”來(lái)講,這樣做似乎也無(wú)可厚非。畢竟可以減少很多學(xué)習(xí)、開發(fā)和調(diào)試的時(shí)間,而時(shí)間往往意味著金錢。但是對(duì)于初學(xué)者來(lái)說(shuō),不建議你這樣做。
學(xué)完這本書,我就能隨心所欲地編寫各種程序了嗎?
你永遠(yuǎn)不要指望通過(guò)一本書就能掌握一門計(jì)算機(jī)語(yǔ)言。不僅本書,以現(xiàn)在任意一種計(jì)算機(jī)語(yǔ)言的復(fù)雜程度,任何一本實(shí)體書都不可能幫你完成這個(gè)任務(wù)。
當(dāng)年我初學(xué)C語(yǔ)言的時(shí)候,曾經(jīng)買了一套Turbo C用戶手冊(cè)和參考手冊(cè)。其中包含了Turbo C 2.0版全部庫(kù)函數(shù)的用法,但Turbo C畢竟是一個(gè)安裝后只有約2MB的小軟件。現(xiàn)在的編程軟件,連幫助文件都動(dòng)輒以千萬(wàn)到十億字節(jié)計(jì),一本實(shí)體書怎么可能承載那么多的內(nèi)容呢?

那么,當(dāng)你想要自己開發(fā)一個(gè)新程序,需要了解更多的庫(kù)函數(shù)用法時(shí),該怎么辦呢?
不建議你去買或者去圖書館查閱很多實(shí)體書籍,而應(yīng)依靠電子文檔和網(wǎng)絡(luò)。Python官方網(wǎng)站上有中文版幫助文檔。VS有完整的離線幫助文檔MSDN,其中包含全部庫(kù)函數(shù)的用法。在很多網(wǎng)站上也可以查詢到Python和C++的開發(fā)文檔。
或者,用最直接的方式,直接提出你的問(wèn)題,然后萬(wàn)事問(wèn)“百度”。
準(zhǔn)備好你的編程軟件
在正式開始學(xué)習(xí)編程之前,你的計(jì)算機(jī)中應(yīng)該安裝好編程所用的軟件,也就是編程環(huán)境。如果你是在培訓(xùn)機(jī)構(gòu)學(xué)習(xí),那么老師應(yīng)該已經(jīng)把這些都準(zhǔn)備好了。如果是在家里學(xué),父母或者親朋中有人熟悉相關(guān)的軟件,你也可以請(qǐng)他們幫你安裝并設(shè)置好。但如果沒(méi)人能夠幫你,那就只好一切都由自己來(lái)做了,好在這個(gè)過(guò)程并不復(fù)雜。
以下列出學(xué)習(xí)本書所需的編程軟件環(huán)境。
Python
可以從Python官方網(wǎng)站下載Python的編程環(huán)境Python IDLE,目前其較新版本為3.7.4。如果你所用的操作系統(tǒng)還是較早的Windows XP SP3,那么這個(gè)版本是無(wú)法使用的。支持Windows XP SP3的最高版本為3.4.4。以上版本均可以從Python官方網(wǎng)站下載。
Python官方網(wǎng)站網(wǎng)址為:https://www.Python.org/。
Python文檔網(wǎng)址為:https://docs.Python.org/zh-cn/3/。
Python IDLE的安裝并不復(fù)雜,選擇默認(rèn)安裝方式即可。
在某些版本的Windows操作系統(tǒng)中安裝Python IDLE并第一次運(yùn)行時(shí),有可能會(huì)出現(xiàn)如下提示:
“無(wú)法啟動(dòng)此程序,因?yàn)橛?jì)算機(jī)中丟失api-ms-win-crt-process-l1-1-0.dll”
其解決方法如下。
用百度分別搜索如下兩個(gè)文件:
api-ms-win-crt-process-l1-1-0.dll
api-ms-win-crt-conio-l1-1-0.dll
將它們下載并復(fù)制到現(xiàn)在所用的操作系統(tǒng)的windows\system文件夾中即可。
提示:網(wǎng)上有的帖子會(huì)告訴你復(fù)制到system32文件夾中,或干脆讓你更新或重裝系統(tǒng),那可是不管用的。

Python官方網(wǎng)站上提供的Python IDLE文件為英文版,初始運(yùn)行界面如圖0-1所示(Shell窗口)。
編寫新程序時(shí),執(zhí)行File→New File命令,打開文件窗口,如圖0-2。
你可以像使用Windows附件中的記事本那樣,將Python程序?qū)懺诶锩妗?/p>
程序編寫完成后,執(zhí)行File→Save命令,將程序保存。
執(zhí)行Run→Run Module命令運(yùn)行程序,可以在Shell窗口中看到程序運(yùn)行的結(jié)果。如果你還未命名相應(yīng)的程序,軟件會(huì)提示先保存程序。
打開一個(gè)已保存的程序,在Shell窗口或文件窗口中執(zhí)行File→Open命令。

圖0-1

圖0-2
C/C++
C/C++的編程環(huán)境可以選用較龐大的Microsoft Visual Studio(簡(jiǎn)稱VS),也可以選用比較簡(jiǎn)單的Dev C++,但是本書第18~20章涉及MFC的部分則必須使用VS。
Microsoft Visual Studio
Microsoft Visual Studio(VS)是美國(guó)微軟公司出品的開發(fā)工具集,其中包含C/C++以及其他多種計(jì)算機(jī)語(yǔ)言(如C#、Java等)的集成開發(fā)環(huán)境(IDE),其較新版本為VS 2019。
VS分為社區(qū)版、專業(yè)版和企業(yè)版,其中社區(qū)版(Community)可免費(fèi)使用。
VS可以從其官方網(wǎng)站下載,網(wǎng)址為:https://visualstudio.microsoft.com/zh-hans/vs/。
注冊(cè)方法和使用權(quán)限可以查看官方網(wǎng)站上的說(shuō)明。
VS軟件十分龐大,安裝需要較長(zhǎng)時(shí)間,VS C++的運(yùn)行界面如圖0-3所示。

圖0-3
使用VS開發(fā)C/C++程序,其過(guò)程要比Dev C++復(fù)雜。在開始學(xué)習(xí)控制臺(tái)程序(也稱DOS程序或命令行程序)時(shí),需要按以下過(guò)程操作。
首先執(zhí)行“新建”→“項(xiàng)目”命令,彈出“新建項(xiàng)目”對(duì)話框,如圖0-4所示。

圖0-4
在左側(cè)模板欄中選擇Visual C++下的Win32,中間部分選擇“Win32控制臺(tái)應(yīng)用程序”選項(xiàng),在下方輸入自擬的項(xiàng)目名稱,單擊“確定”按鈕。
如圖0-5所示,在彈出的“Win32應(yīng)用程序向?qū)?ts02”對(duì)話框中,取消選中“預(yù)編譯頭”復(fù)選框,單擊“完成”按鈕。
這個(gè)過(guò)程必須照做哦!否則在后面使用EGE圖形庫(kù)時(shí),你的程序?qū)o(wú)法編譯通過(guò)。

此后,你即可在代碼窗口中編寫你的程序了。
執(zhí)行“調(diào)試”→“開始執(zhí)行”命令運(yùn)行程序,可以在一個(gè)DOS窗口中看到程序的運(yùn)行結(jié)果。

圖0-5
Dev C++
Dev C++是一個(gè)Windows環(huán)境下,適合初學(xué)者使用的輕量級(jí)C/C++集成開發(fā)環(huán)境(IDE),同時(shí)也是一款自由軟件,其較新版本是5.11。
除了本書第18~20章涉及MFC的部分,其他的C/C++程序在Dev C++中都可以執(zhí)行。
Dev C++中文版可以從https://pc.qq.com/detail/16/detail_163136.html網(wǎng)址下載。
Dev C++的安裝過(guò)程并不復(fù)雜,選擇默認(rèn)安裝方式即可。Dev C++中文版的運(yùn)行界面如圖0-6所示。

圖0-6
學(xué)習(xí)最初的控制臺(tái)程序時(shí),Dev C++不必像VS那樣必須新建一個(gè)項(xiàng)目,直接建一個(gè)C/C++源程序即可。但在第9章以后使用EGE繪制圖形時(shí),也需要先新建一個(gè)項(xiàng)目。
新編程序時(shí),執(zhí)行“文件”→“新建”→“源代碼”命令,打開代碼窗口。
你可以將C或C++程序?qū)懺谄渲小?/p>
程序編寫完成后,執(zhí)行“文件”→“保存”命令,將程序保存。
執(zhí)行“運(yùn)行”→“編譯運(yùn)行”命令,運(yùn)行程序,可以在一個(gè)新建的DOS窗口中看到程序的運(yùn)行結(jié)果。與Python IDLE類似,如果你還未命名該程序,軟件會(huì)提示你先保存程序。
打開一個(gè)已保存的程序,執(zhí)行“文件”→“打開項(xiàng)目或文件”命令即可。
EGE(Easy Graphics Engine)
EGE不是編程環(huán)境,而是一套針對(duì)Windows中C/C++的簡(jiǎn)易繪圖庫(kù)。本書第9~17章中C/C++部分的繪圖實(shí)例均使用EGE完成。之所以選擇EGE,是因?yàn)橄鄬?duì)于其他基于Windows的C/C++繪圖庫(kù),它更加友好、更容易上手。
EGE可從其官方網(wǎng)站下載,網(wǎng)址為:https://xege.org/。
EGE既可以在VS C++下使用,也可以在Dev C++下使用,具體的安裝和使用方法詳見本書第9章。
- LaTeX Cookbook
- R語(yǔ)言數(shù)據(jù)分析從入門到精通
- 潮流:UI設(shè)計(jì)必修課
- SAS數(shù)據(jù)統(tǒng)計(jì)分析與編程實(shí)踐
- Learning Hunk
- Learning ArcGIS for Desktop
- Mastering Android Game Development
- C和C++游戲趣味編程
- 軟件測(cè)試實(shí)用教程
- ASP.NET程序開發(fā)范例寶典
- 開源項(xiàng)目成功之道
- 深度探索Go語(yǔ)言:對(duì)象模型與runtime的原理特性及應(yīng)用
- Distributed Computing in Java 9
- 玩轉(zhuǎn).NET Micro Framework移植:基于STM32F10x處理器
- Learning Unreal Engine Game Development