1. 程式人生 > >我是如何成為一名少兒程式設計競賽老師的

我是如何成為一名少兒程式設計競賽老師的

一、起緣

2017年9月,我以前一個同事問我能不能教他小孩Theo學習程式設計,因為以前在同一家公司時,我那同事經常帶Theo去公司,我和Theo也認識,所以我答應了。

二、程式語言

那個時候Theo 8歲,英語很棒,口語和老外差不多;數學也還可以。我認為可以直接教他C語言。於是從C語言開始。

C語言學了兩個月之後,基礎就打下來了。Theo學得很好,多數知識都能很好地領會,當然我的教程也寫得極為詳細–對於8歲的小朋友,你不得不寫得詳細。

當時也碰到了不少困難,最困難的一次無疑是遞迴,遞迴是程式獨有的思維,數學裡面沒有,跟日常生活的思維差別也很大。當時用的是漢諾塔的例子,我和Theo從晚9點開始學,一直學到12點多,學了三個多小時,Theo才搞懂遞迴的思維。後來Theo將遞迴掌握得爐火純青後,數次感嘆到:遞迴如此簡單,當時我為何學了三個多小時,學到12點多才學明白呢?

C語言學完之後,自然是學C++。因為C++就是在C的基礎上設計的,基本語法基本上是一樣的,但是二者還是有根本的區別。把一些基本的知識點,比如繼承、封裝、多型、私有、保護、公有、建構函式、解構函式、this指標、行內函數、引用、模板、標準庫講完之後,就結束了。

考慮到Java長期霸佔著全球程式語言排行榜的頭把交椅。C++教完之後,就教Theo學習Java。

圖(1) TIOBE 2018年9月程式語言排行榜.png

Java語言比C/C++簡單。Theo有了C和C++的基礎之後,學習Java自然就比較快。

關於主流程式語言的難度排行,我認為是這樣的:

Assembly > C > C++ > Java ≈ Objective-C > PHP > Python

再接下來是學Python語言。計算機(資訊學)會進入高考科目已是一個趨勢,目前一些試點省份比如浙江、天津等,計算機課程使用的程式語言就是Python。Python語言比Java更簡單,教完了Python語法之後,再教他程式設計實現計算器。計算器很簡單,教Theo編寫計算器主要是為了讓他理解軟體的開發過程。

圖(2) 簡易計算器.png

這四門程式語言學完之後,就不需要再學語言了。因為程式語言有成百上千種,沒必要也沒時間全部都學。把這四種最主流的語言學熟悉,以後即使碰見沒見過的語言,兩三個禮拜也可以學會。

按原本的計劃,接下來想教他編寫一些簡單的遊戲,比如掃雷、貪食蛇、俄羅斯方塊,再教他做一個他的個人網站。

三、資料結構

後來我想資料結構更加重要。資料結構比較難,多少科班的大學生掛了資料結構。所以就決定暫時不教Theo編小遊戲,先學資料結構。

起初我不確定能否教明白,畢竟一來資料結構較難,二來他才9歲(這個時候已經是2018年的春天了),只能是抱著嘗試的心態。

之前的四門語言的教材,我都是自己編寫的。資料結構我用的是比較適合入門的《大話資料結構》。考慮到《大話資料結構》雖然寫的很清晰,但是小朋友不一定看得懂,我自己也寫了一部分教程,主要是對《大話資料結構》進行進一步細化和補充。

讓我驚喜的是,Theo能聽得懂。

四、資訊學奧賽

資料結構學了一小部分後,時間已經到了2018年4月底。我那同事提起是不是可以考慮讓Theo走資訊學奧林匹克競賽的道路。

說來慚愧,我是那時才知道NOIP(全國青少年資訊學奧林匹克聯賽)和NOI(全國青少年資訊學奧林匹克競賽),具體請參考:https://www.jianshu.com/p/04bf0fa1b920

於是開始制定計劃:

(1)資料結構一定要學好

(2)要做OJ題

(3)要做NOIP真題

當然,如果最初就規劃好要走資訊學奧賽的路,那麼之前學的內容其實是過多了。Java可以先不用學,Python可以先不用學,計算器可以先不用做。這些可以等以後有時間了慢慢學。

但是沒辦法。人生,註定是一場不斷走彎路的旅程。

到了這個國慶節,NOIP初賽已經迫在眉捷了。

資料結構學習的容包括了《大話資料結構》中的90%的內容:演算法時間複雜度和空間複雜度、連結串列、棧、佇列、字串、二叉樹、圖、雜湊表、8種排序方法、五種查詢方法。暫時還沒講到的內容有:KMP、赫夫曼樹、最短路徑、拓補排序、平衡二叉樹、多路查詢樹。這些內容NOIP不考,等NOIP競賽結束後會繼續教。

OJ題則做了181道,這個量其實太少了,至少要上千題的量才會有比較好的效果。

圖(3) 做題記錄.png

NOIP真題亦只能做幾套,沒把全部的真題做完也很遺憾。

五、辭職

我本人,大學畢業後一直做的是計算機方面的研發和管理工作,至今十餘載。最初做iOS開發,後來做資料庫,做Java後臺,管理方面則當過技術經理、技術總監、副總裁和CTO。

今年主要是從事人工智慧方面的研發。

資訊學奧賽和人工智慧都是演算法方面的內容。但是兩者既有很大的區別又有聯絡。資訊學奧賽是考基礎演算法,而人工智慧則是應用領域的演算法。基礎演算法如果比較強,對人工智慧演算法或其他任何領域的演算法都會有很大的幫助。

先前我一邊上班一邊帶Theo小朋友學程式語言,感覺還是很輕鬆的。但是後來開始帶小朋友學資訊學奧賽的內容,加上上班研發人工智慧,相當於是做了兩份需要深度研究的工作,讓我苦不堪言。

到了2018年9月初,我決定辭掉工作,暫停對人工智慧的研究,先專心帶小朋友學習信奧,。

以我目前的演算法積累,教小朋友學習NOIP普及組的內容感覺綽綽有餘。但是後面還有NOIP提高組、NOI、IOI(國際資訊學奧林匹克競賽),最終的目標是希望小朋友能拿到IOI金牌。所以我自己也要經常參加線上演算法比賽以不斷提升自己的演算法水平

至於人工智慧演算法,也是一個有趣且有用的方向,但只能等我在NOI方面的能力提高了之後才能繼續研究,這估計至少是一年之後的事情了。

六、最後

是的,你沒有看錯,我走上輔導小朋友參加資訊學奧林匹克競賽這條路,不是當初職業規劃的結果,而是偶然的結果。

這跟因特網的產生一樣,因特網當初也不是精心規劃的結果,而是偶然的結果(這是某年NOIP的考題哈)。

瞭解小朋友學程式設計請加QQ307591841(微信與QQ同號)或QQ群581357582
關注公眾號請掃描二維碼
qrcode_for_kidscode_258.jpg