2022年7月30日星期六

千言萬語

 電腦這個詞語,給我們的感覺是一件像我們人類腦袋的東西,擁有記憶,懂得思考,但是在英文原字Computer,其實只指是一部懂得運算的設備而已,能令一部只懂得運算的設備變成一部像我們人類般思考,懂得完成無數的工作,是隨著電腦發展而被研發出來的程式語言。到了今天,已經有數以千計的程式語言被開發出來,各有不同特色和應用的重點,電腦科學家把這些程式語言分為五個不同的「世代」(Generation)。

電腦的核心部份,是中央處理器(Central Processing Unit, CPU),它只處理兩個訊號,便是0和1,電腦科學家把某一特定的0和1組合,定義為一個指令,教導中央處理器去執得某一運作;而將一連串的指令順序供中央處理器執行,便可以令電腦完成我們所期望的工作,而這一連串的指令,便是一個程式,而組成這個程式的0和1,是中央處理器唯一可以理解的程式語言,稱作機械語言(Machine Language),這是程式語言的第一代。一連串的0和1對我們並無意義,所以機械語言的程式,多以八進制或十六進制表示,令程式可以大大縮短,雖然如此,仍然是相當難以理解,難以修改這類的程式。所以便有其他世代語言程式的出現。

由於數字對我們並無特別意義,所以電腦科學家把某一組0和1的指令,以一個類似英文的詞語代表,例如ADD便是代表了00110101這一個指令,其代表的運作是把兩個數字加起來,如此,一個只有數字的程式,便會變成一個含有我們能理解的詞語的程式,由於每一個英文的指令,便是代表某一組0和1的組合,所以電腦科學家便設計出翻譯軟件,把這些我們能理解的程式,變成只有0和1的機械語言程式,讓中央處理器執行。這樣的程式語言,稱為組合語言(Assembly Langauge),或第二代程式語言。在電腦發展的早期,組合語言己大大改善了程式員開發程式的能力。

第一個第二世代的程式語言,都只針對某一設計或某一系列的中央處理器而研發出來的,可以想像,一個為某一系列的中央處理器而開發的程式,便不可以供其他中央處理器執行。另外,這兩代程式語言,已不足以滿足電腦科學家所研究出來有關程式語言的理論。因此,便出現了之後的其他世代語言。

第三代程式語言,簡單來說,便是不再以某一中央處理器來設計,電腦科學家研發出來程式語言,更接近我們日常用的「文章」,包含了更多英文的詞語,令程式員更易理解和開發程式;當程式員寫好了程式,便以編譯器(Compiler)或直譯器(Interpreter)軟件把這些第三代程式語言的變成電腦可以理解的機械語言程式。由此開始,只要有所需的編譯器或直譯器軟件,程式員可以開發一些可供不同電腦所運作的軟件。這類更易理解,不限於某一系列中央處理器的程式語言,電腦科學家稱之為高階程式語言,而第一和第二代程式語言,便被稱為低階程式語言。

程式語言共分為五個世代,第四代和第五代都是高階程式語言,亦不是針對某一系列的中央處理器,但它們有其特定的應用;簡單來說,第四代程式語言是指令數據庫運作,而第五代程式語言是用來開發人工智能軟件。

低階程式語言和高階程式語言的分別,令筆者想到我們日常交托別人為自己工作時,我們的指示是怎樣的,是我們簡單的給別人一個指示,別人便已妥當地為我們完成,還是我們要一個個步驟去教導別人怎樣為我們完成我們所期望的工作呢?反過來看,我們本身在處理一些事情時,我們是期望別人給我們怎樣的指示呢?是簡簡單單的一句話,我們便已經可以完成,還是我們要別人仔細地講解,才能完滿地完成工作。

想一想,在工廠裡流水作業的工人,他們只須完成一個細微的工作,就好像中央處理器只能完成定義好的指令,所以他們的生產力和價值有限。在知識型經濟的社會裡,我們的價值便是我們能把高階(或高層次)的工作,運用我們的知識和經驗,把它們變成低階(或低層次)的工作,可以由自己完成,或可以轉化成為別人有能力理解和應付得來的工作,分配給其他人共同去完成;似乎我們能處理愈高層次的問題,價值便愈高,但所需的知識經驗等個人素質便愈高,亦需要更長的歲月去累積。

2022年7月23日星期六

人生記錄

 開發軟件,在編程的時候,程式員都會在程式內適當的位置輸出一些訊息,令程式員可以得知軟件在運行時的程況,幫助程式員找出程式的問題所有,修改程式。現今大部分程式語言都有程式庫或功能,讓程式在運行時輸出運作訊息,而輸出某訊息時,程式員可以決定這訊息是偵錯(Debug)、資訊(Information)、警告(Warning)、錯誤(Error)、嚴重錯誤(Severe)等不同程度,在真正輸出時,可以設定某一個最低需要的程度,例如設定輸出程度為偵錯,所有在偵錯或以上的訊息都會被輸出,而如果設定輸出程度為錯誤,所以錯誤程度以下的訊息都不會輸出,而只會輸出錯誤和嚴重錯誤兩個程度的訊息。

以這個模式來決定那些訊息將會輸出,如果設定得愈低,便可以得到愈詳盡的訊息,但是輸出出來的訊息量便會很大,有機會會用盡電腦的儲存空間,要在所有訊息中找到想要的訊息也愈難。相反,如果將輸出程度設得愈高,雖然每個訊息都是同樣重要,得出的訊息便愈少,所佔空間也愈少,但有可能找不到想要的訊息作偵錯之用。

所以真正的軟件系統,在開發時會將輸出程度設低一點,例如偵錯,讓程式員可以容易點除蟲(Debug),但在真實環境裡使用時,便會設得高一點,例如警告或錯誤,令維護系統的可以容易點知道有問題出現了。

程式輸出訊息的模式,令筆者反省我們的人生經歷和我們怎樣用我們記憶。如果我們在一生裡,要鉅細無遺地記著每一件事,給筆者的感覺是人生太沉重了,回想從前時太多「沙石」了。倒不如只記著我們人生中重要的事,尤其是開心的事才記下來,久不久在腦中回味,令我們感到人生是簡單和美滿的,而人生的整個過程和方向便更明顯清楚。

人生雖短,但身邊發生的事卻很多,率性而為,把美好的事留在腦中,回望在終結時,一生無悔。


2022年7月16日星期六

群眾力量

 記得兩年前的香港小姐選美,在過程中加插了網上投票活動,所有觀眾要在十分鐘內上投票,參與投票者可參加抽獎,而獎品是房車一部,新鮮感加上獎品豐富,很多觀眾當然樂於參與。結果是電腦系統失靈,網上投票無法進行,最終電視台高層得道歉了事。這件事除了反映投票系統開發公司沒有事先做好使用量的預算,並測試系統是否能承受得來之外,亦反映了群眾力量的強大。

大部分系統或服務,不論是電腦的或是非電腦的,它們都是基於某個使用模式來設計和執行,例如手提電話網絡,雖然所有該電腦網絡的用戶的手機是啟動著,但在某一個時間只有部分用戶是使用著手提電話網絡在講電話,因為用戶眾多,所有人加起來的使用量便大致上是穏定的,網絡商便可以以此來決定要投放多少資源來構建其網絡,以投放適合的資源讓所有客戶在絶大部分時間都可以順利地使用網絡。因此,在某些特別的處境,當異常地多的用戶要使用手提電話時,例如在天氣突然轉變,用戶要用電話通知朋友時,電話網絡便不足以應付所有人的要求,令部分用戶不能使用電話功能。

另一個非電腦的例子是道路系統。香港車多地少,某些重要道路的使用量大部分時候都已飽和,因此只有稍為有多點車輛使用,或道路上有任何交通事故,道路便即時應付不來,出現塞車情況。

以上這些事件給筆者的啟示是,所有系統或服務,如果日常應付工作的能力只能剛好應付正常情況下的工作,當某一天突然要處理異常繁重的工作,該系統或服務便不能正常運作,解決方法是該系統或服務必定要有某個程度上的剰餘資源,這當然涉及在資源上更大的投資。

另一個啟示是,每一個服務使用者都是正常地使用服務,只要人數或使用要求的數量超出系統或服務的承受能力,任何系統都會倒下來。如果某個系統或服務是某個機構或體系的命脈,群眾只要團結,便很容易影響或危害這構構或體系。

2022年7月9日星期六

量化失真

 我們生活的世界,所有的物理量度都可稱為類比(Analog),意思即是其量度可能是任何一個數值,但是在電腦的世界裡,所有類值都可稱為數碼(Digital),即數值只可以是某些預定的數值,例如整數,或某一準確性的數值,如果要表達的數值不存在,便只可以以最近的可用數值來表示,由此而來的誤差叫「量化失真」(quantization distortion)。

