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


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

給同學們

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

市面上的電腦書很多, 而且幾乎每一本都比這本書漂亮。 不但如此, 這些書教你使用滑鼠與選單, 教你使用圖形介面 (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 底下的時光減少浪費生命 :-) 二則可以提早為將來轉換作業平臺作準備。

何不開個才藝班?

... (待續)


命令列讀本

  1. 目錄
  2. 前言
  3. 瀏覽
  4. 套件
  5. 圖片整形
  6. 老鼠迷宮
  7. 迷宮積木
  8. 誰常上機?
  9. 網頁做簡報
  10. tidy 網頁
  11. 編碼
  12. 客製
  13. Regexp
  14. 目錄比較
  15. 聯集差集

附錄

  1. GUI 求生
  2. 基本指令
  3. 阿貴管理