前言: 為什麼叫 「讀本」?


愛麗思問姊姊: "一本沒有對話也沒有圖案的書, 有什麼好看的呢?" -- 愛麗思夢遊仙境

給同學們

讓我做個比喻: 這是一本教你蹲馬步, 教你騎 腳踏車 的書。

市面上的電腦書很多, 而且幾乎每一本都比這本書漂亮。 不但如此, 這些書教你使用滑鼠與選單, 教你使用圖形介面 (Graphical User Interface), 很快就可以完成一些有趣的事。 如果你希望學一個月的電腦之後, 就會製作光鮮亮麗的成品, 那麼你應該去買這類書來看; 請不要把時間浪費在這本書上面。

這本書要講的不是 GUI, 而是 命令列操作文字檔的處理。 你必須像背英文單字一樣地背命令 (還好大概只要背一兩百個命令就夠了, 不必像英文單字一樣要背上千個), 必須像解數學計算題一樣地動腦筋類比/推理 (還好這比數學容易做實驗, 動手試一下馬上就知道你的推論是否正確)。 如果用操作飛機來比喻其他電腦書要教你的東西, 那麼這本書的目的就是要教你如何騎腳踏車, 而且其中有大半部分在訓練你的腳力 -- 例如蹲馬步。

「騎腳踏車那麼辛苦, 車上又沒有空調設備, 我為什麼要學? 」 我只能告訴你為什麼我覺得學腳踏車很好; 至於是否值得你學, 應該由你自己決定。 在我成長的年代, 只有腳踏車可以騎; 飛機是後來才發明的。 所以我無從選擇, 只好學腳踏車, 實在不是因為我真的很喜歡它。 但是後來我慢慢發覺腳踏車輕便可靠, 可以帶我到達很多飛機到不了的地方。 飛機提供許多複雜的功能, 但其中大部分我都用不到, 卻必須因此而付出體積, 重量等等代價; 腳踏車則不會無故增加我的負擔。 更重要的是, 經過多年來的星際旅行, 我發覺不論在那個星球上, 都很容易取得腳踏車; 不論是廿年前或現在, 操作腳踏車的方法都沒有很大的改變。 我學的技術可以橫艮時空。 所以後來大部分人都直接學開飛機, 我卻越來越喜歡騎腳踏車, 甚至到處告訴別人騎腳踏車的好處。 必要的時候, 我也偶爾操作飛機, 但是不太喜歡在上面投資太多學習的時間, 學太多細節, 因為不同星球的飛機經常有很大的差異。

問問看你那些學開飛機的學長姊和老師們 (畢竟現在最時麾的事, 不是騎腳踏車, 而是開飛機, 要找這樣的長輩應該很容易) 他們五年前所學的東西, 到現在還有多少百分比是有用的? 問問看他們為什麼不敢離開他們熟悉的 「微軟之星」 到其他星球去探險? 如果你希望現在所學的知識與技術, 在廿年之後還有一大半可以用; 如果你希望在這顆 「企鵝之星」 上面所學的技術, 可以拿到其他星球上去用 (包含那個熱鬧微軟之星), 那麼這本書就是為你而寫的。 請不要理會其他人異樣的眼光 -- 原諒他們, 因為他們一直待在飛機上, 沒有辦法打開窗子, 從來沒有機會理解兜風的樂趣。 請跟我一起學腳踏車, 讓我們兜風去!


給老師

學英文:讀本 = 學指令:????

最早在寫 "如何有效學習電腦" 摘要版 / 短文版 (有點過時) 的時候, 就注意到學習命令列與學習英文有一些類似之處。 後來寫 「自由軟體與資訊教育」 發現更多相似之處。 先來看看我們如何教/學英文。 以下的學習方式, 經常吃力不討好, 不但枯燥, 如果強調過頭, 甚至會降低對英文的興趣:

  1. 背字典
  2. 一口氣背一堆 「看起來很像」 (但不一定相關) 的片語: take up, take down, take off, take after, ...
  3. 跟著文法書, 搭配一點例句 (但從來沒有完整的段落或文章), 按照詞性, 簡單句, 複合句, 時態, ... 的順序學。

這些學習方式欠缺情境/上下文 (context), 不分重要性/使用頻率, 很難藉此培養出對外國語言的 感覺。 學語言需要情境, 需要 重複, 需要 由淺入深, 讓真正常用的詞彙/句型透過重複出現而滲入你的感覺深處; 而較少使用的複雜片語/句型很自然地留在外圍, 看到的時候需要想一下, 需要比較一下。 我們學英文的過程當中, 接觸最多的, 不是字典, 不是狄克遜片語, 也不是文法書, 而是 有劇情的讀本或短文! 不論是單字, 片語, 或文法, 重複在不同的單元出現, 有加深印象的效果, 而且可以逐次深入。

如果我們將 「學習英文」 與 「學習命令列」 對照比較, 是不是可以得到一些有趣的結論呢?

英文 單字 片語 複合句 字典 文法書 讀本
命令列 命令 選項 | 及 `...` 指令大全 UNIX 觀念書籍 不存在?

