先學習處理小事,可說是做大事的基礎,但是處理小事的方法,未必可以直接適用於做大事。或許,方法略作修改即可,某些情況,可能需要大幅調整策略。
以電腦資料處理為例,我高中時期的月考成績單,僅列出全班同學各科分數,沒有排班級名次,也無全年級之排名。學校對於高三的模擬考,委託校外資訊公司,處理一千多人的成績排名,讓大家可以預估大學聯考之落點。高中一年級(1984~1985年),有次期中考後,導師交代我幫全班成績作排名,當時尚未有Excel軟體可用,我對於sorting(排序)的演算法瞭解不足,以BASIC語言在八位元電腦,勉強寫個程式,耗費幾十分鐘(若加上寫程式與輸入資料,總共兩三小時),把全班五十多人的名次排好。如果有Excel這項軟體,資料輸入後,一分鐘內可以輕鬆完成排名。
高一的經驗,處理資料速度很慢,高二看到各種排序演算法,很有興趣學習,看看哪一種方法效率最好,也寫個小程式演練Quick Sort。可惜,後來沒有遇到機會去正式應用程式碼。過幾年,有現成套裝軟體可用,就不必自己花時間設計程式。
Excel這軟體很方便,處理班級資料很輕鬆,若要作全年級排名也不難。在2003年版,資料列限制65536,若想用它處理大學入學考試成績(報考人數>65536),便有困難,必須有專人另行撰寫程式。到Excel 2007版,資料列可達1048576,若想要處理台灣兩千多萬人的資料,Excel是作不到的,可以選用其他資料庫軟體,不宜把Excel的表格當作資料庫。
假如有人寫個程式,能夠處理中國大陸十幾億人的資料,相同程式,想要處理地球六十億人的資料,或許未能成功,除非一開始就規劃變數能處理43億以上的資料量(精確地說:4294967295,是 ,42億又九千多萬),選擇較大的變數容器,涵蓋數字範圍由 0 到 = 18446744073709551615。
若有人真寫出來,可以處理60億人資料的程式,拿去處理一個小型班級的成績,是大才小用,浪費電腦的記憶體,也耗用時間。人在操作過程,若僅執行一件事,可能不會察覺電腦變慢,如果電腦執行多線緒,同時有許多程式在跑,每件小事都改用做大事的方法,大概會顯著降低效能。除非,程式設計師兼顧少量與大量資料的情形,運用靈活的變通技巧撰寫程式,這種技巧的磨練過程,設計師已使用「哲學」在其中,但「哲學家」可能不認為那是「哲學」。
假設都市公車,一台有64個座位,每台公車僅坐8人(或16人),是浪費資源。另外舉例,小學生郊遊,128人,若使用16台8人座箱型車,不如改用2台64人座的大車。若是家庭出遊,可能8人座,或4人座,恰好可用。相似原理,在電腦程式中,選擇合適的變數型態,對於運作效率,很有關聯。
我在高中時期,學一些電腦資訊的知識,希望運用在醫學領域。在學醫期間,電腦程式的能力退步,不如高中時期,畢竟我不是資訊系的學生,僅能繼續學一些概略觀念,很少有時間撰寫程式碼。
到醫院工作之後,偶爾也看些書,對軟體設計的新概念,有粗淺之認識。今年遇到一件事,醫院的兒童腦波資料,累積數年,資料量大,只想要讀取當天新的檢查內容,軟體卻屢次重新由網路讀全部資料,常耗費一兩分鐘,而舊病人資料,兩三秒鐘可以出現。我不是專業程式設計師,卻思考、推測其方法可能改進之處,想建議台灣代理商,把意見轉達給外國原廠,提升效率,以免妨礙門診之運作(一兩分鐘的等候,使人感覺很久)。期待將來有新版軟體,解決舊有問題。
對於院內的門診系統,我歷年來提出一些建議,請資訊室同事修改,讓其他醫師們也感受到新版門診軟體的優點。大部分醫師,可能不知要如何提出資訊建議,我高中時期學過一些程式設計,因而常常提出改進意見。
最近有些新聞,討論健保「保大病不保小病」或「大病小病都要保」,各方面專家有不同的意見。短時間內,也許不容易出現圓滿的解決方案。
看到這些新聞,我回想以前對於電腦程式「演算法」的學習,能不能派上用場?個人未能擬出具體方案,畢竟健保政策,牽涉到許多細節,少數人在短時間內,難以決定多數人的長遠未來。
遇到這類難題,「應用數學」有辦法嗎?或者要期待「純數學」的某些項目,演變為「應用數學」,若有人想出方法,不僅是數學史的重大進步,也能大幅提升醫療水準與社會福利。
數學大師陳省身先生曾經說:數學本身沒什麼用處,但如果沒有數學,很多事做不成。
我再回憶2006年,高鐵尚未通車,有個星期日,一大早,六點鐘到車站,坐台鐵自強號往台北參加醫學會議。旅途中,在車上欣賞《質數魔力》(陳可岡譯,天下文化出版),內容談到質數研究的歷史,分多方面論述。其中一部分談「個數」,在100以內,有25個質數,1000以內有168個,10000以內有1229個,100000以內有9592個,1000000以內有78498個,這些數量,到底有什麼關聯?起初,有人概略估計,所用的公式,想要算出100以內有幾個質數, N=100代入公式,是算不準的,當N很大的時候,估值漸漸近似實際數量。有一群興趣很高的數學家,當他們尚未得到研究成果,可能會被認為很「無聊」,花很長的時間,去尋找一條公式,最後竟然成功,N=100,代入新公式,可以算出25。這條公式的發現,是質數研究的重要里程碑,無論N很小,或是N很大,質數的個數,可以準確計算。
十幾年前,看到一家「電腦字型」的廣告詞:「大字美觀,小字清楚」,在當年,別家公司的字型產品,有的適合印海報的大字,若印文章小字會顯得模糊。另一家公司的字型,印小字很清楚,放大印海報,就變得不美觀。想要融合兩種優點,「大字」、「小字」都能得到適宜的處理,也依靠數學方法。
古代沒有精準的數學,依靠人的敏銳知覺以及審慎思惟,對於大眾事務,也能處理得很好,例如中庸章句:「舜其大知也與!舜好問而好察邇言,隱惡而揚善,執其兩端,用其中於民,其斯以為舜乎!」
「執其兩端,用其中於民」這幾個字,可供現代人好好思考。若以醫學為例,某位醫師到偏遠地區服務,當地沒有別的醫師,一人要看不同年齡層病患。對於青壯年人給的藥,相同藥物,若是用於兒童、老年人,劑量要如何換算調整?有簡易公式可參考,又需考量個別差異,少數情況可能需觀察服藥反應,而隨時調整藥物。
「兩端」若換成現代的數學名詞,像不像「極大值」與「極小值」?
「極大」、「極小」之間,任何數量,皆作適宜處理,是巧妙的!
各個不同學問領域,皆可能遇到「大」、「小」的不同處理,剛開始有「兩套標準」,經過長時間的研究,終於出現「共通標準」。「量子力學」有個例子,高頻率的紫外線、低頻率的紅內線,舊方法用兩套公式計算,後來,有一條公式能夠「兼容並蓄」,使計算變輕鬆。
醫學發展過程,若是遇到困難,會需要其他學術的幫助。
集合不同領域的專業人士,透過互助合作,大家交換意見,參考別人的優點,改善自己的缺點,那麼,以往認為困難的題目,可以有機會得到更圓滿的處理方法。醫學因而進步,其他學術的進展,也會更發達。
這需要時間,一步一步走,漸入佳境!