在開始階段加在頭腦中的概念,隨著課程的不斷進展,很容易得到進一步的強化。這是因為后續無時不在使用這些概念。
傳統教學的誤區在于集中灌輸語法和工具知識。而這種灌輸,并沒有和能力的增長相匹配。這種不匹配又反過來影響知識的吸收。越復雜的知識,越需要在高能力層次上學習。不注重能力的提升,是東方教育體系的諸多弊端之一。其在學習計算機學科這種典型的西方體系時尤為明顯。
另一個要解決的課題在于生源構成。學員的入學層次相差很大。這個問題是在大學的教育中沒有的,因為高考已經區分了大學的層次。這導致在計算機專業的教育體系中根本沒有人去思考這個問題。隨之而來的就是幾乎所有的計算機教育書籍也都不考慮這個問題。而在針對大學畢業生的培訓體系中,因為學員來自不同的學校,并且具備不同的專業背景,所以專業知識的背景、思維能力、動手能力的差別大大高于高校的課堂。不針對這個問題重組課程,就無法充分提升課程水平。
去掉集中講授Linux命令和工具的環節,轉而在整個教學過程中引導學員去使用這些工具。教學實踐使我們認識到:通過獨立課程環節講授工具使用是低效的,因為工具的使用方式必須貼合實際問題。嘗試把工具和基礎命令融入到整體課程的各個環節中,這樣能夠在節省時間的同時反而收到比較好的效果。
至于課程內容,則應當針對不同層次學員進行細分。對于基礎薄弱的學員,安排專門的輔導環節以解決個別問題。對于那些已經具備較強編程能力的,安排進階內容(那些在課程主序列中沒有涵蓋但同樣很重要的知識)。
C語言基礎訓練
教學實踐中發現,絕大多數的學員在入學時的C基礎都不足以支撐后續課程的學習。即便是那些程度比較好的學員,也有很多似是而非的概念。C基礎階段在知識點要補齊學員頭腦中認識的漏洞和錯誤。從編程能力訓練方面,應當調整課程和練習的次序,在一開始就運用運用剛剛講授的有限手段展開豐富的練習。雖然練習中的部分問題通過后續課程所講授的知識點有更好的解決方式,但是這個階段培養了學員對于知識運用能力。設定一個有限的知識環境,然后拓展問題的難度,這樣才能夠釋放思維能力。
Linux環境和開發工具
如果學員之前不熟悉Linux環境的程序設計,那么這個環節對他來說就很重要。這個階段的講授思路前面已經指出。需要補充的一點是,工具的使用紛繁復雜,課程不可能也不需要講授全部細節。所以在用到工具時,重點在于引導學員去閱讀手冊。而這也正是實際中唯一正確使用工具的方式。
腳本編程技術
程度較好的學員應當在這里試圖有所建樹。在引入下文中所述教學模式的班級中,四分之一的學員可以熟練掌握腳本技術中的一種或幾種,一半的學員可以簡單地使用腳本來解決實際問題。 這個環節的知識是地道Linux程序員應當掌握的“超級工具”。這些工具不論是單獨使用還是和C程序結合使用,都能爆發出巨大的威力。但是很遺憾,這些技巧在的Linux程序員群體中屬于小眾技巧。事實是這樣,如果在一個眾人都用某種技術的環境下,不需要太多的學習也能快速掌握這種技術。因為你可以從周圍的人那里迅速學到關鍵的竅門所在,當你遇到實際問題時也可以迅速從周圍人那里獲得支援。與此同時,提供支援的先行者們也能夠更深刻地理解已有知識。這個迭代過程會非常高效地提升參與者的水準。
基于這種事實,我們在進階內容的教學實踐中創造了一種新的教學實踐:讓入學程度較好的學員根據自身情況選學不同的內容。教師針對問題進行單獨指導。此時由教師來充當這個“環境”。在一段時間之后展開交流活動,通過交流讓所有的學員都能夠了解到所有這些技術的概貌。此時,由于已經有部分學員自學過相應的內容,這些學員也參與到“環境”中。后續參與學習的同學也能快速地在更加充分的環境中迭代自己的能力。 這種教學模式可以在基本不占用課時的情況下提升相當一部分學員尤其是那些基礎較好的學員的水準。僅就目前的教學實踐來說,已經達到了令人驚嘆的效果。我們仍然在研究實踐這種模式的佳方式。