人月神話

Thursday, September 2, 2010

tar-pit

成書至今 35 年的《The Mythical Man-month》 (人月神話),至今讀來仍然不老,可見書對程式設計和軟件工程有透徹的了解,明白這一項工作的本質、涉及人事、流程等等,有什麼特質和局限,所以才能直擊要害,成為經典。

我們通常會說「這項目一共花了十個月的 man-month」,可是 Man-month 是一個神話,其估計永遠不準確。因為編寫程式不同耕田種菜,那些工作只要技巧上了手,工人們就可以獨立工作,所以要增加生產力,直接加人就可以了。可是編寫軟件卻不能這樣算,因為除了技巧,溝通也很重要。軟件涉及不同部份互相合作,各部份資料如何傳遞、格式如何,需要成員間的溝通。在一個趕頭趕命的軟件項目裏增加人手,並不能加快生產,反而要花更多時間作訓練、溝通。「人」與「月」是不可互換的。

寫程式是一項心智活動,程式員有很大的自由,能將意念化成文字指令讓機器執行。偉大的建築或音樂,可以只有一個設計者,作品強烈反映個人意志。但軟件通常時間迫切,總是需要很多人手加入規劃設計。如何將不同人的設計意念統一、實作、測試、付運,就成為軟件工程的最大課題。這裏面,要訂立很多不同架構、規則、流程、工具、文件等等。

此書亦收錄後來作者一篇《No Silver Bullet》,引起爭議最大。書中預測:十年內沒有任何技術,可以幾何級數增加軟件生產力。這預言是應驗了。這當中,作者討論軟件開發的本質:複雜、不一致、易變、無形。軟件各部份各異,無一相似,又有超多狀態,所以複雜。軟件開發總是要面對不一樣的問題,帶來不一樣的複雜,這並無任何一致性可言。因為軟件本身很容易被修改,引至用戶要求、排程、實作、測試等等活動,都經常處於改變之中。與實物不同,軟件是無形的,結構不受空間限制,也沒有任何一大圖表能夠代表整體 (要多張才可以)。

而在那時一些技術,如高階語言、時間分享、統一開發環境等等,都不能直擊這些本質問題。及至日後的一些技術,如 OO、AI、圖形編程等等,也沒有成為 silver bullet。

雖然如此,還是有些東西可以做到的。作者預測了一系列改變也正在發生,如由買軟件代替開發專用的 (組合使用 spreadsheet、word 等解決問題)、以不斷修正需求快速試作來開發、「生長」軟件等等,都可以減輕我們開發軟件的負擔。我讀此書是二十週年版,也就附有一篇作者在二十年後的回顧,詳細地察看自己的預測的異同及其因。

Software is hard。寫程式如寫詩一樣,自由度很大,卻又可以做出實際的東西, 猶如魔法 。可是自由越大,也越易出錯,加上要協調不同人事,就更複雜。我們需要各種各樣的規則流程方法,才能做出可靠的產品,這在現在越來越依賴電腦的世界,尤其重要。

公平社會 – Outliers

Wednesday, August 25, 2010

最近看 Malcom Galdwin 的《Outliers》有一段我覺得很簡單地形容了本書要旨 (大意):

生物學家愛談「生態」:最高的橡樹之所以長得高,並非只因種子夠堅硬,也因為無樹遮光、泥土豐厚、無兔咬食、無人砍伐。我們皆知成功者種子堅實,但我們有否了解暖其之光、養其之土、其無兔無人之幸運?本書非談高樹,而是森林。

我們都愛看英雄傳奇,看其無窮意志、不死決心、能人所不能,引人入勝,驚嘆稱奇。沒有這些英雄特質的我們,便只能當個凡夫走卒。我們忽視了成功故事背後,除卻個人意志,還有其身處環境、時間、機會、社會文化、生活、家庭背景等等,千絲萬縷。所謂英雄做時勢,時勢也做英雄。成功靠天時、地利、人和。

精英曲棍球手偏於頭幾個月出生,單單因為每年截止入隊時間在一月。彼頭四走紅前,曾經歷過萬小時的現場表演。IQ 超高天才,因為家庭複雜背景令他走不上正常的學習途徑,才能被埋沒。韓國 747 意外頻生,跟其尊卑文化有關。亞洲人數學能力佳,植根於種米文化要求自律、勤奮。

我們並非不知道這些事,只是我們都避談。因為這很容易得出:「有錢人的孩子較成功」、「韓國人就是不懂駕駛飛機」、「美國人就是數學差」等等這些很「政治不正確」的說法,我們都覺得只要個人肯努力,這些出身、種族都理應不成障礙,所以成不成功,只是個人問題。

但這事實正正是倒轉:要人們可以憑個人努力而成功,我們應製造一個公平的環境,去磨平因為出身、種族等等做成的差異。這樣才可以製造更多機會,讓更多人達致成功。而當人們知道機會處處時,也比較有動力去做去試,整體社會氣氛也會比較積極和正面。一個不公平的社會,制度傾斜,鼓勵人們巧取豪奪,結果貧富懸殊,社會分化極化,也沒有進步可言。

