l

2011年3月10日 星期四

Ten-Minute Build

March 10 21:06~22:45

和 Teddy 差不多年紀的鄉民們應該還記得當年 SOS (大,小 S)紅遍大江南北的『十分鐘的戀愛 』這首歌:


(下課)十分鐘的戀愛 雖然有一點短暫
你的笑填滿我 心中所有的遺憾
(下課)十分鐘的感情 我將全部屬於你
多希望能夠永遠不分離

可惜做軟體的人沒那麼好命,平平是 10 分鐘,人家可以拿來談戀愛,咱們只能拿來 build 軟體...XD

***

話說當年 Teddy 在讀 Extreme Programming Explained: Embrace Change 這本書的時後,看到第 49 頁寫著某一個 XP 的 primary practices:


Ten-Minute Build
Automatically build the whole system and run all of the tests in ten minutes. A build that takes longer than ten minutes will be used much less often, missing the opportunity for feedback. A shorter build doesn't give you time to drink your coffee.


當時 Teddy 看到這裡其實沒什麼特別的感覺,喔,10 分鐘將整個軟體 build 完畢並跑完全部的測試...了解,收到....轉身後繼續過自己的日子....

好幾個月前聽指導教授說起某開發『倒航 導航軟體』的公司,因為 build 一次軟體要花很久(幾個小時吧)的時間,而且全公司就只有『一個人』知道要如何 build  這個軟體,所以經常會發生 programmers 應觀眾要求『私底下』先把軟體拿給客戶使用(這個客戶是公司內部的員工,需要用這個軟體來建地圖景點資料)。但是曾經發生過員工已經用『私底下版本』的軟體花了幾百個『人/時』來建地圖資料,但是就在『那個人』心血來潮去 build 一下軟體的時候,發現 build 失敗,軟體需要修改,因此導致之前所建立的地圖料要全部重新輸入的情形。

由於這是發生在別人身上的慘劇,聽的人哈哈一笑,總覺的『哪有那麼扯的事』也就沒放在心上,一直到最近 Teddy 聽學弟們提起 build 某個軟體所發生的問題,才慢慢體會到 Ten-Minute Build 這件事情的重要。實驗室有一個軟體全部重新 build 一次需要 15 分鐘左右。鄉民們可能會想『15 分鐘和 10 分鐘差不多啊,已經很不錯了』。錯,因為這 15 分鐘只是去 build 這個軟體並產生安裝程式所需的時間,並沒有跑『test cases』。要是真的去跑 test cases(用 JUnit 寫的 unit tests),可能會超過 2 小時以上。

其實這裡面有很多可以『改善』的地方:
  • 花錢:沒錯,最快的方法就是花錢升級 build server。實驗室的的 build server 的記憶體只有 1 G ,CPU 2.4 GHZ,把記憶體升級到 2G 速度馬上提昇....... 30 秒......有點少...沒關係,如果可以把 build server 升級成新的 i7 電腦應該會快很多。
  • 調整 Build Script:把 build script 寫得聰明一點,例如如果某個 sub-project 以及它所相依的其他 sub-project 如果都沒有異動就不需要重新 build ,或是只測試有異動的程式碼。
  • 調整要執行的 test cases:雖然大家都說『用 JUnit 寫自動化單元測試』,但是嚴格講起來大部分的人所寫的『自動化單元測試』其實都不是『單元測試』,而是大小不一的『整合測試』。因為真正的單元測試要達到『test in Isolation 』,這樣才不會因為『別人帶賽』而導致 test 失敗;而且這樣的單元測試也才能跑得快。所以,在每次 build 的時候,可以先把那些『真正的單元測試』挑出來跑,看看能不能把整個時間控制在 10 分鐘。
  • 電腦上晚班:在人腦下班之後,設定時間自動將整個軟體全部 build 一次並且將那些需要耗時執行的測試案例拿出來跑,這樣可以確定至少每天都有完整 build 一次整個軟體且將全部的測試案例執行完畢。
再想想之前上 Certified ScrumMaster 時 Bas 所說的話:『很多專案都因為測試設備不足而導致開發速度無法提昇』,這是一個很簡單的道理,但是否每個老闆都有這樣的認知,願意投入資源在改善『建構』與『測試』的環境就很難講了。

***

友藏內心獨白:該是換電腦的時候了。

2011年3月8日 星期二

這不是 bug,這是功能

March 08 21:38~23:17

