2014年10月20日 星期一

好課分享:更多的 OO, MIT 與 Python


看到了嗎?Unit 1 的第一個子項目是 Object-Oriented Programming


更多的 OO

上個月的 Tainan.py x MOSUT 聚會,我投稿了「OO x Python」的主題
準備資料的過程中,有點好奇國內外「物件導向」相關課程的開設情況
發現專講 OO 的課程真的是好少啊

不難發現,由於現在許多人學習程式入門的語言都已支援或立基於 OO paradigm
所以學校內的基礎課程,不太會刻意去開設 OO 相關的課程
又或以「物件導向程式設計」名義開設基礎 Java/C++ 入門課程,而並沒有深入探討 OO 議題

使得學生:
  • 僅能「見葉」(學會語法)
  • 無法「見樹」(理解單一語言層級上的 OO 概念)
  • 更遑論「見林」(更加廣泛深入地探討 OO 概念)

為何相關課程如此之少?
原因不外乎與行政因素、教師專長、教學意願、熱門程度及對軟體工程的重視與否有關
然而,學生大學畢業後若要到業界工作
恐怕有一半以上的工作內容都是以 C++/Java/C#/Objective-C/Python/Ruby ... 等擁抱 OO paradigm 的語言為開發主力


好,不再碎碎念,在此補上幾門開放課程 or 課程網頁:


面向對象技術高級課程 (北京大學 @ Coursera)
https://www.coursera.org/course/aoo
# 參考資料全部都有簡體翻譯本 or 有簡中書籍


物件導向程式設計 (台灣交通大學開放課程 - 電機系大一)
http://ocw.nctu.edu.tw/course_detail_4.php?bgid=8&gid=0&nid=343#.VB--zpOSw_M
# 參考資料乍看就是一本書 (c++)


物件導向軟體工程(成大資工研究所)
http://casd.csie.ncku.edu.tw/Object-Oriented_Software_Engineering.html
# 參考資料為 http://www.amazon.com/Object-Oriented-Software-Engineering-Practical-Development/dp/0077109082 (java)


Object Oriented Development (Telecom SubParis)
http://www-public.it-sudparis.eu/~gibson/Teaching/CSC7322/
# 參考資料極為廣泛而深入,強烈推薦看一下課程網頁



更多的 MIT 與 Python

查找上述 OO 相關的課程資料時,看到 MIT 的開放課程心頭不禁一震:


6.01
Introduction to EE and CS (MIT OPEN COURSEWARE)
Unit 1-1 Object-Oriented Programming
# 有影音等課程資料可下載


對,物件導向只是入門課程中的一個單元中的子單元!
好奇之下,索性就把該單元的錄影、文件翻一翻 ...

在此子單元內,OO 的部份沒有講得很多
因為老師必須先 overview 課程大綱
然後再把學生帶到軟體工程的世界,及透過使用 python interpreter 傳授 programming 概念

以專業魯蛇的角度來看,此上課的投影片與課後素材的設計非常優異
以 Primitives – Combination – Abstraction – Patterns (PCAP) 的概念為主軸
課堂上雖然在各方面都只是點到為止
但有強調 environment 的概念,使學生對其建立概念模型
當學生閱讀課後素材時,自然就能克服許多障礙

更甚者,課後素材的最後一部分
是引導學生利用 Python 實作帶有 Scheme 風格的半成品 interpreter:Spy
能夠這麼做,是因為教材設計具有連貫性且事先灌輸 environment 的概念模型
(連我都忍不住打開 vim 跟著寫寫看)





等等!入門課怎麼可能上這麼快?
第一堂課上完,就已經直達 OOP  ... 這哪招 XD
6.01 的課程進度大概是國內的 N 倍了吧 



其實在正式課程之前,有一門只有三禮拜的先修課程可以上  
內容大概是「溫和」地讀完「How to Think Like a Computer Scientist: Learning with Python」
然後寫寫作業、考考試 ...



6.189
A Gentle Introduction to Programming Using Python
# 無影音但有課程資料可下載(含 How to think ... 一書)




您發現了嗎?6.01 其實是 EECS 的入門課
要軟一點,有下面這門課可以修:


課程大綱如下:


上面的課程大綱完全就是我夢想中的第一門程式設計課(流口水)



更多的碎碎念


自從三年前我第一次接觸到 Python 後
我常常會思考,是否能拿此一優雅的思想介質來協助新手學習 CS 的課程?
又或者,數學類型的課程若能透過 Python 計算、實作以為輔助
是否數學概念能夠更加紮實地深植於我的腦中?
(或是以程式碼的形式放置在程式作業的資料夾內亦可)


約耳在接近十年前,撰寫了「爪哇學校的危害」一文,頗推薦一觀
文中反映該時代背景下,他所見到的問題


這幾年以來 MIT 的 CS 入門課程,也投奔到使用 Python 語言
以上述 MIT 開放課程的優秀內容看來
我倒不擔心「拍桑學校的危害」會傷害到 MIT ...
更何況,入門後還有多采多姿的 其他課程 可以深入學習


對於 MIT 的開放課程而言
我看不到最聰明的一群學生如何學習
但是看得到有智慧的教授如何教書
之所以這麼說,是從教材與談吐可以得知開課教授具有深厚的 CS 涵養


仔細想想,CS 入門課程才是最難教的
絕對不是僅用單一觀點與狹隘的經驗,就能引導學生順利踏入 CS 的世界



更多更多的 MIT 與 Python
edX 上面有這門課:
Introduction to Computer Science and Programming Using Python及其後續課程:
Introduction to Computational Thinking and Data Science






1 則留言: