頭兩天為生計所迫,改別人寫的代碼改得頭疼,終於忍無可忍,推翻了重來。回頭看看,從來米國上學那天起,寫代碼已經寫了二十多年,其間所見的怪事怪人,算起來也真不少。
到矽穀後的第一個上司是個學硬件出身的英國人,他的口號是:代碼誰都能寫,代碼攜帶的技術才是真正有價值的。他雇用的一個硬件工程師,根本沒有FUNCTION的概念,兩百行就能解決的問題,他弄出了一千多行,裏邊大部分是重複的代碼。那時候麵向目標技術還沒誕生,但是他至少應該有點模塊的概念。此公的另一絕活是變量名都用得特神秘:XYZ用完了,便是ABCD,要不是我們逼著他加上了IN-LINE COMMENTS,誰也看不懂他那充滿XYZ的天書,他還振振有詞:短的變量名占內存小。這是1992年,幾千個BYTE就算大內存了,我們一時還真駁不倒他。
蘇聯人的教學方法和教科書組織影響了我們至少兩代人。我們的教科書總是以係統的、結構嚴謹的方式出現的。目錄本身就是一個大綱,教學大綱基本就遵循目錄。曾經有幾個懶蛋老師,就是這麽做的,抄目錄給我們。到了美國,我才發現,目錄完全可以以另一種麵貌出現。一本程序員熟知的書,Programming Pearls的目錄就是這樣,讓人完全不知所雲,徹底淹沒在程序設計的汪洋裏。請看:
Column 1: Cracking the Oyster
Column 2: Aha! Algorithms
Column 3: Data Structures Programs
Column 4: Writing Correct Programs
作者本人可能對程序設計概念很清楚,也不是成心讓讀者墜入五裏雲霧之中,隻是不喜歡板著麵孔教訓人式的係統方法,就別出心裁地弄出這樣一本藝海拾貝式的拚圖遊戲。可憐我們這些初學者,隻好跟著他老人家瞎子摸象,好在堅持不懈地摸下去,終將摸遍象身上的每個部分。
循著這樣的教學方式,我的美國同事把藝海拾貝也帶到工作場合裏來,結果隻能是一盤毫無頭緒的意大利麵條。
大約在1999年,我見到了平生所見最漂亮的代碼,是兩個莫斯科大學物理係的博士共同寫的。巧合嗎?當然不是。隻有我們的“老大哥”才能寫出那樣的代碼,也隻有我這個“小弟弟”才能欣賞它。那段程序美極了。標準的自頂向下的設計,從一個樹根開始,分出兩三個樹叉,然後再分,變量名都是有意義的,加上適當的IN-LINE COMMENTS和文件,非常易於弄懂和維護。他們兩人合作緊密,連FUNCTION名都采用統一的規則,長度都弄成一樣的,眯縫起眼睛來看,一排排的代碼長短劃一,好像一篇漂亮的樂譜。那時麵向目標的技術已經開始推廣,但是那家公司仍舊采用C。我以為,單用C一樣也能寫出漂亮的易於維護的程序,兩個老大哥就是明證。
然後麵向目標的罐頭盒打開了,什麽蟲子都跑了出來。有些人天生就缺乏係統性和組織能力,可惜這些人也牙縫裏夾著麵向目標的菜葉混進了程序員的隊伍。結果就是脫褲子放屁的一大堆CLASS的定義,毫無用處的FUNCTION名OVERLAPPING,定義了卻從來不用的OPERATIONS,庸才穿上了麵向目標的外衣也還是庸才,隻是危險性更大了。