- 梔子貓的奇幻編程之旅:21天探索信息學奧賽C++編程
- 周魯
- 2959字
- 2021-03-26 23:48:58
作者的信 如何學習編程和應對信息學奧賽
各位家長:
我是這本少年編程入門書的作者——小周老師,職業程序員,職業奧賽教練,寫過120萬行程序,掌握17種編程語言,算上法語、英語和古漢語,一共精通20門“語言”。其實,數自己會多少門語言意義不大,這些語言都是觸類旁通的,只要精通一門,其他學起來都很容易。在這本書中,我們傳授的是C++語言編程,但這里面的編程技巧可以用在很多語言中。這本書能夠教9歲到14歲的青少年學會C++語言編程這項技能,也能幫他們在信息學奧林匹克競賽中取得好成績。但這些都不是最終目的,只是過程中的一些小目標。我真正希望教給孩子們的,是語言的特征,是編程的思維,是軟件的邏輯。
首先要說明,這是一本給信息學奧賽生(小學和初中)的輔導書,只有帶著使用工具書的心情來看這本書,才會有最好的效果。其次,它是一部科幻小說,當然,如果僅僅是想要開始上手編程,它也會是相當合適的入門教材。
之所以會把這本書寫成科幻小說的形式,主要是信息學奧賽考查的知識實在是太難了,直接學習大學計算機科學系的知識,一定會把大部分同學嚇退的,更不要說學習信息學奧賽的專用系統NoiLinux了。在培養了數千名信息學競賽選手的過程中,我發現,青少年對于枯燥的數學證明敏感度極低,但面對游戲化的教學時,會展現出令人驚訝的學習能力。這正是著名社會學家約翰·赫伊津哈在他的巨著《游戲的人》中,對于人類和游戲關系的精準定義:游戲,是人類的天性。正如很多職業程序員對二進制的理解,都是來自小時候使用修改器去篡改游戲數據時,被迫學習的16進制一樣。我堅信,只要能激發起學生的興趣,再難的東西,也有可能學會。
除了激發興趣之外,很重要的,就是練習。
我的母校——巴黎第六大學的計算機系,有一句流傳很廣的名言:“C'est en forgeant qu'on devient forgeron.”
翻譯成文言文,應該是:“鍛者,自錐也。”
大概說的是,只有不斷練習,才有可能掌握一門技巧,尤其是在信息學的學習上。
在中國的高中新課程標準中,人工智能和信息學已經成為正式的一個部分。如何讓廣大高中生學會信息學,到了大學階段能快速進入人工智能的研究領域,這是個亟待解決的課題。但我相信,不管如何去科普人工智能,這門學科的基礎都不會變。《左傳》中說,“猶衣服之有冠冕,木水之有本原”,也就是說,任何事情都要有基礎。
巴黎第六大學的幾位人工智能研究者和計算機系教授,都認同我的觀點:如果想要研究人工智能,首先要學習編程。因為編程能力是根本。我相信,我在巴黎第六大學的學長、“人工智能深度學習之父”、2019年圖靈獎獲得者LeCun教授,也會認同:人工智能的基礎,一定是數學和編程能力。
青少年學習編程的需求并不是從這個人工智能時代才出現的。早在1984年,鄧小平同志就在視察上海十年成果展的時候說出了非常有名的鼓勵之言:“計算機的普及要從娃娃做起。”從1984年到今天,35年過去了,不管是在計算機科學的發源地——美國,還是在科技界的后起之秀——中國,K-12階段能編程的學生數量,相比學生總數來說,都非常之少。
原因簡單而直白:少年編程到目前都沒有被摸索出一種有效的、可以復制的普及教育解決方案。請注意,我在這里所說的“少年編程”,是真正的編碼編程,而不是在商業上被炒作得如火如荼的圖像化編程。誠然,圖像化編程的語言或工具,例如來自美國麻省理工的Scratch,確實能夠培養孩子們的編程思維。只是,有了編程思維之后,距離擁有編程能力的路程,大概還有十萬八千里。
簡單來說就是,光有編程思維,沒有編程能力,在五大學科奧賽的信息聯賽——全國青少年信息學奧林匹克聯賽(NOIP)中,是絕無可能獲獎的。不光是NOIP,在任何真正考核編程能力的國內和國際的比賽和考試中,都沒有任何可能取得優異成績,其中包括:中國的高考,美國的AP課程考試(Advanced Placement,把大學的課程提前提供給高中生學習的先修課程)。
核心問題在于,編程思維這個物件,在編碼編程之外,是很難被檢驗的。只有在學會了編碼編程之后,編程思維才能夠發揮出作用。這就造成了全國乃至全世界的圖像化編程的普及和推廣,表面上看起來非常火熱、此起彼伏、風生水起,但最終真正造就出來的編程人才,少之又少。
Scratch出現了十幾年之后的今天,Scratch的發源地美國,還只是在高中階段的AP課程中提供真正的編程語言——Java語言的課程。而在2018年,參加AP課程中的Computer Science A(計算機科學A)——也就是以純粹編程能力為考查主旨的AP課程的人數,還只有區區6.8萬。就算是以計算機科學的基礎知識為考點的稍微簡單些的Computer Science Principles(計算機科學原理),也只有5萬人參加而已。根據美國國家教育數據中心(NCES)的統計,美國在2017—2018年間的高中畢業生人數是360萬。粗略一算,掌握編程能力的學生,只占美國畢業生的1.8%。AP課程中的英文語言寫作和微積分,分別是考生最多的兩門文理科代表,考生人數分別是57.9萬和31.6萬,相對于只有6.8萬考生的計算機科學,我們就能夠知道,編程教育在美國中學也遠遠未達到普及的程度。
但自2017年國務院要求普及編程教育之后,我國的高中課程標準開始發生變化。數據與計算(算法與程序設計)、數據與數據結構、人工智能初步,都已成為必修或選擇性必修課。在考試層面,浙江省已經率先將信息學納入高考。不僅如此,在2018年的數學高考試題中,多個省份都出現了類編程的題目。可以預見,全國高考中出現真正的編碼編程的試題,就在不遠的未來。
針對日益增長的學習編碼編程的需求,這本書誕生了。請注意,這不是一本簡化版的成人學習C++的教材,而是旨在構筑真正符合青少年學習能力和思考特征的編程教學體系的一次實踐。
作為一名信息學教練,我很高興這本書能夠出版,因為這本書能夠幫助9~14歲的孩子們理解什么是編程,學會編程,進而能夠進入信息學奧賽等級的題目練習中。對于希望進入信息學奧賽領域的年輕老師和未來的教練來說,這是一本深入淺出的編程教科書,大部分全國奧賽NOIP普及組中需要的C++知識在書中都覆蓋了,而且在書中使用的,全部都是NOIP考試系統NoiLinux。所見即所得的實用特征是這本書的重要特點。
作為一名信息學教育的普及者,我很期待這本書的面世。因為在信息學,或者簡單的只是編程教育這個層面,在我國,都存在巨大的教育資源缺口。我所說的,不光是就教育水平稍顯落后的省份而言;即便是在北京、上海、浙江、湖南、廣東、安徽、福建和江蘇這些信息學發達的地區,直到今天,我們也都很難在著名中學之外找到優秀的編程教育的資源。這本書可以讓教育資源不夠豐富的地區的孩子們通過書籍自學,按照書中的要求自行訓練學會編程。它存在的作用和意義,就是在全國范圍內普及編碼型的編程教育,讓看起來枯燥的C++編程能被小學高年級學生和初中生以自學為主學會。
作為一個父親,我更是盼望這本書的出現。因為我時常審視:“到底什么樣的書籍、什么樣的文字形式,才能夠讓只有八九歲的孩子們在編程的學習上專注下來,不管有沒有老師的陪伴?”我相信,這本書能夠平復家長們的焦慮,讓大家從“找不到一本真正適合小學高年級學生和中學生的C++編程書”的困惑中擺脫出來。
不管從什么角度來說,我都相信,在家長們還沒有拿起這本書的時候,心中已經有了一個或者堅定、或者模糊的概念,那就是:我的孩子,應該學編程。
只是,該如何讓孩子們學會真正的編碼編程?該如何真正得到在中國的高中課程標準中要求的編程能力?得到這種在高考中已經涉及、未來一定會考、現在已經在美國AP課程中濃墨重彩予以考核的能力?
這,是個問題。
這本書,就是答案。
- Visual Basic .NET程序設計(第3版)
- 從零構建知識圖譜:技術、方法與案例
- R語言經典實例(原書第2版)
- Python機器學習:數據分析與評分卡建模(微課版)
- C和C++安全編碼(原書第2版)
- iOS編程基礎:Swift、Xcode和Cocoa入門指南
- 組態軟件技術與應用
- R語言與網絡輿情處理
- Bootstrap 4 Cookbook
- 機器學習微積分一本通(Python版)
- Python語言科研繪圖與學術圖表繪制從入門到精通
- Django 5企業級Web應用開發實戰(視頻教學版)
- Hands-On Artificial Intelligence with Unreal Engine
- Java入門經典
- 代碼整潔之道:程序員的職業素養