事實上不只是英文與命令列, 凡是強調 「組合」 的知識, 都會有類似的特性: 單獨學一個觀念, 非常枯燥無聊; 換個角度講, 想要做一點點有趣的事, 就免不了必須用到許多觀念。 另一方面, 有許多時候, 單單是要詳細解釋一個觀念, 就要花很大的篇幅。 想想過去 unix 教科書的安排法, 再想想上面這個觀察, 就不難理解為什麼大家認為學命令列是件枯燥無聊的事了。 試想: 如果我們過去學英文, 從來沒有 「以短文為單元的課本」, 而是拿著文法課本與字典在學, 會是什麼景象? 大部分的命令列書籍, 不是在教指令 (字典!) 就是按照 檔案系統/行程管理/... 的順序在解釋觀念 (文法書!), 難怪很無聊。

我們需要的是一本類似英文讀本的命令列教科書; 這也就是本書存在的目的: 我希望可以藉此填補表格當中的 "不存在?", 希望它可以作為這個觀點下的第一本範例書。 事實上我們需要不只一本, 我們需要很多這樣的書, 就像學英文需要很多讀本一樣。 其實我們已經有很多類似 "短文" 的命令列文章 -- HOWTO 文件就是任務導向, 有情境, 有目標, 給讀者很大的動機與成就感的文章。 它的重點不在列出一堆看起來很像的指令, 也不在詳細解釋每一個指令, 而是在組合這些指令以完成一件有趣的任務, 例如播放音樂, 或製作家庭 VCD。 不過閱讀 HOWTO 文件需要一些基本的程度, 並不適合命令列的初學者, 彼此之間也缺乏有系統的由淺入深的假設與安排; 希望這本書有拋磚引玉的效果, 可以作為入門級的命令列讀本, 並且激發大家寫出更多適合中學生/初學者的命令列教科書。

從貼近生活的應用出發

有沒有那一位讀者當初學電腦, 從 安裝 Windows 開始學起? 還是從如何切割硬碟, 甚至從組裝電腦開始學起呢? 別鬧了。 就連從 Word 開始學起, 都覺得不太對勁, 好像有點太硬了。

當初我們也許是為了交一篇旅遊報告, 才開始學打字及文書處理; 也許是為了救照壞的相片, 才開始學影像處理; 為了打 game, 才開始學下載安裝軟體; ... 還有一小部分人, 是為了操電腦做重複性機械化的動作而學程式設計, 才開始接觸電腦。 學 Windows 固然如此, 學 GNU 命令列環境 (通常也就是學 Linux), 也應該如此。 從最貼近生活 需求與慾望 (通常也是最遠離系統底層) 的應用開始學起, 才不會讓本就無聊的命令列變得更乏味。 除了這本讀本舉的應用實例之外, 鼓勵學生提出 生活當中的需求, 也是很值得努力的方向。 如果您從學生那裡得到好點子, 請告訴我, 或許可以在這本讀本裡面增加一篇, 與大家分享。

所以這本書完全不談安裝, 而是假設每位學生已經有一個專屬於他的 non-root 的帳號可以登入, 從這裡開始學。 至於選擇/安裝系統, 準備帳號, 這些是上課之前, 老師就應該要幫學生準備好的事情。

不要浪費掉 Windows 下的時光

那麼要如何選擇系統呢? 比選擇 distribution (Ubuntu? Fedora? Mandriva? ...) 影響更大的問題, 是選擇電腦教室配置的方式。 要在電腦教室安排 Linux 的學習環境, 至少有以下選擇: 雙重開機, LiveCD, DRBL, K12LTSP 等等。 雙重開機的管理比較辛苦; LiveCD 需要全班更新時比較不方便也不環保。 此外, 前兩者獨立作業, 比較無法感受/實驗多人共用一機的情境。 所以我個人傾向後兩者。

不過等等, 畢竟學生每天接觸的是 Windows 環境。 如果一週只有一兩小時 Linux 課, Windows 底下的時間完全浪費掉, 那也是一曝十寒, 效果極為有限。 最好的方式是: 讓他們在 Windows 底下也可以接觸 gnu 命令列環境。 所以我採取管理最簡單的方案: 用 Linux 只架一部簡單的 ssh 伺服器; 電腦教室所有 (Windows) 電腦都安裝 pietty 可以遠端登入 Linux 主機。 再營造一個環境, 讓查成績, 交作業 (通常是製作簡單的網頁, 放在指定的位置) 等等工作都非得登入 Linux 伺服器執行不可。 這樣學生即便是在 Windows 下 (他們接觸電腦的多數時間), 也會養成使用命令列的習慣, 命令列才能融入他們的生活當中。

事實上我們要學的是命令列, 不必一定是 Linux。 XLiveCD 光碟提供了 cygwin 環境, 讓學生可以在 Windows 底下直接學 gnu 命令列環境, 不必登入遠端機器。 此外, 它也在 Windows 端執行 X Server, 學生如果從 xterm 底下用 ssh 連到 Linux 伺服器, 還可以執行 Linux 上的 GUI 軟體, 這個圖形視窗會丟回 Windows 底下。 網路速度夠快的情況下, 可以放一些必須在 *nix 下執行的有趣應用軟體, 例如 Dr. Geo 等等, 提供更多鼓勵同學登入 Linux 的誘因。

順便一提, 許多自由軟體, 不論是命令列或圖形介面, 都是跨平臺的。 可以鼓勵學生在 Windows 底下就多用這些跨平臺的自由軟體, 一則在 Windows 底下的時光減少浪費生命 :-) 二則可以提早為將來轉換作業平臺作準備。

何不開個才藝班?

... (待續)