大家好,我是逃媽。
上周在《AI 太要命!馬斯克悄悄給娃 " 排課 ":專攻這幾樣,别的就不學了》這篇裏和大家聊到馬斯克給自家娃創建的學校。在這所學校裏,一些傳統學科被摒棄,編程卻是重點主科。
很多媽媽在那篇文章後留言求編程課,于是昨天我又趕緊追加了一篇,推薦我自己一直很認可的教學團隊,給大家又搞來了一波幾乎免費的試聽課。
本想着 " 編程 " 這個話題咱就先告一段落了。
但緊接着又收到一位讀者留言。
她是剛關注我們不久的新讀者,說讀了我的文章後,有點兒迷糊。
我寫的" 四年級以上,如果孩子數理邏輯 OK,即便沒有編程基礎,也可以開始學 C++"。
可是,她家 5 年級的娃上學期去報編程班時,機構老師明明說的是,因爲孩子之前完全沒有接觸過,建議先上圖形化編程,把基礎打牢啊~
我問了一下具體情況,發現還是個數學挺不錯,學過淺奧的孩子,心裏就開始堵得慌:5 年級的孩子,還忽悠人家上圖形化編程,真是有點兒坑啊!
不行,我還得再補一篇,就專門列幾個大家最容易混淆的編程學習問題來一一作答。
别的我管不了,咱們平台的家人們,可不能踩這些坑了!
Q1:
圖形化編程是代碼編程的基礎嗎?
不是!
本質上它們是平等的,無論圖形化編程還是代碼編程,隻是不同的實現形式。
編程中要學習的核心方法概念,比如順序、循環、條件、變量、遞歸、函數、調用、調試等等,在圖形化編程中有,在代碼編程中同樣也有。
舉個例子,我們要編一個程序," 求 1 加到 100 的和 "。
孩子可以用圖形化編程來實現:
其中的關鍵編程概念是「循環」(repeat),每次循環中,加數 a 增加 1,加到被加數 sum 裏;循環 100 次後,被加數 sum 就是我們要求的總數。
實現同樣的功能,用 Python 來編寫,是這樣:
這裏的核心部分,for … . 也是個「循環」,它所做的事情和剛才一模一樣:循環遍曆從 1 到 100 的整數,加到被加數 sum 裏。
我們說圖形化編程更簡單,隻是因爲它使用了更直觀的圖形方塊元素來表示程序。年齡小的孩子,不需要會打字,隻要拖拽一下方塊,像搭積木一樣就能把程序寫好。
但在編程思維層面,圖形化編程和代碼編程是一樣的。
比如上面這個例子裏,孩子都得去理解「循環」這個概念。是用圖形方塊還是用代碼,隻是不同的呈現形式而已,換湯不換藥。
換句話說," 圖形化編程 " 階段不是必須的,它隻是降低了編程操作難度和年齡門檻,讓孩子在年齡很小,時間充足的時候就可以開始培養編程興趣,編程思維。
所以,我的推薦邏輯是這樣:
年齡還小,尤其是 1-2 年級的孩子,如果從沒接觸過編程,建議學 " 圖形化編程 "。
假如已經錯過了這個階段,孩子現在比較大了,尤其是 4 年級及其以上,即便從沒接觸過編程,我都建議直接學代碼編程,Python、C++ 都可以。這個年齡段,真沒必要再學一輪圖形化編程了,又費馬達又費電。
看到這你可能會問,诶,那小時候費那勁兒幹嘛,不如索性等到中高年級才開始?
當然可以啊,我這計算機專業的,還是從大學本科才開始認認真真學編程的呢。
人生漫長,有啥好慌?
但現在不是環境不同了嘛,不早點兒開始,可能會錯過一些中途的機會和資源。
我國内一閨蜜,前幾年娃主要整奧數,結果開始搞小升初後發現,隔壁家一智力相仿的小孩,因爲早早準備了 CSP-J,已經拿到心儀學校的 offer,她家還遲遲未能确定。
當然,孩子數學很好,我相信最終也會有不錯的結果,隻是道路曲折了點。
無奈,競争讓學習這件事都不能 " 把雞蛋放在同一個籃子裏 " 了~
另外,早點兒開始,也是爲後面節省時間。
到了中高年級,語數外各科的學習壓力都上來了,哪有那麽多時間分配給編程?
如果小時候就已經通過圖形化編程培養了編程思維,掌握了編程概念和方法,使得代碼編程階段一點就通,突飛猛進,也很香啊。
當然,具體啥時候開始,各家有各家的判斷,我隻能點到爲止。
Q2:
Python 是 C++ 的基礎嗎?
本質上它們是平等的,是兩種不同的編程語言。
我們可以說,"Python 學好了,對學 C++ 有一定幫助 "。
但不可以說," 沒學過 Python, 就不能學 C++" 或者 " 沒學過 Python, 就學不好 C++"。
就好比一個人英文學得好,那他學法文也比較容易,因爲閱讀、寫作這些東西是相通的。
但你不能說," 沒學過英文 , 就不能學法文 " 或者 " 沒學好英文 , 就學不好法文 "。對不對?
同樣的編程功能,能用 Python 實現的,肯定也能用 C++ 來實現,反之亦然。
那爲什麽很多人說,C++ 比 Python 難呢?
那是因爲,C++ 的語法比 Python 要複雜些。
實現同樣的功能,C++ 的代碼看起來更長更繁瑣,Python 則更簡潔明了。
比如前陣子給逃逃訂生日蛋糕,當時正好是美國信奧賽 USACO 的賽季,我就索性配合一下,給他整了個 " 程序員蛋糕 ",上面寫了段 Python 代碼,體現濃濃的 "nerd" 氣質。
其實逃逃現在更熟悉更常用的是 C++。我之所以用 Python,就是因爲換成 C++ 太長了,蛋糕師不接單,說寫不下~
那 C++ 的優越之處在哪兒?
它的性能更好,執行效率更高。也因此成爲了信奧賽的官方指定語言,從入門級别的 CSP-J,到最後的國際信奧 IOI,都指定使用 C++。因爲編程競賽比拼的是算法效率,對時間、空間複雜度都有要求。
等等,細想是不是有哪裏不妥?
不對啊,都統一成 Python 也一樣啊。既然是競賽,看的是選手之間的相對值,隻要是 apple to apple, 都是一樣的啊。
是這麽個道理,但中國計算機學會 CCF 和國際信奧賽組委會都指定鎖死了 C++,你能怎麽着?
不過,我也跟大家說過好多次了,不要一聽到 C++ 就如臨大敵,覺得是揠苗助長啥的
競賽用到的 C++ 語法隻是 C++ 很小的一個子集,範圍遠沒有軟件工程上用的 C++ 那麽廣, C++ 中讓人頭大的内存管理、指針的指針,還有面向對象等内容,信奧賽裏都不涉及。
所以,我的建議是,四年級及其以上孩子,
如果目标明确,想試水 CSP-J/S 信奧賽,直接學 C++ 就好,反正無論你學别的什麽,最終還得從頭學 C++;
如果無意在競賽這條路上走遠,但希望孩子也能掌握編程,能用編程來做些科研項目,Python 則是不錯的選擇。
其實 Python 也能參加很多競賽和考級,比如計算機學會 CCF 今年新增的 GESP 編程能力等級考試,1-4 級可以用圖形化編程,5-8 級既可以用 Python,也可以用 C++。成績好的話,還能直接免試 CSP-J/S 的第一輪,和信奧賽對接呢。具體我在昨天的文章裏有講過,這裏就不再贅述。
Q3:
搞信奧賽就是學 C++ 嗎?
我打個比方,孩子要解決一道奧數題,他苦思冥想後終于找到「解法」。
現在,他要把這個解法告訴老師,實際上要把解法講清楚,孩子可以用中文講,也可以用英文講,但這老師規矩多,他指定了要用「中文」講。
如果把這裏的 " 奧數題 " 換成 " 信奧題 ",那麽,
「解法」= 我們常說的編程裏的 " 算法 ",是要燒腦的
「中文」= C++,是個表達工具
所以,信奧賽和 C++ 之間的關系是:
孩子要搞信奧賽,必須得學 C++;
但隻學 C++,還搞不了信奧賽。
信奧賽的難,在算法,不在編程語言。
同樣的題目,用 C++ 難,用 Python、甚至用圖形化編程,也一樣難。
Q4:
學編程就是搞信奧賽嗎?
編程和信奧賽的關系,就像數學和奧數的關系。
100% 的孩子需要學數學,80% 的孩子适合學奧數,50% 适合打比賽,5% 能出成績。
放到編程和信奧賽上,也很類似。
100% 的孩子需要學編程,這事已經毫無懸念。教育部早有引導,現在沿海一線城市的很多中小學,也都開設了編程課。
昨天我給大家推薦的編程課,最早就是被引入人大附中實驗小學、人大附中西山學校、北京 101、上海中學、北京科技大學附小、西安建築科技大學附小等名校的。
總之,編程就是一項類似于語數外那樣的基本技能,人人都需要。
至于要不要搞信奧賽,就看個人選擇了。
逃逃在美國也搞 USACO 信奧賽,說說我的體會。
✓
對升學有好處。
這事在國内更明顯,小升初、初升高、大學本科,研究生,這裏頭的每個階段,如果有信奧賽的成績,都有一定優勢。
對孩子的邏輯思維,尤其數學成績,有好處。
信奧賽裏的算法,數據結構,和數學關系非常緊密。
我可以這麽跟你說,搞信奧賽的孩子,數學不可能差,隻是看能好到什麽地步。
對将來就業有好處。
美國這邊,你能叫得出名字的所有科技大廠,面試幾乎都考算法,就是類似信奧賽那樣的題目。
國内我聽到過一個說法,如果能在信奧賽強省(比如浙江、廣東)CSP 提高組拿一等獎的孩子,将來的工作年薪不會低于 30 萬。
當然這隻是聽說,在就業形勢那麽困難的今天,誰也不敢做這個保證。
不過,編程、信奧賽基本是科技、高薪的代名詞了。放眼望去,有多少科技大咖都是早早開始搞編程,搞信奧賽的。
包括最近火上天的,ChatGPT 的創造者 Sam Altman,8 歲就開始學編程。
當然了,這些天牛們,離咱尋常百姓家的普通孩子有點兒遠。
但朝這個方向努力總沒有錯。方向對了,走一步是一步。你說對吧?
EASTWEST
一聊到編程我就容易扯東扯西,才答了四個問題,發現篇幅已經不小了
内容比較幹,需要消化消化,今天就先在這裏打住。
如果你覺得有幫助,解答了你心中的疑惑,記得在文末點個" 贊 "和" 在看 "啊。
我猜大家可能還有些疑問,可以翻翻我以前寫過的文章
咱們公号創建快 10 年了,我自己又是學計算機專業的,所以早些年就已經看到這個趨勢,開始和大家掰編程,方方面面差不多都聊過一輪啦。
歡迎加入我們的大本營