- 我跟爸爸學編程:從Python到C++
- 葉哲語 葉洪濤
- 3035字
- 2020-11-23 14:59:38
前言

小語
小學畢業的那個暑假,爸爸問我要不要學習計算機編程。編程?聽起來好像很酷的樣子,我想也沒想就答應了。
不過等到真學起來,才發覺完全不是那么回事兒。中間的過程真是一言難盡。尤其是上了初中之后,功課愈加繁忙,我需要從吃飯、睡覺和休息中擠出一些時間來面對那全然陌生的語句和代碼。就連那臺我平常用來看網劇、購物、玩游戲的電腦也一下子變得生疏了。
剛剛學習程序兩個月的時候,爸爸幫我報名參加一場省級競賽。同場競賽的一百多名選手之中,算上我只有三名女生。至于我身邊的朋友,幾乎沒有誰和我一樣。她們中好多人根本不知道Python和C++為何物。因為學習的時間太短,那次比賽我并沒有晉級,我感到有些沮喪,但爸爸卻安慰我,他只是想讓我感受一下競賽的氛圍,增長一些見識。至于比賽成績并沒那么重要。
那時我根本沒有想到,半年之后我用剛剛學會的MFC制作的“初中知識關聯學習卡片”會在2019年度全國中小學生電腦制作比賽中獲獎。在得知獲獎的那個晚上,爸爸對我說:“你記了這么多的筆記,都可以出書了!”
從小父母便教育我,好東西要與大家分享。因此,我也愿意把我的學習經驗來與大家分享。更何況,按照爸爸的說法,在與大家分享的過程中,大家有所得,而我并無所失,反而能在這個過程中,使自己得到更多的鍛煉!

語爸
2018年夏天,小語剛剛取得中學的錄取通知書。在等待開學的這段時間里,我和語媽就孩子的假期安排產生了分歧。語媽主張提前學一些初中課程,我則更傾向于讓她學習一些課程以外的技能,例如,計算機編程。
語媽滿臉質疑,“現在就學編程,太早了吧!”
我和語媽都是“七零”后,從大學時代才開始接觸編程。上計算機課是我們能夠接觸到電腦的唯一機會。在此之前,即便想學,也沒有那個條件。畢竟計算機對于那時的大多數普通中學生來說,就是一個傳說。而那時的計算機,除了編程之外,我不知道還能干什么別的(當然,那時也有電腦游戲)。
但現在已經完全不同。我們的孩子幾乎是看著電腦,伴著網絡長大的。對于一般的初中生來說,除了編程和一些比較專業的應用,電腦(還有智能手機)上的東西大概沒剩下什么是他們不會用的。既然有這么好的條件,為什么不早一點開始學習編程呢?
從什么語言開始學呢?我接觸計算機的前十年所學的計算機語言中,只有C/C++仍然在廣泛應用,那就從它開始吧!
于是,在那個暑假,我從收集的計算機語言教材中挑選了幾本我認為相對易于理解的,又專門網購了一些針對中學生編程競賽的書籍。在給小語講解了一些計算機編程基本概念之后,便都扔給她自己去看了。因為當初我就是自學C語言的。而且我的工作也很忙,并沒有那么多時間陪她。
這種“放羊”式的教學效果很不理想,半個假期過去了,除了一些書面的競賽知識題答得尚可,對于編寫程序,小語始終未得入門。于是我擠出一些時間嘗試著對照書上的內容給她講解,但每每看到她一臉懵懂的表情,我的內心深受打擊。
難道真的如語媽質疑的那樣,起步太早了嗎?
靜下心來,獨自翻閱給小語準備的書籍,回想自己當初的學習歷程,我發現一個以前一直忽視的問題。我之所以能夠看懂這些書,是因為我會。如果沒有相關的知識背景,這些書中講的大多數內容,我恐怕根本看不懂,更別說零基礎的小語了。我也相信有一些天才兒童、特別聰明伶俐的孩子,對于計算機程序有著天生的敏感,能夠一學就會,但我家小語顯然不是這種孩子。
于是我放棄了教科書,開始自行設計一些有針對性的實例,力求簡單、典型、實用。一邊講解,一邊讓小語嘗試直接上機編寫和實測。等到假期結束,小語已經記了一大本筆記,完成了十多個實例程序的編寫和實測,學習的效果開始逐漸顯現。
當初為了說服語媽,我曾專門上網去找論據。看到有網友在提相同的問題:“初一學編程,早嗎?”下面自然是回答什么的都有,而好幾個明顯是中學生朋友給出的答案居然是:“初中才學啊?晚了!”
我當時并沒有拿這種說法當真。不過在一年后的今天,我越來越認同這種說法,并且為沒讓孩子更早接觸編程而感到后悔。因為身處一個區域的中心城市,初中生所面臨的學業負擔可想而知,甚至要比高中生的壓力還要大。在課業任務重的時候,小語每周甚至抽不出兩個小時的時間留給編程。如果早兩年,無疑她會有更加充裕的時間。
就是在這種緊張的環境中,小語在學習函數、指針,以及更為復雜的面向對象編程的時候,逐漸遇到了瓶頸。于是我說:“咱們先把C++放一放,換一種語言,學學Python。”
我沒有準備新的實例,直接使用前面為C/C++設計的實例,讓小語用Python再做一遍。有了C++的基礎,學習基本語法結構相對簡單的Python,小語的學習進度這次要快得多。
就這樣,在投入了從國慶到春節幾乎所有的閑暇時間后,小語基本學會了使用Python和C++兩種語言面向對象編制Windows簡單應用程序的技巧,并參加了2019年第二十屆全國中小學電腦制作比賽,獲得了初中組計算機程序設計項目全國二等獎。
興奮之余,我指著小語那厚厚的幾大本筆記開玩笑說:“這些都可以拿去出書了。”
“可以嗎?”她眨著眼睛問,“有了這本書,是不是像我一樣笨的孩子都可以學會編程了?”
我家小語當然不笨,她和其他孩子一樣喜歡聽到別人夸她聰明。我們也相信任何一個如她一樣受到父母鐘愛的孩子都不是笨孩子。孩子小的時候,我曾教她要學會分享,現在她要把她學習編程的經驗和經歷拿出來與大家分享。
于是我們開始認真地考慮出書的可能性。在接下來的幾個月中,小語又用她本就不多的休息時間整理了筆記,重新上機測試每一個程序以保證它們不會出錯。我則幫助她潤飾文字并增加必要的注釋,這便是本書內容的來源。
雖然書中的例子最開始都是我設計的,最后的定稿也是由我來做,但書中絕大部分程序和記述文字都出自小語之手。所以,這首先是她的作品。
致謝