要怎樣才能達至一個公平社會?自由、民主自然必不可少。再來就像作者那樣,仔細從數據觀察,不要忌諱那些看似政治不定確的結論,找出背後原因,作出改變。

一場遊戲一場夢 – Inception

Friday, August 6, 2010

有網友說 Christopher Nolan 是商業片導演,所以對他要求不高。但我就覺得,正正是我們對商業片太沒有要求,近年才會有太多腦殘商業垃圾片。Nolan 這《Inception》的示範,正好表現了商業片,自然是機關算盡,但也可以一氣呵成沒有冷場兼不老土,也不必當觀眾白痴的官能動物,用腦思考其實也是一種娛樂,也可以很商業。

劇透警告!

報導 說,年輕人比老年人較易接受這片,原因很簡單:整齣戲就如玩遊戲。先建構一個另類世界,裏面有一堆遊戲規則。觀眾以 Ariadne 新手角度,認識遊戲的目的,如何玩法,有多少關,如何過關等等。組成工作隊伍有甚麼人,各有甚麼特質。進行任務前要作甚麼準備,完成甚麼工作。

正式任務時,當然就如遊戲般過關斬將,需要配搭人手。有如星矢過十二宮,每關留一個把守,其他人繼續前進。當然會出現意外狀況,如目標人物死了,主角隊伍要快速對策。原來除了原本預定的關卡外,還有一個神秘關卡,而這關卡內會有與主角至關緊要的人物,竟是完成任務的關鍵!

將這麼複雜的遊戲式故事,說得清楚明白有層有次,自是 Nolan 的功力所在,但也與新一代的吸收能力有關。電玩世代善於留意任務目的,整合細節。近年電視片集 (外國啦..) 也越趨複雜結構,多線多人多參考,人們在網內網外延伸研究討論劇情,已成習慣。所以對於《Inception》的一場遊戲,自是看得過癮興奮,透不過氣。一個簡單的公開式結局,已在觀眾心中植念,然後各式各樣理論說法,通過網空間拙壯成長、百花齊放。一個做夢題材,解讀更可是自由發揮,屈機千里。這是本片的厲害之處。

可是,我對於大家熱烈討論結局,卻不太感冒。最大的問題,是我對片中角色無法投入,以至我根本不在乎他們是生是死,是夢是醒。

此種疏離感,有兩種層面。其一是對本作植念的設定,到真正改變人物內心,感覺兒嬉。原來要改變人意念,只雖依公式過關斬將。夢中再夢,就能深入潛意識,再做場大龍鳯就能暪天過海。一直認為有關人心的工作應是艱難,也有代價,但片中科技卻是太容易,潛入隊伍不用細察人心,只需動作夠快。植念過程很像一個低級騙局。如此科技,能載舟也能覆舟,但此作卻沒有對此科技有太大批判,唯一被毀掉的只是主角太太。

疏離感其二來自主角表現過於理性,雖見他潛意識中妻子常出現,但卻不感到他的愛,甚至與妻子對話時,也不覺其激動。網友認為這是將主角設定得太正氣,張無忌化後便失卻人性特徵,很是認同。硬是覺得將主角弄得有點變態,憶妻/子成狂甚麼的,會更合理,也更讓人同情,故事才會動起來。

雖然如此,此片卻已比同類商業片高幾班,絕對收貨。只是我雖也體驗到遊戲快感,驚嘆於導演剪接的鬼斧神工,卻也若有所失,相信我是老了一半矣。

延伸閱讀: 為流行文化平反 – 開機

以人為本的《心科技》

Sunday, July 11, 2010

之前介紹過 《設計&未來生活》 ,最近拜讀了其作者 Donald Norman 一本較舊的作品 《心科技》 (The Things That Make Us Smart),談的也是機器的設計,但從比較根本的角度,去看人與機器之間的分別,從而知道如何做出「以人為本」的設計。

作者認為現在大多設計都使人變笨,因為這些設計大多「科技為本」,缺乏人性考慮。又或者說,因為在人類研究方面未夠深入,所以即使在設計時很科學地以數據為依歸,但奈何這些數據只能代表一些可容易量化的資料,缺乏難以量化的如心理、認知層面的「人性」資料,導致「沒人性」的設計。

然後書本就帶大家從根本了解「人」是如何運作的,例如在經歷事物時,人會有兩種模式:經驗模式與反省模式。在經驗模式下,我們處於被動的狀態,經驗事物,例子如看電影。在反省模式下,我們會不斷思考現在的狀態,提出修正、反駁。經驗使我們變得專業,反省則使我們進步。

我們使用象徵 (representation) 來代表事物或概念。因為人腦暫存記憶有限,所以我們總不能將所有事物記。使用象徵簡化,才能省思,並與其他人交流意見。好的象徵只顯示核心部份,去除雜訊,助我們記憶與反省。不過在不同情況要求並不同,例如在查飛機航班時,有時我們想比較時間,有時我們想比較目的地,在這不同要求之下,資訊排列方式也不會一樣,所以並不存在最好的象徵,只有最適合的。

