Joel on Software

Joel on Software 周思博趣談軟體

 

程式師的使用介面設計手冊
第1章
第2章
第3章
第4章
第5章
第6章
第7章
第8章
第9章

其他Joel on Software文章( 繁體中文)

其他Joel on Software文章(英文)

與作者聯繫 (英文)

 

程式師的使用介面設計手冊
第1章: 控制你的環境使你快樂


作者: 周思博 (Joel Spolsky)
譯: 梅普華
2000年4月10日

大多數我認識的C++程式高手都厭惡寫使用介面的程式. 這讓我覺得相當驚訝, 因為我覺得使用介面程式設計的本質既容易又直接有趣.

說它容易, 因為用到的演算法不會太複雜, 最多只是讓在某個矩型正中央畫出另一個矩形. 說它直接, 因為有錯誤時馬上就能看到並且立即修正. 說它有趣, 因為工作的成果馬上就能看得到. 感覺起來就像是直接雕塑出程式.

我認為大多數程式員會害怕撰寫使用介面的程式, 其實是害怕使用介面設計本身. 他們認為使用介面設計就像美術設計一樣: 是那些全身黑衣喝著拿鐵極富創造力的傢伙創作出藝術品的神秘過程.程式員自認是分析性邏輯性的思考家: 擅於推理而缺乏藝術判斷力. 所以認為自己無法做使用介面的設計.

事實上我發現使用介面設計是相當容易而且合理的. 它並非那麼神秘, 不一定要拿到藝術學位還要偏愛染亮紫髮才會. 使用介面是有合理的方法的, 利用一些簡單符合邏輯的準則就可以改善程式的介面. 

我並不是要寫"使用介面設計之道". 使用介面不是藝術也不是佛教, 它只不過是一套規則. 一種有方法合乎道理的思考方式. 這本書是為程式員設計的. 所以我會假設不必教你如何建立功能表,而是要你思考要在功能表裡面放些什麼(或者是否需要功能表). 我會告訴你一個所有良好使用介面設計共通的通則, 而且非常容易理解

我第一份真正的工作是到一家大型的麵包工廠做事. 這家工廠的設計有六條麵包生產線. 每兩條生產線有一個生麵糰攪拌機, 可以攪拌出180公斤的麵糰再送到左邊或右邊:

不過這只是原本的設計. 實際上攪拌機C還有生產線3和生產線5都還沒弄好. 所以實際的安排如下:

<>

細心的讀者可能會覺得奇怪"麵糰怎麼能由攪拌機B送到生產線6呢?". 沒錯, 這就是約耳我出場的地方. 你可能不會相信, 我的工作就是站在攪拌機B的左邊, 用推車接住攪拌機吐出來的180公斤巨大麵糰, 再把車推到生產線6, 然後用類似絞車的裝置把麵糰抬起來放上生產線6. 由下午10點起到淩晨4點, 我每十分鐘就要重複一次這個動作.

麻煩還不只這樣. 生產線6實際上並不能一次處理180公斤的麵糰, 所以我得用一份大刀把麵糰切成10份. 我根本不想描述這有多麼辛苦.

當然啦, 工作前幾天我很痛苦. 這事看起來根本是不可能做到的. 我全身每根骨頭都在痛. 水泡一直消不了. 全身沒有一個地方不痛的.

最初我根本沒辦法持續把麵糰送到生產線6. 當麵糰來不及送到時, 生產線上就會出現一個大缺口. 等缺口流到爐子時, 爐子(在較少的麵糰上消耗相同的能源)的溫度就開始上升並且把麵包燒焦. 有時候生產線6會亂成一團停止動作, 可是攪拌機卻還在不停的製造麵糰, 這時推車可能全都裝滿麵糰. 這時候我就得把地板清乾淨然後上油, 再把麵糰倒在地上, 等會再刮起來. 這個作法其實相當有用, 因為當麵糰放超過約30分鐘後就會發酵, 發酵後就做不出好的麵包. 這時候只能把麵糰切成5公斤的小塊, 等新麵糰來時每次混進一塊.

過了一個多星期我漸漸熟悉整個過程. 如果沒記錯的話, 在每次10分鐘的麵糰處理過程中我可以休息到2分鐘. 我把整個時間弄得非常清楚, 還學會在生產線停擺時讓攪拌機停一次.

於是我開始思考為什麼啤酒廣告會說some days are better than others.