舉個例子,我們眼睛看到這個世界的色彩,其實是光譜裡的某一位置(或某一頻率),但是當電腦表達某色彩時,只能把該色彩以它的三原色(紅、綠、藍)的強度以數值代表,現時普遍採用的是每一原色以一個位元(Byte)代表,而一個位元通常是一個八位二位數字(8-bit),所以每一原色便只有256個不同的程度。現在大部分的數碼檔案、顯示器等,都是以這個標準來設計;想一想,每一個原色只有256個不同的程度,和我們身處的世界是有距離的,但是當我們看看數碼相機拍攝出來的相片和在電腦的顯示器上觀看,又覺得很真實,原因只是我們的眼睛的靈敏度不足令我們發現這些分別而已。

如果圖像只以某一色彩的光暗度來表示,所出來的圖像便是一張黑白相片,如果每一點以一個位元代表,整幅相便只有256個不同的光暗度,這和我們從前用的菲林便差得遠了,因為菲林是有無限的光暗度。如果我們將整張相每一點所用的數值減少,例如只用7-bit、6-bit或更少的數值來代表光暗度,我們所看到的相片便愈來愈粗糙,可以想像一下,如果相片中的每一點只用一個位的二位數字(1-bit)來表達,即只得光或暗,所得出來的相片便好像「剪影」一般,餘下的只得輪廓,只能靠推測來想像和認識原來的相片。由此可見,我們量化某一數值所用的可用數值愈少,量化失真便愈大。

量化失真給筆者的啟示是,如果我們思考一件事時,尤其是一些抽象的事物,或主觀感覺感受,我們愈想用愈少的程度來表達,便愈容易得出錯誤的理解,例如有些評論對某些前人的評價是「七分功、三分過」,如果我們只用兩個可能的評值,全功或全過,來量化這評價,便只能稱這前人只有功積吧。其實這便是我們思考時,很易跌入的「簡單二分法」陷阱吧;我們不應過份期望把所有事物都以非黑即白的態度思考,要深入觀察、理解,對正反兩面反覆思考,才能對世事有更深入的認識,好讓自己能作出更正確、理智的判斷和決定。

2022年7月2日星期六

夢想現實

筆者記得二十多年前在大學就讀計算機科學時,部分學生的畢業項目是光學字元識別(Optical Character recognition),那時要用當時最快的電腦來運算才能有合理的運算效率,但是到了今天,我們的手提電話也可以做到。這件事給筆者的啟示是,今天我們覺得很困難的事,到將來科技更進步時,卻可能是一件非常簡單的事;另外,今天我們的夢想,隨著科技進步,有一天會變成現實。

最明顯的例子是手提電話。最初的手提電話只能顯示一行字串,到今天可以顯示全高清的視頻;早期手提電話的大小有如一個水壺般大,現在的手提電話可以如手錶般大小,但因著用戶期望熒幕要大,所以具不同熒幕大小的電話便在市場出現。我們對手提電話的期望是輕、快、多功能,手提電話生產商所生產必定會向這些方向發展。

我們現在是活在一個沒有不可能的世界,尤其是在科技範疇,對於未來,我們不用理會科技上是否可能,我們所要思考的,是我們期望我們的生活應該是怎樣,只要我們有期望,商家和生產商便會出產我們期望的產品,來吸引消費者的支持。從另一個角度,如果我們希望創業,我們所要思考的,是我們覺得我們的客戶群有什麼期望,希望得到什麼的服務,之後,我們便可以在市面上找對應的科技和支援,用以滿足客戶群的期望,成功創業的機會便會更大。

我們未必要成為發明家,希望研發出什麼新事物,反之,我們要小心留意科技的趨勢,有什麼新產品出現,跟著我們要去觀察人們的期望。所以,觀察能力和應用科技的能力,便和研發的能力同樣重要。

2022年6月25日星期六

萬無一失

 在資訊科技界裡,當我們定義一個系統是否可靠時,其中一個指標是該系統正常運作的百分比,其中一個最常聽到的標準是「四條九」,即99.99%,對於足金來說,「四條九」差不多是純金了,但這個水準對於系統來說又是否很高?

