專諸行動總結會的第二天,我們如常上課。與以往唯一的不同是,上午的時間分成了兩部分,第一節課依然是機率,第二節則是新開的《電腦程式設計基礎》。
對於程式設計,我完全是一個門外漢,莫嘉妮推薦的幾本書我只草草翻了一下目錄,加上昨天她說課上只會講到一些有關程式設計思想的內容,所以開課前我有點擔心自己跟不上,已經做好了先記筆記然後複習的準備,儘管這並不是我所擅長的學習方式。
我也想過和莫嘉妮提出延後開設這門課的建議,但心中一直記掛著昨晚拜託雲叢的事,無暇顧及其他。同時想到之前我提出的種種問題莫嘉妮都早有準備,想來我現在的困境她也曾經想過,姑且聽幾節課試試,如果跟不上,大不了像高中時那樣自己想辦法補起來,何況我還可以隨時請教老師和同學。
顯然我有些多慮了,這門課的開頭似乎就和程式設計沒有關係。
「這一節我們開始新課『電腦程式設計基礎』。對於上課這件事,各位都不陌生,可以說從小學甚至幼兒園開始,課程就構成了我們生活很重要的一部分,但大家是否想過我們為什麼要上課?」莫嘉妮沒有等我們回答,接著講了下去,「通行的答案當然是為了學習知識。這個答案其實就涉及到了教育的本質,即我們認為有一些知識是可以通過課堂來傳遞的。退後一步說,『教育』這件事情之所以能成立,是因為我們認為有一些知識是可以複製的,可以從『知道這種知識的人的大腦』複製到『不知道的這種知識的人的大腦』。
「所以我們如果簡單地把知識分為兩類,第一類姑且稱作『可以複製的知識』,第二類稱作『不可複製的知識』,那麼教育關心的是前者,而且也只能關心前者。當然這樣的分類方式略微有一些粗暴,因為這兩類知識本身並沒有明顯的邊界,而且也會隨著時間而變化。比如,有一些原本屬於第二類的知識,隨著人類社會的發展,我們發現了它可以清晰描述,那麼就變成了可複製的知識。對於一個人來說,隨著他的閱歷增加,能力提升,也會出現原本屬於第二類的知識變成第一類的可能性。對於不同的人來說,兩類知識的邊界也是不一樣的。
「儘管如此,這樣的劃分有助於我們看清楚人類的知識結構以及自身的知識結構。首先我們不考慮純靠記憶的諸如歷史這樣的知識。在這種分類思路下,你會發現一些知識比較容易複製,比如一些原理、規律、規則。這裡面除了一些規則是人為強行制定的之外,通常要麼通過演繹法推演得出,要麼通過歸納法總結得出,可以簡單稱之為『邏輯』。這部分內容中,有一些並不是那麼確定,但可以通過總結的方式得出一個普遍的規律,這類規律我們也可以用兩個字概括,就是我們這段時間一直在學的『機率』。稍微想想,你會發現這些比較容易複製的知識,通常都是偏理性的知識。
「還有一類知識偏感性,比如在某些時刻你會情不自禁地哭出來,有些時刻又會忍俊不禁,通常這類知識我們不能很好地複製。但是如果你仔細思考,也會發現其中有一些內容符合理性的特徵,比如在你說了某些話之後,對方有很大機率去笑,而說了另一些話之後,對方會對你表示懷疑等等。這些規律我們可以簡單地稱之為『修辭』。教育這個行業很重要的一項任務其實就是這樣不斷地把一些原本看似不可複製的東西變成可以複製的東西。」
莫嘉妮再次用這樣一個跳出特定的框架,俯視全域性的簡單策略,讓我們想到了一些原本沒有意識到的東西。
「當然,『邏輯』『機率』『修辭』這樣的分類也非常粗糙,根據不同人的不同定義,這三類之間也存在著重疊甚至包含關係。但各位如果能夠繼續沿著這種思考方式想下去,你會漸漸產生自己獲取知識的原則。比如,當我們看到一個人做成了一件事,首先可以探尋一下成功的原因,然後看原因中哪些屬於第一類知識的範疇,哪些屬於第二類。對於第一類,你可以學過來,而如果是第二類,我們也可以不用在上面耗費過多時間,從而提高汲取知識的效率。」說到這裡,莫嘉妮頓了一下,「以上這些話中的道理想必大家都聽懂了,在往下說之前,還是想提醒一下各位,並不是所有情況下效率都是第一位的,比如當我們感知藝術的時候,我們很可能需要放慢才能獲得最佳的體驗。各位也可以順便想想,藝術不正是包含第二類知識最多的地方嗎?」
我看到怡年聽得非常入神,當莫嘉妮講到藝術的時候右手甚至情不自禁地彈起了「鋼琴」。
莫嘉妮繼續說下去:「我們回到剛才的思路,其實再後退一步,跳出教育的圈子,這兩種知識的分類對於我們的人生也有很大的幫助。我們有時候會期待生命中出現一些驚喜,但沒有人希望自己遇上飛來橫禍,那我們是怎麼做決策的呢?仔細觀察,你會發現絕大多數人在決策時都希望降低不確定性,這意味著我們寧願沒有驚喜,也不希望有不好的意外。這種普遍的人性背後的原因是什麼我們暫不深究,但這樣的後果是,我們在做決策時的時候會盡可能利用已經發現的原理與規律,注意,這屬於第一類知識。除此之外,我們還會自己主動地去制定一些規則,希望大家能夠遵守,進一步降低不確定性,而規則本身也屬於第一類知識。」
「我明白了!莫嘉妮你的意思是,程式設計就屬於第一類知識。」怡年道。
「看來有些同學已經知道我在程式設計課上講這個的目的了。既然我們在上課,如我剛才所說,課上講的內容當然屬於第一類知識,而且我們會盡量去講那些最適合通過課堂這種方式傳授的第一類知識。聽上去怡年說了一句廢話,但我想她真正想表達的意思遠不止於此。程式設計課要講的絕大多數知識確實屬於第一類知識,但更重要的是,如果你把程式設計語言當作是一種工具,它屬於最嚴格意義的第一類知識,最直接地體現了『可以複製』這一特性。所以從教學角度來講,程式設計語言本身應該是最適合傳授的課程,如果做得好,幾乎可以百分之百地把這部分知識從我這裡複製到你們那裡。真正的難點在於創意,在於解決問題的方法,我們也稱之為演算法,所以這些東西才是我課上的重點。我課上會講到一些創意和演算法的例子,這些例子當然也算第一類知識,你可以直接複製,但從零開始構想一個新的創意,提出一種新的演算法,那可能就要看各位自己了。」莫嘉妮道。
不過鑑於我和怡年從來之前幾乎沒有接觸過真正的程式設計,莫嘉妮又講了一些常見的程式語言特點。除演算法之外,她主要講了三個概念:變數、過程、條件表示式。
她說這三個概念是大部分程式語言的根基,其他的內容都是這三個概念結合一定的演算法實現的,即程式語言當中有一部分內容,本身就是用這種程式語言寫好的程式,只是這些內容太常用,所以直接納入為這種程式設計語言的一部分。好比其實只用五條公理就可以構建整個歐幾里得幾何學,但我們真正學幾何的時候還需要記住很多定理,這些定理可以直接當作結論去用,但它們都是從最初的五條公理演繹出來的。
「拿我們最近的經歷來說,也許阿珵和怡年會覺得我們通過網路侵入防範如此嚴密的電腦系統非常厲害,這一點我們確實做得不錯,梁炯和雲叢都非常棒,但歸根結底,他們寫的程式也都是建立在那幾個基礎的概念上。表面看,電腦程式和我們生活中很多事情一樣,都很複雜,但再複雜的程式總是能夠找到一個理性的起點,而生活中很多事情則不然,雖然很多哲學家嘗試給人類歷史上的所有事物都找到一個理性的起點,追溯每件事情發生的原因,但目前最多隻能說有一點哲學理論上的貢獻。也許這個理性的起點是存在的,但沒有哪個人全知全能,所以很多時候為了找到原因,我們必須到自身外部去尋找證據。」
言者無心,聽者有意,莫嘉妮的一番隨想讓我再次想起了心中掛念的事。為了驗證我心中所想,我已經讓雲叢在替我尋找可能的證據了。可我真的希望自己的想法被證實嗎?我不知道,只能把答案交給「可能的證據」了。
等我回過神來,已經下課。我反覆告訴自己不要胡思亂想,然後強打起精神與大家一起吃了午飯。
不過怡年還是發現了我不太對勁:「阿珵你是不是不太舒服?」
「哦,沒什麼,雖然莫嘉妮講得簡單,但我之前從來沒有接觸過程式設計相關的東西,一下子聽到這麼多新知識有點懵,可能自己多學一點就好了。」我說。
怡年的眼中閃過一絲懷疑,猶豫了一下,好像打算開口說點什麼,但童雲叢插話進來:「不如我們下午一起自習,阿珵和怡年你們如果有什麼問題,可以很方便找到我和梁炯,這樣兩位進入狀態可能會快一點,相信我也相信莫嘉妮,寫程式對我們幾個來說真不是什麼難事。」
「好啊,好啊。」怡年笑道,她下嘴唇的唇彩似乎被咬掉了一小塊。
今天是程式設計課第一天,考慮到我和怡年的水平,晚上取消了研討會,改成了晚自習。從下午到晚上,我一直在電腦上敲書上的示例程式碼,然後檢視執行結果,因為這件事幾乎不用動腦。怡年差不多也在做同樣的事。
晚上九點多,我們回去休息。和昨天一樣,我送怡年回屋,待她吃藥睡下,就回到了自己房間。
我一個人坐在書桌前,對著桌上的簡易書架發愣,最顯眼的位置擺著的正是姐姐送我的那本《機率》。
大約過去了五分鐘,手機收到了雲叢發過來的加密資訊:「你回屋了吧?出門來校門對面的『原力網咖』,3號包間。」
五分鐘後我到了3號包間,發現童雲叢正打遊戲打得起勁,見到我來,衝我笑道:「怎麼樣,要不要一起玩一局?你可是答應過我陪我打電動的。」
我苦笑了一下:「你就別賣關子了,是不是拜託你的東西到手了?」
「那是自然,不過檔案太大,真的沒有辦法直接傳給你,我怕網路出現流量異常被人發現,要知道複製這個東西本身就費了好大勁。」