Python太低級(jí),我選 C++?碼農(nóng)帶你揭穿少兒編程的騙局
最近在某乎看到一篇文章,大意是海淀媽媽們已經(jīng)嫌棄 Python 低級(jí),準(zhǔn)備讓娃直接入門(mén) C++。看得我這個(gè)寫(xiě)了 15 年代碼的老碼農(nóng)心驚膽戰(zhàn),感覺(jué)隨時(shí)都會(huì)被后浪拍死在沙灘上。我其實(shí)非常贊成小朋友學(xué)習(xí)編程的,但做為一名碼農(nóng)奶爸,我覺(jué)得還是有必要給各位海淀媽媽們解釋一下什么是計(jì)算機(jī)編程,C++ 和 Python 有什么區(qū)別,娃是否應(yīng)該學(xué)習(xí)計(jì)算機(jī)編程,以及編程怎樣從入門(mén)到放棄。
什么是計(jì)算機(jī)編程
學(xué)習(xí)計(jì)算機(jī)編程,簡(jiǎn)單來(lái)說(shuō)就是學(xué)習(xí)怎樣給計(jì)算機(jī)下命令。你說(shuō)話(huà),讓計(jì)算機(jī)聽(tīng)明白,然后老實(shí)去做,和你平時(shí)教育娃沒(méi)什么區(qū)別。不過(guò)計(jì)算機(jī)非常聽(tīng)話(huà),只要你能說(shuō)明白,他就一定能按你的意思執(zhí)行,比帶娃省事多了。
當(dāng)然,想要給計(jì)算機(jī)下命令,你得先了解計(jì)算機(jī)。我們天天使用的電腦、iPhone、iPad 等等,其實(shí)遵循的都是“馮·諾伊曼架構(gòu)”,簡(jiǎn)單說(shuō)就是要有 CPU,內(nèi)存,顯示器和鍵盤(pán)。你用鍵盤(pán)給 CPU 下命令,CPU 和內(nèi)存一起合作,算出結(jié)果輸出給顯示器就可以。如下圖所示:

不過(guò) CPU 非常傻,只認(rèn)識(shí) 0 和 1 兩個(gè)數(shù)字。所以如果你想讓他算一道算數(shù)題,你得告訴他一串 24 位的數(shù)字 1000 0011 1100 0000 0000 0001, 他才能聽(tīng)懂。無(wú)論你用 Python、C++ 還是別的編程語(yǔ)言,最終都會(huì)轉(zhuǎn)換成這 24 個(gè)數(shù)字。像不像平時(shí)教育娃,無(wú)論漢語(yǔ)、英語(yǔ)還是方言,最終都得翻譯成拳頭,娃才能明白一樣?
順帶說(shuō)一下,這串 24 位數(shù)字叫做機(jī)器碼,翻譯成碼農(nóng)能看懂的語(yǔ)言是“ADD %EAX, 1”,說(shuō)人話(huà)就是“別玩了,快給老娘算 x+1 等于幾”。
C++ 比 Python 高級(jí)嗎
隨著科技的發(fā)展,出現(xiàn)了非常多的編程語(yǔ)言,編程語(yǔ)言之間也確實(shí)有高低級(jí)之分,但不是培訓(xùn)班 Tony 老師告訴你的高低級(jí)。
像剛才說(shuō)的 ADD %EAX, 1 叫做匯編語(yǔ)言,是低級(jí)語(yǔ)言,而 Python 和 C++ 則同屬于高級(jí)語(yǔ)言范疇。他們?cè)趧偛诺睦又校伎梢酝瑯拥拇a x += 1 來(lái)表示,他們之間甚至還有點(diǎn)親戚關(guān)系,C++ 是基于 C 語(yǔ)言“改進(jìn)”而來(lái),Python 則是由 C 語(yǔ)言編寫(xiě)的。
那么 Python 和 C++ 誰(shuí)更高級(jí)呢?這個(gè)需要分領(lǐng)域回答。在數(shù)據(jù)科學(xué)和人工智能領(lǐng)域,Python 是當(dāng)之無(wú)愧的王者,但在高頻交易、網(wǎng)絡(luò)游戲領(lǐng)域,C++ 可以說(shuō)是目前的業(yè)界標(biāo)準(zhǔn)。對(duì)于少兒編程領(lǐng)域來(lái)說(shuō),Python 在簡(jiǎn)單易入門(mén)方面幾乎沒(méi)有對(duì)手。
Python 有多簡(jiǎn)單呢?寫(xiě)一個(gè)同樣功能的網(wǎng)站,用匯編語(yǔ)言,C++ 與 Python 的工作量對(duì)比大約是 1000000:3:1。這是什么意思呢,就是 Python 程序員在和女生約會(huì)的時(shí)候,C++ 程序員剛加完班,而匯編程序員已經(jīng)當(dāng)場(chǎng)去世了。
那為什么 Tony 老師說(shuō) C++ 比 Python 高級(jí)呢?當(dāng)然是因?yàn)閷W(xué)同樣的東西,他能收 3 倍的課時(shí)費(fèi),貴的就高級(jí),沒(méi)毛病。
Tony 老師也許會(huì)反駁說(shuō) Python 只是玩具語(yǔ)言,大一點(diǎn)的孩子都不用。我們可以看一下 2016 ~ 2020 編程語(yǔ)言流行度排行榜:

