大陸見聞;談電腦課程與書籍

侯捷

《程序員》2000.12




●課程緣起

今年八月,我應臺灣 A 公司和 W 公司之邀,赴上海分別為A 公司的轉投資公司和 W 公司的上海分部授課。兩個課程的內容差不多,都是連續四天的 C++/OOP/STL。
這個課程顧名思義,其旨甚明。C++ 部份,僅從 classes 開展,與 C 相容者皆不述及。OOP 部份,以繼承和多型的運用為主,並大量引入專家建議的準則,強調 OO 程式開發過程中一定要完成的以及一定要避免的事情。STL 方面則是介紹六大組件的角色和運用 —其中以容器和演算法著墨尤多,這是 STL 應用的最大宗。如果 STL的課程再深入,就可以提昇至泛型(genericity)的學理探討,並進而拿 STL 的源碼出來個案研究一番。可惜囿於時間,泛型的學理僅少量帶到。但願兩岸的程序員都能夠儘快正視「泛型」這個重要課題。

課程內容雖是標準的軟體技術,邀課單位卻是標準的硬體公司:A 公司是全球知名的個人電腦製造商,W 公司是全球知名的 DRAM 廠商。諸君可能很奇怪為什麼這麼「硬底」的公司需要純軟的技術課程。原因無它:任何硬體都需軟體來驅動與服務。公司做大了,少不得要多攬一些工作在身上,逐漸就軟硬全包了。當然,同樣一個課程,不同背景不同需求的人來上,會關注不同的主題,提出不同的問題。以 C++ 語言來說,這次課程由於 W 公司需要編譯器方面的知識,學員就特別對 C++ 物件模型感興趣,希望多知道語法表象之下的運作機制。這基本上已經跳脫一般人對 C++ 課程的認知,幸好我一向就認為某些底層機制是徹底接受 C++ 的關鍵,所以原本就很重視這個主題。

我在臺灣開過不少課。近十年來從 DOS 的記憶體管理,到 Windows 的SDK 編程、Win32 作業系統、MFC 編程,再到 C++/OOP/STL,場數在半百以上。早期公開授課,接受報名(臺灣有專辦訓練課程的公司),近年來花大量時間在寫作上,只偶爾接受公司單位的邀請,進行公司內訓。一個很有趣的現象是,幾乎都是硬體公司邀請我,而我卻是一個純粹的軟體技術人員。我想主要的原因是臺灣的硬體公司賺大錢,在員工進修方面比較有更大的財力。如果你以為硬體公司的人不懂軟體,所以得上些軟體課程,那倒不是,任何做軟體的人本身都必須有軟體技術底子:以目前技術之發展,業外人士很難玩票或驟然跨行。近年來個人電腦上的軟體技術日精月進,和 DOS 時代誰都能軋上一腳的情況已有天壤之別。

●兩岸之水平?

如果開了兩次課程,就要夸夸而談兩岸在 C++/OOP/STL 上的技術水平或人員素質,那無疑是以管窺豹,以蠡測海。課堂上有認真的同學,有不認真的同學,有程度領先的同學,有程度落後的同學。種種情況,臺灣和大陸都一樣的。上課狀況還和邀課公司的本質有關,W 公司是硬體本質,工程師多是為自家晶片開發編譯器、聯結器、移植 Linux,關注低階問題多些。A 公司的轉投資公司是軟體本質,工程師比較著重應用軟體,關注高階問題多些。

雖然浸淫於 C++/OOP/STL 的時間人人不同,功力也高高低低,但基本上所有學員對於 C++ 並不陌生,缺乏的只是系統化的整理。我的習慣是,任何課程一開始一定首先介紹該領域的名著,從初階到高階。畢竟任何課程都是短暫,唯有好書是永遠的老師。以這次課程為例,在 C++/OOP 方面我就介紹了語法語意層次的、底層運作機制的、專家經驗的、前人心血結晶彙整的各級經典。在 STL 方面我也介紹了基本(使用面)層次的、進階層次的、高階(嚴謹學理)層次的。