感謝親愛的媽媽,每每在我冥思苦想的時候,給我送來好吃的,讓我緩解壓力,并對我們的書提出中肯的意見。還要感謝我的班主任柴老師和學校的榮主任、趙老師對我學習和參賽的支持。
最后要感謝我親愛的爸爸,是他通過精心設計的巧妙實例,帶我進入了美妙的編程世界,也是他逐一指出我筆記和程序中的錯誤。我的語言表達能力有限,文本表述也欠佳,學業又緊張,沒有足夠的時間,一切都有賴于爸爸的潤飾和把關。

首先感謝語媽對我們的全力支持。她是本書的第一位讀者,提出了很多十分中肯的意見。感謝沈陽市沈東初級中學的老師們對小語參加課外學習和活動的支持。
原創性聲明
本書中的文字和程序均為作者自行編制完成。實例中所用的圖片,包括第17~20章實例中使用的荷塘、金魚和動物圖片均為作者自行拍攝。書中所列實例亦為作者自行設計,但作為計算機語言方面的教學用書,所用實例應力求簡單和典型,具有普遍性,與其他著作中的實例可能會有雷同之處,這一點在所難免。
在寫作本書之前,作者曾經學習和參考過多種Python和C/C++方面的著作和一些相關網站的內容,從中獲得過巨大的啟發和幫助。但在本書寫作過程中,沒有對其觀點和內容形成實質性的引用,因此也就沒有列出參考文獻。
特別說明
在一些資深的程序員看來,本書中的示例程序恐怕不夠專業和完美。確實,在整理這些示例程序的過程中,在保證程序運行結果的條件下,我們對它們盡可能簡化,以增加可讀性,便于讀者理解。那么,一般程序中必備的容錯性和兼容性設計就相應被忽略掉了。
此外,不同于很多教材以理論為主、實例為輔的方式,本書主要以實例為主。實例中沒有涉及的理論和概念一般不會提及。這也是面向尚未接觸足夠背景知識的初學者時所做的一種實用性選擇。
配套源程序
本書的配套源程序請掃描右側的二維碼進行下載,如果在下載過程中碰到問題請聯系陳老師,聯系郵箱chenlch@tup.tsinghua.edu.cn。

源程序
作者
2020年3月
- LabVIEW 2018 虛擬儀器程序設計
- The Modern C++ Challenge
- AWS Serverless架構:使用AWS從傳統部署方式向Serverless架構遷移
- Raspberry Pi for Secret Agents(Third Edition)
- Mastering Python Networking
- Visual C++數字圖像處理技術詳解
- Python編程從0到1(視頻教學版)
- RabbitMQ Essentials
- Node Cookbook(Second Edition)
- 速學Python:程序設計從入門到進階
- 時空數據建模及其應用
- Building Dynamics CRM 2015 Dashboards with Power BI
- Hadoop大數據分析技術
- Java EE 7 with GlassFish 4 Application Server
- Redmine Cookbook