事實(shí)上,這個(gè)世界上無(wú)論是小朋友還是老碼農(nóng),都在用 Python,也都愛(ài)用 Python。
Python 和 C++ 的真正區(qū)別是編譯型語(yǔ)言與解釋型語(yǔ)言的區(qū)別,簡(jiǎn)單來(lái)說(shuō)就是 C++ 是直接變成 0101 讓 CPU 運(yùn)行的,而 Python 則需要隨身帶個(gè)翻譯,這就導(dǎo)致 Python 在運(yùn)行時(shí)比 C++ 慢 10 - 100 倍左右。不過(guò)不用擔(dān)心,現(xiàn)在的 CPU 已經(jīng)快到讓你感覺(jué)不到任何區(qū)別。
娃應(yīng)該學(xué)習(xí)計(jì)算機(jī)編程嗎
對(duì)于娃是否應(yīng)該學(xué)習(xí)編程這件事情,如果中高考不考,可以完全不用學(xué)。Tony 老師往往告訴你學(xué)習(xí)編程,可以訓(xùn)練小朋友邏輯思維,讓小朋友數(shù)學(xué)更好。但真相卻恰恰相反,是邏輯思維好的小朋友,學(xué)編程更容易而已。
編程語(yǔ)言中用到的數(shù)學(xué)邏輯只有 3 個(gè),條件判斷,循環(huán)與遞歸。
條件判斷
條件判斷就是你告訴娃如果要吃糖,就要先聽(tīng)話(huà)。用程序表示就是
- if 聽(tīng)話(huà):
- 可以吃糖
- else:
- 直接吃拳頭
循環(huán)
循環(huán)就是娃不停的要你買(mǎi)玩具,買(mǎi)完這個(gè)買(mǎi)那個(gè)。 用程序表示就是
- while 玩具玩膩了:
- 和媽媽要新玩具
遞歸
遞歸就是娃不斷的問(wèn)你這是什么?比如指著天上問(wèn)你這是什么?你說(shuō)這是太陽(yáng)。他又問(wèn)太陽(yáng)是什么,你說(shuō)太陽(yáng)是一個(gè)恒星。他又問(wèn)恒星是什么,你說(shuō)恒星是宇宙中一種星球。他又問(wèn)星球是什么,你說(shuō)星球就是星球,去找你爸玩。用程序表示就是
- def ask(xx 是什么):
- if 問(wèn)煩了:
- return 去找你爸玩
- else:
- ask(xx 是什么)
可以看到遞歸和循環(huán)有點(diǎn)相似,在實(shí)際編程中遞歸和循環(huán)也是可以互換的。
看到這里,你還覺(jué)得少兒編程可以提升數(shù)學(xué)成績(jī)嗎?編程不會(huì)提升娃的智商,也不能像彈鋼琴、說(shuō)意大利語(yǔ)一樣拿來(lái)炫耀,從功利的角度并不劃算。
編程真正的價(jià)值在于創(chuàng)造,你可以輕易創(chuàng)造一個(gè)完全屬于自己的作品,可以分享給朋友,甚至可以分享給全世界。這種創(chuàng)造產(chǎn)品的樂(lè)趣,這種被人認(rèn)同的成就感,這種一次次經(jīng)歷失敗但最終獲得成功的喜悅,才是學(xué)習(xí)編程真正的價(jià)值所在。
所以,如果你的娃滿(mǎn)足下面 3 個(gè)條件:
- 對(duì)編程本身非常感興趣,也有一定的理解力
- 有一個(gè)真正懂得編程的老師指導(dǎo)
- 你對(duì)娃在編程上沒(méi)有過(guò)高期許
我是推薦讓娃學(xué)習(xí) Python 編程的,因?yàn)榫幊陶娴暮猛妫舱娴哪塬@得成就感。
少兒編程該怎樣入門(mén)
從我個(gè)人經(jīng)驗(yàn)來(lái)說(shuō),學(xué)好編程只需要兩個(gè)條件:
- 帶著目標(biāo)學(xué)習(xí)
- 一個(gè)字一個(gè)字親手寫(xiě)代碼
學(xué)習(xí)編程其實(shí)是一個(gè)非常龐大的過(guò)程,你需要學(xué)完編程語(yǔ)言、標(biāo)準(zhǔn)庫(kù)、常用第三方庫(kù)、網(wǎng)絡(luò)協(xié)議、數(shù)據(jù)庫(kù)、操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)、常用算法等一大堆內(nèi)容,才能真正做一個(gè)產(chǎn)品級(jí)的程序。但是對(duì)于少兒編程來(lái)說(shuō),學(xué)好編程語(yǔ)言本身,一點(diǎn)點(diǎn)標(biāo)準(zhǔn)庫(kù)和第三方庫(kù),也可以做出一些好玩的程序。
所以入門(mén)編程,你最需要的是給娃定一個(gè)目標(biāo),讓他能帶著任務(wù)學(xué)習(xí),比如編寫(xiě)一個(gè)小小的游戲,或者讓機(jī)器人跑起來(lái)。有了目標(biāo),就可以按照下圖一步一步開(kāi)始學(xué)習(xí):