某一天想著這個問題的時候, 我注意到有一架堆車的輪子很髒, 沒法子轉得很順. 有時候根本不朝我推的方向走然後撞上東西. 有件事有點討厭. 就是在拉鏈子要把推車吊起來時, 有時會被鏈條上的金屬刺刮傷(只是輕傷). 另外還有一件事, 當我推空車去裝攪拌機射出的麵糰時, 可能會踩到地上的油漬滑倒. 只是一點小困擾, 算不上什麼大麻煩.

有時也有些小小的勝利. 我學會精準地計算麵糰產出的時間, 讓新麵糰剛好在舊麵糰剛用完後幾秒送達. 這樣就能確保有最新鮮的麵糰並且製作出最好的麵包. 另外還有些更微細的勝利: 攪拌機有時會濺出小粒麵糰黏在牆上. 這時我會用插在後口袋的油漆刮刀把麵糰刮下來丟進垃圾桶. 沒錯! 就只是這樣. 當我把麵糰切成小塊時, 有時會切到很. 當我能控制我周遭的世界時, 即使是以再微不足道的形式控制, 還是能獲得小小的滿足.

這就是那一段日子的情形. 很多小小的挫折還有很多小小的成功. 不過這些挫折和成功都是會累加的. 即使微不足道的挫折也會影響你的心情. 看起來人的情緒並不在意事件的大小, 反而著重在事件的數量.

於是我開始注意到, 我最快樂的時候都是遇到很多小成功而挫敗的次數很少.

多年以後當我上了大學, 我學到一個重要的心理學理論, 就是由Dr. Martin E. P. Seligman發展的習得無助感(Learned Helplessness). 這個理論有著多年的研究結果支持, 是說很多次的沮喪會累積成一種無助感 (也就是無法控制環境的感覺).

你愈覺得自己能控制環境, 而且所做的動作確實有效, 就會覺得愈快樂. 當你發現自己沮喪憤怒煩亂時, 很可能是發生了某些你無法控制的事, 甚至是很微細的事情. 鍵盤上的空白鍵不太正常. 結果打字時幾個字接在一起. 這會讓人沮喪, 因為你按了空白鍵可是什麼都沒有. 大門的鑰匙不對勁, 轉動的時候就卡住了. 這又是另一個挫折. 這些事會累加起來; 日復一日就讓我們變得悶悶不樂. 雖然這些事實在微不足道, 不應該掛在心裡操心(我是說非洲還有人在挨餓, 看在老天份上我實在不能為空白鍵煩心), 可是就是會影響我們的心情. 

讓我們休息一分鐘, 然後把主題拉回電腦. 

我們要虛構一個典型的視窗高階使用者"皮特". 當你在考慮使用介面時, 想像一個虛構的使用者會很有幫助. 虛構使用者愈真實, 考慮他們使用產品時效果就會愈好. 皮特是在某家技術性書刊出版社裡工作的會計師, 使用視窗有六年經驗, 主要在辦公室用, 偶而也會在家裡用. 皮特很能幹而且很技術性. 他會自己安裝軟體; 會閱讀 PC Magazine, 甚至還能寫些簡單的Word巨集協助辦公室的秘書開發票. 他家裡有裝纜線數據機. 皮特從來沒用過麥金塔. "太貴了"他會告訴你說"128MB RAM的700 Mhz PC才多少錢..." 好了, 這就是皮特. 我們都知道了.

有一天皮特的朋友珍娜有電腦問題找他幫忙. 珍娜有台麥金塔iBook, 因為她喜歡那種半透明的外殼. 當皮特坐下來試著用麥金塔時, 很快就遇到挫折了. 他說:"我恨死這些玩意了". 到最後皮特還是能幫上珍娜的忙, 不過卻變得暴躁不悅. 他說:"麥金塔的使用介面怎麼這麼爛."

爛? 他在說什麼啊? 大家都知道麥金塔有個優雅的使用介面, 對不對? 這可是最容易使用的典範?

下面是我對這個問題的分析.

在麥金塔上要移動視窗時, 用滑鼠抓住視窗任何一邊就可以移動. 而在Windows上一定要按住標題列才行. 如果你按到視窗框邊, 就會改變視窗大小. 皮特在幫珍娜時想拖拉視窗右框邊把視窗變寬. 結果卻移動了整個視窗, 而非照他預期的改變大小.