主觀感覺「四條九」似乎相當不錯,但實際上計一計,原來一個系統在一年裡不能正常運作的時間少於52.56分鐘,便已達到「四條九」水平了,即是只可期望一個可靠水準達「四條九」的電腦系統,在一年內有大概一小時是不能正常運作,由此可見,「四條九」的可靠程度其實不是很高。筆者有次到燒味店光顧,看著師父「手移刀落斬义燒」,差不多一秒斬一下,忽發奇想,以這個頻率計算,一個小時不停工作,便已落了三千多次刀,即是三小時左右便已落了一萬刀,所以每天落刀過萬並不出奇;如果這些師父的刀法的可靠程度只是「四條九」,他每天也會有血光之災。

在先進的香港,看看我們身邊的事物,原來它們的可靠程度便大大高於「四條九」,例如香港的供電、供水、交通燈、電視電台廣播、機場的導航系統等等,所以不論一個系統的可靠程度要求有多高,技術上大都是可行的,只是當可靠程度要求愈高,系統愈複雜,成本便愈高。

再深入思考,一個系統的可靠程度是取決於什麼因素呢?所得的結論是,愈是簡單的系統,可靠性便愈高,反之愈複雜的系統,可靠性便愈低。原因是一個複雜的系統,是由多個簡單的子系統所組成,只要有其中一個子系統出現問題,整個複雜的系統便會出現問題,因此愈多子系統的系統,可靠程度便愈低。

我們的身體,也可以理解成一個複雜的系統,身體內的不同系統和組織便是不同的子系統,只要其中某些子系統發生問題,便等同我們的健康出現問題,如果我們要保持身體健康,我們得把自己的身體,看作是不能出現問題的系統,要保持身體各方面都要健康,也要付出代價,多做運動,注意飲食了。

2022年6月18日星期六

禍福相隨

 筆者於資訊科技界工作多年,眼見新科技不斷湧現,某些新科技的出現,更帶出一個新時代,舊有科技便如過眼雲煙,漸漸被人們遺忘。每項新科技都嘗試解決人們一個現有問題,可視為用家之福,但是想深一層,卻暗藏禍根,正如中國道家思想「禍兮福之所倚,福兮禍之所伏。」

例如早期當視窗系統開始流行時,開發視窗軟件便得拿著百科全書般厚的開發者手冊,慢慢學習研究;自從微軟發表Visual Basic之後,開發軟窗軟件便好像在畫紙上畫畫一般,加一點組件到界面去,便可以即時測試,整個開發的過程便由鍵盤輸入程式碼,變成用滑鼠「拖拖拉拉」便完成,開發時間短了,所需要的時間也短了很多,程式員即時覺得世界變得更美好,可說是程式員之福。但是好景不常,程式員不久便發現,既然開發軟件已不需高深學識,只要懂得使用滑鼠、簡單電腦常識便可,程式員已沒有什麼專業可言,初哥和有經驗的程式員的分別不太大,待遇也差不多,這便是Visual Basic這類開發工具所暗藏之禍。

雖說是禍,Visual Basic這類工具令軟件開發不再高深莫測,而Visual Basic這種軟件開發模式,卻沿用多年,直到近年手機軟件的開發模式也是差不多。因此掌握了這種軟件開發模式,卻為程式員打開一片新的天空。再者,因為這種模式令程式員不必花大量時間於開發軟件的界面,所以程式員可以更集中資源於開發軟件的核心運作,能開發更複雜的軟件,這又可以看作是福。

和以上例子相似的事件不勝枚舉,試想想資訊科技界的新發明,即時解決了某個問題,或取代現有某些舊事物,這可以算是福,舊事物被取代,對所涉及的人和事是禍,跟著釋放出來的資源和空間,卻又變成另新的動力,去啟發人們再去創新,找新的問題去解決,令生活更美好。由此可見,禍福是硬幣的兩面,當看到福時,轉一轉,從另一個角度便會看到禍,跟著再轉一轉,可能便又會看到福了。

何謂禍福,其實只是觀點與角度。看到新事物,同時也想想有什麼負面影響,對自己有什麼衝擊;再看到有問題發生時,除了即時想辦法解決之外,也想想這件事帶出什麼機遇吧。

千言萬語

 電腦這個詞語,給我們的感覺是一件像我們人類腦袋的東西,擁有記憶,懂得思考,但是在英文原字Computer,其實只指是一部懂得運算的設備而已,能令一部只懂得運算的設備變成一部像我們人類般思考,懂得完成無數的工作,是隨著電腦發展而被研發出來的程式語言。到了今天,已經有數以千計的程式...