為孩子寫一本編程書系列:如果為孩子寫本編程書
最近我開始考慮明年的一些個人計劃,我并不會強迫自己去完成一些目標,而只是將自己在未來一段時間內感興趣的事情羅列出來,然后挑一些去進行嘗試。而其中的一項便是寫一本書。我和一些出版社的編輯都曾討論過關于出書的事情,唯獨對于書的選題讓我頗為糾結。我并不愿意去寫一本純技術的書籍,雖然這看起來相對容易也更安全(有市場)——基本上選一個熱門領域或技術,然后參考其他同類書籍,結合自己編寫的示例和相關經驗進行重寫,但這對于我來說卻有點像炒冷飯,并沒有太大的意義。我知道如果缺乏動力,自己很難寫好這本書,甚至根本就無法完成。而如果讓我按照內心的意愿去選擇的話,我更愿意嘗試去為孩子們寫一本編程書。
我的兒子今年六歲,在區里的一所示范幼兒園讀大班,除了上學之外,他還報名參加了思維訓練的培訓班。雖然每天都在按照要求在完成課程和作業,但看得出,他學得并不快樂。之所以要這么做,也無非是為了想讓孩子上一個更好的小學。我同事的孩子今年三年級了,和很多同齡孩子一樣,也參加了奧數班,雖然對她的孩子并不了解,但我卻總能看到我的那位同事埋頭坐在那里,絞盡腦汁地解那些奧數題。我就想,如果這些題目連我們這些大人解起來都如此費勁,那它們對孩子們的成長又是否真的那么有幫助呢?有沒有一種更好的方式來訓練孩子的思維呢并幫助他們更好應對未來呢?如果能拋開所有功利的應試需求,我想學習編程或許會是一個不錯的選擇。
雖然有了方向,但要想教好、教會孩子編程卻并不簡單,我們有必要透過針對孩子們的編程教育現狀,來看看那些普遍存在的問題:
- 過時的教材:很多學校還在使用那些過時的編程教材,比如,他們仍在教孩子們學習Pacal語言(一種過時的編程語言),而這是我將近20年前學習編程所時使用的語言。有人說,教編程的真正目的是教會孩子一種新的思維方式,與使用哪一門編程語言無關。對于前半句,我很贊同,但關于編程語言,我卻覺得,如果能教孩子那些在未來更能派上用場的編程語言,并且讓他們從一開始就能習慣使用這些更現代的編程語言,我們又為什么不這么做呢?
- 不恰當的教學方式:那些給孩子上編程課的大部分都是在校老師。老師當然有他們的優勢,比如更了解孩子,也能更好地駕馭教學。但老師們大多并沒有太多的編程經驗,他們也更多地像是在教數學、物理那樣將一門編程語言的語法、語義、算法等硬生生地灌輸給孩子,而作為考核標準的也大多是那些毫無生趣的算法題,這恰恰忽略了編程最重要的趣味性以及創造和思維能力的培養。結果是,孩子們如完成家庭作業般去完成那些編程題,一點也無法體會到編程所帶來的的樂趣,這也直接摧毀了孩子們學習的熱情,學習編程竟成了孩子們的又一個負擔。
- 趕時髦般的培訓班:隨著編程教學越來越受到家長的重視,很多社會上針對兒童的編程培訓機構也都冒了出來,當然是魚龍混雜,良莠不齊。我們姑且不論那些培訓班的資質以及老師的教學能力,就拿他們廣泛使用的編程語言Scratch來說,也只是像這些年很火的樂高培訓一樣,一些根本不懂編程的老師經過短期培訓,便去教孩子了,能教會孩子什么,真的很難說。編程是一項深入的思維運動,需要長期實踐才能逐漸掌握,而像今天那些家長那樣,不根據自己孩子的情況,趕時髦般地將他們趕去學習編程,并不會得到理想的效果。
- 美學教育的缺失:我認識很多程序員,他們都不是編程的初學者,但往往阻礙他們寫出優秀程序、作出更優秀產品的卻并不是大多數人理解編程所需要的邏輯思維能力,反而是對于美的認知。既然不知道什么是美的,那作出來的東西又怎么會美呢?這并不單純指我們平時聽到的那些UI(用戶界面)、UX(用戶體驗)等設計概念和技巧,更在于對美的本質的感知和覺察能力。而這種能力本應該在兒童時期就開始培養,但遺憾的是國內對于美學教育的缺失非常嚴重。編程教學作為一項制作與創造課程,本是可以將那些關于美的知識和實踐融入其中的,但大多數的教材和老師并沒有那樣做。
通過一本書來解決上面這些問題看似天方夜譚,但卻值得去嘗試一番,即使作為對現有編程教學大環境的一點小小補充,也會讓我覺得頗有意義。
一本給所有編程初學者的入門書
與動輒幾百元一節的幼兒編程課不同,我始終認為,教授孩子編程的***方式應該是家長與孩子一起學習編程,大人的理解能力加上孩子的想象和創造能力,這簡直是一個***的學習組合,而在家長的陪伴下持續地學習和實踐遠比每周上一節編程課來的有效。我可能并不會在這本書里加入過多適合低齡兒童的插圖,而是希望包含盡可能多的內容,以編程為主,并涉及從藝術、設計、編程、思維、作品發布等各個環節,讓孩子們通過學習能夠真正作出有意義的作品來。在我看來,這本書應該適合所有有意愿陪孩子一起學編程的家長以及那些希望自學編程的初學者來讀。
教手藝,而不是知識
教授知識與教授手藝的***區別在于其目的性,對孩子們來說,學知識往往是被動的,真正應用如化學、物理等知識常常需要進入大學相關專業之后,而在中小學期間,孩子們學習過程中得到的激勵往往來自于比較,如考試成績,家長的表揚,或老師提問時比其他同學更早算出答案。但比較往往會帶來壓力,也僅僅對那些優秀學生更有效。而學手藝卻是為了去不斷作出更好的作品,你是在和過去的自己比較,而只要持續地學習和實踐,你就一定能獲得正面的激勵,因為隨著技能的提升,你做出來的東西總是會比過去更好,它對所有學習者都是有效的。我想寫的這本書里當然會包含某一門編程語言的語法、語義等基本知識,但并不會包含那些復雜的數據結構或算法,只有在用到的時候我們才會用最簡明的方式加以介紹,一切都會圍繞獲得更好的手藝并作出更優秀的作品去寫。
一門現代且面向未來的語言
對于孩子和那些編程初學者來說,這或許是他們的***門編程語言。這門語言既應該是易學的,又應該是現代且面向未來的。
易學:考慮到不同年齡段孩子的接受能力,這門編程語言應該是簡明、一致、清晰的。這體現在語言的語法、數據結構、控制邏輯、可供使用組件、甚至包括IDE(集成開發環境)以及教學資源和等各個方面。它應該是易學、且更易構建出豐富應用的。
現代的:編程語言的種類非常多,有些語言的年齡比我們都大,而幾乎每一門語言背后都會有一個長長的故事,至于為什么發明這門編程語言,它的主要用途是什么,它又有什么特點,這些問題往往要花上一整天才能講清。今天,很多新語言在不斷出現,比如Swift、R、Go,也有很多語言則已逐漸被淘汰,比如VB、Pacal。一門現代語言意味著它具有那些經過長期實踐被證明是優秀的語言特性,另外它也正在得到廣泛的應用。
面向未來的:面向未來的編程語言應該是開放的(比如:開源),這意味著它能借助更多程序員的力量獲得持續的發展,并得到更多人的使用和認可。另外,一門編程語言的基因也能決定它的未來,比如:面向過程、面向對象、聲明式編程、函數式編程等等,正是它們決定了一門編程語言的特性、編程思想、適用場景以及未來的發展方向。舉例來說,雖然,現在仍有很多iOS應用是用Object C來開發的,但當我們理解Swift將會成為“***款工業級質量的系統編程語言!”這個斷言,以及認識到Swift的那些優秀語言特性后,我們就應該意識到對于iOS開發者來說不去追求Swift是非常愚蠢的。
基于這些考慮,我比對了自己心目中那些可以用來教學的編程語言,決定在Python或Swift中選擇一門語言,來完成這本書。
利用所有優秀的資源
很多編程書籍中都會包含自帶的代碼、示例、工具等等,看起來這樣的書非常完整,但我卻發現這些附帶的資源往往并不好用,或沒有什么價值。現在網上有太多優秀的學習資源,只是很多人不知道,或者不善于使用罷了。而我希望這本書能夠更加開放,如果網上已經有了更優秀的內容,那我就沒有必要再去重復,而只需要幫助大家去發現和更有效地使用它們。例如,假設我這本書最終使用Swift語言進行教學,那我一定會告訴你利用iPad上Palyground這款APP進行學習,當然我會在書中告訴大家如何更有效地使用它,這會大大提高我們的學習效率。
兼顧藝術、設計與創造
光有編程,我們并無法得到那些吸引人的東西,人們特別是孩子都是視覺動物,如果做出來的東西不漂亮,那他們很容易會感到失望而對學習失去興趣。我希望這本書能對編程教學做一些延伸和擴展,比如在那些示例中引導孩子正確地理解和運用色彩、合理地進行排版使內容更加清晰,巧妙使用動效讓作品更加生動有趣等等,通過這些,讓孩子們在學習編程的同時,掌握最基本的設計知識,并啟發他們對于對于美的認知。
關于書的形式
關于書的形式,我希望會有不同的版本,我可能會做一個網站來呈現這本書,包括那些教學視頻、示例代碼、并且展示那些孩子們通過學習制作出來的作品。我也希望有紙質書和電子書的版本,以滿足不同讀者的需求。
上面的這些觀點只是我此時此刻所能想到的,而更多的東西只有在實踐中才能獲得。好在我已經有了自己的學生,我的兒子Ian。我會不斷在這個專題中更新我教學的內容、進展、孩子學習的反饋,并接受大家的意見。如果你對教孩子編程這件事也有自己的想法,不妨留言,這將能幫助我更好地完成這個挑戰。
【本文是51CTO專欄作者“陳逸鶴”的原創文章,如需轉載請聯系作者本人(微信公眾號:techmask】