軟體技術領域裡頭的名著,泰半是英文書,這就面臨一個棘手的問題:英文書對大陸讀者而言,獲得管道和高昂的價格都成為一個障礙。不過,為學員打開眼界是至為重要的事。即使不容易取得書,也要知道這些書的存在,開啟日後進修的方向。因此介紹原文好書仍然是我堅持的一環。

據我粗糙的瞭解,大陸的高校課程在資訊相關科系方面並沒有把 C++ 列為必修。這可能也是眾程序員對此缺乏系統性訓練的主因之一。臺灣近幾年來幾乎各大學已經把 C++ 列為大一必修。大二以上可能再補一門 OO 選修。雖然,我也知道,低年級同學面對這些課程,大多數學了個烏鴉鴉,只得其皮不得其骨,遑論其髓(註1)。不過一學期的課程上下來,總是比茫無頭緒自我摸索得好。有了個方向,好歹有利未來自修。

註1:學校裡頭教不好實務性課程,多少也和師資有關。校園內許多老師與實務脫節,永遠只能講些隔靴搔癢的例題。碰上深入一點的問題就支吾難以應對。

上面特定地提了 C++,但我所關注的並不在語言,而是在 OO 技術的紮根教育。就使用的人口、資源的豐富,C++ 是 OO 領域裡最重要的一個語言,所以我提它。Java 是後起之秀,臺灣少數學校也已經把 Java 列入大學課程。

●泛談電腦技術書籍

光從少量課程,觀察不出「兩岸水平差異」這種大問題。不過倒是可以從另一個角度 — 高級技術書籍(中英不論)的普及度 — 來試加推想。我總認為,一個國家的軟體技術書籍的出版層次(不論著或譯),可以做為衡量該國軟體水平的依據之一。任何技術都不可能閉門造車而又居世界領導地位。在沒有機會看到世界一流作品的封閉環境下,我想像不出會產生多高的技術水準。軟體世界比的可不是低層次的寫碼(coding)技巧 — 寫碼精簡有力出神入化的,多到不可勝數,根本不成為關鍵。軟體水平高低比的是規格、架構、演算法、概念、重複使用性、軟體工程。

大陸程序員接觸英文書的機會少,造成很大的不利影響。全世界卯足勁兒往前衝的同時,他山之石可以攻錯,資訊的流通是至為重要的。別人都進步成什麼樣子了,我們閉門苦修只能事倍功半。不站在人家的肩膀上,起碼也要站在人家的膝蓋上。
英文書的通路,我想在大陸不是問題。高階技術書籍的潛在讀者,上網應該是方便的,而全球最大的網路書店亞馬遜網站(www.amazon.com)輕易可以讓你找到任何一本電腦原文書,還附帶讀者意見和專家評論,以及極為便利的網上訂購手續。但大陸上信用卡的普及度成了問題。

原文書價以及飄洋過海的運費,是另一個問題。動輒 40~50 美元的書價,別說大陸,就是對臺灣讀者也造成壓力。此外,英文閱讀習慣可能是另一個問題。大陸書籍有嚴格的格式管控,各種術語也有全國統一的譯名,並嚴格要求使用。這從某一方面來說可能是好的,另一方面(譬如閱讀外文書時對術語的生疏)卻可能產生很不利的影響。我舉個例子,template specialization 要不要譯?exception specializations 要不要譯?composition 呢?delegation 呢?譯成什麼比較好?比較信達雅?但就算譯得再好,看原文書時腦筋轉不過來怎麼辦?

臺灣電腦技術書籍對於術語的處理一直以來也不敢有太大的突破。儘管程序員之間交談用的幾乎都是原文術語,中文書卻仍規規矩矩地把所有術語一個字一個字譯為中文,不敢稍越雷池一步,形成很多閱讀上的困擾。讀者常需反推原文術語。我認為,科技讀物,尤其是給專業人員看的專業讀物而非科普讀物,其任務不是為了要讓科技全中文化。是的,科技生根很重要,但是全中文化和科技生根一點也沾不上邊。專業讀物是給專業人員看的,其價值在於迅速地傳播知識,導入知識,減少閱讀上的語言隔閡。專業領域裡頭的原文術語,是專業人員的共同語言,絕不至於形成閱讀上的障礙。反倒是封閉地自成一格後,阻斷了與外界的溝通。這個議題不是這裡三言兩語就可以說得全面,專業領域裡頭術語遍佈,總不能全部都保留原文,鬧個英文字多過中文字的場面。關於這個議題,有興趣的讀者請參閱我的另一篇文章:「技術引導乎?文化傳承乎?」見 www.jjhou.com/article99-14.htm

