我在課堂上為什麼要展示編碼的過程,而不止是結果

2021-06-06 20:46:40 字數 2454 閱讀 7935

我在課堂上為什麼要展示編碼的過程,而不止是結果

我在上程式設計課程的時候,會在課堂上當場程式設計。而我見到的大多數老師喜歡事先備好課,用ppt或word以更大的字型展示程式內容。

為了能夠更好地展示現場程式設計,我試過一些辦法:盡可能縮小班級人數、不用投影儀而是用機房的廣播系統。這確實帶來一些麻煩,更不用說,現場程式設計比事先備課更容易出錯,掛在黑板上。

那麼我堅持現場程式設計序的原因是什麼呢?

1. 過程

我要向同學演示**由無到有的過程。

事先備好課確實有很多優點,但是當我是同學的時候,我總感覺是在看場魔術。老師拿來個帽子,展示一番,然後,突然從裡面掏出只兔子來,有毛能跑的。如果我只是觀眾,哈哈,很逗。但是如果我是學魔術的同學,我就會特別想看到慢動作地重放--從空帽子到兔子的過程。

而這個過程,如果事先備好課,通常就只是開啟工程,然後編譯,執行,出結果了。結果就是老師說的那個,但這一點也不令人意外。

我想看到**修改以後還能跑麼?最好是從什麼都沒有,開始建立乙個工程,然後**逐漸增多。不然,除了神奇,我什麼也沒有學到。

作為同學我這樣想,我私下猜測,同學們也會這樣想吧。所以,我想展示給同學**的過程,而不僅僅是**本身。

**本身能學習和分析的東西確實很多。我們對著早就墨跡乾涸的紅樓夢也能分析出比它本身厚得多的著作來。但是,如果你站在曹雪芹的身後,越過他的肩膀看他把紅樓夢寫出來,那樣的話,收穫該是多少呢?你能看到他刪除掉了哪幾個人物,哪幾個人物原本不是這樣的,她們 (想想真似乎沒有幾個男子,所以不妨直接用女字旁了) 的命運、性格原來是那樣,歷經了幾次修改……

但是我們都沒有那樣的機會。所以,"披閱十載,增刪五次",作者不得不感嘆,這樣好的過程你們都沒有看到。

我們要看畫家作畫的過程,看不到甚至要用x光去還原底下一層層都是些什麼。我們要看魯迅或韓寒的手稿,最好是不清楚的勾勾抹抹的那種,才能了解當時當事,都發生了些什麼。

**,也是一樣的。如果我們跟蹤linux核心的所有歷史版本,而不僅是分析最近的,會得到更多的東西--為什麼某個特性那麼遲才新增進去;最初的有力地構成整個系統是,是哪幾個要素?

同學們看到那一大砣**時想問的問題:你咋把它整出來的。

過程說:呶,先這樣,再這樣。

如果只給最後的結果,那就是:你猜呢。

2. 出錯

我想讓同學看到 老師也會出錯,挾帶的私貨,更重要的是學習老師解決錯誤的過程。

bug人人會造,**能跑起來靠的乙個重要功夫就是把各種bug殺掉。同學們最初遇到bug的時候容易感到驚慌失措,並傾向於自我否定,"怎麼會這樣呢?"然後就想知道,如何從"這樣"恢復,最終把那一砣**整出來並跑起來。

從bug中恢復過來,除了歸類總結,文字材料以外,很重要的是讓同學看到:呶,就是這樣。

沒看過血的,理論學得再好,也當不了臨床醫生。

我甚至特意造出bug,大家一起傻眼,調吧。然後,我們一起看看除錯bug的過程。

也演出了程式設計習慣。比如一對大括號,要先寫前面後面,再添中間。這些,親眼所見與紙上看來,對初學者,終究有所不同。

3. 還是過程

稍微大一點的**,都不是一次成型的。尤其,一定不是從頭往後寫的。

小學作文老師教我們,要有大綱。寫**也是的。可能,我們乙個鍵也沒有敲,但是此時已胸有溝壑。這個時候老師得把這些溝壑都畫圖畫圖交代一翻,指點好,這裡我要寫啥,這裡我要寫啥。

此外,為了保持一直可以編譯、測試,而有時**寫作要持續幾天的時間,中間不可能連個廁所也不去。有時**非常長,超出了初學者直接寫作的能力。這個時候,我們會一點點寫--重要的是,在這一點點寫的時候,始終保持可編譯和測試。所以,有時中間結果與最終的差別非常大。**可能先多起來,然後又慢慢刪除掉一些,後來成了最終的樣子。而不是像有的同學想的,一直由少到多。

我的乙個比喻。如果你體力不濟,還想游過乙個大湖,我們要做的不是橫渡,而是沿著湖邊,不停地隔一會上岸歇會。我們確實更慢了,更是安全更重要。

這樣,最終的** (到達對岸)與中間的**的差別會非常大。有時,我們很難一下子就想像到中間發生過些什麼。

你能從殘局猜到那些死掉的車馬炮都怎麼犧牲地麼?我們用過程向同學們展示這些。

4.保證

向同學們保證,你看**確實是活人寫的,因此你也能寫出來。身邊活人的榜樣,比書上印好的鉛字更有說服力。

想當年我跟韓老師去北京學習,他買了個魔球 (能變成棒子還能變成三角什麼的)。沒見過的同學,你可以把它當成三維的七巧板。韓老師很快拼了好幾個形狀。拼,也正是看圖紙上的最終結果,把過程猜出來。後來到球形的時候,他放棄了,說這個不行。然後輪到我玩。他看我拼出球來,讓我拆了。拿過去沒兩分鐘就把球拼出來了。

所以說,身邊活人的榜樣,比書上印好的鉛字更有說服力。我用課堂上編碼的過程向同學們展示:活人編的啊,真是活人編的。

當然,讓同學展示,比讓老師展示的效果更好。不過同樣,一旦同學們把這位同學當成與他們不一樣的人,那就失效了。這個時候,我真的也不知道該如何告訴同學們:你真的也行。

裝睡的人,你是怎麼也叫不醒的。

5. 例子

我見過周老師講jsp的時候,就在課堂上現搭環境,現寫**。見過林老師講win32api程式設計的時候,現寫**。

6. 未來的工作

為什麼沒有我要的插座?

我想不通一件事情,為什麼到現在還沒有我想要的插座 乙個usb控制的電源插座,它可以用這樣的語句來從電腦控制開和關 set objlamp createobject plug.lamp objlamp.on true 更多的帶晶元的電器不夠,還要能互相連線的 更進一步,就是為什麼現在在網路上面可以遠端...

在機器學習中為什麼要進行 One Hot 編碼?

類別資料是一種只有標籤值而沒有數值的變數。它的值通常屬於乙個大小固定且有限的集合。類別變數也常被稱為標稱值 nominal 下面舉例說明 以上例子中的每個值都代表著乙個不同的類別。有些類別彼此間存在一定的自然關係,比如自然的排序關係。上述例子中,位次 place 變數的值就有這種自然的排序關係。這種...

我為什麼要設計自己的流量排程演算法?

公司使用阿里的雲主機部署計算型的服務,就是特別耗cpu的那種。使用過程中有一件事情很苦惱,那就是雲主機的效能是不一致的,機器間的效能可相差30 更嚴重的是由於是共享雲主機,經常在晚上8點鐘左右 各大 的高峰期 有某些機器的系統cpu突然飆高 原因是一次系統呼叫消耗突然增加,系統cpu能飆到90 機器...