人月神話

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 意外頻生,跟其尊卑文化有關。亞洲人數學能力佳,植根於種米文化要求自律、勤奮。

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

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

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

以人為本的《心科技》

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 感覺,加上佈局巧妙的偵探故事,引人入勝,讀起來相當痛快。

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

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

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

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

電腦生命天演論

Thursday, June 3, 2010

說到機器智慧一事,有一班人努力研究,如何讓現有的機器表現出有智慧?他們設想的機器,會像人一樣,擁有獨立的身頭腦,可以與人交流,活脫就是另一「種族」的人類,但卻又擁有機器高速運算、邏輯準確、執行無誤的優點。而另一班人,則想我們的大腦由個別神經元組成,每個運算能力不高,但將他們組合起來形成網絡之後,便會產生智慧。而 《電腦生命天演論》 談的就是這個觀點。

不過本書並不算很理論,反而像歷史書,將這種分散式的機器發展史娓娓道來。說到利維坦、依拉士摩(達爾文祖父)、萊布尼茲、圖靈、馮鈕曼等等,以及其他在歷史上不出名的學者,原來都已經預見了機器發展,應為分散、平行、網絡化。作者認為,現在的電腦因馮鈕曼架構之盛行,反而忽略研究這些面向。

可是這種「電腦」又是如何運作呢?在這一點上卻是玄之又玄,大概因為太過複雜,未能參透。正如神經元不識大腦意識,我們也只能見樹不見林。

本書並不新,成書之時大概網絡沒有現在這樣發達,但卻可以聞到一點語意網 (Semantic Web) 的氣味。隨著網絡和機器智能的提升,整體網絡將越發聰明,可以為使用者提供很多相關的資訊、建議、配對等等。

然而,這整體網絡是有意識的嗎?會思考嗎?是有智慧的嗎?於我們來說有何意義?我們該如何待之?本書也沒有答案,作者只是提供線索,預視未來人機共生網絡的發展,似乎是無可避免的。又或者,我們其實早已身在廬山中。

相關連結: 《電腦生命天演論》記疏