最近偶然有個機會與朋友聊到學習程式設計與承包專案的問題。我承包的專案通常都是高難度的,而且大部分發包者都很趕時間,因此承包專案需要很大的勇氣來面對很大的挑戰。

我第一個專案是在初學APPLE II 的時候,在環台電腦展示中心透過他們介紹接到的案子,委託者是曉園出版社。案子內容是圖書的進銷存管理,主要是打出貨單及對帳單,以現在的眼光來看,那是 一個很簡單的東西,使用現在的工具可能一個小時就做好了。但那時候的開發環境非常簡陋,使用48KB的APPLE II 電腦主機配備兩台各140KB的軟碟機。要在上面處理幾百筆的圖書資料才是挑戰。剛開始用APPLESoft BASIC開發,光是索引檔就可以讓人睡著,更不用說打出貨單。後來我修改APPLE II 的系統及BASIC的解譯器,使用6502的組合語言作索引,解決部分問題。不久,市場上出現了128KB的RAM 卡與320KB的軟碟機,我又修改了系統BASIC,將APPLESoft的變數對映到兩張128KB的RAM卡上,如此就可以用BASIC作流程、用組 合語言作索引,將大部分的資料從320KB的軟碟上一次讀入。只要不停電,這已經是全世界最快的個人電腦了吧?

可惜後來去當兵而失去第一波的賺錢機會。等到退伍,8088的主機已經出來,但只有4.77MHz的速度,RAM大了些,但跑起來很慢,因此APPLE II 還是有機會透過曉園出版社的老闆娘游小姐介紹,又賣了兩家出版社,我記得其中有一家是道聲出版社。

後來仲鼎出了一款給APPLE II 專用的顯示器,解析度很高,因而又給曉園更換螢幕。當時她們有很多家門市,需要設計一套銷貨統計,把書局營業的收銀機單據輸入電腦統計,我又使用 BASIC加組合語的技巧開發出一套具有如同excel試算表一般的操作表格。在當時也算是創舉。因為那時還沒有試算表。

後來自己成立奇易資訊,認識了一家「五加二」電腦公司,老闆劉維鯤,當時他拿到一台使用Z8080的CPU所製作的手提電腦,名「DundleWare II」(或Bondware II?記不清楚了)。當時那台手提電腦的長相、大小與品質,都不輸給現在的notebook,只差沒有圖形界面。當時五加二有個國安局的案子,聽說與軍隊 的演習有關,主要是研究戰爭時使用電腦通訊的可能性。因為打仗時使用語音通訊很不方便。

那台手提電腦使用CP/M操作系統,沒有中文,五加二委託我開發一套中文系統、與一套文書編輯器及modem通訊軟體。而且將通訊程式嵌入系統當中。當時 的modem是按鈕式,使用專線,兩端的modem必須同步按下才能接通。我的程式在背景偵測modem是否接通,modem是透過rs232連接,因此 只要rs232有信號即可通訊。主要功能:雙方可以在使用任何軟體的情況下,直接在螢幕下方輸入中文字與對方溝通;對方如果有來信息,也直接顯示,不會打 斷軟體的操作。現在想起來,很像msn或skype之類的軟體。聽說那場試演很成功,得到高層的重視,也因此拿到預算,但卻因為預算太多,被一個大廠搶 走,造成五加二很大的損失。

我從開始學電腦以來就開始接案子,因此接案經驗豐富。但我最得意的兩個案子,一是上海英業達的一點通DrEye(譯典通)轉移平台、二是Sony相片印表機的驅動程 式。雖然還有很多案子,但一時也談不完。我那朋友聽我談到最早期的一些案子,都是用組合語言,又能迅速完成任務,問我是怎麼辦到的?我說,方法而已。每件 事情都有解決的方法。方法是最重要的關鍵沒錯,問題在於「方法」是什麼?到底是懂了才能想到方法?還是想出方法才算懂?

讀過研究所的人都知道,有門學問叫做「研究方法」。研究方法教你如何做研究、如何寫論文。因為研究方法已經很普遍能夠取得,我不需要多費口舌。但真正解決 事情的方法,則因人因事而異。很多研究所畢業的人仕,做事一樣沒有方法,因為現實與學校畢竟不同,當一個人面臨挑戰時,心理頭想到第一件事可能不是「怎麼 做」,而是「怎麼辦」。通常考慮「怎麼辦」的第一個念頭,不是把它做好,而是怎麼逃避。我的思考邏輯有些不同。

我的邏輯是:要不要做、想不想做好它?如果沒興趣,就不要浪費時間。如果有興趣,就不要逃避,好好想一想:怎麼做對自己最有利?很多人的邏輯離不開「爭功諉過」的念頭,這些人的邏輯是「混水摸魚」對自己最有利,這樣很難機會走在別人前面。

當你想要做好一件事,步驟很重要。每一個步驟都要清楚知道是不是自己的能力範圍。假如我要接一個案子,我會花點時間思考,這個案子會用到哪些技術?這些技術我會不會?能不能取得?有沒有盲點或瓶頸?所謂有沒有盲點,就是指技術雖然取得,但邏輯上可能造成失敗(瓶頸)。