Windows顯示訊息框時, 可以按enter鍵空白鍵把訊息框清掉.  而在麥金塔上按空白鍵是無效的. 通常必須用滑鼠來點. 當皮特在看到警告時, 他照著過去六年來潛意識的動作想按空白鍵清除訊息, 按第一次沒有用. 皮特不自覺地更用力的按空白鍵. 因為他認為問題一定是空白鍵按得太輕,以致於麥金塔沒有偵測到按鍵. 事實上 麥金塔是有偵測到按鍵的 -- 可是這個鍵當時沒有作用! 最後皮特改用滑鼠. 這又是另一個小挫折.

皮特也知道按Alt+F4可以關閉視窗. 不過這在麥金塔上卻是更換磁碟機. 皮特想點選桌面上的Internet Explorer圖示, 不過圖示卻被另一個視窗遮到了.   所以他按Alt+F4關閉視窗並且立即在圖示所在位置連按兩下. Alt+F4並未關閉視窗而是叫出電腦上的碟碟機, 所以他的連擊就按到原先想關閉視窗上工具列中的Help按鈕, 然後開始叫出求助視窗. 他想關閉一個視窗結果卻還有兩個視窗開著.

又是一個小挫折. 不過老兄你要知道, 挫折是會累積的. 等那天結束的時候, 皮特已經變得暴躁不悅了. 當他試著控制事物卻徒勞無功. 空白鍵和Alt+F4鍵都"沒有反應" -- 簡直就像這些鍵壞掉一樣. 想把視窗拉寬時視窗也不聽話, 只會像開玩笑般到處動, 完全沒有變寬. 真是爛視窗. 雖然整個過程都是潛意識的, 失控的微妙感覺卻會變成無助感,讓人覺得很慘. "我喜歡我的電腦,"皮特說. "我都設定好了, 會照我喜歡的方式作業. 可是這些麥金塔又爛又難用. 根本是在折磨人. 如果蘋果公司這些年專心做MacOS而不是去亂攪什麼Newton PDA, 他們的作業系統才不會這麼糟呢."

沒錯, 皮特. 我們很能了解. 雖然麥金塔真的很容易使用(就Mac使用者而言), 皮特還是會有這種感覺. 要按什麼鍵關閉視窗完全是隨意的. 微軟的程式員(假設是抄麥金塔介面的那批人) 可能認為自己增加了一個很酷的新功能, 可以拖拉任何一個邊框改變視窗大小. 而MacOS 8.0的程式員可能認也覺得自己加了一個很酷的新功能, 讓你可以拖拉任何一個邊框移動視窗.

大多數看到有關使用介面的論戰都弄錯重點了. 因為Windows提供更多方法可以改變視窗大小, 所以比較好. 那又有怎樣? 這根本不是重點. 重點是使用介面是否依照使用者所期望的方式反應? 如果沒有, 使用者會覺得無助失控, 就像我想推推車卻撞上牆壁的狀況一樣.

使用介面重要是因為它會影響感覺,情緒以及使用者的心情. 如果使用介面不好,讓使用者覺得他們無法控制你的軟體, 他們絕對不會高興,而且會怪罪你的軟體. 如果使用介面很聰明, 讓事情都能照使用者所想的進行, 他們完成一件小事時就會很高興. 嘿! 我拷好一片光碟了! 這個程式 可以用耶! 真是個好軟體! 好耶!!!

你必須讓人們覺得他們似乎能控制環境, 才能使他們快樂. 要達到這個目的, 你必須正確地 解釋他們的動作. 介面必須依照他們所期望的方式作用. 

因此所有使用介面設計的通則就是:

 

如果程式的行為與使用者的期望完全一致, 就是一個設計良好的使用介面.

 

希列(Hillel,猶太思想家)說過:"除此之外全部都只是註釋(everything else is commentary)". 同樣的, 良好使用介面設計的其他所有規則也都只是演譯所得.



> 第2章

文件來源: User Interface Design for Programmers Chapter 1: Controlling Your Environment Makes You Happy (英文) 

約耳.斯珀儿斯奇是Fog Creek Software (設立在紐約的一家小型軟體公司) 的創立者. 約耳畢業於耶魯大學 (Yale University) ,並曾經在微軟, Viacom 和 Juno 擔任程式人員与管理工作.


這些網頁的內容為表達個人意見
Copyright ©1999-2005  Joel Spolsky. 所有權利皆予保留 使用規定

FogBUGZ | CityDesk | Fog Creek Software | Joel Spolsky