TAOUP給我們的啟示

"Those who don't understand Unix are condemned to reinvent it, poorly."
– Henry Spencer, 1987.11

《UNIX編程藝術》(簡稱TAOUP,是對Knuth的TAOCP的致敬。)講解UNIX社區的歷史、理念、哲學、原則,及其相關技術和軟件。可作為故事書看完,也可作為相關技術參考。很奇怪的是,我基本上認同該書陳述的所有理念與哲學,仿佛那些只是很自然的事情又似乎每一個人都可以接受一樣(其實肯定并非如此!),盡管我并非真正意義上的程序員或者黑客。

看完這本書我最大的收獲或者想與大家分享的還不是書中的理念、哲學、技術,而是一個事實。通過作者的那番陳述(其實只是他敘述的方式在深深地影響我),我看到在我所在的這個地區(大學)的一個沒有被太多人關注或者討論的事實:目前我和我的同事、學生缺乏的不僅僅是理論、技術,可能更重要的問題是,我們缺乏一個具有統一理念且保持穩定發展的專業社區

拿程序開發而論,我們往往看到我們講授程序開發的局限性,也看到提升程序員能力的迫切性,更認識到目前要提高大部分同學編程能力的不可能性。一直在反思,是什么導致了這樣的窘迫局面?我們有批評過教學的方法、教育的制度,也批判過社會的各種風氣。然而,看完TAOUP之后,我想,如果我們的學生不能有(并且進入)一個可以影響他一生的程序員社區,不能學習生活在某個穩定的程序員社區中,并受一種薪火相傳的理念或者稱為文化氛圍所熏陶與影響,他們在程序員這個路上勢必無法走遠。

稍微回顧一下我們學院CSer教育之路:大一學C、C++ (Windows 編程),然后Java,然后有數據結構、操作系統,再接著某些TCP/IP編程、做網站等等,學點數據庫或者再加上軟件工程。似乎學了很多知識,但是只要問一個問題,也許很多問題就暴露出來:我們培養的是具有何種統一技術理念的程序員

這個問題在TAOUP中頻頻強調。我們號稱培養的是靈活多變的程序員,無論什么操作系統都懂的程序員,反過來,其實是什么操作系統都不懂的程序員。也正因為我們不強調操作系統,那么操作系統所賦予的許多理念就不可能被傳授,比如UNIX社區中的開源文化、代碼重用、摒棄丑陋的GUI等等。這種不重視操作系統理念的編程教育,不能不說是因為Wintel 的崛起或者我國計算機教育的落后狀況造成的極壞后果。

Windows為了滿足一般用戶桌面應用需求,提出“可見即所得”的理念,被鼓吹了20年。我們培養的程序員大部分是欣然接受這種理念的,盡管我并不能稱他們是Windows程序員。我們培養的畢業生的畢業論文經常有很多丑陋的排版,只要你向他們指出,他們都歸咎于Windows:沒辦法,Word就是這樣工作的。比如,一張圖片擠不進一個版面就會擠壓到下一個版面而導致有一頁有大量空行這樣的錯誤。我不知道是否“Word就是這樣工作的”,但是“可見即所得”絕對值得再寫一篇文章批判。

我知道,要扭轉這樣一種簡單的錯誤看法我們都需要花費上十年的工夫或者干脆是不可能的任務。為什么?因為他們身邊大部分人都是這樣的一般非技術用戶,因為他們的老師、他們的技術主管、他們的領導都是從小就被Windows培養出來的專門人才。但是不要忘記,他們并不是Windows系統的專門人才,而僅僅是被簡單而丑陋的系統慣壞了的用戶而已。我舉這個例子只是想說明,要改變某些看上去容易改變的現狀是非常非常困難的一件事情(注:批評Windows系統并不是一件容易接受的事情,更別提改變使用Windows的陋習是容易的事情。所以,我愿意為以上見解接受所有批評。),重點是沒有一個正常的環境,即我一開始就提出的那種所謂的“程序員社區”。

如果我倡議說,把這樣的社區建設起來,那也未免過于樂觀了。一種文化氛圍的建設豈是一人之力幾年的工夫可以完成的呢?那是不是就不可補救呢?也不盡然。當務之急,我想,首先要倡導盡可能多的同學在Linux下學習、編程、娛樂。其次,相關課程逐步跟進,比如,大一的編程、大二的操作系統、計算機網絡等課程多強調Linux操作系統。希望星星之火可成為薪火相傳之火、可以壯大成燎原之火!

也有人會問,那Windows操作系統這么流行就不講了?答案是,Windows是流行,但是真沒什么可以講。所謂沒什么可以講是因為Windows本身就缺乏一種傳統,而且它還是閉源系統,你講什么?估摸現在能講XP的老師都沒有,但是XP已經退休了。那該講Win8?嗨,這可能嗎?就算能講,講完了估計該出Win10了。哦,不,也許是Win13,誰知道呢?

將IT文化建設的問題推廣一步:一個地區的文化如果缺乏統一傳承,那么這種文化即呈岌岌可危之勢。在這一點上,我中華文化的傳承中已經日益凸顯其危機啊,就不提也罷了。不過,是該反思反思了。應該看到的是,我們的IT文化尚未成型,IT文化社區尚未建設,足可一嘆。這就是TAOUP給我的啟示。分享給大家,應該是給大家的啟示!

P.S. 本文作者是一位普通的大學老師,其目的有二:推薦一本書;提出一個問題:如何教如何學CS? 本文不探討Linux與Windows的差異好壞。

2014.5. 寫
2017.2.14改

UNIX編程藝術
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容