preload
六月 24

一周前我和 Tinyfool 閒聊蘋果操作系統,都認為對於開發人員來說,蘋果操作系統(Mac OS)是上佳的選擇。 Tinyfool 筆頭很快,當即就寫了一篇長文章, 我則筆頭很慢,今天才全部碼好。 他的文章的主要切入點在於 Mac 平台作為目標開發平台的優勢,而我這篇的切入點主要是 Mac OS 作為一種開發工具的優勢。

開發人員的趁手工具
對於開發人員來說,所有的開發工具的最大的用途,就是最大限度的提高開發人員的生產率 (productivity) 和創造力(creativity)。在我們這個時代,使用 GUI (圖形界面) 是一個提高生產率的好手段。雖然上一代的那些 UNIX 開發人員的確不需要 GUI。一個屏幕,一個鍵盤,一個編輯器,在陋巷,人不堪其憂,也不改其樂的黑客比比皆是, 但二十多年過去了, 現如今開發環境發生了巨大的變化。 比如說,相比較於當年程序員使用的基於文本的環境,在 GUI 下格式豐富的文檔顯得更直觀,閱讀體驗更加好;就算工作中不需要開發任何 GUI 程序,現代開發人員也會使用 GUI 來完成網頁圖片和文檔閱覽等等。 因此,即使是最傳統的用命令行的開發人員,其實也能沾 GUI 的光。 比如說現在最好的終端程序,都是 X 下模擬的,因為這些模擬的終端的出現,一些復雜的可視化功能可以在這些終端中實現了,比如 Unicode 的顯示(rxvt-unicode)等等。

對於開發人員,擁有一組非常好用的,能夠最大程度的提高生產率的開發工具乃是一大人生夢想。那麼,這套開發工具從何而來呢? 大體來說,這些工具來自於三個方面: 1. 通過系統和單一的應用軟件提供的;2. 通過搭配使用各種應用軟件 3. 通過定制和改變現有的應用軟件。 這三點,對於 UNIX 開發人員是再熟悉不過的了, 無非就是寫腳本,走管道而已。 所以,在前 GUI 時代,這一套哲學非常盛行, 開發人員都知道,需要通過安裝腳本解析器,寫一些的腳本,配置一些環境等等,才能把剛出廠的 UNIX 系統,改造成自己使用起來得心應手的系統。 基本上任何一個使用 UNIX/Linux 系統多年的人,機器裡面都有各種各樣的「私藏」的腳本。離開了這些腳本,他的效率會大打折扣。

GUI 時代傳統的喪失

上世紀 80年代的時候,GUI 時代和個人計算機普及的時代降臨了。從此,計算機變成了個人電腦,歷史上第一次,計算機不是專為開發人員設計,而是為了普通用戶設計。普通用戶的需求就是完成一個一個的現實問題,軟件產業提供的解決辦法就是為用戶提供一個一個的應用軟件,而不是讓用戶自己一行一行的編程和寫腳本,巨大的軟件需求瞬間成就了一個巨大的軟件產業。 這樣的一個間接後果就是,對於普通用戶來說,讓一台計算機變成能夠幫助自己完成任務的「個人計算機」的唯一手段,就是疊床架屋的不斷的裝各種應用軟件。

我們可以用一個簡單的例子說明這種使用模式。 我們都知道,安裝 Windows 系統的一個經驗原則是把操作系統和應用程序分成兩個邏輯盤,一個在 C 盤,一個在 D 盤。這個磁盤分區的經驗原則不光網吧老板知道,連我大學裡面只會點鼠標的那些女同學都知道。為什麼有這個奇妙現象呢?其實,這是由 Windows 系統的用戶的典型使用模式決定的。 在 Windows 系統上, 應用程序和文檔是關鍵,操作系統只是一個隨時可以重裝的東西而已,所以干脆兩者分開,互不影響。在這樣的使用模式引導下,Windows 系統上格盤重裝是非常低成本的,只要文檔不丟,應用程序不丟就行。這種使用習慣,浪費了多少 geek 男美好的時光為人重裝系統,又促成了多少美妙的姻緣 :) 。 總之,在 GUI 時代,要解決一個問題,就裝一個應用程序。至於應用程序之間的通信,和用非鍵盤鼠標的方法控制應用程序等等,都不再是要考慮的問題,有這樣的需求的人成了非主流,非主流到以致於主流的操作系統和應用軟件都不讓你這麼干了。 操作系統把所有其他的路都封死,就是明擺著告訴你,要想某樣功能,請出門買軟件。

Smalltalk 的啟示


