第二卷
第八章 年度最佳

※※※
由於機器嚴重缺乏,范含不得不勸導所有人把大量時間花在靜態走讀檢驗程序代碼上面,只有自己確認無誤了,再上機調試。不過這一點並不是不能被接受,畢竟這個時代,還是認為機器運行時間比程序員的時間重要,許多人平時都是這麼寫程序的。半夜三點鐘,進入由一個連的士兵保衛的建築物,像接受領袖接見那樣對當值的計算機管理員點頭哈腰,等待他漫不經心的把卡片塞進機器……這是當時普遍的做法。范含曾經聽母親說過,當年她在大學裏面,用的就是穿孔紙帶,還不是卡片。半夜去上機的時候,經常每轉過一個彎就能聽到一聲大吼「口令」!每個拐彎的口令還不一樣,回答稍微慢一點,就能聽見拉槍栓的聲音。她的一位女同學第一次去上機,就被槍栓聲音嚇哭了。
「唔……」范含嘴腫得說不出話。
看起來這麼搞好像是閉門造車,實際上不然。
好幾次了,藍藍給范含的杯子里續水,范含就會半途而廢。因此而發作的無名火也不在少數。只不過,范含心裏明白人家正是為了自己好,況且自己這種特殊情況根本不是常人能理解的。每次發火之後,都在第一時間就衝過去,摟摟抱抱,親親摸摸,好生道歉一番。
最後一種,就是混合模式,這才是有蘋果特色的顯示方式:屏幕的最底下五行用來顯示文本,上面則是圖形。這種方式對於互動式的圖形操作相當方便,實際上這種方式用得比全屏方式還要頻繁,范含沒什麼理由去掉它。
本來就沒什麼大問題,一旦不用工作,加上多打糖水,身體自然就恢復了。
范含現在呆在一間病房裡面,這裏明顯的出口是「Out」。
按理說,這些人都應該是仙童公司寶貴的財富。只不過,「一朝天子一朝臣」的慣例可不僅僅在中國有效,也不僅僅在政界實行。老婆是別人的好,孩子還是自己的好,不管這個孩子是什麼樣的歪瓜裂棗都無所謂。目前的仙童,充滿了新老闆自己的親信,除了被趕走的員工,就算剩下的那些人也都個個人心思動。
「說實在的。」奧爾森低聲說,「見著你的設計之後,DEC里的別人就不打算繼續搞PDP的這幾個系列了。」
至於「忘了」,那是另外一回事,並不是原來那些存儲信息的神經細胞失靈,而是大腦失去了和這些細胞的聯繫,「通路丟失」,這就是現代神經醫學家們的新發現。
「到底是什麼毛病啊?」教授甲問瑪麗。
真正的功能都是一些科學計算,按照現在這個項目的規模,如果全用彙編開發,速度慢得令人無法忍受,主要是讓范含無法忍受。再說了,科學計算要求的是準確性和精度,主要在於對演算法的選擇和實現上,如果程序員大部分時間都用來琢磨如何與處理器直接對話,有點捨本逐末。
當初瀑布模型之所以興起,是因為那時候的計算機行業都是賣方市場,市面上有什麼東西,客戶就只能用什麼東西。具體地說,就是項目做起來和產品一樣,廠商基本上都是自行決定產品的功能,然後拿出去賣。當然,在決定的同時,肯定會做一些市場調查,或者,如果是個項目的話,徵求一下用戶的意見。
發布這些文檔的作用在於,吊一弔數學家們的胃口。雖然范含嘴上說,完全可以根據需要分別購買,但是心裏明白得很,只有公司才會這麼干,因為業務領域只有那一塊。作為一所學校,什麼專業的都有,當然會……一鍋端了。
「知道知道,我太知道了。」范含繼續解釋,「誰讓你名聲在外呢?」
咳……
「咳……」教授甲出門的時候,多看了藍藍一眼,搖搖頭,「年輕人……」
剛過了一個禮拜,又住院了,接著打吊瓶。
光靠吃飯看來是頂不住了,范含只好成天喝糖水。
神經細胞畢竟不是晶體管,是靠生物化學效應調節細胞內外電解質濃度保持狀態的。單獨拿出來一個屁也不是,只有大量神經細胞組合到了一起才行。
「唔……」范含回頭幽怨地看了藍藍一眼,那眼神兒,跟第二屆「斯蒂克」杯浣熊雕塑大賽優勝作品一模一樣。
就算是電子產品,也會有錯誤出現,對付這種錯誤的辦法就是「糾錯」。最常見的方式就是「冗餘」,多保留幾個備份,需要的時候加以對比,少數服從多數。就像拳擊比賽需要三個裁判那樣。
具體流程是這樣的:
總之,到目前為止一切順利。
即便如此,長時間察看幫助仍然累得很。
這些功能需要寫大量的代碼,很難保證不出錯誤。彙編語言應該是產生業界第二難以維護的代碼的語言,排名第一的當然是純機器代碼了。不說提高開發效率,就算是為了今後給自己少找點麻煩,也必須使用高級語言開發。
由於這是頭一次大規模全面應用單元測試,范含必須在旁邊不停的指導,才能保證這些測試代碼本身也是正確的。
想當年,1984年,Matlab 1.0剛推出的時候,不過才實現了幾十個函數而已,已經轟動一時了。那會兒的Matlab,不過是著名的線性代數函數庫Eispack和Linpack的簡單包裝而已。雖然用C語言重新改寫了核心,也並沒有本質的突破。這也難免,無論什麼軟體的第一個版本多半都會這樣。
「咳……」教授乙看了一眼藍藍,嘆了口氣。
4、將此文件抄出來。
其中最常見的就是文本模式,在黑底綠字的二十五行八十列的顯示器上分行顯示文本。這種模式肯定是要的,只不過必須做一點小小的修改。現在一般的機器中,最上面滾出屏幕的文本行就消失不見了,或者說屏幕緩衝區一共就二十五行,循環使用。但這次不行,很可能一個函數的輸出就是幾十行,還這麼搞的話,連結果都看不全。如果用類似「More」工具那樣的分屏輸出,用起來不方便,並且還是做不到同時察看完整的結果。至於Matlab本來實現的就是類似Windows上面命令行窗口的那樣,緩衝區加大,可以前後滾動。當然,滾動條是沒有的,只能允許用戶使用「PgUp」和「PgDn」兩個鍵來回翻頁。
「其實我也等不了那麼久。」奧爾森笑著說,「我也想看看你https://www•hetubook•com•com還能幹出什麼事兒來。」
范含當年用各種漢字系統的時候……不管是最初的吳曉軍2.13,CCDOS,還是後來的UCDOS……就深刻的記住了「Alt」加數字鍵是「切換輸入法」,全拼、雙拼、五筆字型什麼的。等到開始用Windows的時候,一時間對於「Ctrl+Space」的切換方式很不適應。這種方式是從繁體中文Windows照搬過來的,台灣人民也許習慣了,但是比起日本人來說,還是麻煩不少。再說了,原來的Alt+數字的方式難道就不麻煩么?
2、在腦袋裡啟動一個記事本,將詞法文件的內容輸入,另存為「Math.l」文件。
「僅僅是太累了而已……」范含低聲說,同時有意無意地看了旁邊的藍藍一眼,「方方面面都得照顧到啊……」
「你真是……」教授乙感動得熱淚盈眶,「在如今這個物慾橫流的社會裡,像你這樣還有一顆赤子之心的人太少了……」
這也太傻了!
「是啊,一點點改進還來得及。」UCLA數學教授丙接著說,「其實儘管下了訂單,但是我們心裏也沒有一個特定的目標,只要比現在的機器好用那麼一點兒就成。」
「臉紅什麼?」藍藍突然問范含。
最令人鬱悶的就是「背誦」這一段。
作為Matlab的一大特色,就是林林總總的工具箱。幾乎所有的領域,都有相應的工具箱推出。有的是MathWorks公司自己的產品,有的是第三方公司的產品。這些工具箱極大地擴展了Matlab的應用範圍。
雖然,由於內存原因,許多函數算不了太大的矩陣和太複雜的變換,但是范含特意留出了許多外部介面,可以直接連接一些專用硬體。比如有一台專門用來算積分的機器,主要是模擬太陽系行星軌道的。總的看來,這些「歷史局限性」根本不是機器本身的原因,許多作為用戶的數學家都主動替范含開脫責任。
平安夜了,聖誕節了,范含名利雙收,身體也恢復了,於是故態復萌,覥著臉向藍籃求歡。
本來應該交給他們的還有一件,應該算是最重要的工作,就是系統核心的編寫。數據在內部如何組織,以及如何和用戶交互。這些工作范含決定自己來干,主要還是為了保險起見。
「都忙什麼呢?」范含問。
「前一陣怎麼都不理我?」藍藍問,「嗯?」
最頂端是范含一個人,全權負責所有開發事宜。後面的括弧裏面是藍藍,當作范含的助理。
「不行啊……」范含低聲說,「我的工作是最頂端的,我晚一天,下面不定會晚多少呢……」
「怎麼又黃啦?」藍藍逼近一步,接著問。
「多少?」奧爾森在電話裏面大喊。
需求分析是略不過的,范含自己明白不等於別人也明白。不得已,把一些Matlab的文檔裏面自賣自誇的內容都抄了出來。等到寫完了,發現,不對,這些不是需求。沒辦法,懶得重寫了,就讓藍藍把口氣變一下:要是有了這些功能……那該多好哇。
「您可能誤會了……」范含低聲說,「我並沒有……」
整套函數是一個整體,不光每個函數必須有完整的輸入輸出,並且工作良好;還必須和別的函數配合起來使用,在允許嵌套的情況下仍然可以工作良好。
對范含而言,到了「概要設計」階段項目才算真正開始。
鑒於系統的特點,所有變數都是矩陣。簡單地說,一個大號的指針列表,每個指針存儲一個矩陣結構,稍稍維護維護就能應付過去。性能問題以後再說,先把東西搞出來最重要。
等到了詳細設計階段,范含和三十多個學生並肩工作,必須確定每一個數學函數的功能和原型。這時候才最考驗人。
「用不著那麼著急。」奧爾森說,「就算是IBM,兩個月寫完這個系統也幾乎不可能。」
1、必須首先編出一個詞法文件,然後徹底背下來。
自己手寫也沒什麼大不了的。
到頭來只好板起臉,拿出「作風簡單粗暴」的法寶:「你們就算把Ctrl和Meta都從兩個改成一個也得把這兩個鍵加上」!咳……引起「幹群關係緊張」那隻能說遺憾了,自己要是再不操心,這種事就沒誰肯操心了。
「不夠的你自己去找吧,我實在是無能為力了。」奧爾森說,「再說,FOR也應該找點人了,估計以後你的花樣不少,別等出了什麼事再臨時找我要人。」
關於瀑布模型的那一套做法,范含那個時代科班出身的朋友們應該可以倒背如流了,誰讓國內的教材還是在講這一套呢?不外乎是那麼幾步。
就算是到了抄庫函數那一段,也不輕鬆。
在這個模型里,軟體開發的各項活動嚴格按照線性方式進行,當前活動接受上一項活動的工作結果,實施完成所需的工作內容。當前活動的工作結果需要進行驗證,如果驗證通過,則該結果作為下一項活動的輸入,繼續進行下一項活動,否則返回修改。
至於連接外部設備,比如印表機什麼的,都是他們分內的事,用不著范含布置就知道自覺主動地去干。為了保險起見,范含還是把這一部分寫進設計中,為了照顧老員工,特意允許他們邊干邊修改文檔,全乾完了再寫自己也會裝作沒看見。
最後只留下了二十個,都屬於「資深彙編程序員」。讓范含驚訝的是,這些人都在仙童公司干過。現在的仙童,雖然在法律上還存在,不過比起以前已經是面目全非了。隨著幾位創始人的逐漸退出,新領導班子的產生,原來許多老員工都被掃地出門。
這一部分就是那三十多人操心的事了。他們負責把每個數學函數拆成若干Fortran函數,寫出函數原型。然後再走讀幾遍,保證沒有明顯的錯誤。
「造處理器呀。」奧爾森說,「剛開始是趕工,先把你要的干出來了。現在正造最後那個呢,比前兩個加起來都複雜。」
人腦的記憶應該說是一種「有損記憶」,比如人臉,比如圖像,都是直接找到最突出的特徵牢牢記住,具體細節不管了。碰到必須精確到每一個bit的情況,多半不靈。
「時不我待呀……」范含低聲說,「全世界三分之二的數學家還生活m.hetubook.com.com在水深火熱之中……呼……哪怕能提前一天完工……哈……我們親愛的數學家們就能提前一天擁有這種強有力的科研工具啊……呼……哈……一想到這裏,我就渾身充滿幹勁啊……」
開始制定具體的數學函數列表的時候,碰上一點麻煩。
「精神煥發……」范含有氣無力地回答。
大腦也一樣,只不過這種冗餘的規模大得多。每當我們下定決心記住什麼東西的時候,靠的就是「背」,冗餘會自動產生。
要是一次兩次還行,隨著工作的進展,兩個大塊頭程序只能成天開著,范含的身體狀況越來越差。
與用戶交互的部分主要就是一個解釋器,負責解釋用戶輸入的每一條語句或命令。這要是擱以前,還可能會覺得很費事。現在么,既然C都有了,那麼Lex和Yacc自然就可以用了吧……呵呵呵……嘿嘿嘿……
還有許多,一時間都看不過來。
「你就不用謙虛了。」教授丙說,「現在好好休息就成了。」
不過平心而論,這些工作在目前也就只有范含能幹了。作為世界上第一個C程序員,某種意義上是當前世界上唯一的一個真正的C程序員,這些工作恐怕是躲都躲不開的。
3、然後啟動Flex處理這個文件,生成「.c」文件。
「那你們搞什麼?」范含問。
不管那種方式,總是會有些場合引起熱鍵的衝突,這一點正是范含所儘力避免的。歸根到底,當初的華人們根本沒有選擇的餘地,你愛用不用,這一點鬱悶倒是兩岸共同的。現在既然「一朝權在手」,就算為了同胞們著想,范含在這兩個鍵上面也會「便把令來行」。
作為「總設計師」的范含,這會兒就難受了,經常需要同時打開Matlab和Mathematica,對照著看。
「恭喜恭喜……不過……我的日子就不好過了。」范含說,「加上今天訂購的這四個,一共才八個,差遠了。」
可行性分析可以略過,作為已經接下來的項目,沒有「不可行」這種事,除非一開始就覺得不對勁,直接擋掉。但是文檔總得寫,范含就把這一部分和「計劃」階段的文檔和並在一起。其實計劃也沒什麼,或者說范含說什麼就是什麼。基本上就是描述了一下體繫結構,劃分了功能塊,再估計一下工作量。自己先寫個提綱,剩下的讓藍藍去隨心所欲的補充吧。
這差事還真不是人乾的。
藍藍委屈極了。
※※※
到了說明會結束,主持人對於范含的稱呼也從開幕式的「著名作家」改為閉幕式的「知名數學家」了。可以說,范含藉此機會混進了學術圈。沒想到,當年在學校里下定決心「打死我也不」當數學家的自己,如今「可找到組織了」。
「你們自己的機器就不管了?」范含想,可別把PDP系列耽誤了。
光是機器的64k內存就裝滿了兩個機櫃,這個時代的內存還是磁環,體積特別的大。真正的主機也佔滿了一個機櫃,裏面一層一層的全是板子,除了中間一塊上面插著一堆晶元組成的處理器之外,剩下的都是ROM。所有的ROM大約有1MB,這在目前來說相當大了。另外還有一個機櫃,裏面也是一層一層的板子,只不過上面都是空的,留著以後升級用。
范含這次就到了需要「死記硬背」的時候了,把比起唐詩宋詞來毫無美感可言的代碼背下來,真是一種折磨。
本年度最佳硬體……FOR的「F-16」架構(就是68k啦,范含起了這麼一個名字,表示FOR公司16位的處理器)。
產品演示轟動一時。
現在的所謂「程序員」,幾乎專門指代「彙編程序員」。范含幾乎沒什麼好問的,自己的知識結構和他們相差太遠了。別說軟體工程,就是編碼規範什麼的都一問三不知。演算法倒是懂一些,不過大半都是如何榨取最後一個bit之類的技巧。
招聘可是件苦差事。
「一般這麼大規模的項目都用多長時間?」范含問。
顯示問題提出要求就成了,具體細節肯定會交給專門人士處理。
別說打個盹,睡個覺,就是一走神都會玩兒完。
「怎麼這麼緊?」教授甲大吃一驚,「我以為需要一兩年呢?」
就他們的水平而言,在FOR之內佔據一席之地那是肯定的。按照范含的經驗,有過彙編開發經驗的人,對於系統內部運行的了解都會相當深刻。將來稍微培訓一下,就可以直接使用C語言編碼,效率仍然比起那些從沒接觸過彙編的人強得多。
3、拿起另一張紙,開始奮筆疾書。
尤其是,范含還特意強調了,這隻是主體部分,還有幾十個「工具箱」正在開發中。
「那時候身體實在不好么。」范含解釋,「你又不是不知道。」
范含了解了背景之後,就已經下定決心留下這批人,然後再通過他們,勾引一下仙童前僱員裏面的其他人。物以類聚,人以群分,他們推薦的程序員,水平肯定不會太差。
「撐死了再給你四個。」奧爾森說,「我們這邊也忙得很,公司裏面一個閑人都沒有。」
「謝謝您的提醒……」范含低聲說,「但是……」
「事情……不是這樣的……」范含掙扎著說出了一句大實話,「這一段我一直在禁慾,並沒有……沒有什麼過於親熱的舉動……」
本年度最佳Leader……范含先生。
「來不及呀……」范含低聲說,「按照進度應該在今年聖誕節之前完工……呼……如果用戶對於樣品沒有什麼修改意見的話……哈……轉過年來立刻正式銷售。」
「怎麼會是這樣?」教授乙問。
范含是不得已才用這招的,每次都是爭分奪秒,剛記住就拚命地往腦袋裡面塞。
※※※
下面第二層分作兩塊。一邊是DEC的八位工程師甲乙丙丁戊己庚辛,負責開發系統底層代碼。另一邊是全職的三十多名UCLA學生,負責做數學題,把實現一個Matlab的函數的工作分解為一堆Fortran函數。
「那怎麼辦?」范含說,「我希望年底能交貨。」
「那你怎麼還故意讓我背黑鍋?」藍藍繼續拷問,「這一陣子我多委屈你知道么?嗯?」
「現在你可能覺得,累點兒沒什麼,挺一挺就過去了。」教授甲語重心長的對范含說,「等你和圖書到了我們這把年紀,就會明白身體健康的重要性了……」
范含給這台機器命名為「MathStation」,數學工作站的意思,縮寫為「MS」。
范含躺了兩天,出院了。
在外人看來,就是:
范含自己提出的方案基本上是對美式鍵盤的一點點更正。
為了確保一次成功,范含決定,在這個項目中率先應用軟體工程,進行規範化開發。現在的FOR不像是IBM,承受不起失敗的代價。就算是項目延誤,追加成本過大,都是范含和奧爾森所無法接受的。
最底下的第三層也分作兩塊,一邊是剛剛僱用的二十名正式程序員,在八名工程師的帶領下寫具體的代碼。另一邊當然就是一百多個打工仔,專門拿Fortran語言填空。
人力資源既然解決了,下面的問題就是如何用這幫人。
本年度最佳產品……FOR的MathStation。
首先,增加了兩個輸入法相關的鍵,一個用來切換輸入法,另一個用來切換全形和半形字元。這兩個鍵目前根本派不上用場,但是范含還是堅持加在上面。日語鍵盤上面就有這兩個鍵,其作用對於東亞用戶來說不是一般的重要。人家日本人當年覺得需要,就加上了,日本用戶就因此一直爽到現在。倒是華人,至今都在用著「美式鍵盤」。
很快,本項目的組織結構圖就已經制定好了。
※※※
實際上不可能,永遠無法要求客戶對於軟體的理解和開發商一樣。需求提不出來或者提出的不對,這很正常。為了爭奪客戶,自然會有人採用更靈活的開發方式。從另一個角度看,做項目和做產品不一樣,應該是提供軟體服務的意思。客戶有權利隨時隨地改變需求,開發一方的權力僅僅是對於這種改變提出合理的要價而已。
「不好不好,我簡直是道德敗壞。」范含說,「本來其他人也都知道的,只不過這次我跟他們事先說了點什麼。」
規模這麼大的項目,肯定不是個人英雄主義或者小作坊主義就能搞定的。
「用這第三種CPU設計新的計算機呀!」奧爾森說,「不過名字可能還得叫作PDP多少多少什麼的。」
距離聖誕節還有幾天,足夠各大專業周刊及時調整自己的報道內容了。
「這麼說,你現在感覺還可以嘍……哎!」藍藍眼瞅著范含摔倒在地。
「是啊……」范含低聲回答,「進度落後了不少,我正著急呢。」
最後,UCLA裏面可以全職工作的學生大概有三十多個,都是他們的導師批准給范含幫忙可以算作學分的,時間是到聖誕節為止。這部分人范含也給了和FOR專職員工同樣的待遇,算上他們的導師抽走的傭金和介紹費,總的來說范含反而還多掏了一些。
許多外地的數學家都在第一天得到了消息,第二天趕緊訂機票飛過來。到了第三天,也就是最後一天,簡直是人山人海,就算是專門的數學大會,來的人也沒這麼齊整過。
按照安排,打工仔們都是計件付費,每塊的工作量早已被那三十多人平均化了。一般來說,完成兩件事才算是「一件」。
歷史上第一個正式使用並得到業界廣泛認可的軟體開發模型應該是1970年Winston Royce提出的「瀑布模型」。這個模型將軟體生命周期劃分為制定計劃、需求分析、軟體設計、程序編寫、軟體測試和運行維護等六個基本活動,並且規定了它們自上而下、相互銜接的固定次序,如同瀑布流水,逐級下落。
7、然後啟動Bison處理這個文件,生成「.c」和「.h」兩個文件。
「那也沒必要這麼拚命吧?」UCLA數學教授乙說,「其實用不著特別地趕進度,晚半年就晚半年。」
眼瞅著缺口太大填不上,范含干著急,只好祭出最後一招:去大學里搜刮廉價勞動力。
「……」教授丙看了一眼藍藍,什麼也沒說。
「謝謝……」范含說。
※※※
最令人意外的,《時代周刊》評選的1967年風雲人物,當然就是……范含了。這一年幸虧沒什麼重大歷史事件發生,矬子裏面拔將軍,拔著了。封面照片就是產品說明會上,范含扶著藍藍勉強站起,臉色蒼白地向觀眾揮手的鏡頭。加上內文裏面對UCLA數學教授甲乙丙以及其他相關人士的採訪,更加烘托出了范含那一不怕苦,二不怕死,戰天鬥地的革命精神。
好不容易,設計階段過去了。經過無數遍走讀,這個方案本身應該沒什麼問題了。下面的問題就是如何實現它。
本年度最優秀開發團體……FOR。
設計到了這裏,就提醒了范含,一定要儘快確定鍵盤標準。目前還是封閉硬體結構的銷售,什麼時候覺得鍵盤不夠用,順手加上一個就行。如果到了後面,鍵盤規格成為標準的時候,再想改可就不那麼容易了。目前的計算機鍵盤都是對於打字機鍵盤原封不動的照搬,還沒來得及有其他想法。范含對此當然是不滿意的,至少,打字機上面絕對沒有「PgUp」和「PgDn」這兩個鍵。
這時候范含可以騰出手來寫解釋器了,不過這個工作也不輕鬆。
「其實沒什麼,就是血糖過低。」瑪麗回答,「范先生現在的身體就像是個黑洞,靜脈注射的葡萄糖很快就會被消耗掉,吊瓶都是連續地更換呢。」
不出所料,FOR包攬了本年度一堆計算機大獎。
所有的函數原型都出來了,彼此之間的依賴性表格也都制定好了,可以確定編寫的先後順序。至於編碼,就讓別人去填空好了,這時候就到了打工仔們出場的「Show Time」了。
沒辦法,BRAM非常不穩定,經常有存儲錯誤出現。
范含並不願意把這些代碼「長期」的記住。倒不是說害怕腦子裡多了些垃圾,而是害怕舊版本的干擾。調試程序代碼都是這樣的,每次的修改很可能僅僅是一個角落的幾個字元而已,相差只有一丁點兒而已。真要是全都記住,自己都分不清誰是誰。范含的腦袋畢竟還是肉做的,在記憶力這方面和普通人一樣,該記錯的就是會記錯。經過了幾次慘痛的教訓之後,范含不得已,只好像周伯通那樣,再把這些東西強行忘掉。
「人家擔心我老是不正經,怕影響項目。」范含說,「我就跟他們說,這次m.hetubook.com.com不一樣,男子漢大丈夫,應該以事業為重,當斷則斷,揮慧劍斬情絲……不過,呃,紅顏禍水嘛,真要是潑到身上我也不想躲開……」
范含從在報紙上打廣告開始,一個月一共面試了三百來人。
雖然自己已經提出了這個「軟體工程」的概念,但是至今並沒有任何應用。既然自己算是「創始人」,就不好意思光說不練。況且,以後的工作比起現在來,只會大不會小,早晚也得有這麼一天。與其到時措手不及,或是痛定思痛之後迫不得已,不如現在主動採用。
說起現在的「Meta」鍵,後來PC鍵盤上就沒有了,功能基本上都是由「Alt」代替。當年有一種Lisp機器,用的是名叫「Knight」的大鍵盤,上面有七個附加狀態鍵:SHIFT、TOP、FRONT、CONTROL、META、HYPER、SUPER。這些都是用來組合輸入字元的。這一點還是范含在學習Emacs的時候了解到的。除了Shift用來輸入大小寫字母之外,別的都沒什麼大用處,Emacs也僅僅用到了Contrl和Meta兩個鍵而已。所以范含也不打算全加上,沒必要給自己添亂。
※※※
首先范含考慮了顯示驅動的部分,就打算模仿原來的Apple Ⅱ型機器上的ROM Basic。那上面有三種模式,范含都打算在這個系統中加以保留。
一般人喝咖啡,喝茶的時候,都是每「Cup」咖啡或茶放上幾「Teaspoon」砂糖。范含不然,開始的時候就是論「Pint」或者「Quart」喝茶,總是放上好幾「Ounce」糖。後來發現堅持不住了,就找個大號化學量杯,每「Gallon」或者「Bushel」白開水放多少「Pound」。一天下來,能喝無數「Gallon」水,上無數次廁所。半個月下來,范含光白糖就買了好幾「Short Ton」。
「說什麼了?」藍藍問,「從實招來!嗯!」
自從1984年Matlab推出以來,已經經歷了無數客戶的檢驗,推出了六個主要的升級版本。現在范含記憶中的Matlab 7,應該說是千錘百鍊。現在的數學家們看起來,絕對是無可挑剔。哪怕自己僅僅實現其功能中的一個小小的子集,也足夠令人拍案叫絕的了。
交給「八大金剛」的第二件工作就是設計鍵盤。
其次是全屏的圖形方式,這個也比較好理解,如果程序運行結果需要畫圖的話,就全屏顯示,看夠了就按個什麼鍵……比方說「Escape」……退出。這個當然也得要。
10、調試,如果失敗,根據情況返回1或5或9。
自然,由於其他工程師全都是美國人,當然無法理解。就算是藍藍,現在也都無法領會這種固執的確切含義。並且范含也說不出個所以然來,除了「保留下來,今後肯定有用」之外根本沒有其他辦法解釋。
特意留出來的空機箱,就是為了這些工具箱預備的。
「那是當然。」奧爾森說,「現在我的日子好過多了。」
就是由於這個原因,我們才經常碰到「記錯了」的情況。正是由於這種錯誤的不可避免,我們人類才會有「靈感」、「創造力」之類的天賦存在。
6、在腦袋裡啟動一個記事本,將語法文件的內容輸入,另存為「Math.y」文件。
所以范含還不至於死機。
范含這次的MS不一樣,基本上所有的Matlab 7的主體部分……就是「教育版」也得賣一萬多的名為「Matlab」的軟體……的函數都得到了實現。除了一些三維圖形函數,限於技術原因做不到之外,剩下的東西簡直是盡善盡美,無懈可擊。
簡單地說,長期記憶就是在下了苦功夫之後記住的東西。除非隔了很長時間,否則這些東西都能隨時隨地的想起來。
至於平時有空就來打工的人那就多了,看得上眼的就有一百來號人,范含給的工資也不算低,應該沒什麼抱怨。這些人基本上都可以當作Fortran程序員來用,負責寫具體的計運算元程序還是沒問題的。
數學程序有一個好處,不做計算的時候消耗的資源並不大,只有啟動計算任務之後,才會開始加重負擔。比如Mathematica,界面就是界面,計算的時候單獨啟動一個Mathematica Kernel的進程,這個東西才用來進行真正工作。
「二百個。」范含回答。
這一階段范含就沒什麼事兒了,主要就是指揮指揮。
這個倒是很好辦的,有UCLA數學系以及後來搭上關係的心理學系的一幫老頭子幫忙吆喝,廣告效應遠遠比真正的廣告來的厲害。老頭子們很賣力氣,也很好說話,據說是「儘管隨便挑」,「看上誰直接拎走就行」,「論斤賣也可以」。
底層的人力算是搞定了,但是范含的問題仍然沒有解決。
差不多就在范含完工的同時,三十多人也搞定了詳細設計那個階段。
瀑布模型在七十年代末就面臨被淘汰,因為其對於用戶提出了不合理的要求,即必須在談判之初就確定全部需求。法律上這樣似乎無懈可擊,如果提出了需求開發方沒做到,自然是開發一方的責任;如果沒提出需求,自然就是客戶的責任了。
※※※
「呸!」藍藍說,「難道你的名聲很好么?為什麼別人都怪到我的頭上?嗯?」
「怎麼搞的?」瑪麗一邊給范含上藥一邊問,「又讓人打了?」
考慮到目前業界的現實,瀑布模型剛好夠用。況且,這種線性思維的模型最簡單,程序員也最容易理解。所以,這一次范含就打算採用「瀑布模型」。因為作為客戶的數學家根本沒有需求,作為開發商的自己倒是完完全全徹徹底底的了解他們的需求。
本年度最成功項目……FOR的范含先生領導的MS項目,只有兩個多月的時間,完美實現范含先生自己提出的「軟體工程」的理論,實在是……@#$%^&。
2、把紙放下,兩眼平視前方,進入僵直狀態。
1、先拿張紙盯著,嘴裏念念有詞。
到了解釋器大概齊能運行了,范含就自己動手改了,不再動用BROM了……媽的,這東西倒是一點錯誤沒有,記得結結實實。
「那就多派人m•hetubook•com.com來,人越多進度越快。」范含說,「這次的軟體大部分都是一堆小功能拼起來的,許多都可以同時進行。」
「好吧,我盡量去找吧。」范含說,「你那邊也得趕快,抓緊時間把人攆過來。」
雖然說Flex比起Lex有了改進,那也不過是不用鏈接詞法庫「libl.o」罷了,標準庫還是要用的。只不過,都是簡單的字元串操作,和標準輸入輸出的那一部分。范含經常在一個根目錄下面啟動「Grep」,然後雙手扶桌發獃,等到查詢出結果之後再去抄出來。
原來還以為可以借鑒一點SciLab的源代碼,後來發現根本不可能,現在連標準庫都沒有,想「借鑒」也得先實現一遍「libc」再說。
「兩三年的都有。」奧爾森回答。
9、打開各種庫的源代碼,把需要的庫函數直接抄出來。
不過,要想精確的記住東西,也不是沒有辦法。
「哈哈哈哈,防冷塗的蠟……」范含已經迷糊了,全憑條件反射回答問題。
8、將這兩個文件抄出來。
「哪裡哪裡……」范含低聲說,「您過獎了,我只是在干我應該乾的事而已……」
具體操作就不用提了,Matlab的字元界面方式,見過多少次了,范含看得直打哈欠。
「我就搞不明白,現在洛杉磯還有誰敢打你?」瑪麗接著說,「別說警察,就是地痞流氓碰上你都躲著走,生怕一不小心成了反面主角,千夫所指的滋味可不好受。」
雖然目前還沒有開發出來,不過范含事先早就準備好了相關文檔,幾乎所有的工具箱都有簡介和函數列表。這對於范含來說是小菜一碟,對於其他人就不一樣了,誰都知道,構建一個完整體系的難度有多大。
范含的計劃里,這一部分都是參考Matlab和Mathematica的文檔。雖然這些東西BROM裏面都有,不過必須啟動應用程序才能看到幫助,單獨的文檔文件都是放在光碟裏面的,不在腦袋裡面。
砰!
「怎麼搞的?」UCLA數學教授甲問范含,「真是忙到這種地步嗎?」
這一塊乍看起來比較簡單,就是把工作分成兩部分:一部分是打算交給學生們的工作,編寫數值計運算元程序代碼;另一部分才是工作的重點,如何在內部使用這些子程序,以及怎樣顯示出它們的結果。
※※※
本年度最佳軟體……FOR的MathStudio(就是MS燒成ROM的配套「軟體」)。
1967年12月15日,產品說明會在UCLA正式召開。
指望他們幫自己設計系統肯定是不行的了,他們最多也就是范含眼中「Coder」的水平。但是估計在已經寫好子程序原型的前提下,把程序體填滿的本事還是有的。
剩下的就是兩個Windows徽標鍵和一個菜單鍵如何處理了。說實在的,沒有保留的必要。這年頭誰都想儘可能的多給自己留個商標,不光微軟,蘋果也一樣。在蘋果機鍵盤上面,就有個「蘋果」鍵,作用和Windows上面的Contrl鍵一樣。真正的Control鍵倒是和滑鼠左鍵組合在一起,冒充右鍵來用的。(蘋果的標準滑鼠只有一個鍵,不過如果外接一個雙鍵加滾輪的也可以用)……總之,最終決定,都不要,騰出來的空間剛好可以放下兩個輸入法鍵。
「噢……」教授丙不好說什麼了,「那就……多保重身體吧……」
5、必須繼續編出一個語法文件,然後徹底背下來。
況且,記憶還分為長期記憶和短期記憶兩種。
至於短期記憶就更簡單了,就像我們打電話查電話簿一樣。對於不熟悉的號碼……看一眼,記住,撥號,嘮嗑,掛電話……然後絕對會忘掉。
※※※
預料之中,這些都是預料之中。
第二,就是根據另外一個函數的說明,編寫其單元測試代碼,保證檢查所有可能的輸入、輸出、各種邊界情況等等。這些單元測試代碼,就是一個函數「正常運行」的標準。
短期記憶么,就得全記住。要想一段一段地背,一段一段地塞進腦袋裡,那是不可能的。因為不管是「背」還是「塞」,都是用人腦的記憶而已。要不然的話,往往記住後邊的,就把前面的忘了,正如狗熊掰棒子一樣。
「我可等不了那麼久。」范含說,「還有好多別的事要干呢,不能老拴在這一檔子事兒上。」
往後每過一個禮拜,范含就歇菜兩天。
「呵呵,這事兒你自己看著辦,FOR也有你一半。」范含說,「授權什麼的搞得漂亮一點,錢倒是其次,主要是以後干點什麼其他人別在扯後腿就行。」
在范含印象裏面的「程序員」,就應該是使用高級語言寫代碼的那些人。現在這個時代,真正的高級語言程序都是由需要的數學家們自己動手寫的。真要是專門去找這樣的「程序員」,根本就找不到。
來醫院看望的人倒是絡繹不絕,幾乎每個人都是先看看藍藍,再拍拍范含:「注意身體。」
「我會好好休息的……」范含低聲說,「爭取能早點出院,好儘快投身到熱火朝天的開發工作當中去……」
「我從哪兒給你找那麼多程序員去?」奧爾森說,「DEC也沒那麼多。」
另外,由於開發模型是線性的,作為用戶只有等到整個過程的末期才能見到開發成果;而作為開發者,早期犯的錯誤可能要等到開發後期的測試階段才能發現。這些固有的缺陷在後來的業界形勢下越來越讓人無法忍受,最終導致該模型被淘汰。
「作為過來人,我忍不住要提醒你啊……」教授丙語重心長的對范含說,「雖然說工作生活都要照顧到,但是有時候還是有主次之分的啊……」
大約12月初,所有工作完成,剩下的就是等硬體人員燒ROM,造原型機了。
※※※
「你以前的事迹我們大概也了解了一些。」教授乙語重心長地對范含說,「什麼事情都要把握一個分寸啊,一旦過度確實是對身體有害的啊……」
……
第一,當然就是填滿一個函數體,保證其能夠正常運行,通過測試。
這二十個人,絕對就是將來FOR的中堅力量,范含都給出很高的待遇,估計一時半會兒不會有跳槽的打算。等到熬過了這一陣子,FOR的發展前景漸漸明朗起來之後,估計他們就更不會有跳槽的打算了。
上一頁