人月神話

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

取全文油猴腳本@Chrome

Thursday, August 12, 2010

N年前寫了個 取全文的油猴腳本 ,是在 Firefox 上配搭 Greasemonkey 插件使用,在 Google Reader 上為某些網站可以按 ‘g’ 取全文。Chrome 也支持油猴腳本,但因為其中 GM_xmlhttprequest 不支持 cross-domain request,所以我也就沒有特別去搞甚麼的。

今天發現了一個叫 TamperMonkey 的 Chrome 插件,除了方便管理油猴腳本外,還支持 cross-domain 的 GM_xmlhttprequest,我試在此上安裝取全文,果然可用,只是速度有點慢。

有興趣使用取全文這老舊腳本的朋友,可先安裝 TamperMonkey,然後在其選項裏 copy and paste 取全文的 script 內容就可以了。

Toggle Google Sidebar 油猴腳本

Thursday, May 6, 2010

Google 更新了搜尋的用戶介面,左邊多了個 navigation,不慣,所以寫了這個: Toggle Google Sidebar ,不作甚麼,只是收起 navigation,加個 link 而已,非常簡陋。Firefox 和 Chrome 適用。

專利之惡

Wednesday, May 5, 2010

Patent Absurdity

如版權法一樣,美國的專利法也被扭曲了原意。原是為了保障實實在在的發明,但在法例加入了「程序」 (Process) 後,使得軟件也可取專利。問題是,軟件要取得專利,往往只需天馬行空,說個抽象概念,不需實作。誠如影片《Patent Absurdity》裏所解釋,你找一條數學方程式,然後用抽象詞語代入變數,便可申請到專利。

數學方法沒有專利,但只要轉一轉換形容,便又暪天過海,於是便專利滿天飛。結果是專利局越來越不能決定那些是真正專利,以寬鬆對待。開發者也很難知道自己有沒有誤中地雷。

大公司紛紛成立專利部門,研究申請專利,以保障自己利益。因此,專利變成核武,科技公司間恐怖依存,平白相安無事,一旦利益有衝突,便以專利發炮。最近專利戰例子便是 Android 平台,已先後被 Apple 和 Microsoft 發炮狂轟。

大公司專利部門,小小開發者則完全無力,任由宰割。整體軟件業發展也被限,創意都被用來玩專利遊戲,浪費人類資源。

軟件沒有專利會如何?影片如此比喻:音樂也是沒有專利,但發展並沒有被阻礙,而且更是多樣化多元化。如果音樂旋律、音符組合可被專利的話,則偉大作品根本不可能出現。

相關連結:

買餐計價

Thursday, April 23, 2009

因為看見 小影 為電鋸兄的 無聊問題 做了一個 java quiz ,只需實作 OrderMarker 的部份,所以就弄了一個 PlainOrderMaker ,兼真真正正試玩 git/github。而我的實作方法,其實也就是 Clement T 所說的做法,先排好最抵買餐,再順序盡買就是了,很簡單。

做完後,我想不如 Port 一個 Javascript 的版本如何?所以就弄了這個 Meal Calculator (很差的名字),用 jquery 作 library,用 QunitTDD 主程式,並建了一個簡單的 HTML UI。我用了 Github Pages 的功能來發佈了,大家可以到 這裏 看看。有興趣者也可以 fork 一個來玩玩。