反思"Hello World"


第一個Hello World的出現是在Brian Kernighan寫的"A Tutorial Introduction to the Language B"書籍中(B語言是C語言的前身),它用來將Hello World文字顯示在電腦螢幕上,自此之後,很多的程式語言教學文件或書籍上,已經無數次的將它當作第一個範例程式。

為什麼要用Hello World來當作第一個程式範例?基本上是因為它很簡單,初學者只要鍵入簡單的幾行程式,就可以令電腦執行指定的指令:顯示Hello World。我自以前到現在也是用它來教導一些人如何撰寫它的第一個程式,直到近來,我突然產生一個問題:「現今所有的軟體設計問題到底是什麼?是不是根 本上我們教育軟體設計人員的方向就錯了!?」

電腦呈現出現實生活中的種種活動與概念,並去除這些活動與概念中難以掌握與更動的要素,尤其是圖形化介面的產生,將桌面環境模擬於虛擬世界中,並擴 充了一些特性,從而使得人們覺得操作電腦是容易的、命令電腦 是容易的、改變電腦上的一切也是容易的。

這種觀念也漸漸深植在軟體設計人員的心中,至少是大多數人的心中,要改變程式中的幾個字符是這麼的容易,容易到完全不需要成本,事實上這是一種過於 天真的樂觀主義。

Hello World不經意的表現了一種暗示:「看!就是這麼簡單,我就可以在電腦上顯示Hello World。」有些文件或書籍甚至直接明示了這一點。

Brooks在The Mythical Man-Month中說的:「電腦編程基於十分容易掌握的介質,程式設計人員通過非常純綷的思維活動 - 概念以及靈活的表現形式來開發程序。正是由於介質的易于駕馭,我們期待在實現過程中不會碰到困難,因此造成了樂觀主義的彌漫。」

正因為介質容易掌握,我們誤以為我們可以自由的透過它來實現我們腦中的思維,這是一種邏輯上的謬誤,因為我們根本無法確切的掌握我們的思維,即使我 們有了最容易掌握的介質。

我們一開始就忽略了人類思維的複雜性與難以掌握,而強調電腦所創造的虛擬世界之易於駕馭,學習者是如此,匆匆的學習,急於掌握這種介質,教育者也是 如此,著重於教授如何透過即定的語言來掌握這種介質,而忽略了訓練學習者去掌握自己思維的複雜性與概念的建全性。

過去我們所能掌握的介質就像是木頭,我們試圖雕塑腦中的一個形象,但苦於對木頭塑形的難以控制,現在我們有了更易於塑形的泥土,我們誤以為我們可以 任意的實現腦中的想法,然而事實上並非如此,不受控的思維反到會使得我們在一陣忙亂之後,只得到一身的狼狽。

使用Hello World程式本身並沒有什麼錯誤,它展現了一個程式該有的元素,錯誤的重點又是在於人,至少從現在開始,我們不應該在展示了Hello World之後,宣稱設計程式就是這麼的容易,我們或許該說的是:「小心,就因為它是這麼的簡單,您要小心控制您的思維,不然程式就會狂亂!」