●專業技術作家

話說回來,英文書缺缺,如果把希望寄託在中文書上,目前而言似乎又太過虛幻。大陸的現實環境如果供養不了專業技術作家,就不能寄望有頻繁的高水準中文高階技術書籍可看。這一點臺灣是五十步笑百步,也好不到哪兒。

究竟大陸的現實環境能否供養得起專業技術作家呢?我們不妨看看下面這些數據。這些數據都不是秘密,你到任何出版社都可以問出這些數據,就像大學畢業生的起薪一樣,是一種指標,不是秘密,所以我就毫無顧忌地將它公開了。

我收集的數據是這樣的。在大陸,一般電腦書籍的版稅是定價的 5%~7%,書籍定價約為 40~60 人民幣,銷售量一萬本是不錯的成績。這麼算起來,一個作家每年寫兩本真正高水準的高級技術書籍(產量算不錯了),定價 50 人民幣,各賣一萬本(多久賣完不得而知),各位合算合算收入多少。

別忘了,能夠寫出「真正高水準的高階主題書籍」的人,其技術層次是大學剛畢業生的好幾倍,年紀也可能多十數歲,他的收入不可以拿大學剛畢業生的水準來衡量。也別忘了,他的收入必須涵蓋風險考量(包括退休金的準備、各種保險等等),才能夠安心寫作。

臺灣的情況又如何呢?電腦書籍的版稅可高達 20%(更高也有,極少),技術性書籍定價可達 500~650 新台幣(800 以上也有,極少),銷售量三千本算是不錯的成績(一萬本當然也有,極少極少)。合算起來,如果將兩岸的物價水平考慮進去,臺灣作者的收入大約好一些。是以,臺灣養得起專業技術作家嗎?條件也不是多理想。生活是過得去,但是擁有這樣身手的人,更多賺錢的機會等著他。挺得住外界誘因,又堅持在高處不勝寒處踽踽獨行的人,都具有濃厚的理想色彩。

臺灣的問題在於市場太小!大陸的問題在於版稅太低!市場小是沒辦法的事,版稅低就令人奇怪:利潤是按比例分的,那麼錢都賺給誰去了?

當然,以上都只是估算。臺灣的電腦書籍寫作環境,至少有一個優勢:愈來愈多的人知道並接受:要看高品質的好書、主題稀有的好書、技術難度高的好書,要付高價!這樣的認知有助於讓高階書籍的作者少幾個滅頂於柴米油鹽之中。

現實的無奈其實是關鍵。任何理想的背後總也需要某種程度的現實支援。技術書籍的作者,面臨一個難題。愈是高階,寫作愈困難,耗費精力愈多,讀者群卻愈窄,作者的收益也就愈少。

所以無論出版社或讀者,都應該要有一個認知:要看高階的書,要付較高的代價。你不能自己學了技術去釣大魚,卻捨不得多花點錢支持教你釣魚給你魚桿的人。賣書不是賣紙,是賣紙上的知識。喜歡以頁數厚薄來評量書籍價格的出版社或讀者,永遠被我列為不值一談的對象。

技術寫作,是一門特殊的行業。海明威曾說:『一個優秀的作家,最好有一個不幸的童年。』也許不幸的童年或不幸的人生可以激發一個人深刻的思考吧,但技術寫作不需要對人生有深刻的思考(有的話當然最好),或許反而需要一個不錯的甚至優渥的現實環境,畢竟技術的研究,曠日費時;技術的資源,所費不貲;技術的演進,推陳出新;技術作品的壽命,短如曇華(除非是核心技術)。


