【揭秘】小碼王編程課的教研心法
1 人贊了文章
到目前為止小碼王一直定義著少兒編程的行業標準,有眾多的模仿者。但模仿者們只知道小碼王開了Scratch、Python和C++的課程,卻不知道我們的為什麼開這些課,只知道小碼王的教學效果好,卻不知道我們是怎麼做到的。這篇長文,是小碼王首次向行業揭秘我們的武功心法,以此推動整個行業的進步,從而惠及更多的孩子。
01
Scratch ——讓編程像說母語一樣簡單
Scratch被定義成一個「拿來玩的技術」,很多培訓機構不屑於講授,因為它不是商用編程語言。但對小學階段的孩子而言,商用化強語言的挑戰太大了,且不論小學生能不能掌握,就連大學生也只有不到20%的學習成功率!目前普遍的教學能力,根本無法確保小學生高完課率地學習,於是,出現了退而求其次的解決方案——讓小學生從H5入手學習編程。
由此可見,培訓機構以培養軟體工程師為發心,礙於小學生學不了,卻又不想丟掉這個年齡段的市場。這是商業利益和狹隘教育目標共同作用的結果。
小碼王選擇Scratch的理由是,讓小學生來玩編程,而非培養軟體工程師。
選擇入門語言應儘可能降低入門門檻,降低初學的挫敗感,讓孩子在幾乎沒有代碼和錯誤挑戰的情況下,專心感受程序邏輯;在自己完全掌控的情況下,獲得每次課程的成就感。從而驅動孩子不斷挑戰越來越複雜的邏輯,形成孩子持久熱愛的根本動力。
不同於其他興趣學科,孩子天生就喜歡編程,因為編程是徹底的人類發明的技術,是人類思維的延展。藝術、體育、數學、自然都起源於人類無法完全理解的宏大世界,所以從理論上看,能夠完全駕馭這些學科者只佔人群中很少的比例。而編程如果有人無法理解,那麼一定是編程技術需要進一步靠近人類的思維。在所有的編程技術中,Scratch是一個劃時代的技術革命,Scratch讓編程和說母語一樣簡單,因此它是目前最佳編程入門語言。
反觀H5,這個技術寫法隨意,結構混亂,不利於培養嚴謹的程序性思維,不但不應該成為少兒的編程入門語言,而且不應該成為任何人的編程入門語言!然而,恰恰因為隨意的寫法,H5給技術外行極易留下簡單的印象,成為入門者選擇的對象。殊不知,即使是程序員,全面掌握H5技術也十分困難。
理念的差異,會直接反應在教學設計中。很多少兒編程培訓機構認為Scratch只要學習20個課時就能掌握,而小碼王定義的課程是160個課時,差別在哪裡?學習20課時的目的是學習Scratch這個技術,而安排160課時的目的則是藉助Scratch這個編程工具幫助孩子建立編程思維。後者的設計挑戰,不是課程內容,而是在深入理解教學目的後,幫助孩子建立程序思維體系的實現過程。
02
Python ——優美的代碼與哲思的品格
通常學習兩年後,學生便進入代碼編程的學習。一些友商希望延長孩子圖像積木塊編程語言的學習周期,將編程和學科緊密捆綁,用家長的學科焦慮給編程學習續命,這是典型的產品思維結合市場思維,但從教育本身來看,很多做法牽強附會了。
我們認為,小朋友學習編程可以提升他的學習效率和能力,的確會作用到孩子其他學科學習的過程中,而通過編程寫一個程序來記憶唐詩,卻本末倒置了。
程序給孩子帶來的體驗和語文是不同的,孩子可能會突發奇想嘗試著將兩個學科結合在一起,這是他自己的創造,提供Scratch工具反而會破壞這個創造的成果。Scratch語言真正的弱點,即限制了孩子創造力的培養。
舉個例子,給100個孩子講《白雪公主和七個小矮人》的故事,然後讓孩子畫白雪公主,會創造出100個白雪公主的樣子;但給100個孩子看《白雪公主和七個小矮人》的動畫片,孩子們畫的白雪公主會大同小異,因為設計精良的工具限制了孩子想像力和創造力的發展,這也是為什麼華德福教育一直抨擊蒙特梭利教育的原因。
蒙特梭利教育的每一個教具都設計精良,教育指向性明確,而華德福孩子的玩具通常是撿來的樹枝和石塊。從教育結果看,華德福的孩子確實在藝術和創造力上有非常好的發展。因此,圖形化編程語言在提供許多教學便利的同時,也抑制了創造力的發展。工具越豐富越精良,孩子可發揮的空間越少。
於是我們認為,孩子學習Scratch一段時間後,圖形化編程語言對他的幫助越來越小,Scratch幫助孩子輕鬆入門的使命也隨之結束。此時,孩子需要學習代碼編程強語言,我們選擇Python,只因Python能夠最大程度地幫助孩子學習編程,與人工智慧無關。
如果將編程歸於理科,多數人不會反對——程序員在人們心中的印象已根深蒂固;可一旦將編程歸於文科,大部分人便不認同了。其實,編程語言就是一門語言,跟英語、日語、法語沒什麼區別,也是由單詞和語法構成的,只不過它是和計算機交流的語言,是偉大的哲學的產物!不錯,每一門編程語言的發明者都是哲學家,他需要經過一個上帝視角的思考過程,設計最簡明的規則,去解決計算機中幾乎全部的問題。如此看來,孩子選擇了一門代碼編程語言,也就接受了語言發明者的哲學思想,雖然每一門流行的編程語言都是偉大的,但不同的語言「性格」非常不同:Pascal就像處女座的桌面一樣完美、規則,而H5的桌面則一片混亂。
我們希望,孩子不僅僅學習編程語言的規則,還要去梳理和思考發明編程語言的思想。來讀讀這首《Python之禪》吧,Python的發明者將Python的「性格特點」融入開發環境中:
Beautiful is better than ugly.
# 優美勝於醜陋(Python以編寫優美的代碼為目標)
Explicit is better than implicit.
# 明了勝於晦澀(優美的代碼應當是明了的,命名規範,風格相似)
Simple is better than complex.
# 簡潔勝於複雜(優美的代碼應當是簡潔的,不要有複雜的內部實現)
Complex is better than complicated.
# 複雜勝於凌亂(如果複雜不可避免,那代碼間也不能有難懂的關係,要保持介面簡潔)
Flat is better than nested.
# 扁平勝於嵌套(優美的代碼應當是扁平的,不能有太多的嵌套)
Sparse is better than dense.
# 間隔勝於緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題)
Readability counts.
# 可讀性很重要(優美的代碼是可讀的)
Special cases arent special enough tobreak the rules.
Although practicality beats purity.
# 即便假借特例的實用性之名,也不可違背這些規則(這些規則至高無上)
Errors should never pass silently.
Unless explicitly silenced.
# 不要包容所有錯誤,除非你確定需要這樣做(精準地捕獲異常,不寫except:pass風格的代碼)
In the face of ambiguity, refuse thetemptation to guess.
# 當存在多種可能,不要嘗試去猜測
There should be one-- and preferably onlyone --obvious way to do it.
# 而是盡量找一種,最好是唯一一種明顯的解決方案(如果不確定,就用窮舉法)
Although that way may not be obvious atfirst unless youre Dutch.
# 雖然這並不容易,因為你不是 Python 之父(這裡的Dutch是指Guido)
Now is better than never.
Although never is often better than *right*now.
# 做也許好過不做,但不假思索就動手還不如不做(動手之前要細思量)
If the implementation is hard to explain,its a bad idea.
If the implementation is easy to explain,it may be a good idea.
# 如果你無法向人描述你的方案,那肯定不是一個好方案;反之亦然(方案測評標準)
Namespaces are one honking great idea --lets do more of those!
# 命名空間是一種絕妙的理念,我們應當多加利用(倡導與號召)
03
C++——深入技術體會演算法之美
經過了兩年發展,Scratch + Python + C++的少兒編程課程體系已經漸漸統一了這個行業,我不想強調這個標準是小碼王定義的,這不重要,但是標準的抄襲者並不清楚如此定義的邏輯。
不可否認,C++是信息學奧賽的競賽語言,然而當整個行業都將C++課程定義為信息學奧賽課程,這將成為噩夢。另一個噩夢,是信息技術納入高考,少兒編程將從素質教育變成應試教育。我不知道這樣改變後,我們還剩多大的空間做真正的教育,純然地讓孩子得到發展。
為什麼我們要教孩子C/C++?雖然C/C++語言不是第一個高級編程語言,但是它們深刻影響了後來出現的高級開發語言,C++甚至影響著計算機開發語言的整個世界。
計算機技術的每一步演變,都是技術的進步,思想的革新,對問題的解決,對局限的打破。如果一個人有機會學習兩種不同年代的編程語言,就會深入地理解,這些人類歷史上最聰明的人,他們的反思和對技術的認識。
另外,由於C++徹底兼容了C語言,而C語言有能力操作計算機硬體中幾乎每一個資源,所以深入學習免不了要知悉計算機體系結構,這是一個有機會打開CPU外殼去看內核的技術。因此,讓孩子去參加信息學奧賽,我們並不聚焦於取得獎項榮譽,更希望孩子在學習過程能夠深入技術,體會演算法之美,思考C/C++發明者的思想,得到人生真正寶貴的財富。
04
小碼王的教學技術選擇邏輯
Scratch語言作為少兒編程學習的入門語言趨近完美,對學生實施案例的挑戰和獲得成就感的支持趨近完美,經過任務驅動建構主義教育的指引,課程的研發、教師的培養和學生學習的寬容度都相對容易實現。但是,也只能無限地趨近完美,因為只能無限地趨近對孩子真正的了解。
從Python開始,編程教育進入了真正的挑戰。即使大學,目前的教學成功率也只有20%左右。然而,個人的學習能力存在很大的差異,無論課程內容、授課能力多麼差,完課率多麼低,也會有學生跟著學會,甚至50元的一本的技術書都能讓個別天才學會編程。
但是我們不一樣,我們追求的是95%以上的學習成功率。為什麼我們能做到呢?
我們發現,學生對編程的理解分成幾個層次:知識,認知,編程能力,編程經驗,新技術獲取能力,協作能力,創造力。
其他機構之所以目前學習的成功率比較低,是因為多數教學停留在知識階段。但對於學生來說,實踐過程形成的對知識的理解程度遠高於單純知識的學習,他們進行代碼編程的挑戰在於編碼能力和排錯能力的提升,從而編碼量的積累才是關鍵。
為幫助多數學生突破這個階段,我們創造了任務驅動、小組協作、圓桌討論和課後知識整合的教學模式,課上50%是代碼實現和探索,25%是討論和分享,剩下25%才是知識講解和代碼示範,最大程度地推動了學生主體的教學實施。
對C++課程,我們有更高的培養期待。我們不但提供同行都有的競賽輔導、考題訓練,還提供和Python類似的語言基礎課程,根據學生的認知特點,挖掘C++知識點背後更深一層的計算機文化和計算機組成原理,讓學生不僅能應對信息學奧賽,還擁有深入學習編程的基礎。
05
小碼王的教研心法
現在,我把我們課程設計的秘密心法告訴你。我們認為:發自內在的建構主義教育,將引導和激發孩子的內在成就感作為核心動力推動孩子學習。
從2004年起,小碼王的管理團隊成員便在成人編程教育中進行探索,直至將該思想貫穿在小碼王所有課程設計和授課過程中,奠定了整個行業任務驅動教學法的基礎,開啟了編程教學領域的新篇章。從我們倡導開始,編程第一課的「Hello world」逐漸消失。
2005年,基於認知曲線模型設計每日課程,我們又提出了編程學習的認知曲線,系統地分析和描述了學生認知模型中的知識運用能力、代碼實現能力、排錯能力、邏輯能力和學習能力的變化過程。
事實上,每位優秀的教師在教學經驗達到一定程度時,都會有一個認知曲線去引導他上課,但是教師的認知曲線是隱性的,我們成功地在組織層面將隱性知識顯性化,使我們的教師通過專門的培訓講授課程,從一開始就像一位有經驗的老教師那樣了解學生的認知狀況。基於建構主義教育定義我們的課程,意味著學生是學習的主體,而教師只是支撐他們探索的助手,加之將編程作為實施建構主義教育的最佳課程載體,我們獲得了近乎100%的完課率。
我們在以前的文章中提到,學習效果取決於以下因素:
- 學生的學習能力
- 教師的授課能力
- 課程研發的成熟度和學習內容本身的挑戰性。為衡量學習效果,教育體系通常採用兩種思路,一是選拔制,二是培養制。高考體系、競賽體系大體走的是選拔制路線,將學生的學習能力進行分層,但對授課能力、課程研發水平和學習內容的選擇都不夠重視,學生學不會就是學生差。
學生家長的痛苦和焦慮也源於此,因為家長要的是培養制,理論上社會培訓機構屬於培養制,所以家長覺得和培訓機構合作是唯一的救命稻草。但是,並非每個機構都有實力、教育理念和教學經驗,應對授課能力和課程研髮帶來的巨大挑戰,即使小碼王也付出了巨大的努力。
現在,我們擁有人均超過30000小時代碼編程授課經驗的核心課研團隊,我們擁有曾任納斯達克上市編程教育企業的首席講師,我們真正站在教育的角度,最早在行業中提出了任務驅動、認知曲線、遊戲入門等等概念。所以,我們希望家長們與我們一起共同培養孩子面向未來的能力!也進一步希望通過我們的努力,幫助前期和後期進入的部分友商擺正方向,共同為學生提供豐富多彩的教學服務。
推薦閱讀:
※用Scratch講故事,小朋友講了大道理
※據說有編程思維的孩子,運氣都不會太差!
※魔爪編程|Scratch 基礎課 番外篇 早早堆雪人
※為什麼越來越多的家長開始讓孩子學習少兒編程?
※什麼是少兒編程教育