【簡單介紹】
畢業(yè)于南京航空大學(xué)(NUAA),多年從事信息學(xué)競賽教學(xué)(noip、csp、usaco等),中學(xué)期間曾獲數(shù)學(xué)奧賽省一等獎、信息奧賽省二等獎
【授課科目】
AP計算機(jī)A,AP計算機(jī)P,IB計算機(jī),A-LEVEL計算機(jī),USACO
【教學(xué)成果】
帶出過多名noip/csp省二、三等獎及usaco銀組以上同學(xué)
近幾年來,計算機(jī)行業(yè)可以說是國內(nèi)外最熱門行業(yè)之一,而在計算機(jī)行業(yè)中,編程可以說是一切的基礎(chǔ),也是令無數(shù)程序員沉醉其中又抓狂頭禿的存在。很多同學(xué)包括家長對編程的印象還停留在不明覺厲的階段,但是如果愿意耐心接觸一下編程,會發(fā)現(xiàn)編寫程序其實是很簡單的事情,并沒有想象中難。
第一次接觸編程是在初中,學(xué)校的計算機(jī)老師開設(shè)了一個課外編程班,挑選了一些初中和高中的同學(xué)參加,目標(biāo)是參加noip(信息學(xué)奧林匹克聯(lián)賽)。編程班中老師教大家學(xué)習(xí)Pascal語言,一門很經(jīng)典也很古老的編程語言,編程的時候要在DOS系統(tǒng)下運行,運行起來是圖中這樣子。
可能是當(dāng)時老師也沒什么經(jīng)驗,我們學(xué)習(xí)基本就是自己看一本Pascal教材,懵懵懂懂中學(xué)了些算法之類的,不知道到底學(xué)的算法是什么原理,也不知道能用來做什么,有疑問也只能自己不停嘗試(當(dāng)時網(wǎng)絡(luò)還不發(fā)達(dá)),印象最深的是當(dāng)時寫一個四則混合運算的程序,整整調(diào)試了一整個通宵才搞定。在進(jìn)行過一段時間的學(xué)習(xí)并參加了一次比賽之后,突然覺得好像編程學(xué)起來太過迷茫,不知道怎么學(xué),也不知有什么用,于是計算機(jī)編程漸漸地淡出了中學(xué)生活。
之后大學(xué)時學(xué)的是工科材料方面專業(yè),計算機(jī)主要作為學(xué)習(xí)輔助工具而不是主要學(xué)習(xí)對象,專業(yè)方面也幾乎用不到編程。大學(xué)畢業(yè)之后一度從事的是專業(yè)相關(guān)工作(工科材料)。機(jī)緣巧合之下來到了計算機(jī)編程教育行業(yè),重新學(xué)習(xí)了一遍計算機(jī)和編程相關(guān)內(nèi)容,在這期間接觸并教過C++、Python、Java等各種語言,內(nèi)容也五花八門,有單片機(jī)嵌入式編程、算法競賽、機(jī)器人編程等,中間有過很多快樂,也遇到過很多困難,經(jīng)歷過無數(shù)“頭禿”的時刻。在這些學(xué)習(xí)和教學(xué)過程中也漸漸總結(jié)了編程學(xué)習(xí)的幾個重要因素:
早期流行的Pascal等語言雖然比較經(jīng)典、規(guī)范,但隨著時代的發(fā)展,漸漸跟不上行業(yè)需求,很早就不是一線開發(fā)所用語言,對圖形化和網(wǎng)絡(luò)編程缺乏支持,學(xué)了很久依然只是跟控制臺窗口打交道,學(xué)生很容易覺得所學(xué)跟平常電腦和手機(jī)上見到的應(yīng)用軟件和網(wǎng)頁完全是兩個世界東西,找不到學(xué)習(xí)的意義從而失去學(xué)習(xí)動力,所以選擇合適的入門語言是很重要的?,F(xiàn)在比較流行的語言主要是C++、Java、Python等幾種,各有特點。
C++語言從創(chuàng)造迄今已有近40年,但是一直跟隨時代需求改變和擴(kuò)展內(nèi)容,在軟件開發(fā)、網(wǎng)絡(luò)編程等主要方面都有成熟的體系,很多大公司比如騰訊公司主要開發(fā)語言就是C++。C++的最大特點是運行效率比較高,同時代碼規(guī)范嚴(yán)謹(jǐn),所以目前國內(nèi)想?yún)⒓有艎W競賽的學(xué)生大多會學(xué)習(xí)C++語言。
Java晚于C++出現(xiàn),很多基礎(chǔ)語法和C++很像,繼承了C++的規(guī)范嚴(yán)謹(jǐn),但是去除了一些C++中一些復(fù)雜的內(nèi)容,比如指針、內(nèi)存管理等內(nèi)容,并擁有一些其它優(yōu)勢,尤其在網(wǎng)絡(luò)應(yīng)用方面有很多優(yōu)勢,比如淘寶等高訪問網(wǎng)站主要就是由Java編寫。同時國外很多學(xué)校計算機(jī)相關(guān)專業(yè)編程入門課程都是教授Java,所以國外很多比賽主流語言是Java。
Python和Java出現(xiàn)的時間差不太多,但是風(fēng)格思路完全不同。Python的優(yōu)點是代碼簡潔、容易上手,并且在科學(xué)計算、圖像識別、人工智能、大數(shù)據(jù)分析等領(lǐng)域擁有很多擴(kuò)展庫,因此很適合工程、科研人員用來處理數(shù)據(jù)等。如果想快速通過自己編程制作簡單的應(yīng)用、網(wǎng)頁甚至小游戲等,Python也是很合適的選擇。
很多學(xué)生在學(xué)習(xí)編程之前可能對計算機(jī)行業(yè)和編程幾乎一無所知,懵懵懂懂的參加了編程課程的學(xué)習(xí)。比如有些同學(xué)可能學(xué)習(xí)編程目的只是課外想用編程做些有趣的軟件、網(wǎng)頁或者小游戲,但卻參加了競賽課程,到后期可能就很難堅持下去;有些同學(xué)就是為了參加比賽挑戰(zhàn)自我、獲得獎項,并且有相應(yīng)的能力,那么如果參加的是項目制作之類的課程,那就南轅北轍了。所以在學(xué)習(xí)編程初期,一定要多了解各種編程課程的區(qū)別,確定自己的目標(biāo)。
不管學(xué)習(xí)什么東西,良好的課程體系總能讓人事半功倍。針對不同的學(xué)習(xí)目標(biāo),合理地規(guī)劃設(shè)計課程順序和銜接邏輯,可以讓學(xué)生更平滑順暢地接收知識。舉個大家都知道的例子,很多大學(xué)生都對高數(shù)這門課深惡痛絕,被打擊到懷疑人生,其實就是因為課程規(guī)劃中高中數(shù)學(xué)和高等數(shù)學(xué)的內(nèi)容沒有銜接好,高中數(shù)學(xué)剛教會了學(xué)生1+1=2,高數(shù)上來就教學(xué)生解一元二次方程,太多學(xué)生因為缺乏中間過渡而無所適從。編程也是一樣,需要一個設(shè)計成熟的課程體系。
目前計算機(jī)入門課程體系主要分三種:
(1)興趣愛好課程,主要學(xué)習(xí)scratch(圖形化)、python等語言,制作簡單的應(yīng)用、網(wǎng)頁或者小游戲之類,內(nèi)容比較有趣生動,也能比較快的看到學(xué)習(xí)成果;
(2)留學(xué)計算機(jī)專業(yè)預(yù)讀課程的,比如A-Level 計算機(jī)、AP計算機(jī)原理,這些課程偏向計算機(jī)軟硬件基礎(chǔ)知識、軟件開發(fā)流程和簡單編程原理,設(shè)計知識范圍比較廣,但很少涉及到具體的編程語言學(xué)習(xí),沒太大難度,大部分知識理解記憶一下就能通過;AP計算機(jī)A課程相對難點,主要學(xué)習(xí)Java語言的基礎(chǔ)語法類的各種特性等內(nèi)容,難度上略有提高,但幾乎不學(xué)習(xí)Java以外的東西,也能用Java編寫一些有趣的小項目。這些課程考試形式都是筆試,不需要上機(jī)實際編寫程序運行,有這方面意向的同學(xué)基本只要認(rèn)真學(xué)習(xí)難度基本不大。同時在學(xué)習(xí)過程中可以通過對計算機(jī)的進(jìn)一步了解,確定自己以后的專業(yè)具體方向。目前比較熱門的計算機(jī)專業(yè)方向很多,有軟件工程(Software Engineering),主要學(xué)習(xí)如何完整的開發(fā)軟件系統(tǒng);計算機(jī)網(wǎng)絡(luò)(ComputerNetwork),學(xué)習(xí)網(wǎng)絡(luò)相關(guān)知識;人工智能(AI),研究人工智能方面內(nèi)容;計算機(jī)架構(gòu)(ComputerArchitecture),研究各種計算機(jī)底層運行原理;算法(Algorithm),研究各種解決問題的算法等等。
(3)計算機(jī)編程競賽(國內(nèi)noip,美國usaco等)的課程,主要學(xué)習(xí)C++或者Java語言,內(nèi)容為各種算法和數(shù)據(jù)結(jié)構(gòu),從學(xué)習(xí)內(nèi)容上來說難度屬于比較大的。國內(nèi)外編程比賽需要掌握的知識點其實差不多,比如各種貪心、搜索、動態(tài)規(guī)劃、分治等算法,以及棧、隊列、樹、圖等數(shù)據(jù)結(jié)構(gòu),兩者區(qū)別主要在賽制上。國內(nèi)的noip比賽一年只有一次,只有達(dá)到每個省前幾十名的選手才有資格參加省隊選拔等后續(xù)比賽流程,比薩斯會用到的知識點范圍相當(dāng)廣。并且noip必須現(xiàn)場準(zhǔn)時參加,比賽現(xiàn)場更像傳統(tǒng)考試,針對提出問題編寫程序,最后統(tǒng)一提交代碼,統(tǒng)一評測分?jǐn)?shù)再統(tǒng)一公布成績。這樣的形式對學(xué)生的考驗和心理壓力很大,在編寫測試代碼過程中很難驗證自己的代碼是否正確或者遺漏,每年都有很多學(xué)生因為一些細(xì)節(jié)問題有時可能就是一個符號錯誤丟掉該得的分?jǐn)?shù)甚至爆零;usaco每年有3次月賽和一次公開賽,都是線上的,機(jī)制類似于王者榮耀中的段位選拔,第一次參加在青銅段位,如果拿到比較好的成績就可以升到白銀段位,下次月賽就直接參加白銀,依次類推慢慢升級到白金(目前最高),后續(xù)再參加國家隊選拔,每個級別主要考察的內(nèi)容也有區(qū)分,整個流程更加平滑,競爭壓力小一些,并且對很多大學(xué)而言,達(dá)到白銀以上級別就能證明你的編程能力。比賽過程也相對友好,月賽時允許當(dāng)場提交編寫的代碼,實時反饋代碼的正確錯誤情況,同時可以多次修改代碼并提交直到通過,更能反映學(xué)生的真實編程能力。
現(xiàn)在網(wǎng)絡(luò)很發(fā)達(dá),很多計算機(jī)和編程知識網(wǎng)上搜索一下都能找到,是否意味著老師就不重要?答案當(dāng)然是否定的。自學(xué)是一個很艱難和緩慢的過程,計算機(jī)學(xué)習(xí)中涉及到大量的軟硬件問題,同時也會有很多的發(fā)展方向,如果是沒有經(jīng)驗的人,會將大量時間浪費在解決這些問題上,又或者在某些細(xì)節(jié)上迷失,偏移整個學(xué)習(xí)路線,從而事倍功半,中途而廢。而一個好的老師,能根據(jù)學(xué)生特點和學(xué)習(xí)目標(biāo)制定合適的教學(xué)計劃,讓學(xué)生循序漸進(jìn)的學(xué)習(xí),同時也能因材施教,控制不同學(xué)生學(xué)習(xí)的進(jìn)度快慢和深度廣度,降低學(xué)生學(xué)習(xí)的阻礙,輕松跨過入門的各種門檻。 |