禁用Matlab,美國又給我們創造一次機會?(下)法道_風聞
跟陶叔一起学-IT专家-听陶叔聊各种知识与学习感受,解决一些问题2020-07-24 12:29
歡迎關注我的微信公號:跟陶叔學編程
從6月初傳出哈工大與哈工程被禁用Matlab,到現在快兩月的時間,美國政府對中國的打壓動作一直未停。它又拉到了新盟友停用華為5G設備,中國企業列名實體名單的數量又增加了,甚至使出關閉在美中國總領館的路數……美國這是擺明了要與中國為敵。但是正如電影《教父》中那句經典台詞所説的一樣,“永遠不要恨你的敵人,因為這會影響你的判斷力”,我們不僅不要因為仇恨失去理智,反而更要冷靜地分析,知己知彼把握全局。
經過前面兩篇的討論,我們對以Matlab為代表的科學計算軟件有了一個基本的瞭解,並對由禁用Matlab帶來的挑戰與機遇進行了詳細的分析。(參看上篇《破局》)同時,作為對策我們需要加快與開源軟件運動的結合,站在為人類社會貢獻公共基礎軟件產品的高度來推動開源軟件的發展。在面臨美國政府新一輪科技剿殺的當前,我們必須抓住戰機,衝殺出一條軟件發展的新路,為世界科技發展打出一片新的天地。(參看中篇《順勢》)
但是,我們也要明白當前中國軟件行業發展是不均衡的,重應用輕基礎,已經放心大膽地在美國技術的基礎上狂奔多年,直到如今被人卡了脖子。亡羊補牢,猶未為晚,現在我們需要回顧走過的發展之路,弄清楚我們有哪些得失?而歐美在基礎軟件上形成壓倒性的優勢,原因是什麼?什麼是其創新與發展之道?我們需要做哪些調整,才能實現學習、吸收並超越?在本篇中我們來討論一下這些有點沉重卻非常重要的問題。
下篇《道與法道》,分為三個部分:
一、基礎軟件如今是誰的天下?
二、基礎軟件發展歷程的啓示
三、應該做些改變了
一、基礎軟件如今是誰的天下?
在一般的定義中,基礎軟件包括操作系統、數據庫和中間件。前兩項大家都很熟悉,中間件是一種很重要的基礎軟件,但大家普遍感受不到它的存在,這裏先不做詳細介紹,以後有機會再講。而在當前局面下,很多工業軟件也表現出基礎性的作用,因為相關行業的發展已經受到這些軟件非常大的影響。比如Matlab對於教學科研的影響,Photoshop對於圖像處理的影響等。所以在本篇中把工業軟件也包括在基礎軟件中。
那麼基礎軟件的現狀是怎麼樣的呢?可能大家已經有了一個大致的感覺,但是我們還是拿具體的情況來討論吧,因為具體的情況比你大致的感覺還要嚴重。在知乎上有一篇文章列舉了當前十大領域佔絕對優勢地位的基礎軟件(或產品公司)及其所屬國家(https://zhuanlan.zhihu.com/p/90044122),摘抄整理並添加出現年份後如下所示:
1. 操作系統。Windows(美國,1985),Unix(美國,1969),Linux(芬蘭,1991),安卓(美國,2007),iOS(美國,2007)
2. 數據庫。Oracle(美國,1977),IBM DB2(美國,1983),SQL Server(美國,1988),MySQL(瑞典,1996)
3. 專業圖像處理。Photoshop(美國,1987),Illustrator(美國,1987),CorelDRAW(加拿大,1989)
4. EDA芯片設計。Cadence(美國,1988),Mentor Graphics(美國,1981),Synopsys(美國,1986),Crosslight(加拿大,1993)
5. 專業數學軟件。Matlab(美國,1981),Mathematica(美國,1988),Maple(加拿大,1988)
6. 電影工業特效。Maya(美國,1983),3ds Max(美國,1990),Houdini(加拿大,1987),Cinema 4D (德國,1989)
7. CAD/CAM。AutoCAD(美國,1982),CATIA(法國,1982),UG(德國,1983)
8. 石油化工。PRO/II(美國,1979),Aspen Plus(美國,1981),gPROMS(英國,1988),VMGSim(加拿大,1999),CMG Suite(加拿大,1978)
9. 電力系統。PSCAD(加拿大,1976),PSAPAC(美國,1994),ARENE(法國,1996), HYPERSIM(加拿大,1995)
10. 大型通用有限元分析。ANSYS(美國,1970),Abaqus(法國,1978),Nastran(美國,1969)
根據該資料進行簡單統計,可以得出基礎軟件按國別統計圖如下:
可以看到美國基礎軟件數量為22種,遙遙領先。而同屬西方主要國家的加、法、德、英都有貢獻,而芬蘭、瑞典這樣的北歐國家也榜上有名。美國為首的西方國家在基礎軟件中的優勢顯而易見。
除了以上基礎軟件之外,基礎軟件的基礎,也就是創造這些軟件的編程語言也是非常重要。這個情況怎麼樣呢?
現代編程語言最早從1945年就已經出現,據統計已經產生過2500種以上。這其中絕大部分並沒有被廣泛使用,或者已經被淘汰。我們僅僅討論當前活躍的語言。有一個TIOBE排行榜,它是反映編程語言流行程度的一個指標,每月會更新一次。查看它的榜單就可以知道當前活躍程度最高的那些語言。最新的一期榜單(2020年7月)按使用熱度排序列出瞭如下50種語言(括號中是所屬國家及誕生年份):
C(美國,1972)、Java(美國,1995)、Python(荷蘭,1991)、C++(美國,1979)、C#(美國,2000)、Visual Basic(美國,1991)、JavaScript(美國,1995)、R(新西蘭,1995)、PHP(加拿大,1994)、Swift(美國,2014)、SQL(美國,1986)、Go(美國,2009)、Assembly language(美國,50年代初)、Perl(美國,1986)、MATLAB(美國,1981)、Ruby(日本,1995)、Scratch(美國,2007)、Rust(美國,2006)、PL/SQL(美國,1988)、Classic Visual Basic(美國,1991)、SAS(美國,1976)、Transact-SQL(美國,1988)、Objective-C(美國,1983)、Groovy(美國,2003)、Dart(美國,2011)、D(美國,2001)、Kotlin(捷克,2011)、COBOL(美國,1960)、ABAP(德國,80年代)、Delphi/Object Pascal(美國,1985)、OpenEdge ABL(美國,1984)、Logo(美國,1968)、PowerShell(美國,2006)、Lisp(美國,1958)、(Visual) FoxPro(美國,1988)、Julia(美國,2012)、Lua(巴西,1993)、Scala(瑞士,2001)、VBScript(美國,1991)、Haskell(美國,1990)、Scheme(美國,1975)、TypeScript(美國,2012)、Ada(美國,1975)、Prolog(法國,1972)、PostScript(美國,1985)、Erlang(瑞典,1991)、RPG(美國,1959)、Apex(美國,2000)、C shell(美國,80年代)、Fortran(美國,1956)
我們同樣將上述主流編程語言按國別進行統計,可以得出以下圖表:
其中,由美國創造的主流編程語言有40種,佔80%,其餘10國各有1種。由此可見,在編程語言上,美國更是一騎絕塵!
通過考察基礎軟件,並延伸考察到編程語言,我們不得不面對一個現實:整個行業的基礎主要是由美國打造,一些西方國家也做出了貢獻,甚至還有發展中國家的貢獻,但中國貢獻程度很低(有幾個基礎軟件中國參與了研製,中國人也創造了編程語言,還有使用中文的編程語言,但是流行程度遠不夠上榜)。
現實就是現實,差距真的太大了!承認這個現實後,我們接下來需要弄清楚三個問題:是什麼原因讓美國在基礎軟件上至今仍能天下無敵?基礎軟件領域的強國有什麼制勝法寶?我們落後他們這麼多的原因到底是什麼?
二、基礎軟件發展歷程的啓示
美國在基礎軟件上獨霸天下最重要的當然是歷史原因。現代計算機起源在美國,無論是硬件還是軟件,都是由美國人最早創造、制定標準、實現產業化。美國在基礎軟件上強是理所應當的,這個好理解也不用多説。但是其他西方國家,甚至還有發展中國家在基礎軟件上取得的成就該怎麼解釋呢?
我在仔細查閲基礎軟件發展歷史資料後,發現了這些國家有一個顯著的共同點,那就是大學發揮了非常重要的作用。許多基礎軟件是由大學教授甚至是學生最早發起的。比如Matlab的前身是克里夫·莫勒爾(Cleve Moler)教授為了在課堂上講解矩陣運算而開發的簡單工具,Photoshop是托馬斯·諾爾(Thomas Knoll)在完成博士論文期間偶然的興趣之作,比爾·蓋茨在上大學期間寫出了BASIC編譯器,林納斯·託瓦茲(Linus Torvalds)在上大學時因為覺得現有操作系統太渣就開始了Linux操作系統的開發……這都是類似的故事。尤其要關注的是唯一一個產生自發展中國家的流行語言Lua,也是出自大學校園——它由巴西里約熱內盧天主教大學的三人研究小組創造。
其實稍做分析也就能理解這種現象產生的原因了:大學往往能夠接觸到最前沿的計算機技術,技術人才集中的氛圍又會使得大家對最新出現的需求很敏感,自然而然地會嘗試用最新的計算機技術手段針對新需求創造新工具。大學天然是創新的重要策源地。但是,中國有許多優秀的大學,為什麼我們大學的創新開拓就不足以貢獻出一款有影響力的基礎軟件或編程語言呢?是不是還有些條件在中國是與國外差異很大的呢?
這樣的差異是確實存在的。
第一個差異就是知識產權保護。許多基礎軟件在剛出現時往往就是一個簡單的工具。但在知識產權保護完善的前提下,即使它只有很少的功能,只要它被人們使用就可以獲得相應的收入,也就能支撐它的不斷發展。開發軟件的人員能夠從中獲得利益,也就有動力持續投入進行完善。在本文的中篇介紹過,因為商業軟件的發達而刺激了自由(免費)軟件的出現,但並不是説商業軟件就是邪惡的。在軟件產業發展過程,開發軟件能夠賺錢而且是賺大錢是產業發展的重要動力,這是有歷史貢獻的,我們沒有必要抹殺。
而反觀國內軟件行業的發展過程,我們不能迴避的深刻印象就是盜版。盜版的盛行一方面讓我們能夠快速用上最新軟件,使得中國各行業直接與世界最高IT水平對接,另一方面也造成國內軟件行業的成長環境非常獨特與殘酷:中國人很早就形成了“軟件不要錢”的觀念。這不僅讓國外軟件收不到錢,更嚴重的是阻礙了國產軟件的發展。國內很多行業在與國外同行競爭時有一條普遍經驗就是走“質次價廉”的路線,即質量雖然比國外產品差一些,但是價格要低一大截。這種路線給國產商品爭取到一定的發展空間,由此獲得原始積累,使國產貨能夠慢慢地發展起來,甚至抓住機會實現逆襲。但是在軟件行業,因為盜版,國外軟件實際上是免費使用,國內同類軟件連“質次價廉”的機會都沒有。這樣的狀況演化下去,一方面國內軟件業很早就熟悉了互聯網時代的玩法:免費用軟件,靠流量獲取收益。這是在互聯網時代,中國成長為世界上唯一可以與美國抗衡的軟件大國的原因。但是另一方面這又在根本上扼殺了我們在基礎軟件上成長的機會。因為基礎軟件大多數只是行業軟件,沒有那麼大的用户量,不可能靠流量獲得收益。而用户量大的如操作系統,開發難度大,使用習慣與生態形成了壁壘。即使後來國外軟件公司在中國開展維權,“免費”軟件不再免費,國內基礎軟件也已經錯過了發展時機,無力迴天矣。
第二個差異是在教育上。西方國家以及部分發展中國家,對軟件的基礎教育做得很完善,對操作系統、編譯器、編程語言原理進行了系統、深入的教學與研究。可能有的讀者會説,我國大學的計算機專業也會講授這些課程。但國內往往也就止於講授而已,而在國外卻會動手去重新實現這些基礎軟件。比如在中篇中曾經介紹,當Unix操作系統出現以後,加州大學伯克利分校就成立了興趣小組,對這個操作系統進行專門研究與改進,並推出了BSD Unix版本。而在Unix商業化以後,為了向學生講解操作系統原理的實現細節,在荷蘭阿姆斯特丹自由大學計算機科學系任教的美國教授安德魯·塔能鮑姆(Andrew S. Tanenbaum,1944年3月16日—)自己開發一個與Unix兼容的操作系統Minix。這個操作系統成為他編寫的教材《操作系統設計與實現》一部分,後來也成為了Linux操作系統的來源之一。
塔能鮑姆與他編寫的《操作系統設計與實現》
我們的近鄰日本對於軟件的基礎教育研究也很深入,編寫了許多優秀的教材與專著,為免廣告之嫌這裏就不列舉書名了。我們能夠舉出基礎軟件原理方面中國人原創的教材或有影響力的書籍嗎?
再深入思考一步,為什麼國外會對基礎軟件的原理的教學如此重視呢?歸根結底又會回到知識產權上。因為基礎軟件重要,並且日漸昂貴,為同類軟件的競品提供了空間。不同領域的基礎軟件都會有多種產品競爭,造成了底層開發人才的需求量很大,學校自然就有動力為學生講授更深的知識,教學實踐活動也會更有針對性。因此,知識產權保護牽一髮而動全身,是產業健康發展的重要保障。
與此同時,還有一個問題值得我們注意。就算我們的大學增強了對基礎軟件原理的教學,從當前計算機專業的實際情況來看,也不一定會馬上取得很好的效果。相信很多科班出身的程序員都有在原理課上睡大覺的經歷。但是,似乎國外在開展這方面教學時效果卻很好,許多學生展現出的理解能力與實踐能力超強,更不要説像林納斯這樣直接以大學生身份創造新的操作系統的妖怪了。這又是為什麼呢?
答案是他們搶跑了。
可能有些故事大家已經很耳熟了。比爾·蓋茨13歲開始學編程,20歲寫出BASIC編譯器並創立微軟。芬蘭人林納斯·託瓦茲10歲開始在外祖父的教導下學習編程,22歲作為大學生創造出Linux。日本人松本行弘從初三開始編程,30歲創造出Ruby語言。這裏只列舉了幾位在基礎軟件領域做出貢獻的人物,要是擴大到應用軟件,編程少年就更多了。
還要提到一個特例,那就是喬布斯。他雖然接觸編程比較晚,編程水平甚至被蓋茨嘲笑,但他對編程有深刻體會,特別強調“編程思維”的重要。他説:“學習編程教你如何思考,就像學法律一樣。學法律的人未必都成為律師,但法律教你一種思考方式。同樣,編程教你另一種思考方式。所以,我把計算機科學看成基礎教育,是每個人都應該花一年時間學習的課程。”
任何人對編程的學習,都必須經過相當長時間的訓練。這個過程不僅是獲得思考方法、熟悉各種技巧,還會積累一些重要的、有深度的問題。這些問題只有當他們開始學習基礎軟件原理時才能得到很好的解答,讓他們頓悟,產生“相逢情變深,恨不相逢早”的感覺。解決了這些問題,編程少年們才能脱胎換骨,才有可能晉階成元嬰級的怪物。一方面大學老師教得深入,另一方面學生一點就通。教學相長,這樣的基礎軟件教育才能成功。
而我們絕大多數的學生都是在大學階段才開始接觸編程,都還處在嘗新鮮的階段,更多地喜歡去實現一些具體的功能。他們沒有經過長時間的實踐,還沒有感受過被底層問題苦苦糾纏不得解脱的痛苦。此時讓他們上原理課,告訴他們這就是很重要的問題的答案,他們如何知道珍惜?“此情可待成追憶?只是當時已惘然”——“如果時光可以倒流,我必不在原理課上睡大覺!”我們學生的基礎不一樣,讓他們自覺、重視,很少有幾個天才能夠做到。
基礎不同!即使我們的大學一樣能夠接觸最新的計算機技術與最鮮活的需求,但是學生的能力還在培養中,他們並不能及時對這些有利條件做出反應。等到他們能力培養得差不多了,也該畢業離開學校了,走向工作崗位面對最普通需求去實現最基本的功能。錯過,可能就是一輩子。
三、應該做些改變了
通過上面的分析,我們可以瞭解到國內軟件行業在發展過程中走了一段彎路,造成基礎研究與創新的根基不牢,中國人在基礎軟件領域幾無所出,現在也就不得不面對被動的局面了。那我們是否還有翻盤的機會呢?
還真有!我們繼續對前面提到的基礎軟件與編程語言的情況進行分析,這次我們統計每個產品出現的時間,可得如下統計圖:
主流基礎軟件產生年代統計圖
主流編程語言產生年代統計圖
從圖中我們可以看到80、90年代是這些軟件出現的高峯。那個時代正是個人計算機剛出現的時候,計算機與計算機用户的數量出現爆炸性增長,各個行業都出現了旺盛的軟件需求。那時為滿足各行業需求產生的一大批基礎軟件,綿延發展直到今天。而計算機與用户數量的又一次爆發性增長是在07年喬布斯推出蘋果手機正式開啓移動互聯網時代以後,但這一次卻沒有對應出現新的基礎軟件的高峯。這是因為智能手機更多是個人通信娛樂終端,到今天也沒有成為真正的生產力工具。它的興盛只帶火了安卓與iOS兩種操作系統,其它基礎軟件的格局沒有出現太大的改變。
但是新的技術變革浪潮正在來臨。在5G時代,物聯網、車聯網、工業互聯網等網絡形態將終於得到實現,越來越多的終端設備接入網絡,它們的相互連接與計算需求將造成全新的巨大的應用場景,人工智能的廣泛應用會使得計算的複雜性大幅增加,這些變革對整個計算機行業帶來的衝擊一定不亞於個人計算機的出現。正是基於這種判斷,美國才會這麼瘋狂沒有底限地對中國科技企業與高科技產業發起打擊。而我們在應對美國無所不用其極的攻擊的同時,更要積極爭奪在各行業即將出現的逆襲機會。
這次新的技術浪潮是對生產力的革命,必然會造成新的基礎軟件的崛起。我們不能再錯過這個機會,要為它的到來做好準備。而所做準備中,必須對國內軟件產業過去發展中存在的問題做一個徹底的改正,這其中應該包括:
1. 加大力度進行軟件知識產權保護。只有完善的知識產權保護,才能使創新獲得尊重,才能使創新成果不斷成長壯大,不被拙劣的抄襲扼殺,才能使做出創新的人獲得應有的收入激勵其開創事業。同時,因為知識產權保護,會加大了軟件使用成本,必將對社會需求進行正向驅使,增大對底層研發人才的需要。這種需求的壓力又會傳導到教育部門,促進學校加強對底層技術的教學與研究。同樣因為軟件使用成本的增加,行業對開源軟件也必定會更加重視,會大大加快開源軟件在國內的發展,走上與國際潮流方向一致的健康發展之路。加強知識產權保護,作用強大,可以達成“驅虎吞狼、一箭多雕”的效果。我們絕不能把它當作一句口號,而是要讓它成為產業發展的重要保障。
2. 對國內軟件教育進行改革。教育改革有兩大重點。一是加強學校對基礎軟件的教學與研究。這個不用説太多。當前已經有學校開始了行動。7月5日,被列入美國政府實體名單並被禁用Matlab的哈爾濱工業大學,舉行了計算學部成立大會。
會上,學部劉挺主任在發言中明確計算學部任務:培養國之棟樑,打造國之重器,在探索一校三區計算學科共建的同時,培養人工智能+X複合型人才。我願意相信這將成為國內基礎軟件教育與研究的一個轉折性事件。
第二個重點,就是要讓中國的孩子在更早年齡開始計算機編程的學習。關於這一點就有必要進行詳細的討論。
其實我國政府很早就開始重視對中小學生的計算機普及教育。1984年2月16日,小平同志在上海微電子技術應用匯報展覽會觀看小學生操作計算機時説:“計算機普及要從娃娃抓起。”從那時開始國內就掀起了面向中小學生進行計算機普及教育的熱潮。
我最近拜訪了濤思科技創始人陶建輝先生,他正好是這段歷史的見證者。他回憶説,84年為貫徹小平同志指示,團中央向各地學校配發了一批計算機。當時上高一的他由此才接觸到計算機,並且通過自學掌握了BASIC編程,從此走上了編程的道路。如今已年過50的陶先生依然堅持親自寫代碼。濤思科技推出的TDengine是面向物聯網的開源大數據平台,是國產基礎軟件在新的技術革命到來之前所進行的準備之一,目前項目發展勢頭非常喜人。
但是,從84年開始的這一波計算機普及教育在實施的過程中,更多地注重計算機應用,對基礎原理與編程方向力度不夠。這是受到當時國內大眾對最新科技的接受程度的限制,我們也因此失去了收穫更早一批計算機編程人才的機會。
好在政府已經發現了計算機教育中存在的問題,開始着手調整相關政策。國務院於2017年發佈的《新一代人工智能發展規劃》(國發〔2017〕35號)明確提出:“實施全民智能教育項目,在中小學階段設置人工智能相關課程,逐步推廣編程教育,鼓勵社會力量參與寓教於樂的編程教學軟件、遊戲的開發和推廣。建設和完善人工智能科普基礎設施,充分發揮各類人工智能創新基地平台等的科普作用,鼓勵人工智能企業、科研機構搭建開源平台,面向公眾開放人工智能研發平台、生產設施或展館等。支持開展人工智能競賽,鼓勵進行形式多樣的人工智能科普創作。鼓勵科學家參與人工智能科普。”
教育部2019年發佈《2019年教育信息化和網絡安全工作要點》(教技廳〔2019〕2號)明確提出“推動在中小學階段設置人工智能相關課程,逐步推廣編程教育。”
這些都是國家層面對中小學開展編程教育進行的佈局,把教育重點做了進一步的明確,將對中國計算機普及教育的面貌帶來煥然一新的變化。
雖然在國家層面已經把大方向確定了,但是很多家長依然會有不解甚至擔心。他們認為現在孩子的課業負擔本來就很重,再增加編程這門課,這不是讓孩子更加吃不消嗎?其實這是長期以來我們在推廣編程教育時一直忽視了的方面:沒有把學習編程與學習文化課的區別説清楚!
在這裏,我希望能向大家做一個清晰的傳達:編程和其它學科不一樣!它不應該被看作一門與文化課平行的課程,它的本質是用一種新的思考方式去運用課堂上教授的學科知識。它更多的是對知識的運用,而且是一種形象化、快速的運用。
首先,要理解學習編程是獲得一種新的思考方式,也就是喬布斯所説的“編程思維”。那麼什麼是編程思維呢?具體來説,編程思維分為兩個部分:建立模型與分解問題。在編程中將程序語句的執行方式分為順序、選擇與循環三種。順序是從前往後逐個執行,選擇是根據具體條件執行或不執行(或者執行這個部分還是那個部分),循環是在滿足一定條件的前提下對同樣的動作重複執行。這三種執行方式構成了最核心的問題解決模式,順序是最基本的模式,選擇是程序實現交互的基礎,而循環則是在前兩種模式的基礎之上發現問題中隱藏的相似性。由此可見三種執行方式其實是三種解決問題的思維模型,世界上一切的問題都可以最終通過分解細化後套入這三種模型進行解決。
比如一個簡單的成績統計問題:班上共有40名小朋友,對一次考試成績分別按100分、90分以上、90分以下進行分組統計。這就需要用到三種模型,分組時根據成績區間進行判斷就是用到選擇,對40個成績數字進行逐一檢查就用要到循環,選擇與循環內部就是順序。三種模型的不同組合就能構成所有問題的解決思路。
除了用這種解決實際問題的方式來訓練編程思維,現在還有一些遊戲以更輕鬆活潑的方式使兒童獲得同樣的訓練。其中有一款叫LightBot的手機遊戲,通過給機器人預設動作來完成點亮燈泡的任務。大家可以讓自己的小孩嘗試一下,切實感受一下編程思維是個什麼樣子。
通過編程學習,讓中小學生熟悉思維模型,獲得問題拆解能力,將會使他們獲得強大的思考方法,思考問題解決問題的能力也將獲得極大的提升。
還要理解編程的過程是對學到的各種學科知識理解與運用的過程。我們現有的教育體系,其實是十分重視對知識的運用的。我們從小學開始就會接觸到一種題型:應用題。這種題型的出發點就是讓學生運用課本所學知識,從而實現理解與消化。但是因為受題型體裁所限,為了將知識點硬塞進去就出現了許多奇葩的題目,比如數學應用題裏經常被大家吐槽的水池一個管子進水另一個管子放水之類的問題。這類題目乍一看違反了常理,相信大家都有過被它支配的童年陰影。
其實要實現對這類題目背後知識點的運用,改用編程來做就會變得既合理又好玩了。我們可以讓小孩按照題目要求做一個水池的示例程序,並且進水與放水的速度可以調節。這樣就能用可視化的方式讓小孩體驗不同速度對水池蓄水時間的影響。當然我們還可以換成其它類似的應用場景,比如手機一邊使用一邊充電,大壩蓄水與泄洪等。其它常見的應用題如追及問題,可以設計成射擊遊戲,通過調整敵機與子彈不同的速度讓孩子看到速度對於擊中目標所需時間的影響。編程的好處就在於,可以讓孩子在動手實現遊戲的過程中,自己產生動力去運用所學數學知識。
計算機編程能給教學帶來的好處,許多專家學者都做過專門的闡述。其中數學家康拉德·沃爾夫拉姆(Conrad Wolfram,1970年6月10日—,他是科學計算軟件Mathematica發明人Stephen Wolfram的弟弟)在TED上做的一個演講就非常有影響。該演講的題目是《用計算機教給孩子真正的數學》,康拉德認為應當使用計算機編程讓數學學習變得貼合實際,變得有趣。他為了幫助7歲的女兒理解“當多邊形的邊數增加到非常大時, 多邊形會變成一個圓”這個概念時,他編寫了如下的示例:

生動的圖形變化立刻讓小姑娘對數學概念有了直觀的認識。同時由於這個模型實際上是對極限和微積分概念的啓蒙,他又繼續以此作為起點,向小姑娘講了一些微積分知識,小姑娘也很快就理解接受了。康拉德由此提出應當充分運用計算機帶來的便利,讓兒童真正體會到數學的魅力,再也不會由於教學方式的原因而認為數學沉悶枯燥、累覺不愛。
其實不僅是數學,其它學科知識同樣通過編程的實踐獲得直接運用,從而激起孩子的學習興趣,更重要的是從中獲得成就感。
除了對中小學生學習編程意義有正確的認識之外,將編程教育落到實處我們還需要多學習歐美先進國家的教育理念與教學經驗,才能獲得最好的效果。這其中非常關鍵的一點,就是他們一直在不斷進行教育手段的創新,力圖降低編程學習的門檻,讓更多孩子能夠接觸編程以後就能喜愛編程。一方面他們推出了許多能讓兒童訓練編程思維的遊戲,如前面提到的LightBot。還有許多趣味性的編程入門級工具,如蘋果推出的Swift Playgrounds等。而更厲害的是,他們還在琢磨讓兒童能夠少寫代碼或者不寫代碼,以圖形化的方式開始編程。
這種嘗試美國人從60年代,也就是最早的大規模使用的編程語言出現大約十年之後,就已經開始了。1968年,麻省理工人工智能實驗室創始人之一的西摩爾·佩普特(Seymour Papert,1928年2月29日—2016年7月31日)創造了LOGO程序語言。LOGO語言是有史以來第一個專門為兒童設計的編程語言。在計算機極其複雜的年代,LOGO語言把編程簡化到了極致。在LOGO的世界裏有一隻小海龜,你可以通過輸入指令,讓海龜在畫面上走動,可以向上下左右,或者是按照你指定的角度移動。你還可以讓小海龜以加速或減速移動,也可以讓小海龜重複某一個動作。這些指令看似簡單,但假如能將其進行合理的組合和排序,就可以創造出各種圖形,包括人、房子、汽車、動物和抽象圖案。除了對編程語言進行簡化,為了在當時條件下,能夠脱離昂貴的計算機使用LOGO語言,西摩爾還發明瞭實體版“海龜畫圖”。孩子可以使用簡易的鍵盤控制器,操縱“小海龜”在紙上畫出圖形。LOGO語言是對兒童編程教學的開創性的嘗試,它的許多理念直到今天都有着十分重要的意義。
西摩爾(左)和操縱“小海龜”畫圖的兒童
到2007年,西摩爾的學生米切爾·瑞斯尼克(Mitchel Resnick,1956年6月12日—)又創造出Scratch語言。這種語言在LOGO的基礎上更進一步,使用者可以不認識英文單詞,也可以不使用鍵盤,只用鼠標拖動積木形狀的程序模塊進行拼搭就可以完成編程。Scratch同時也是一個開源項目,全世界兒童都可以免費使用,以它為第一級台階,開始編程世界的攀登之旅。
米切爾和Scratch編程器界面
除了美國之外,還有許多西方的IT科學家也在不斷嘗試簡化編程語言的教學,使編程的大門能向更多人敞開。比如Pascal語言、ABC語言就是作為教學語言被創造的,如今在人工智能領域大火的Python語言則繼承了ABC的一些特性。應該説,歐美國家鍥而不捨地普及編程教育的精神是值得我們好好學習的,同時全世界都越來越重視編程教育的氛圍也給了我們壓力與動力,更應該在國內把編程普及教育真正的做起來做好。這是我們能在今後的技術革命中完成追趕與超越必不可少的條件。
經過三個篇章,我就完成了這個系列的文章。在寫作本文的過程中,有許多熱心讀者給了我關心與支持。我相信大家都是希望中國的軟件行業能夠以這次禁用Matlab事件為契機,獲得一次重要的調整與發展的機會。雖然新聞的熱點會過去,但中國科技行業面臨的打壓卻一直在持續。按最新的情況分析,中美之間的對抗並沒有得到緩解,而是不斷擴大,越來越激烈。誰也無法預測這場對抗會在什麼時候結束,但是我們每個人能做的就是堅持做好自己的事,直到勝利來臨!
視頻:TED演講_沃爾夫拉姆_用計算機教給孩子真正的數學