「邏輯上」是指什麼呢?任何一個程式都可以被細分成很多小程式,每一個小程式都可以用實驗的方法驗證。也就是說,一個很大的程式,不需要等到做好才知道失 敗。在開始之前,經過分析就可以找出盲點,以專業的術語來說,就是所謂的系統分析。系統分析當中最重要的是第一步驟,是合理化。例如你要從台北到高雄,考 慮要怎麼去,第一件要合理化的,就是你不可考慮「去香港轉機」,雖然可以辦到,但很不合理、很沒效率。也就是說,你所考慮的每件事都應該合理、有效率。

第二個步驟是,你必須確定每個合理的步驟,都是你可以掌控的。例如,你不可以考慮搭空軍一號,雖然很快,但你完全無法掌控這件事。也就是說,你的步驟,不要建構在依賴別人身上。

以程式設計來說,你不可以「假設每個步驟我都可以辦到」,因為建構在假設的基礎之上,不管你的分析多麼完美,都可能全軍覆沒。這個說法有違科學的精神。沒 錯,科學的精神是大膽假設,但不要忘了「小心求證」才是重點。也就是說,你的每一個步驟,都要卻定你可以辦到,對於無法辦到的部分,就是你要先行求證的部 分。我經常要研究一些片段的程式,來累積經驗,就是這個道理。

以當初幫仲鼎開發的中文造字程式來說,造字不只是在螢幕上點字而已,他們的要求是要能「組字」。當時沒有中文內碼的觀念,因此中文字是以倉頡為內碼(這也 是為什麼當時倉頡輸入法嚴格要求一字一碼的原因)。當你要在螢幕上建立一套可以組字的造字系統,你就要考慮很多的問題。而你所考慮的問題,會影響你的細分 步驟及方法。

清楚的瞭解問題,才是系統分析的第一步。而清楚問題,正是要做合理化的原因。任何不合理的流程,代表你沒有真正瞭解問題。例如,要你設計一套問卷,你認為 設計的很完美,但答題者看不懂,這表示你不瞭解真正的問題。因為問卷不是考試,目的不是把人考倒。而你設計了可以考倒人的問卷,那不是很奇怪嗎?

找出方法是解決問題的重要步驟,但真正的問題是:怎麼找出方法?這跟你的大腦有關,跟天才無關。例如,你不懂英語,如何使用英文?專業知識與通識一樣重 要。這也就是我很喜歡看一些亂七八糟的書或文章的原因。我從小就很喜歡看各種書籍,不分類別。為什麼?因為我很好奇。從大腦的結構來說,大腦的思考,並非 無中生有,而是回饋。當你開始思考問題,其實是你在等待靈感。而靈感的產生,跟你的學習過程有關(我在另一片文章中提過)。

當你遇到一個問題,這個問題可以被細分,非邏輯上的細分,而是大腦本能的細分。以一個「球」來說,可以被分成大小、顏色、硬度、材質...食物可以被分成 味道、溫度等等。當這些細分的資訊傳入大腦,自動分區處理,資訊被送到不同的大腦區塊,都會激發回饋訊息,這種現象如同在水中丟入一塊石頭激起漣漪,漣漪 就是你的靈感。因此,當你的大腦累積的資訊越多,你的靈感就會越多。這也就是為什麼「通識」與「專業」知識一樣重要的原因。尤其是,越廣泛的學習,解題能 力越強。現在台灣的多元入學方案本來也是基於這個道理,很可惜大家都不懂。

我累積很多的知識,這也是我敢於面對挑戰的原動力。但沒有一個人是完美的。尤其是面對挑戰越多,知識越不夠用,怎麼辦?找資料!我以前為了解決一件問題, 可以連續花掉將近兩個月,「翻」過幾十本的書,有些書買回來,有些則是在書局翻閱。為什麼要花掉這麼久的時間?因為基礎知識不足,必須從地基築起才能真正 瞭解問題。不管你有多厲害,學無止境,你可以吹牛(像我),但不能停止學習。(我學習數位電路那件事只花了一個星期,那是因為數位電路跟組合語言很像,我 已經有基礎知識,如果是類比電路就沒那麼簡單)

知識的累積猶如金字塔,很多知識具有堆疊性,如果你不累積基礎知識,就沒有機會瞭解高等的問題,這樣就不可能解決問題,例如微積分,假如你不懂加減乘除,不要想學微積分。因此平時的學習很重要,如果每次都要臨時抱佛腳,效率就不會高,缺乏競爭力。

我是怎麼辦到的?我花了很多時間學習、再學習。天才只會誤事!我很羨慕那些成功的企業人仕,也很想知道他們是怎麼辦到的?為什麼我這麼認真...我想到了!我不喜歡出門,所以撿不到從天上掉下來的禮物!

這樣...算不算宅男?

2008/04/01
其它文章
奇易中文輸入法首頁