為什麼是wk0?
之前學了Coursera 的Python for Everybody的前兩門課,老師在結尾的時候說:現在你們已經達到Level 0了。
現在想想,只是學了functions/conditionals/variables/loops等等概念,但是卻不知道背後的邏輯是什麼。也不知道為什麼這麼做,根本不算Level 0。
那CS50的第一節課,就花了很多時間解釋了為什麼這個基本問題。
wk0學到了什麼:
1.電腦怎麼顯示數字、文字、顏色、圖像、視頻、聲音等等?
電腦的世界只有0和1,教授現場演示的是燈泡沒電會滅和有電會亮。滅表示0,燈亮表示1。所以電腦語言的底層是0和1。
電腦要用這些0和1顯示一切東西。所以我們先約定好給數字、文字、顏色、圖像、視頻、聲音編號。比如字母H的編號是72,在二進制中就是以001001000來表示。
那怎麼告訴電腦:編號是代表數字、代表文字還是代表其他呢?比如72是代表數字72還是文字H呢?這就需要我們先設定好我們的編號是代表什麼。比如寫代碼的時候要告訴電腦我們的Variable是什麼種類,是文字還是數字還是list等等。所以不同的文檔有不同的後綴名,比如word文檔是文字,excel文檔是數字等等。
因為0和1的語言可讀性太差,所以我們使用complier(編譯器)來把我們寫的語言,轉變成電腦可以讀懂的0和1的語言。編譯器等於是科學家寫的翻譯軟體,翻譯我們的語言給電腦聽。
因為語言很多,我們也需要標明我們的檔案是什麼語言,才可以獲得正確的翻譯。比如hellp.py文檔是Python語言,hello.c文檔是C語言。
寫程式就是用電腦聽得懂的語言來一步一步的解決問題。
這個老師通過積木化的程式語言Scratch讓我們形象化的了解怎麼一步一步來解決問題,了解functions/conditionals/variables/loops等等怎麼運作。
Scratch
我覺得把Scratch放在wk0真的是CS50課程規劃的神來之筆。
之前一想到電腦語言:
- 就是各種奇怪的句法,各種標點符號,不適合我們視覺化的大腦運作;
- 容易犯錯誤卡住不動;
- 沒有成就感,學了半天也不知道學了什麼。
使用Scratch避免了上述所有的問題,我們拖一個積木代碼,馬上可以得到即時的回饋。組合不同的積木代碼,馬上可以看到不同的動畫反饋。使用Loop也可以很形象的看出來是在做什麼。
Scratch讓我可以避開討厭的句法,學習並理解編程語言的本質。
教授接下來的課程也是通過和Scratch來類比,讓我們形象化的理解各個不同的語言。比如今天看了wk1的課程,通過和Scratch比較來學習,發現我最害怕的C語言好像變得親切友善多了。
作業:
作業也是這麼課程設置的獨到之處。
老師給個一點指導,然後讓學生自己找資料並在實踐中學習。這可以激發學生學習如何學習,提高自學能力。同時也增加主動性,讓學生養成主動學習的習慣。畢竟這兩個能力也是非常重要的。
wk0的作業是用Scratch做一個小遊戲。目的是讓學生用Scratch接觸到編程的每個基本內涵(condition/ loop/variable/function等等)
為了完成本週的作業和好好深刻了解Scratch,我還學習了單獨的Scratch課程。CS50’s Introduction to Programming with Scratch
最終完成了我的第一個小遊戲。https://scratch.mit.edu/projects/637019489
心得:
雖然我才上了前兩節課,但是已經感覺學到很多為什麼。
之前學Python知道了一些是什麼和怎麼做。但是不知道為什麼?
比如不知道為什麼字母是這麼排序的,不知道為什麼要分這麼多的type,不知道為什麼要定義value,不知道什麼事varible。現在了解了電腦的顯示機制和學了Scratch之後,終於知道為什麼要這麼做了。
除此之外,這一週的學習以後也可以用來教我的小孩。
參考資料:
我準備配合Huli老師的CS50中文導讀來完成這麼課,加深理解。