●正視你手上的力量

我詢問了幾位學員,以及幾位大陸朋友:『當你看了一本好書,你會注意書籍的作者或譯者嗎?』大部份的答案令有心從事專職寫作的人氣餒:『不曾特別注意過。』

如果這樣,怎麼成就一個專業作家呢?讀者看不到高水準的書,自己要負點責任!
這是一個惡性循環。大家都在意書籍的好壞,但是書籍好壞的關鍵竟然沒有人在意。讀者希望有好書看,第一就可以從自己做起:看了一本好書,拿起鍵盤來,隨手寫封電子郵件給出版社和作者讚美幾句。你的簡單動作,會對作者帶來巨大的影響,也會影響你自己往後的閱讀品質。我向你保證,出版社這邊絕對很重視來自讀者的讚美與批評,好作者可能因此獲得比較高的版稅,比較尊重的對待。作者這邊,知道自己的作品帶給別人幫助,絕對是再執筆的強心針。

當整個閱讀環境,乃至於出版環境,在選書方面能夠以創作人為中心,而不是追求膚面的選題、綱要、時效、背景,這代表一種進步。我在回覆臺灣出版社的選書徵詢時,絕不會只因為看了某本預告書有什麼很棒的題目就舉薦該書。但如果是我所信賴的作者,我敢光看書名就推薦。

我還要舉一個意義深遠的例子。Inside Visual C++ 這本書,向來被業內公認為某一學習型態的經典。不論在臺灣或大陸,這本書的各個版次都有中譯本。非常有趣的是,不論在臺灣或大陸,本書都有某個版次的翻譯水準特別突出(臺灣是侯捷所譯的第三版/眳p,大陸是潘愛民先生所譯的第四版/清華),導致讀者寧願捨棄新版次回頭詢問舊譯本。這在汰舊換新如浪滔沙的資訊領域中,實在是一件令人拍案叫絕的例子。當作(譯)者得以經營個人品牌,讀者也願意接受品牌所代表的質量與價值,便是技術書籍寫閱大環境的一種進步。


●小搏大

大出版社固然有大出版社的優勢,小出版社也有小出版社的彈性。據我粗糙的瞭解,大陸的網上購書似乎尚稱便利,這是小出版社一個絕佳的機會。沒有實體通路,書依然賣得出去 — 只要你手上的貨色夠好。

要讓出版社在程序員之間迅速成名,最快速的作法就是引進一定量的高階外文技術書籍(一定要是真正的經典),選擇不錯的譯筆,投下一年的時間,分頭進行(不是大雜燴式的合譯,是一二人專注一本書,十多本書同時並進)。一年後完工推出,我敢說一定在程序員之間一炮而紅。有人說,程序員市場比起來不夠大,出版社都著眼在初階的、使用者手冊的書籍,不太肯照顧程序員的需求。這是實情,臺灣也一樣。但容我說句話,勸勸這些少根筋的經營者:出版社並非愈大愈好,而是愈專愈好。你喜歡經營一個小而美、人人尊敬的出版社,還是喜歡經營一個大而無當,產品無關痛癢甚至被內行人嗤之以鼻的出版社?一個賺不到回頭客只能用書海戰術騙騙外行人的出版社?就商業利益而言,一個大小 100 的餅,分得 1 份,和一個大小 20 的餅,分得 5 份,誰的獲利高?

眾人盲目地爭食大餅,結果每人爭到一些屑屑,這就是臺灣和大陸出版界的普遍情況。花點心思,可以獨享一塊小餅,為什麼沒人肯幹咧?

最近大陸出了 Design Patterns 中譯本(聽說陸續還要出許多名著中譯本)。雖然我還沒看過譯本,不知品質如何,但光就本書的出版,及其背後代表的意義,包括遠見、魄力等等,我認為臺灣丟人了。臺灣到現在還沒有 Design Patterns 這本重要書籍的中譯本。商人的算盤滴滴答答響,聲音太大,完全遮掩了程序員的心聲,也遮斷了一條可以同時獲得名聲和利潤的機會。

-- the end