Teddy 很小的時候(小學還是國中的時候) 有一天晚上無意中打開收音機,聽到電台在播放『魏龍豪』和『吳兆南』的相聲段子。這相聲是很老的段子,內容和魏龍豪與吳兆南後來重新錄製的不太相同,現在想買也都找不到了,好懷念啊。雖然相聲內容夾雜了很多『北京方言』,並不能 100% 聽得懂,不過當時 Teddy 就覺的怎麼講話可以講得這麼有趣,做人可以做的如此的耍無賴,反正最後結尾時只要加上一句『您別挨罵了』就可以哈哈一笑一筆帶過。從此之後 Teddy 就喜歡上了相聲這個傳統藝術。

但是一直到長大出社會工作之後 Teddy 才逐漸意識到除了『逗觀眾開心』之外,『耍嘴皮』的真正重要性。例如當有人『木工,軟工,傻傻分不清楚 』時,要知道如何當場糾正這種不正確的觀念。『耍嘴皮』到了一個極致,可以顛倒是非,明明是系統的 bugs,你也可以講成這是『系統功能』,講到讓使用者懷疑起自己的智商是否太低而自己先下跪道歉認錯。這種能力,只要看過『烏龍派出所』裡面的『兩津勘吉』唬爛功夫的人應該就能夠了解。

最近 Teddy 見識到一個『行銷手法』就是將『這不是 bug,這是功能』的精神發揮到極致,不得不讓人佩服,講出來跟鄉民們分享一下。話說 Teddy 已經用了四年多的 Mio A701 手機最近常常電話講不到幾分鐘突然就整個關機,明明剛剛電池還顯示有 70% 的容量,怎麼說沒電就沒電。再加上這隻手機之前曾經被 Teddy 摔過,所以螢幕顯示有點怪怪的,常常會整個顏色偏掉變成有點粉紅色的樣子。所以 Teddy 大約在一個多禮拜前上網查了一下 『A去踢西』的新款手機『滴賽兒 HD』的評價,看到兩派的意見:

贊成派:『滴賽兒 HD』真是太強了,有 4.3 吋TFT大螢幕,1G CPU,800 萬畫素相機。

反對派:『滴賽兒 HD』的電池容量太小了啦,4.3 吋TFT大螢幕 + 1G CPU 卻只配被 1200 mAh 的電池,不是一下子就沒電了。

贊成派:『A去踢西』的技術很好啦,採用新一代的 CPU 雖然頻率提高但是更省電喔,所以1200 mAh 的電池容量用起來不會比前一代的『滴賽兒 』1500 mAh 還要差。

反對派:騙肖A,4.3 吋TFT不用吃電喔?很多用過的人都說『滴賽兒 HD』比『滴賽兒 』還沒有『擋頭』。

贊成派:那有什麼關係,人家『A去踢西』可是很貼心的,現在買『滴賽兒 HD』還免費贈送
內含 5000 mAh 電池蕊的行動電源喔,怎樣,5000 mAh,沒話說了吧。

反對派:我花錢買一隻手機不就是應該能夠讓我至少可以撐過一天再充電嗎?4.3 吋TFT的手機已經夠『大隻』了,我為了用這隻手機出門還要隨身帶著一個差不多大小的『行動電源』,現在是怎樣,我口袋太多沒東西可放是嗎?而且講電話講到一半快沒電還要把『行動電源』拿出來使用,電話尾巴接著一個大大的行動電源這能看嗎?

贊成派:哪樓上的這一位是喜歡吃『蘋果派』的人士嗎?看你一直在雞蛋裡挑骨頭,講『A去踢西』的話壞(Teddy 內心獨白:開始搞『省籍情節』)。
***

看完網路上的討論之後 Teddy 內心一驚,恍然大悟,『A去踢西』還真厲害啊,難怪股價可以破 xxxx。如果鄉民們是『A去踢西』的高層,公司的新手機『滴賽兒 HD』因為不明原因電池只能搭配 1200 mAh。因為要趕著上市所以也沒辦法只好硬著頭皮推出,可是只要使用者一買回家就會發現好像吃電太兇了,大大降低方便性,那怎麼辦?!


鄉民們千萬不要『傻傻的』拿出『工程師』的性格,『砍掉重練』,那就完蛋了。反正本來賣一隻手機毛利就很高,那就想辦法『把缺點轉換成賣點』,打出『幾月幾日之前購買就贈送行動電源』的促銷口號不就得了。佩服,佩服,難怪很多公司都那麼重視 marketing... 什麼都可以賣,什麼都不奇怪,把你的錢弄到我的口袋才厲害...XD


