雖然普及人工智能已經成為國家戰略,但依然有大量的家長并不知道程式設計要學什麼,該怎麼學。家長的心态很現實:學程式設計能帶給孩子什麼,特别是,能不能對升學有幫助?
在程式設計逐漸普及的過程中,出現了兩種不同的聲音。一種認為程式設計對數學基礎要求很高,如果數學基礎不好,程式設計也肯定學不好;另一種是無論誰都可以從程式設計學習中獲益,程式設計并不需要太好的數學基礎。
那麼,到底哪一種是對的呢?下面的八個問題将為你釋疑。
問題一:程式設計=資訊學奧賽?
産生上面不同聲音的一大原因是許多人在資訊學奧賽和程式設計之間畫上了等号。但這兩者其實是不等的。資訊學奧賽隻是程式設計的一個小子集。這就跟我們所有人都要學數學,但隻有極少數一部分人會去參加數學奧賽是一個道理。
在程式設計門檻日益降低的當下,一般的程式設計隻需要一定的邏輯思維能力即可。大部分的核心算法和架構都是現成的,普通的程式設計人員隻要按需将它們組裝起來就能完成某個特定的需求。是以,千萬不要把碼農的職業想的有多高深,大部分的碼農隻是代碼搬運工群組裝者。但資訊學奧賽則不同,需要非常強的數學能力、問題分析能力和問題解決能力。即便是一名擁有三年以上工作經驗的老程式員,在面對資訊學奧賽的問題時,拿零蛋也是正常的。
問題二:程式設計是什麼?
資訊學奧賽是不是程式設計?是!
孩子玩個機器人、搭個積木是不是程式設計?也是!
但這兩者之間的關系,就好像是問:100以内的加減法是不是數學?費馬大定理是不是數學?
是以,程式設計到底是什麼?
程式設計的目的是讓計算機幫助人類解決某個問題。為了使計算機能夠了解人的意圖,人類就必須将所需解決問題的思路、方法和手段通過計算機能夠了解的形式告訴計算機,使得計算機能夠根據人的指令一步一步去工作,完成某種特定的任務。這種人和計算機之間交流的過程就是程式設計。
程式設計的難易主要取決于兩個方面:一是程式設計語言的友好性;二是所要解決問題的難度。這兩者,起決定性因素的是後者。從最早的機器語言到彙編語言到進階語言再到現在的圖形化程式設計語言,程式設計的文法已經變得相當友好了。但無論用哪種程式設計語言,會寫八皇後問題的程式員比例還真不高。
這就好比英國人覺得法語要比中文容易學。但不管怎樣,隻要肯學,學會說一門語言并能與人交流并不是難事,但要用任何一門語言創作一首詩歌或一篇小說都不是件容易的事。
問題三:為什麼資訊學奧賽如此受關注?
答案大概隻有一個:資訊學奧賽能與升學挂鈎!
問題四:程式設計和數學到底是什麼關系?
這取決于學程式設計的目的。
如果就是奔着資訊學奧賽學程式設計,那程式設計與數學絕對是強相關。因為資訊學奧賽本身承載了智商選拔的重任,而數學能力是最基礎的。具體地,資訊學奧賽涉及的是離散數學的内容,知識點主要包括計數、數論、集合論、圖論、數理邏輯、離散機率、矩陣等。思維和方法方面,對遞歸和分治的要求比較高。當然,除了數學能力,資訊學奧賽還需要閱讀了解能力、問題分解能力、編碼能力等一系列綜合能力。
那如果不搞資訊學奧賽呢?程式設計和數學就沒有那麼強相關,有些時候甚至可以說是弱相關。現在程式設計的門檻是越來越低,有些程式設計工作其實隻是簡單地做了些功能的調用。懂一些基本的程式設計文法,會閱讀接口的說明書,就能實作一些很有用的功能了。要求稍高一點的,需要自己實作一些代碼,這時邏輯思維能力和抽象能力就不可少。再難一點兒,涉及到核心的算法,那數學能力就必不可少。整個程式員的群體本身也是個金字塔結構,涉及核心算法的屬于金字塔塔尖,實屬少數。大部分程式員其實并不需要懂複雜的數學知識。
問題五:什麼時候開始學程式設計合适?
如今,市場上有些機構宣傳幼稚園就可以開始學程式設計,攪得部分不明就裡的家長無所适從。我個人認為,除了極少一部分天賦異禀的孩子,普通的孩子在5歲的時候連最基本的邏輯思維都不健全,學程式設計無從談起。而且,即便是學普通的程式設計,最基本的四則運算和邏輯運算還是必備的基礎,從課内的數學教學進度來看,至少得要二年級結束才行。
很多家長想借鑒孩子學英語的經驗,希望學程式設計也能像學英語一樣早早起跑。并不是說更小的孩子不能學程式設計,隻是程式設計這玩意兒和英語真不一樣。小孩子記憶能力強,英語從小開始多學個三年,效果紮紮實實能看得到,晚學的花兩三個月時間根本追不上。但程式設計就不一樣,同樣智力的娃,從5歲開始先學三年程式設計,後學的最多半年就能追平。是以,思維沒有到那個地步,早學純屬事倍功半,除非錢在口袋裡跳得慌。
問題六:孩子學習程式設計的語言怎麼選擇?
如果想讓孩子早點接觸程式設計并對程式設計産生興趣,那第一門語言可以選擇圖形化程式設計。待孩子了解了程式的工作方式,後面想讓孩子走資訊學競賽的家長可以選擇在五年級左右讓孩子進入C++代碼的學習。
如果孩子數學天賦一般,或者家長也不想讓孩子通過資訊學競賽升學,而隻是純粹想體驗程式設計的樂趣并建立計算思維,那麼圖形化程式設計可以一直學到五六年級。再往後,目前來看python是一個不錯的選擇,因為可以很快做出一些很酷的東西。
問題七:圖形化程式設計能訓練計算思維嗎?
有些家長認為計算思維的訓練一定需要學C++或Python這類代碼語言才行,而圖形化程式設計隻能用來搭搭積木玩一玩。其實,這個認知是不正确的。
圖形化程式設計目前之是以沒有起到很好的訓練計算思維的效果,問題不在于圖形化程式設計本身,而在于市場把圖形化程式設計的學習下放的太厲害。很多機構都把圖形化程式設計下放到三年級以下。在國小一二年級甚至是幼稚園,邏輯與數學基礎都不具備,怎麼去熏陶計算思維?如果在更高的年級(比如國小的四五六年級)去學圖形化程式設計,那完全可以作為計算思維訓練的載體。
本質上來說,計算思維的訓練與具體的程式設計語言無關。這就好比一個人的文學修養與他所使用的語言沒有關系,文言文可以寫出優秀的文學作品,現代白話文和英文同樣可以。
問題八:程式設計會影響學科類課程嗎?
有家長會有這樣的顧慮:孩子學程式設計需要花費大量的時間,等到進入國中後會不會影響學科類的學習?也正因為此,進入國中後,很多家長就不再支援孩子學程式設計了。
有這個顧慮是很自然的,但如果學的确實是計算思維,培養的是程式設計素養,這樣的擔憂卻是沒有必要的。
我們不妨來看看程式設計能培養孩子的哪些能力。
編寫程式是為了解決某個具體問題,但這個問題通常是通過某種情景表現的,不像數學題那樣給我們抽象好了。是以,程式設計學習首先有助于提高孩子的問題了解、問題分析和問題抽象的能力。
一個稍微複雜一點兒的問題,往往由若幹個子問題構成,其中有些是我們熟悉的,可以利用現有的程式,有些是我們需要去編寫的。程式設計學習非常有助于提高孩子們的問題分解能力。
在編寫程式的過程中,邏輯思維能力極為重要。程式裡用的最多的就是邏輯判斷和循環。滿足什麼條件執行哪個分支程式,滿足什麼條件退出循環,這些都需要較高的邏輯思維能力。當然,有沒有良好的數學素養,寫出的程式可能差别很大。擁有良好的數學思維往往可以做到降維打擊,寫出非常簡潔和高效的程式。
寫程式常常是一個不斷優化的過程。一開始給一個能跑的程式,往往效率并不那麼高,結構并不那麼美。這時,我們可以不斷去尋找更優化的方法,不斷提升程式的效率和可讀性。是以,程式設計能鍛煉孩子不斷優化、追求卓越的品質。
數學題錯了,如果我們不驗算,就很難看出來,更何況有些數學題也不好驗算。但程式來不得一絲一毫的馬虎,錯了要麼無法運作,要麼執行結果不符合我們的預期。程式設計來不得半點粗心,一旦發現錯了,還得像福爾摩斯一樣去尋找問題所在。有可能一個不經意的小錯誤,得花上半天甚至更長時間才能找出症結。是以,程式設計非常有助于克服孩子的粗心,鍛煉孩子的耐心,提升孩子的錯誤診斷能力。
對于一個大型的程式,我們常常需要幾個人一起協作完成。這個時候,程式就不單單是寫給自己看,還要讓别人也能看得懂。是以,程式設計非常有助于鍛煉我們的團隊協作能力,以及結構化與子產品化思維的能力。
沒錯,程式設計确實很花時間,但無論是在這個過程中直接或間接獲得的能力,對學科類的學習都是有益的。話再說回來,學什麼不花時間呢?
(全文完)作者:昍爸,中國科學院計算機博士,大學教授,博士生導師。主持國家自然科學基金4項,在國内外高水準期刊和會議發表論文60餘篇。曾獲國中和高中全國數學奧林匹克聯賽一等獎,江蘇賽區第一名,聯考數學滿分。著有暢銷書《寫給孩子的數學之美》、《搞定平面幾何:輔助線是怎麼想出來的》、《給孩子的數學思維課》與《給孩子的數學解題思維課》。
【合集】資訊學奧賽零基礎【L0課程完結】:第01課-第60課 視訊回放目錄