(转)少儿编程这么火, 究竟学哪一种语言最靠谱?这篇文章说透了!
http://www.sohu.com/a/251561825_124768
?
這幾年,人工智能的發展速度與日俱增:AlphaGo贏了柯潔;百度無人巴士量產;Google的AI客服,用一個簡單的“嗯哼”,征服了全世界;索尼也用AI創造了一首Beatles風單曲......
隨之而來的,是教育風向的變化,除了語數外這“老三樣”,一門新的學科正在迅猛崛起,且大有燎原之勢——它就是“少兒編程”,加上政策的推動,家長們愈發認識到讓孩子從小學編程的重要性,在北上廣等一線城市,不讓孩子學編程,都不敢說自己受的是精英教育。
然而,編程語言種類繁多,哪一種語言最靠譜?最適合孩子的認知水平?最能激發孩子的創造力?
今天,我們特別邀請了一位少兒編程領域的專家——肖恩老師,為我們從專業上詳細講解,孩子學編程從何入手。
肖恩老師
EUMlab&西瓜創客創始人
肖恩老師精通各種編程語言(C/C++//JAVA/Ruby/Python/Java/ Verilog/VHDL等),大學時代就拿下國際編程大獎 Intel杯亞太區第一名。他在德國創業期間,開發了明星產品Pro Metronome (音樂節拍器App),全球用戶已逾3000萬,連續5年在蘋果應用商店同類排名第一。
回國后他創辦了“西瓜創客”(一個在線少兒編程教育品牌),發展也十分迅速,目前他教過的孩子已近10萬,分布在全球40多個不同國家,西瓜創客也已藉此獲紅杉資本、經緯中國的A輪投資。
少兒編程,選擇哪種語言好?
這個提問就像有人在問你 “是穿婚紗好、正裝好還是休閑裝比較好?”
這是一個無法回答的問題,因為問題缺少了重要的前提:“選什么樣的衣服,取決于我們的目的”。
婚禮時穿婚紗很好,但是如果每天都穿著婚紗上班就很奇怪了。
每件衣服都有適用于它應有的場景。
編程語言也是一樣的,每種編程語言都有屬于它的應用場景。
要回答 “少兒編程,選擇哪種語言比較好?”
我的簡單版答案是:Scratch!作為從7歲開始做電子設計,讀過Linux 源代碼,寫過RTOS(實時操作系統),做過芯片編程FPGA/DSP,有20年編程齡,能熟練使用匯編/C/C++/C#/Perl/Objective-C/JAVA/Ruby/Python/Java/HTML/CSS 等大家熟悉的編程語言和大家不熟悉的設計芯片編程語言 Verilog 和 VHDL的我,推薦使用Scratch 。
那為什么是 Scratch 呢? 我在和西瓜創客教的近 10 萬孩子的家長溝通過程中總結了家長們的常見困惑,詳細解釋如下:
Q
A
&
Q:Scratch 是低級語言,太幼稚,什么時候可以轉學高級語言(例如 C 和 Java)?
這是一個常見誤區,主要是受“高級”二字翻譯不準確的影響產生的誤區。 高級語言的英文原文叫做 High-level programming language ,更準確的翻譯應該是高層級編程語言。層級的高低不是語言的高級與否的劃分,而是指語言離硬件指令的遠近。越接近人類的自然語言的編程語言越叫高級語言(越容易讀懂),越接近計算機指令的叫做低級語言(越難讀懂)。
舉個例子,匯編語言是離 CPU 指令最近的人還能勉強能讀懂的語言。 用匯編來表達 1 + 2,是這樣的:
在其他語言里是這樣表達的:
顯而易見,其他的語言更接近人更好理解的自然語言。
更令人發指的是,不同架構類型的 CPU,控制它的指令是不一樣的。 也就是說,同樣的是 1 + 2,不同的 CPU 上需要用不同的寫法。
而所有的編程語言設計者,都在致力于做一件事情:
讓人們可以用人類能讀懂的語言,優雅地編程,只需要把自己的想法告訴電腦,電腦就能自動把語言翻譯成他能自己能執行的命令。
也就是說,無論我們用哪種高級語言寫出來的代碼,都有,也都需要一個翻譯官,去編譯(Compiler)或者解釋(Interpreter)我們寫的代碼讓電腦可以執行。
BTW,從定義上來說,Scratch 是比 C 和 Java 更高級的語言。
那既然編程語言的設計者都有同樣的目標,那哪個語言是最好的編程語言呢?
這個問題就和“什么樣的衣服是最好的衣服”類似了。 答案是在不同的場景和目標下,選擇對應的編程語言,沒有哪一種語言是最好的語言。
例如,C 語言更接近計算機硬件,編程語法中有很多莫名其妙的操作學習起來十分困難。 但它的優點恰好也是它特別接近硬件,對內存的申請和釋放都得開發者自己來寫,程序的執行效率能特別的高。(這里之所以說“能特別高”,而不是“會特別高”,是因為是否能執行高效,還取決于開發者的算法能力以及對 CPU 的指令是否熟悉)
但是如果誰想要用 C 語言來做網站,也許用 Java + CSS + HTML 組合起來花 5 分鐘做出來的網頁,用 C 語言可能 1 個月也寫不出來。
那為什么編程語言會有排行變化呢?
這個完全是和工作和市場機會有關的。例如,在互聯網大爆發的時候,做網站的人是最稀缺的,于是推動了JAVA、C# 和 Java + CSS + HTML 等語言的發展。那個時候,另一種叫做Objective-C 的語言就特別的冷門。直到蘋果的 iPhone 出來后,移動互聯網的春天來臨,當時誰能做 App,誰的工作機會就比別人多呀。于是這種冷門的Objective-C 語言就迎來了他的春天。由于互聯網和移動互聯網的快速發展,大量的數據產生,機器學習和人工智能在坐了多年的冷板凳后,終于有了用武之地。大量的數據科學家使用 Python 來編寫機器學習的程序(因為 Python 和 Python 大量的數據分析和處理相關的功能庫是開源免費的),于是 Python 又成為近年的新寵。
所以如果選編程語言是為了讓孩子未來好找工作的話,親,你確定現在選擇的語言會在 15 年后還不衰落?
Q
A
&
Q:那選擇 Scratch 的優勢是什么呢?它會過時嗎?
"如果我給你一支高級鋼筆...
oh,不不不,你給我一支高級鋼筆。
我能成為作家嗎?"
“不能”
沒錯。 決定我是否能成為作家的,不是因為使用的是什么樣的鋼筆;決定是否能成為攝影師的,也不是昂貴的鏡頭和相機;
決定是否能成為好的開發者,也不是選擇的語言,而是他是否能發現生活中的問題,找到解決問題的辦法,然后用編程把解決方案做出來。
表達我們的情感和洞見、凝固時間記錄故事、發現并解決問題 是我們的目標,用一支好的鋼筆,好的相機,和選擇一種編程語言是實現目標的手段。我們不應該錯把手段當目標。
在文章剛開始,我提到了我能熟練使用匯編/C/C++/C#/Perl/Objective-C/JAVA/Ruby/Python/Java/HTML/CSS 等編程語言,這并非吹噓。 事實上,一個成熟的開發者,基本都掌握多種編程語言,并且可以快速地學習和適應新的語言。這是因為編程語言是有規律可尋的。
舉個例子,如果我們要用編程編寫,如果天下雨,就帶傘,否則就不帶傘。 用不同的語言寫出來是這樣的
我們可以看到,無論是哪種語言,他們都有一個類似的結構:
這就是編程中不變的部分,他們只是表達方式(編程的語法)有一點區別罷了。 這就像目前主流音樂,都是由 12 平均律切分的 12 個音(do 升do re 降mi mi fa....)構成的。
但是如果我們用葫蘆絲吹婚禮進行曲,就總會覺得有一點過橋米線的感覺。 這是因為每個樂器有它獨特的特性。程序語言也是一樣的。 每種語言都有一些它十分獨特的特性。例如,我們想判斷菜單中是否包含宮保雞丁,如果包含就輸出“找到了”。C 語言, Python 和 Scratch 的寫法分別如下。
你會發現,這時,Python 和 Scratch 的寫法就比 C 語言直觀多了。 這部分就是不同語言的特性部分。
也就是說,當精通了一種編程語言后,想學習另一種編程語言,只需要了解它的語法就能上手,會熟練使用它的特性就可以精通。編程的核心不在于語法,而是解決問題的思路和方法(算法)。
而 Scratch 中包含了幾乎所有編程語言共通的部分。無論未來語言如何變化,最基本的邏輯是不會變化的。而這些訓練在 Scratch 中都能完成。
Q
A
&
Q:聽你這樣說,也就是說學習其他語言也是一樣的,因為只要精通一門,再學另一門語言就容易了?
是的,沒錯。和學好了 Scratch 轉 C,Java 和 Python 是容易的類似。 學好了 C 轉 Python 也是不難的。但是為什么依然還是推薦孩子學習 Scratch 而不是 C 的原因不是因為編程,而是因為認知科學。
在認知科學中,人們是否能快速學習一樣東西或者堅持學習一樣東西和自我效能感(Self-efficacy )息息相關。自我效能感是指人們是否相信自己能達到一個目標,當相信的時候就會覺得做起來很帶勁,一點也不枯燥;當不相信的時候就覺得自己在飽受煎熬。簡單地理解就是成就感是讓人學習產生快樂并且堅持學習的重要原因。
如果在學習任何一樣東西的時候,例如數學,一旦我們意識到自己學起來有困難,就開始不相信自己能學好,并且給自己各種理由證明自己不能學好,甚至是讓自己學不好合理化。例如會說 “學這個有什么用呀,買菜又不需要微積分”,或者說“我就是一個學文科的,這種理科的東西我不需要學” 甚至會說 “我就是一個學文科的料,理科在我的基因里就寫著‘不擅長’三個字” 。
類似的,如果我們希望孩子不會說自己“就不是一個編程的料”,最好的辦法就是讓孩子從第一步就產生成就感,從而產生自我效能感,也就是相信自己可以有能力達到目標,學好編程。
在這樣的前提下,你還會讓孩子從學習例如 C 或者 Java 這樣的工業級編程開始嗎? 這樣,他可能會面臨的困難不僅僅是編程的困難,他還會遇到打字的困難,標點是否使用正確的困難,編程語言語法的困難,編譯錯誤時莫名其妙的困難等等。 這些困難會消磨掉孩子學習編程的興趣,自己找理由說“我不喜歡編程”,就和很多人找到無數理由說自己“不喜歡數學”一樣。 這就是在沒有形成自我效能感的情況下拔苗助長的結果。
這個就很像我在德國期間看到的德國音樂學習和中國的區別。德國在小時候學習音樂首先是學習鑒賞,再是學會玩,最后才是學音樂。例如,首先老師會給孩子們彈音樂,并且音樂是配合特定故事和場景,讓孩子們能把聲音和場景對應起來;然后讓孩子們可以玩樂器,就是不計較指法是否正確,姿勢是否正確的情況下,先和樂器做朋友,不恐懼音樂和樂器;最后才是學習如何駕馭一種樂器,才開始學習指法等等所謂的基本工。 而國內學習樂器恰好相反,首先讓孩子練習的是指法,而忽略了讓孩子對音樂的熱愛。
這就是為什么西瓜創客以及我肖恩老師還是會推薦學習 Scratch 的原因: 先讓孩子可以不恐懼編程,產生興趣,并且用編程表達自己。 等到孩子們已經產生了自信和成就感,再提高難度。如果都要選擇一門語言進入編程的世界,一定是選擇能讓孩子快速找到自信,找到成就感的語言。 那這種語言目前最好的就是 Scratch。
Q
A
&
Q:那要是我的孩子就是想學除了 Scratch 外的語言,我應該怎么為他選擇?
首先,讓我們把編程語言分為兩大類,一類是興趣類編程,以圖形化編程為主,目的是用編程實現自己的想法,不用擔心程序執行效率不高,也不用考慮用戶的使用場景和平臺。另一類是工業類編程,以源碼編程為主,除了考慮用編程來解決生活生產中的問題外,還需要考慮到用戶會在什么樣的場景下使用此軟件,以及產品的易用性。
如果是青少年學習編程,依然不推薦從工業類編程入手。 目前 Scratch 語言也在進化,能支持的功能已經遠遠大于把一個圖形從這里移動到那里。 Scratch 現在已經可以對特定硬件進行編程了。和 Scratch 類似的圖形化語言 Blocky ,已經可以完成很多很多遠超過 Scratch 的功能了。 例如同是 Scratch 3 基于的 Blockly 開發的 App Inventor,已經可以讓孩子用圖形化編程制作一個手機 App。事實上,并不是圖形化編程就弱雞,現在西瓜創客的員工工資公式已經是用 Blocky 寫的了,西瓜創客的后臺各種工作流程規則也都是用圖形化語言來寫的。
如果非要選擇工業級編程語言,我們還是可以按目標來劃分。
如果目標是應試,首選是 Python,目前浙江等地區已經把 Python 列為了高考科目。 如果想通過 NOIP 加分的話,其次選擇是 C/C++ 語言。(注,在應試層面上,選擇 C 和選擇 C++ 是一樣的,因為 C++ 是基于 C 擴展增加了一些例如面向對象編程的特性,而在 NOIP 的賽題里,不會用到這些高級特性)
如果目標是編寫控制硬件的程序,推薦語言是 Python 和 C。C 的原因是主流的硬件編程都是支持 C 的。而非工業級的硬件編程,例如,樹莓派支持用 Python 編程。
如果目標是制作 App, 可以選擇的語言是 Scratch 類似的 App Inventor、 Java(用于編寫安卓的 App)或者 Objective-C/Swift (用于編寫蘋果系統 iOS 的 App)。另外 Java 也是一個不錯的跨平臺選擇。現在大多數程序都是蘋果安卓系統通用的。這類程序基本是基于某個框架,最常用的框架是 React Native,而 React Native 使用的就是 Java 語言。(注,Java 語言和 Java 是兩個語言,類似但不相同)
如果目標是制作網頁,可以選擇的語言是 Java + CSS + HTML。其中 CSS 和 HTML 是決定網頁長成什么樣的。這兩種語言學習起來很簡單。推薦 Java 的原因是,網頁編程的前端(用戶能看到的部分)基本都是用 Java 來控制的。而且現在的 Node.JS 也是基于 Java 的語法來做的后端程序(也就是用戶看不到的服務器部分)。也就是說,只要會 Java前端后端都能寫。
如果目標是做數據分析,首推的是 Python 語言。Python 語言里有大量關于數據處理的公共庫可以使用。讓我們可以站在巨人的肩膀上繼續深入研究,而不是重造車輪。
綜合各種因素,如果是針對 7-12歲的孩子學習編程,語言的推薦順序為 Scratch > Python > Java > C 。
Q
A
&
其他問題:
Q1:我想讓孩子參加信奧賽NOIP,聽說只有C語言可以參加,那學Scratch還有用么?
Q2:如果說,編程不是目的,而是手段。如果目的是讓孩子有創造力的話,應該采取什么方式呢?
這些都是十分好的問題,十分值得我們再開一篇文章來詳細講解。請關注西瓜創客公眾號,我會在未來和大家分享這些話題。
以上。
肖恩老師
歡迎大家在評論中留言,寫出您為什么希望孩子學編程?您希望孩子獲得什么?我們會隨機抽出三位,免費送出【西瓜創客】L0零基礎編程課,再次感謝肖恩老師的傾情解答。
20年前,學英語不是為了成為翻譯員
10年前,學習電腦不是為了成為打字員
今天學習編程
不是為了讓孩子們都成為程序員
而是為他們打開一扇門
走進更廣闊的未來世界
總結
以上是生活随笔為你收集整理的(转)少儿编程这么火, 究竟学哪一种语言最靠谱?这篇文章说透了!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ChatGpt会替代码农可行性分析
- 下一篇: 从零起步,新时代大学生选择创业还是工作?