Overkill – Java as a First Programming Language

Matthias Endler

小題大作——以 Java 作為第一門程式語言

最近我和住在附近的一位學生聊到他初學程式設計的經驗。他們在學校開始學 Java,很快就發現那是一場惡夢。

我們當中有很多人是用 BASICPascal 這類語言學會寫程式的。那時沒有物件導向,沒有複雜的檔案 I/O,也幾乎沒有模組化……但那反而很棒。在 BASIC 裡,你只要寫

PRINT "HELLO WORLD"

這樣就完成了。這其實就是一個可以執行的程式,解決了一個基本且常見的問題:在螢幕上輸出一些文字。

如果你想在 Java 裡做同樣的事,你得這樣寫:

public class Main {
  public static void main (String[] args) {
    System.out.println("Hello, world!");
  }
}

你有沒有發現,要完成這個能想到的最簡單任務,需要具備多少程式設計知識?如果要向新手解釋這個程式,聽起來可能會像這樣:

建立一個包含 main 方法、回傳型別為 void 且以字串陣列作為單一參數的 Main 類別,並使用 PrintStream 類別中 out 物件的 println 方法,將你的文字作為單一參數傳入。

——請千萬別忘了加上括號。這樣就能保證你最初幾個小時的程式設計體驗充滿樂趣。

好吧。那麼替代方案是什麼呢?我承認,現在已經沒有人想再寫 BASIC 了,因為它缺乏用於圖形的成熟標準函式庫(Java 其實也沒有),而且擴充性不佳。程式語言必須簡潔明瞭。它應該要夠快,能應付數值運算,但又不能像僵硬的 C 系大括號語言那樣冗長(抱歉了,C++ 的朋友們)。它應該要有平緩的學習曲線,並提供即時的回饋(編譯式語言在這點上往往表現很差)。它應該要鼓勵撰寫乾淨的程式碼,並獎勵最佳實務。而能同時提供這一切的語言之一,就是 Python

而且 Python 還有更多優勢:數百個幾乎能幫你處理任何事情的函式庫、與常見 IDE 的良好整合(Eclipse 中的 PyDev、IDLE……),以及精確而優雅的語法。

以下是我們上面那個程式用 Python 寫的版本:

print("Hello World")

在這個階段,你完全不需要了解物件導向、作用域和函式參數。也不需要繁瑣的庶務與簿記工作。是的,它是一種直譯式語言,但對初學者而言,這並不是什麼致命缺點。

如果你還沒被說服,在 Java 中列印與格式化文字輸出對進階程式設計師來說還算相對容易,但可怕的部分是從檔案輸入開始:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class fileIO {
    public static void main(String[] args) {
        String filename = "test.txt", line;
        try {
            BufferedReader myFile =
                new BufferedReader(new FileReader(filename));

            while ( ( line = myFile.readLine()) != null) {
                System.out.println(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我聽到你說:「老兄,檔案 I/O 本來就很複雜,本來就是這樣嘛。」這話沒錯……就內部運作而言的確如此。但初學者應該得到一個簡單易用的介面。Python 示範了該怎麼做:

file = open("test.txt")
text = file.read()
print(text);

這段程式碼與我們對流程運作的自然理解完全一致:「電腦開啟一個檔案、讀取它,然後印出來。」就連五歲的小孩也能理解。沒有人會一開始就這樣解釋:「在你能讀取檔案之前,你需要一個基於 FileReader 的 BufferedReader……」即使這正是它在內部實際運作的方式。你一開始應該先解釋全貌,也就是教電腦如何完成有用工作的基本原理。否則,你只會讓初學者感到挫折,並誤導他們以為自己不夠聰明、學不會程式設計。寫程式是很有趣的,而踏出第一步是最關鍵的一步。所以,別用一層又一層不必要的抽象來破壞這個體驗。

連結

原文由 Matthias Endler 發布

本文章由 muse-spark-1.2-contributor 進行翻譯