學(xué)完藍(lán)色部分,基本什么也做不了,但是對(duì)編程本身會(huì)有非常清晰的概念,大部分娃學(xué)到這里也就結(jié)束了。學(xué)完橙色部分,就可以實(shí)現(xiàn)有趣的小游戲,或者讓機(jī)器人隨心所欲跑來(lái)跑去,娃會(huì)有滿(mǎn)滿(mǎn)的樂(lè)趣和成就感。綠色和紫色部分,預(yù)留給走專(zhuān)業(yè)路線(xiàn)的娃,如果上了高中依然熱愛(ài)編程,并且有剩余精力,可以開(kāi)始學(xué)習(xí)這兩部分內(nèi)容。不過(guò)即使學(xué)完紫色部分,也不代表編程就學(xué)完了,展示一下專(zhuān)業(yè)碼農(nóng)的路線(xiàn)圖:

學(xué)完這些,才能差不多找一份互聯(lián)網(wǎng)中級(jí)碼農(nóng)的工作,而且職業(yè)生涯還比較艱辛。行業(yè)變化特別快,技術(shù)天天都更新,工資全是加班費(fèi),年輕人便宜還玩命。所以如果真想要從事職業(yè)碼農(nóng),一定要慎重。作為上一代碼農(nóng),現(xiàn)在我基本只能靠 Word 和 PPT 混日子了。
總結(jié)
如果你真的堅(jiān)持完整的看到這里,其實(shí)已經(jīng)不需要這份總結(jié)了。對(duì)于想偷懶的,直接上干貨吧:
- 不要讓娃從 C++ 入門(mén)編程,這樣只會(huì)加速娃放棄學(xué)習(xí)
- 學(xué)習(xí)編程不會(huì)提高娃的數(shù)學(xué)成績(jī),也不會(huì)提高邏輯思維能力
- 絕大部分娃最終都會(huì)放棄,不要對(duì)娃有太高的期許,保留樂(lè)趣最重要
- 如果娃有興趣,坐得住,老師靠譜,可以從 Python 入門(mén)編程
最后,對(duì)于想入門(mén)少兒編程的家長(zhǎng),最重要的就是給娃設(shè)定好目標(biāo),讓娃堅(jiān)定的一個(gè)字一個(gè)字編寫(xiě)每行代碼。當(dāng)克服重重困難,把程序成功運(yùn)行起來(lái)的那一刻,娃會(huì)明白這些努力都是值得的。
祝愿每一個(gè)娃都可以健康快樂(lè)的成長(zhǎng),每一位家長(zhǎng)都少一點(diǎn)焦慮,多一點(diǎn)信心。





