其實 GUI 時代原本不應該是這樣的。 我們都知道,GUI 原本是施樂的 Alan Kay 那一幫人做科研做出來的,Bill Gates 和 Steve Jobs 各自到施樂」抄襲」 了一部分過來,於是窗口啊按鈕啊就到處都是了。 他們都看到了圖形界面和面向對象的形, 看到了圖形界面就是把按鈕圖標等等對象放好,然後鼠標點擊拖動等等這些表面的東西。 因為所有的 GUI 界面都是從文字界面起步的,所以所有的 GUI 程序,其實就是原來的可執行程序的包裝。 C++ 這個語言的出現也很討巧,把 C 包裝成了一個面向對象的語言,包裝對包裝, C++ 很討巧的適應了把可執行程序 GUI 化的趨勢, 成了 GUI 時代的主流開發語言。從表面上看,只要運行這些可執行的程序,就能夠看到圖形界面,就能夠用鼠標點擊操作他們,可是這些東西的底層,都是一個編譯過了的可執行程序,原先 Smalltalk 中的那些運行時環境啊,對象容器啊,都統統不見了,所有的圖形界面程序,還是直接運行在計算機的 CPU 上,而不是一個虛擬的面向對象的容器上。而這個面向對象的容器(也叫做「運行時」或者「運行環境」),才是 Smalltalk 的神。 簡單的說,Smalltalk 本身具有一個面向對象的運行時,所以即使到了執行的時候,裡面所有的對象還是可以互聯互通的。 而 C++ 寫出來的程序,除了編譯之前是面向對象外,只要一編譯,就全部變成機器碼,和對象就再也沒有任何關系了,也就不存在運行時去動態的查看(inspect) 和改變(modify) 這些程序對象的說法。 總之,因為歷史的局限,這些 GUI 的平台,都是漸進的照貓畫虎的演變的,所以沒有一個平台像 Smalltalk 那樣細致地考量過對象的互相通信的問題,再加上我們上面說了,反正擴展系統的方法就是引入新的應用軟件而已,本身也沒有互聯互通的需求,所以這種拋棄運行時的,不讓對象被外部程序控制的實現方法也無所謂不好。

可是開發人員不是普通用戶啊,他們依然要改造計算機成為自己的工具的。在現有的現有工具不能解決問題的時候,要不然自己重新發明輪子,要不然就復用現有的一些工具,或者重新按自己的需求重新配置這些工具。 所以,和一般用戶不一樣,開發人員需要這些 GUI 的可配置性,也需要這些 GUI 程序之間的互聯互通。 用黑話來說,第一個問題關系到 GUI 應用程序的腳本化, 第二個問題關系到 GUI 程序之間的進程間通信。 這兩個問題,說起來簡單,但都牽扯到 GUI 系統的根本設計問題。 歷史在這裡開了一個不大不小的玩笑,把這個唯一的機會給了 Mac OS X。其他操作系統,都因為這樣那樣的原因,在這兩個問題上沒有很好的解決方案。 繼續閱讀 »

Tagged with:
四月 17

軟體測試:1983年 IEEE 其定義為:使用人工或自動手段來執行或測定某個系統的過程,其目的在於檢驗它是否滿足規定的需求或是弄清預期結果與實際結果之間的差別。