象徵有可見與不可見的,例如齒輪就是可見的,但電子世界裏的指標、控制等則是不可見。人造物 (artifact) 的象徵可依此分為表面與內在的部份,例如一本書就是只有表面的人造品,但一部計算機就是有內在運作的部份,而計算機的按鈕就是表面的界面。人類是空間動物,必需透過表面界面,才能操控內在。在設計這些人造品時,我們應考慮如何使用適當的象徵、界面,使之能配合人的特質,去解決問題。

而人有甚麼特質呢?人類善於配對形態 (pattern),很情緒化。因為是社會動物,所以會多關心他人的感受。凡事總要作出判斷,尋求原因和意義。記憶容量有限,愛記事物的本質,非細節。一次只能專注在一件事上,但又對周圍環境極為敏感。愛累積經驗,並使用經驗來工作,所以能看到一點線索推出事情全貌,但這也帶來認知盲點。

而機器則與人的運作完全不同,機器總是精確而井然有序,講求邏輯,很專心,也不會情緒化。但反面看來,就是不夠靈活、死板、缺乏想象力。在這其中,人類應可與機器互補長短,但偏偏現在的設計並非如此。

例如電話這科技很具革命性,他使人與人能夠跨越空間,隨時對話。但事實上電話卻打破了人類一貫的溝通禮儀,打電話的人完全不知接電話者是否有空、忙不忙。接話電話的人也許在專心做一件事,可是一響電話思路就被打斷。另一方面,一些公司為了節省人手的電話語音系統,即「聽廣東話請按一字」那類,要打電話求助的人要經過層層問題,才能找到答案,但卻礙於電話只能傳語音的關係,求助者往往記不清楚選項,按錯決定,一旦「走錯路」便往往又要由頭開始,結果求助者既解決不了問題,也對公司留下壞印象。

解決方法,其實就是倒轉,在人與人打電話時,可用電話留言、來電顯示、視象通話,甚至是適度的錄音對答,來過濾應付來電者。而公司的求助熱線,應該棄用語音系統,反倒讓真人接應。當以人為考慮中心時,你就會考慮到人的記憶有限,對環境敏感,又有社交需要,從得出來的設計也會很不一樣。書中還有很多其他的例子,去說明人類與機器根本上的不同,以及應如何設計。

正如本書英文題目所言,我們創造不同的科技產品,原本就是要 Make Us Smart,而非 Make Us Dumb。幸好近年很多設計也越來越有人性,很多科技創作者,都了解到技術並非一些,好的設計並非單是美醜而已,當中有不少關符人的哲學。

讀得痛快的《人形軟件》

Sunday, June 6, 2010

剛拜讀了 譚劍 的《人形軟件》,以香港為背景的科幻,充份發揮這城的 cyberpunk 感覺,加上佈局巧妙的偵探故事,引人入勝,讀起來相當痛快。

這個痛快的感覺一部份是來自閱讀的「快感」,因為小說讀起來很暢順, 故事推進很快,可能是否因為句字較短,資訊較密集之故,有坐過山車的感覺。這也算是一種香港特式吧?我估計年青讀者應該很受落,若譚兄真的打 「一月一本豬肉枱」 的策略,則此寫法應該頗合適。不過我已不年青,還是覺得有點太快。

不過故事推進得快,並不表示膚淺。在追尋真相的過程中,我們看到了在近未來香港,仍然是一貫中環價值,地產商橫行,對於老店傳統毫不珍視。虛擬世界裏,既有現實的地點、地標,也有虛幻空間、光柵、軟件、病毒。虛擬空間太豐富,人們不夠時間心力應付,人形軟件便應運而生。網絡無遠弗屆,香港也不只是香港,全球一體,黑客活動也不分國界。人們對現實失望,便將希望轉投網上,甚至生出宗教。凡此種種背景細節,看似離奇但卻非常寫實,有根有據。不過篇幅所限,作者每每只能一句起兩句止,未能深探,但已留下種種蹤跡,有興趣者當能順籐摸瓜,在這網絡時代,自行延伸研究。

黑客攻防自是新鮮神奇,劇情發展也夠出人意表,扣人心弦。唯劇情主幹仍是「黑吃黑」,看來網絡科技怎樣進步,人類還是死性不改?除卻極端的魔神教外,若能看到更多科技與人心之間互相影響,例如使用人形軟件的後果如何,應會更為有趣。而颶風級人形軟件,已通過圖林測試,基本上直接當是人類來寫,避開了人機之辨的老舊主題。

故事終結得比較倉卒,有關黑澤武部份來得有點突然,然而卻是我愛的一部份。天照說,麵店感動了黑澤武,使他做了人形軟件的替身。當我們在鑽研科技,重組人格,靈魂上載,機械變身,以求無限延續自己之時,不要忘記我們其實一早已懂得此本領,那方法叫做承傳。