工程師們,生命要顧,卡早睡卡有眠,出了事有 marketing 頂著,怕什麼。


***

友藏內心獨白:如果有那種『買一個 D賽 送 4 顆蘋果』的活動 Teddy 應該會參加喔。

2011年3月6日 星期日

HCI 之博士熱愛的算式

March 06 10:57~13:15

幾個禮拜前在 Kay 的推薦之下 Teddy 讀了『博士熱愛的算式』這本書,內容敘述某位數學博士在 1975 年發生的車禍中傷了腦部,他保有車禍發生前的記憶,但在那之後他的記憶只剩下 80 分鐘,時間一到自動 reset。

由於博士『生活無法自理』,所以不用入監服刑,發生車禍之後博士就由他的大嫂(博士的哥哥已經過世)照料。大嫂幫博士請了一位管家照顧他,但是由於博士的記憶只剩下 80 分鐘,所以這位管家對博士而言每隔 80 分鐘都是一位『新人』。博士每天都穿著一件舊的西裝,他在西裝上身上夾滿了『小紙片』,用以彌補他的記憶只有 80 分鐘的缺陷。在眾多的小紙片中,其中有一張畫著管家的素描並註明她是管家這一點事實。

這是電影版的海報(網路上抓的),請注意博士身上的小紙片。關於這一點 Teddy 頗有意見,因為在電影中只是隨便敷衍的夾了幾張紙,可是從小說的敘述中覺的西裝上應該是『夾滿紙片』才對。此外,電影中的博士看起來也太年輕了一點(小說中的博士應該是有點駝背之類的),而管家也長得太可愛了吧,感覺有點像女僕而不是管家...XD



有人說這本書是『數學科普小說』(這是什麼東東?),Teddy 數學極爛所以並不想要介紹這本書和數學有關的內容,因此關於本書的背景說明到此就夠了。 今天的重點還是要延續 『Designing for Error (3):knowledge in the world and in the head 』這個主題,談談 knowledge in the world and in the head 。

***



上面這張圖節錄自 e-Learning and the Science of Instruction 這本書第 35 頁,原本是在解釋地球人如何學習知識的心路歷程,在這邊借來說明人機互動的設計原則。概念其實很簡單:
  • 人的記憶體區分為『long-term memory』和『working memory』。Long-term memory 類似電腦的硬碟(永久記憶體,關機之後不會消失)容量大但是存取速度慢,而 working memory 類似 RAM (揮發性記憶體,停電或關機之後資料會消失)容量小但是存取速度快。
  • Working memory 的容量是有限制的(請不要說你家的電腦有 512 GB 的 RAM,就算是 512 GB RAM 和硬碟相比也還是『有限』...)。一般常聽到的『7 +- 2 原則』(人的短期記憶可以記住 7 +- 2 個東西)就是指 working memory 的大小(Teddy 內心獨白:還真小)。
  • 視覺和聽覺的資料經過眼睛和耳朵接收之後進入 working memory。
  • Working memory 的資料經過處理之後儲存到 long-term memory ,變成人的 mental models 的一部分。
知道這幾點就差不多了,現在回頭看看一個 HCI 設計原則:不要讓我花腦筋。
 
假設使用者在執行『員工個人資料維護系統』,在該系統的畫面上有兩個按鈕,分別是『存檔』與『列印』這兩個功能。鄉民們是設計這個系統的 programmer,當初你為了『code reuse』,把所有執行成功的訊息寫成一個公用對話盒,所以當使用者執行『存檔』或是『列印』功能的時候,畫面都會出現相同的『執行成功』這個訊息。

問題來了,畫面上有『存檔』與『列印』這兩個功能,但是不管執行那一個功能所顯示的訊息都一樣,都是『執行成功』,那萬一使用者恍神要存檔卻不小心按成列印,而程式卻又告訴使用者『執行成功』,那怎麼辦?

切,鄉民們會說,這有什麼好大驚小怪的,又不是飛航系統,按錯又不會死人。但是想一下:
  • 使用者以為存檔完成但是卻是把資料印到『公用印表機』而不自知,所以使用者也不會去印表機前拿資料。如果這些員工個人資料有包含薪水或是退休金提撥(可以反推薪水)等資料被其他人拿走,那就不太好了。
  • 使用者以為資料已經存檔完成,此時使用者電腦突然當機。下次使用者再進入『員工個人資料維護系統』之後,發現自己的資料怎麼還是舊的?會以為軟體功能有問題或是被駭客入侵而回報一個 bug,結果查了老半天才發現是自己的 腦袋有問題 操作疏失。
所以,如果有好好應用 put the required knowledge in the world 這個原則,那麼這個訊息就要改成『存檔成功』和『列印成功』。不要把『請自己記住你剛剛執行了什麼功能,按了什麼按鈕』的責任丟到使用者的身上(Don't require all the knowledge to be in the head.)。

因為 working memory 容量有限,所以如果沒有善用 put the required knowledge in the world 這個原則所設計出來的介面會增加使用者小腦袋的負擔。更慘的是,有些使用者介面操作的習慣和人們一般的認知不同或是相反,這種介面還會增加使用者的 mental loading,每次操作這種『與自己認知不同』的功能時都要『花腦筋』想一下。大部份的人應該都同意『花腦筋』是一件很累人的事情,所以看『夜市人生』與『海綿寶寶』的觀眾群才會遠大於看『Discovery』的人...XD。總之,需要讓使用者經常『花腦筋』的介面用久了會有種『身心具疲』的感覺,而且容易出錯。舉個例子,在台灣開車駕駛座在左邊,對駕駛而言這已經是一種『習慣』,但是如果要右駕的國家例如日本或是英國開車,雖然同樣都是開車,所需要技能基本上是一樣的,但是剛開始開車的時候通常會很緊張,時時提醒自己轉彎的時候方向不要搞錯(增加 mental loading),使得原本很輕鬆的開車之旅變成很『用力』的開車之旅。

再舉個例子,Teddy 平常工作的時候用到兩台電腦,透過 KVM 來共用一組鍵盤,螢幕,和滑鼠。這個 KVM 可以透過 Scroll Lock + Scroll Lock + [1, 2, 3, 4] 來切換到不同的電腦(這是一個 4 ports 的  KVM),但是很奇怪的一點,有時候 (不是每一次)Teddy 按下 Alt + Tab 的時候,KVM  也會切換到不同的電腦。由於 Teddy 老早就習慣用 Alt + Tab 來切換不同的應用程式(Windows 和 Linux 上都是用這組熱鍵),但是這個該死的 KVM 不知為什麼有時候會把 Alt + Tab 當成是要切換到不同的電腦的信號,Teddy 讀了手冊也看不到 KVM 有提到這一點,也不知道這是 KVM 的 bug 還是功能。總之每次當 Teddy 反射性的要按下 Alt + Tab 切換應用程式的時候,就被迫要『動一下腦筋』提醒自己改用其他方式切換應用程式。有時候忘了還是使用 Alt + Tab ,就要再手動切換回剛剛正在操作的那台電腦,次數發生多了還真是挺不爽的。

***

回到博士熱愛的算式,出車禍之後博士已經失去增加 long-term memory  資料的能力,而且他的 working memory (short-term memory)每隔 80 分鐘就會消失(每隔 80 分鐘重新開機),怎麼辦?沒有辦法 put the required knowledge in the head 那只好 put the required knowledge in the world(寫在小紙條上),日子還是過的下去。


***

友藏內心獨白:要買到一台好用的 KVM 還真難,不是無線滑鼠不能用就是切換熱鍵有問題。

花博吃破產

March 05 23:13~ 06 00:37

今天是 Teddy 第三次去花博,嚴格講起來是第四次,不過上禮拜六那一次到了新生園區門口看到排隊入園的人嚇了一大跳後來決定不入園了,所以那次就不算(廢話,又沒進去當然不算)。

時間有點晚,直接講重點:

入園方式

由於上禮拜見識到新生園區入園的龐大陣仗,此次改由員山園區入園(之前去過還滿快的)。約早上 8:30 左右到達員山站,人已經滿多的。不過 9 點開放入園之後幾分鐘之內就進園區了,之後邊小跑步邊走到美術園區去拿故事館預約券,拿到 16:30 分的。然後走 花枝 花之隧道(今天一共走了四次)到新生園區去拿養生館預約券,拿到  10:00 的。這個養生館預約券真是超好拿的,幾乎不用排隊馬上拿到。附註說明,真相館和名人館 Teddy 第二次逛花博已經去過了,而夢想館則是完全放棄,所以可以拿的預約券今天全部拿完。


 快 9 點的時候 Teddy 往後一看,天啊,後面好多人在排隊啊,早個 30 分鐘到還是很有用的。

 入口處有原住民朋友的表演


行程表

養生館附近亂逛 --> 養生館(盆栽很好看)-->青青步道(排隊約 10-20 分鐘,view 很棒)--> 隨便亂逛 -->花茶殿吃午餐(人很多要先找位置,簡餐 150 元附一杯飲料,湯自取,還算 OK)--> 隨便亂逛 & 休息 -->美術館喝下午茶 (坐在凸出來的位置,屋頂是玻璃沒有遮陽,冷氣也不冷,差點中暑)--> 跑去美術館內休息 --> 故事館 (很多古董家具,小而美,館內不可拍照) --> 台北故事茶坊吃晚餐(東西好吃但是有點貴,服務很好加收 1 成服務費) --> 美術館看莫內畫展...的紀念品販賣區... --> 未來館 & 天使生活館  --> 回家

這張是晚上照的,Teddy 就是坐在凸出來那一塊吃下午茶,當時可是有小太陽滴


不信的話看這張照片就知道了,花博地圖另類用法



重要資訊

  • 早上看到排隊進未來館的人超多,看來至少都要等 1 小時以上。後來 Teddy 不小心偷聽到某位現場鄉民對他朋友說:『等到晚上 7 - 8 點來都不用排隊,1 分鐘就可以入場』。嘿嘿,打聽到重要資訊,懶的排隊的 Teddy 當然是等到晚上再來。
  • 美術館週六入館看一般展覽不用錢(這一點之前 Teddy 就知道了)
  • 台北故事館的『楊桃』已經熟透了,有些都掉下來了。
  • 在台北故事館旁的台北故事茶坊好像是亞都麗緻經營的。
  • Teddy 在台北故事茶坊刷卡結帳之後,對方還對 Teddy 說:『陳先生,謝謝』之類的話。 耶,他怎麼知道 Teddy 是陳先生...很簡單啊,因為信用卡上面有寫啊。這不是重點,重點是 Teddy 覺的台北故事茶坊的員工滿專業的,在一些小地方都留意到顧客的需要或是給顧客一些小小的感動(Teddy 也是略懂 one-to-one marketing 滴)。

還想再去

雖然台北故事茶坊對於 Teddy 這種窮忙族而言是有點昂貴(請看帳單),但是用餐環境真的滿好的,東西也好吃,服務又棒。所以,如果哪一天鄉民們突然想要奢侈一下,這個餐廳還不錯。

請注意這份菜單,有放菜色的照片,有達到『knowledge in the world』的要求喔。


心好痛


可以看到台北故事館



Kay 單點的松露拌麵


晚餐套餐的麵包

套餐前菜:桂花梅香鮮蟹盅

套餐例湯:玉米濃湯

套餐主菜:慢燉奶油野菇梅花排

套餐飲料:冰紅茶

套餐飲料:烤布雷

晚上的故事館(左方)打燈之後還滿漂亮的,右邊就是台北故事茶坊

***

友藏內心獨白:去看花博怎麼沒有花的照片?

2011年3月3日 星期四

Designing for Error (5):execution and evaluation

March 03 21:39~10:52

終於到了 Designing for Error 這個系列最後一篇(希望是),不知道有沒有鄉民已經等在 電視機 電腦前面等著收看這一集的實況轉播,每天寫也是會累滴。

Teddy 記得在『美味關係』這部電影裡面,女主角之一的『茱莉鮑爾』立志用一年的時間,每天都要按照『掌握法國烹飪藝術』這本食譜上的菜單親自做菜,並把做菜的心得發表在自己的部落格上。等 Teddy 自己開始認真寫『搞笑談軟工』之後才發現,這怎麼可能,每天要『擠料』出來可是很傷腦細胞的一件事。就算是腦細胞撐的下去,每天打那麼多字,手腕,手肘和肩膀也會受不了(路人甲:Teddy 你好弱喔...)。

言歸正傳,今天要談的是 The Psychology of Everyday Things (p. 140)對於 Designing for Error 的總結,一共有三個重點,今天談第三個重點: 

Narrow the gulfs of execution and evaluation. Make things visible, both for execution and evaluation. On the execution side, make the options readily available. On the evaluation side, make the results of each action apparent. Make it possible to determine the system state readily, easily, and accurately, and in a form consistent with the person's goals, intentions, and expectations.

這一點應該是很容易理解的(雖然並不見得容易做到),舉的例子先。假設你想要趕流行學人家『霸凌同 學 事』(PS:叔叔有練過,小朋友不可以學喔),於是有一天上班你帶了一根棍子到公司,遠遠看到被霸凌對象迎面而來,此時你高高舉起手上的棍子往對方頭上猛 K 下去。以上動作叫做 execution,你事先擬定了一個霸凌同事的『目標 (goal)』,為了達到此目標,你選擇了用『棍子猛 K 對方』的個作法(method),當看到對方之後,你採行一連串的行動(operators)以便達到此目標。啊,一不小心又 GOMS 上身了...

K 完一棒之後就沒事了嗎?當然不是,因為在採取行動(execution)之後你還必須要評估一下行動是否成功(evaluation)。按照常理推斷,對方被你 K 了一棒之後,應該要一邊用手摸著被 K 的地方,同時發出一聲慘叫外加大聲重複背誦三字經。如果這些事件都發生了,你就可以確定此次的霸凌成功,否則就是失敗。

***

On the execution side, make the options readily available. On the evaluation side, make the results of each action apparent 是避免使用者操作錯誤相當有用的方法。翻成白話文就是,在設計介面時,對於使用者可以操作的功能有哪些選項要清楚的表達出來。例如,如果一個檯燈用的是『省電燈泡』,只有『開』和『關』的功能(不能調亮度),那麼這個檯燈的開關就應該設計成只能『開』和『關』。


採用 on/off 開關

execution side(開關) :           evaluation side(電燈):
on                                                            亮
off                                                            暗
 
如果開關設計成可以調整亮度(鎢絲燈泡)的那種旋鈕開關,那麼就會很奇怪了。為什麼奇怪?因為:

採用旋鈕開關開關


execution side(開關) :           evaluation side(電燈):
往右轉到最底                                            亮
往左轉到最底                                            暗
非上述兩個狀態                                         沒反應

就沒有達到 make the results of each action apparent 這一點要求,也就是說使用者明啊明就有做了某些動作,但是卻沒有觀察到任何反應。以剛剛霸凌的例子來講,原本 K 了一棒就要快閃,受害者痛一下也就沒事了,但是萬一好死不死這個受害者硬撐不喊出聲音來,你可能以為沒 K 到或是 K 的太輕,於是卯起來連續 K 了 100 下,一直到受害者真的不可能再有任何反應為止....這是很恐怖滴...所以....伊...想哭不要硬撐。
 
***

Execution and evaluation 的例子很多,平常經常看到的 progress bar 就是讓使用者知道他剛剛執行的動作(execution)的狀態(evaluation)。或是當使用者按下『確定交易』的按鈕之後,系統回覆『交易成功』也算。想一想,如果一個系統只有 execution(提供使用者操作否個功能的介面)而沒有 evaluation,這樣的系統是很難被正確使用的。

Teddy 最近就遇到一個慘痛的經驗,Teddy 公司和家裡的電腦都安裝 Ubuntu 作業系統,因為工作的需要經常會用到 Skype 來 聊天 談公事和傳輸檔案。還好 Skype 有提供 Ubuntu 版本,雖然有一些小問題,不過大致還堪用。

有用過 Skepe 的人都知道當你傳輸檔案給對方的時候,Skype 會跳出一個『檔案傳輸對話盒』(如下圖所示),讓你知道目前傳輸檔案的進度。不知道為什麼,在 Teddy 的電腦上有時候這個『檔案傳輸對話盒』就是不會出現。明明對方都已經接收到檔案了,Teddy 還以為檔案沒有傳出去(因為沒有得到任何 feedback 所以無法 evaluate 剛剛的檔案傳輸動作是否有正確執行)。有一次同事就問 Teddy,同一的檔案幹麼連續傳 10 幾次給他,此時 Teddy 才發現這個問題。



***

節目到這邊已經接近尾聲,鄉民們應該會發現其實這些 Designing for Error 的方法都很簡單,看起來也沒什麼學問。沒錯,這本書好就好在這裡...因為大部分都看的懂,所以看完之後有『自我感覺非常良好』。但是別忘了『知易行難』的道理,意思懂了不代表應用到實際設計上的時候都還記得這些道理。好里加在好心的 Teddy 把這些重點幫鄉民們記錄下來(鄉民甲:有重點嗎?!),上班上到腦袋空空的時候來逛一下,久而久之就不會忘記了。


***

友藏內心獨白:K 人的例子會不會太暴力一點...

2011年3月2日 星期三

Designing for Error (4):constraints, forcing functions, and natural mappings

March 02 22:27~23:49


The Psychology of Everyday Things (p. 140)對於 Designing for Error 的總結,一共有三個重點,今天談第二個重點: 


Use the power of nature and artificial constraints: physical, logical, semantic, and cultural. Use forcing functions and natural mappings.

利用強加『限制(constraints)』的方式來避免使用者犯錯是一個常見的作法。什麼叫做強加限制?最簡單的一個例子,『時速限制』。因為怕開車開太快容易發生車禍(等於產生 errors),因此政府對不同的路段設計不同的時速限制,這就是 constraints。Constraints 聽起來雖然感覺是一個『負面』的字,因為它限制了使用者『任意使用』某物品的自由,但是往好的方面想,它也減少了使用者犯錯的可能。

路人甲:但是還是很多人超速啊!?

Teddy:自然有法律會去制裁他。
 
不知道鄉民們去 ATM 領錢的時後有沒有注意到,當選完要領的金額數目之後,ATM 會問你『是否要繼續交易』,如果選否,則 ATM 會把提款卡會先退出來。除非你把提款卡拿走,否則 ATM 是不會把錢吐出來的。相信大部分的人不會忘記要拿錢 只會忘記拿帳單,因此這種順序上的限制(先拿卡再拿錢)可以避免使用者忘記拿走提款卡的機率。想一想,如果反過來,先拿錢再拿卡,應該會有很多人一拿到錢太高興了就把提款卡給忘了。
 
***

看到這裡鄉民們應該會問,什麼是 forcing functions?依據書上的解釋(p. 132):

Forcing functions are a form of physical constraint: situations in which the actions are constrained so that failure at one stage prevents the next step from happening. 

書上介紹有三種 forcing functions (p. 135):
  • Interlock:An interlock forces operations to take place in proper sequence。舉例說明之,如果使用者在微波爐啟動的時候不小心把微波爐的門打開,那麼微波外洩可是很危險滴,據江湖傳言輕則導致不孕(開爐自宮)或是變成盲劍客,重則有生命危險。因此,微波爐就被設計成『只要門一打開就停止運轉』,或是說『只有在門關起來的時候才可以運轉』。回頭再讀一次 interlock 的定義:一個 interlock 強制某些操作只能在特定的順序之下才可發生。『先關門-->後啟動』就是一種『特定順序』,如果違反此順序(限制)則該操作(啟動微波爐)就沒有作用。鄉民們使用微波爐的時候不知道有沒有想到如果沒有這個 interlock 可是『祝恐怖』滴...搞不好微波爐就變成:「好微波爐!微波爐的奧妙之處,在於它可以藏在民居之中,隨手可得,還可以假裝做菜或是加熱食物來隱藏殺機,就算被警察抓了也告不了你,真不愧為七大武器之首!」(Teddy 內心獨白:萬一停電不就沒搞頭了...XD)
  • Lockin:A lockin keeps an operation active, preventing someone from prematurely stopping it。想像一下你正在使用 Microsoft Word,文件編輯到一半突然不小心『手ㄎㄟˊ』 去按到『關閉』功能。萬一 Word 真的傻傻的就直接離開,不帶走一片雲彩,那麼你剛剛所打的那一堆資料就真的是『悄悄的來,又悄悄的走』。還好文書編輯軟體都針對『如果有尚未存檔的文件,在結束程式之前必須要讓使用者再次確認』的機制,也就是 lockin 所要達到的 keeps an operation active, preventing someone from prematurely stopping it(讓 Word 繼續活著,除非使用者確定不儲存未存檔的文件)。
  • Lockout:A lockout device is one that prevents someone from entering a place that is dangerous, or prevents an event from occurring. 鄉民們應該有看過類似『惡靈古堡』這類的電影,就是某個研究病毒的機構,有一天突然不小心病毒外洩,此時電腦自動『關門放狗』(放下安全門),不讓任何人進入受到污染的區域(prevents someone from entering a place that is dangerous)。當然,萬一不幸你是那一個處在污染區域的人,那你就被『lockin』關禁閉直到變成 薑絲 僵屍才出得來...XD
***

最後談談 natural mappings,舉一個最簡單的例子,假設鄉民們家裡有五盞電燈,位置排列如下。
 
電燈1     電燈2     電燈3     電燈4     電燈5   
 
如果電燈開關排列的位置和電燈的位置一樣(如下所示),那麼開關電燈的時候就不容易搞錯。為什麼,因為控制端與被控端有著 natural mapping。
 
開關1     開關2     開關3    開關4     開關5

但是,如果開關排列的位置長成這樣子:

開關3     開關5     開關1    開關2     開關4
 
那麼每次開電燈都要搞得像是『樂透開獎一樣』,能猜中還真不容易。

***

友藏內心獨白:電影裡面還真的有用微波爐來殺人的情節,難道是破壞了 interlock?


2011年3月1日 星期二

Designing for Error (3):knowledge in the world and in the head

March 01 21:16~22:36


今天談一下 The Psychology of Everyday Things (p. 140)對於 Designing for Error 的總結,一共有三個重點,分三次介紹。 


第一個重點:


Put the required knowledge in the world. Don't require all the knowledge to be in the head. Yet do allow for more efficient operation when the user has learned the operations, has gotten the knowledge in the head.

相信鄉民們都有到餐館點餐的經驗,不管是中文或是英文的菜單,有時候光從『菜名』還真不知道這道菜的『組成份子』是什麼東東。什麼『貓耳朵』,『螞蟻上樹』,『青龍皮皮挫』,沒吃過的人還以為這菜裡面真的有『貓』『螞蟻』和『青龍』。但是,如果菜單上面有照片,再加上適當的文字說明那麼就比較容易了解。所以這本書建議在設計使用者介面(任何物品)要 put the required knowledge in the world,以上面這個例子,菜單的照片,文字是了解這些奇怪菜名的 required knowledge,因此要將這些資料放在菜單上面(the world, 你要操作的那件物品)。如果在待操作的物品上(菜單)缺少這些資訊,那麼除非客戶的腦袋中(the head)已經有了這些點菜的必要知識,否則點錯菜是必然的。


當然,對於經常上館子的老饕,不需要看菜單也能點菜。因此把每道菜的照片和說明放在菜單上並不會限制老饕點菜的速度 (do allow for more efficient operation when the user has learned the operations)。

在這邊穿插一個真人真事,話說某人到美國出差,放假的時候和同事出去玩。到了用餐時間,到某間餐廳點餐,由於大家都看不懂菜單,於是某人想到一個安全的點菜方法,就是不同種類的餐點都各點一份。當他點好菜之後,服務生面有菜菜色的和他再次確認。結果,最後上了四道菜... 全部都是『湯』。因為某人點了四道套餐所附的湯。

要怪誰?依照 The Psychology of Everyday Things 的思考邏輯,當然不能苛責某人啊,要怪就怪餐廳的菜單設計的太爛了啦,不 user friendly。
 
***

再舉一個軟體的例子,Microsoft Word 和 OpenOffice 都有一個『選擇性貼上』的功能,可以把,例如從網頁或是其他文章段落中所 copy 下來的文字以『未格式化文字(純文字)』的方式複製到 Word 或是 OpenOffice 中(這個功能 Teddy 經常使用)。為了做到『put the required knowledge in the world』,這些軟體允許使用者透過 Edit-->Past Special... 的方式來執行此功能。同時,為了 『do allow for more efficient operation when the user has learned the operations』,OpenOffice 支援 Ctrl+Shift+V 這組熱鍵執行『選擇性貼上』的功能。很可惜的是,Teddy 在 Microsoft Word 中反而找不到這相對應的熱鍵,所以單就這個功能來看,Word 並沒有做到『do allow for more efficient operation when the user has learned the operations』這一點。


Teddy 用 『歪批 GOMS』所介紹的方法來分析一下在 Word 中要執行此功能所需要的步驟:

method 1:在 Word 中用滑鼠執行選擇性貼上

  • 移動滑鼠到『編輯』menu 上
  • 按下滑鼠左鍵
  • 移動滑鼠到『選擇性貼上』這個 item
  • 放開滑鼠左鍵 (此時 Word 彈出一個選擇性貼上對話盒)
  • 移動滑鼠到選擇性貼上對話盒上的『未格式化文字』上
  • 按下滑鼠左鍵
  • 放開滑鼠左鍵
  • 移動滑鼠到確定按鈕上
  • 按下滑鼠左鍵
  • 放開滑鼠左鍵
需要 10 個 operators

Word 主畫面

選擇性貼上對話盒(Word 畫面)


如果在 OpenOffice 上用熱鍵就簡單多了。

method 2:在 OpenOffice 中用熱鍵執行選擇性貼上

  • 按下 Ctrl+Shift+V
  • 放開 Ctrl+Shift+V


只需要 2 個 operators,就算是把 Ctrl, Shift, V 當成 3 個 operators,按下與放開這三個鍵也只需要 6 個 operators,比在 Word 中用滑鼠還少 4 個 operators。當你在編寫文章而需要經常使用『選擇性貼上』這個功能的時候,你就會發現『do allow for more efficient operation when the user has learned the operations』這一點的重要性了。
 
OpenOffice 主畫面

 ***

友藏內心獨白:這麼一來,是不是說如果介面設計的好,就算是『使用者的腦袋裝大...便當一個只要50塊...』也沒有關係嘍?!