測試工程師需要具備的非技術性素質:

    1. 溝通能力
    2. 自信心
    3. 幽默感
    4. 超強的記憶力
    5. 足夠的耐心
    6. 懷疑精神
    7. 自我督促
    8. 洞察力
  • Tagged with:
    一月 11

    发信人: warmbupt (warmbupt), 信区: Linux
    标 题: 看到今天和MS的OS作比较,那就跟大家分享一篇文章~
    发信站: 北邮人论坛 (Thu Jul 3 19:38:02 2008), 站内

    最近在台湾几所大学逛荡,在台大上看到这个觉得写的不错,特别喜欢,原文是英文的,这是翻译文稿:
    (http://www.csie.ntu.edu.tw/~p92005/Joel/)

    到目前為止,Windows和Unix在功能上的相似之處比不同的要多。他們都支持同樣的主流程式作法(由命令列到圖型介面到web伺服器);他們所依循的系統資源基本是完全一樣的,比如幾乎完全相同的檔案系統、記憶體、sockets,還有行程和執行緒等等。兩套作業系統的核心服務,還有開發者能寫的應用程式類型也沒多大的差別。

    剩下的就是文化差異。沒錯,我們全都要吃東西,不過海那邊的人是用木筷子吃生魚片加米飯,而我們在這裡則是用手拿著麵包夾大塊碎牛肉在吃。文化差異並不表示美國人的胃不能消化壽司,或是說日本人不能消化大麥克漢堡;也不表示吃壽司的美國人或吃漢堡的日本人很少;文化差異指的是美國人第一次去東京下飛機時所面對,「這地方真奇怪又該死」那種無法承受的感覺。至於什麼「我們其實都是一樣的,我們都有愛,也都會工作歡唱及死亡,將會克服美國人和日本人永遠無法真正對對方的廁所安排感到自在。」這種空話根本連想都不會想。

    Unix和Windows程式師的文化差異是什麼呢?細微的地方很多,不過有一項最明顯:Unix文化重視對其他程式師有用的程式,而Windows文化重視對非程式師有用的程式。

    這當然是主要的簡化說法,不過事實上確還是個很重大的差異:我們寫程式究竟是為程式師還是為了一般使用者?除了這個問題之外其他的都只是詮釋。 繼續閱讀 »

    十一月 05
    • 頁尾插入「第 頁,共 頁」
    • Ctrl+F9,插入代碼:{page}、{numpages}
      • {page}該頁數
      • {numpages}總頁數
    • Alt+F9,更新代碼
    • 完成
    Tagged with:
    五月 30

    因為業務需要一台筆電,本來打算購買可順利裝 OSX86 PC Notebook,不過時間倉促沒辦法好好 survey,於是打算購買 MacBook 13吋鋁磚版本,最後考量價錢還是太貴臨時喊卡。

    剛好有個機會在 2009/05/17 向朋友購買他的 MacBook 13″ White,以不到 1/2 鋁磚的價錢入手。(然後不小心就把這省下來的錢投資在 iPhone 3G上了 Orz)

    話說回來要是沒有去辦 iPhone 和 3G無線網卡,也就不會有這篇文章啦。

    辦甲蟲機無線網卡時,小姐說用光世代的用戶辦無線網卡有送隨身硬碟,當然就順便拿囉。

    當上個禮拜在工作時,在 WinXP 下開 Adobe 系列和 Office 2007 一直不是很順的情況下,突然打起這顆外接硬碟的主意。

    仔細一看原來這顆外接硬碟效能還不錯耶,是 Western Digital WD3200BEVT,比兩年舊 MacBook 內建的 Hitachi HTS541680J9S 好多了。

    這次放端午連假,家裏拆 Mac 的工具齊全,就來幫 MacBook 升級一下。
    繼續閱讀 »

    Tagged with:
    二月 06

    今天家裡那台裝 Windows XP 的散步龍 PC 突然掛了,進不了 Windows。

    拿出 XP 光碟開機修復無效,拿出 2003 年燒的 Knoppix LiveCD 確認電腦是不是壞了,確認電腦主機板上的重要零組件沒壞後,再次體會到 IceWM 界面驚人的回應速度。不過我不知道要如何在 Knoppix 上掛載 NTFS 格式的硬碟。

    於是只好回我的 iMac 上國網中心的 FTP 火速下載 Ubuntu 8.10 Desktop,再翻出已經很少見的 CD 空白片(我手邊找不到可用的 CD-RW 了),因為之前 PC 的 LiteON 16x DVD-ROM 得了厭食症。

    剛已經用 Live CD 開好機,利用 Ubuntu Desktop 的高支援性,正在備份 NTFS 格式的 C:\> 下的遊戲存檔和重要資料到也是 NTFS 格式的 D:\>,只是速度並不是很快,10 MB/sec 以下,若同時複製兩份來源檔案共可到 1x MB/sec。而且不像 Windows IO 時那樣容易當機,這點倒是和平時用 OSX 的感覺很類似。

    這篇打到這邊,資料應該也備份好了,我要去重灌 XP 了!

    一月 14

    剛找了一下這三種動態語言的比較,來小小整理一下。

    Perl


    Perl 語言的中心思想可以集成為一句話「TMTOWTDI」:

    There’s More Than One Way To Do It.
    (不只一種方法來做這件事。)

    Perl 的作者 Larry Wall 建議可以把這個縮寫詞念成「Tim Toady」。

    另一個常常讓人想起的 Perl 俗語是:

    Easy things should be easy, and hard things should be possible.

    Python


    Python 發明人 Tim Peters 寫的 python 格言(稱為The Zen of Python)道:

    There should be one– and preferably only one –obvious way to do it.

    Ruby


    KISS原則(Keep It Super Simple)

    POLS原則(最小驚訝原則):Principle Of Least Surprise

    參考資料1:人蔘劇場 – Ruby,Python,Perl 中心思想的不同
    參考資料2:Lighty RoR: Ruby 跟 Python 本質上不同

    參考資料3:INET6: 先天與後天程式語言風格

    Tagged with: