- 快人一步:系統性能提高之道
- (美)卡里·米爾薩普
- 3618字
- 2024-11-13 10:35:03
第4章 南希
1994年,我在科羅拉多州丹佛市認識了南希(她的真名)。也是在一個周三,與我當時拜訪過的許多公司一樣,她所在的公司購買了Oracle的大型財務軟件許可。
任務以典型的方式開始。周一早上,我飛抵斯泰普爾頓機場,驅車前往公司,一到那里,我們就召開了一場大型會議。十幾個人在會議室里吃著甜甜圈,喝著咖啡,直到會議正式開始。數據庫管理員和技術專家坐在長會議桌的左側,用戶和系統負責人坐在右側,作為他們的客人,我坐在最前面。
在大家輪流講述有關該系統的故事時,我會進行記錄。用戶首先發言。理查德(化名)在處理某個報告時遇到了問題。我不了解具體的報告,好像是會計方面的某種報表。朱莉(化名)在使用應用程序的其他功能時遇到了問題,我可能只對這個功能的名字略知一二。南希通過電話的免提功能加入了會議,說明了她在其他方面遇到的問題。會議就這樣繼續進行著,用戶講述他們遇到的問題,我將所有相關信息都記錄下來。
當數據庫管理員和系統管理員發言時,就輪到用戶對談話中涉及的字眼一知半解了。在會議的這一部分,我感覺舒服多了,因為現在我們使用的都是我詞匯表中的單詞,比如索引、回滾段和I/O。當然,我絕對可以檢查所有這些東西。我把它們都記下來了。
大約一小時后,會議結束,該去工作了。我的引導員是一位數據庫管理員,他把我帶到我將要使用的辦公桌前,告訴我如何登錄,并告知我如何與大家聯系。我坐下來開始工作。
在我職業生涯的這一階段,我為Oracle公司財務網站所做的工作,基本上只是照本宣科地處理在到達客戶現場之前就已經收集好的清單上的六個事項。在周一的會議上,任何人無論說什么其實都無關緊要。我總是禮貌地傾聽并做好筆記,但我已經知道自己要做的大部分工作了。我拜訪過的所有財務網站幾乎都反復出現同樣的問題。這個產品的設計確實會讓人們犯某些配置錯誤。我知道這些錯誤是什么,也知道如何改正這些錯誤。
就這樣,我周一和周二都在工作,到了周三上午,我已經準備好接受反饋了。我完成了清單上的所有事項,希望能夠解決用戶的一切問題。我檢查了技術人員要求我查看的所有具體事項。我還把自己所做的一切都寫了下來。現在該打電話了,看看用戶們感覺怎么樣。
我名單上的第一個人是理查德,他的問題是報告處理太慢。“你好,理查德,不知道你還記不記得我。我是卡里,Oracle公司的顧問,來這里是為了讓你們的系統運行更快。我打電話是想知道你的……報表是否運行得更快了。你在周一早上提到,它的運行時間超過了20分鐘,這的確是個問題。”“啊~太好啦,不管是什么報告,現在的運行時間都不到5分鐘”他激動不已。我問他是否可以在我的報告中引用他的原話,他同意了。好極了!搞定一個,還剩6個。
我的下一個電話也是如此:朱莉很高興,謝謝你。沒錯,我可以在報告中引用她的話。我又打了幾個電話,結果都一樣,多巴胺的沖擊一個接一個地襲來。當我打電話給南希時,我的自我感覺相當良好。再打幾個這樣的電話,我也許就能提前一兩天回家了。
但是在與南希的通話中,我并沒有感受到其他電話里那種親切、充滿友愛的感覺。我試圖得到肯定:“但自從我來了之后,賬戶代碼驗證彈窗的運行速度不是快了很多嗎?”她說是的。
“好吧,那我可以引用你的話嗎?”
“……嗯,可以,但我真的不太關心這個。我關心的是……表單中的……字段。”
哦,天哪……她還是不高興呢,而我甚至不明白她描述原因時用的是什么詞。但我其實知道該怎么做。鮑勃很久以前就教過我。于是我問她:“那么,你介意我來拜訪你嗎,這樣我就可以確切地知道你在說什么了?”
她說:“好吧,你可以來……如果你真的想來的話,但是……”
“嗯,當然,我很愿意過來!”我告訴她。
“但是,”她說,“我不在你所在的大樓里。我在幾英里之外。”
沒問題,我告訴她我租了一輛車,可以馬上過去。于是她告訴我她所在大樓的位置,并說她會在保安服務臺等我。我請她在我開車過去的時候把她遇到的應用程序問題梳理好,這樣等我到了那里,她就可以準確地告訴我到底是什么問題困擾著她。她說她會準備好的。
于是,我收拾好公文包,出門上車。我有點緊張,不知道到了那里后會發生什么。如果我給她添了這么多麻煩,卻不知道該怎么幫她怎么辦?但我相信最后問題一定能夠解決。那個時候,我已經明白,說出“我不知道,但我可以幫你找到答案”并不是真正丟臉的事。她的辦公桌上有電話。我認識很多人,如果需要幫助,可以給他們打電話求助。
車程并不長。南希遵守承諾在保安服務臺等我。她幫我進行了登記,然后我們走樓梯上了二樓。在去她辦公室的路上,她向我展示了我所見過的最大的復印機。她解釋說,這臺巨大的打印/復印一體機長度有9米多,在它的東端插入要打印資料的軟盤,就可以在西端生成打印完畢、裝訂成冊的書籍。我們向推著手推車、穿過走廊的郵遞員點頭問好。
來到南希的工作間,我看到了一個只通過電話永遠無法了解的故事。在她工作間的墻上掛著一張證書,上面寫著南希的打字速度可以達到每分鐘100個單詞以上。她的DEC VT320終端機右側掛著一個塑料的寫字夾板。她有兩根帶配重底座的尖釘[我后來才知道,這叫“錠子”(spindle),比如“請勿折疊、卷曲或損壞”],其中一個放在終端機右邊的辦公桌上,標著“進”(IN);另一個放在終端機左邊的辦公桌上,標著“出”(OUT)。
我可以想象她的工作流程。文件會堆積在她標著“進”的錠子上(我希望她當心,那些錠子看起來非常危險)。她會從“進”的錠子上抽出一頁紙放到寫字夾板上,再以每分鐘100個單詞的速度打字輸入一小會兒。然后,她將這一頁從寫字夾板上移到標著“出”的錠子上。她可能不斷重復這樣的流程,直到“進”的錠子上的文件清空為止。之后,她可能會將所有文件都放在“出”的錠子上。
一切看起來都為了速度而進行了優化。這是我的第一印象。
然后南希解釋說:“我負責付賬單。你之前看到的那個郵遞員每天都會把郵箱里的賬單帶給我。我最怕處理施樂公司(Xerox)的賬單。今天我剛收到一張。還記得我剛才在外面給你看的那臺巨大的復印機嗎?我們每個月都要給施樂公司付款。我之所以討厭施樂公司的賬單,是因為我總是記不住在應用程序中必須調用的供應商名稱。我從來記不清到底是‘施樂’(Xerox)還是‘施樂股份有限公司’(Xerox Inc.)抑或是‘施樂公司’(Xerox Corporation)……但我必須確認才能支付施樂公司的賬單。”
接著她在座位上轉過身來,把手放在鍵盤上。施樂公司的賬單正好夾在寫字夾板上。她的光標停留在供應商名稱字段上。就像我在電話里要求的那樣,她已經把問題梳理好了。然后,她輸入字符\ Q R。反斜杠下拉一個應用程序菜單,用方框圖字符模擬,如┌、─和┐。Q下拉一個查詢菜單,R運行一個“盲”(意思是不受限制)查詢。因此,\ Q R指示應用程序返回整個系統中的所有供應商名稱。屏幕上顯示的是該查詢結果的第一頁,包含了大約20個供應商名稱,它們都以字母A開頭。
之后,南希轉向我,用右手食指開始點擊“后續屏幕”鍵。她快速地數著:“一二三四五六七八……”在數到26時,她停了下來。“我必須按26次‘后續屏幕’鍵才能找到施樂公司的名字。”當然,她之所以知道需要26次,是因為我開車過來的時候她剛剛演練過。
這個應用程序跟不上南希按“后續屏幕”鍵的速度。屏幕會不斷刷新。它會填滿半個屏幕,暫停一秒鐘,然后填充-暫停-填充-填充-暫停。就這樣,它在數十秒的時間里持續填充和暫停,讓人感覺就像要等一輩子。
最終,在翻閱了整個供應商名稱表后,她的屏幕顯示了最后幾個供應商名稱:

她按了幾下↓鍵,選中了顯示“Xerox”的那一行,接著她說:“好了。”
所以,顯然這是“施樂公司”(Xerox Corp),末尾不帶句點。
她想也許我需要坐在她的座位上操作,所以禮貌地站起來,然后抱臂等待。我心跳加速,因為我很清楚這個問題,而且很容易就能解決。我根本不需要坐下。不過,我確實需要謹慎地選擇措辭,因為我不想在這個問題困擾了她這么久之后,脫口而出地說這個問題有多么“簡單”,這聽起來對她很不尊重。
我笑了笑,在看似只有一兩秒之后,就找到了合適的表達方式。“南希,”我說,“再過兩分鐘,我想你會非常高興。”她聽后笑了,請我告訴她我的想法。我示意她坐回去。
“請回到我剛到這里時你所在的位置,回到你輸入供應商名稱的字段。”她回到了供應商名稱字段。我對她說:“現在,請輸入x。”她照做了。“現在按回車鍵。”然后,立即出現了以下名稱:

她猛地轉過身來,雙手捂住臉頰。“哦,我的天哪,你在開玩笑嗎?你是跟我開玩笑吧?”她開心地咧嘴笑了起來。
我告訴她,這個應用程序有這樣一個功能:只輸入想要查找的值的前幾個字母,然后按回車鍵,軟件就會自動顯示出模式匹配的結果,并以輸入的內容作為前綴。她不停地一邊笑著一邊搖頭:“我要馬上安排一次部門會議,因為整個樓層的每一個人都遇到了和我一樣的問題。”
……整個樓層的每一個人。
我們又開心地慶祝了幾分鐘。我問她是否還有其他問題,她告訴我沒有了。她說自己也很感謝我解決的其他問題(她已經注意到了),但對她而言,這是最大的問題。這就是她討厭這個新系統的原因。
……討厭這個新系統。
- Django+Vue.js商城項目實戰
- ASP.NET Web API:Build RESTful web applications and services on the .NET framework
- Java從入門到精通(第5版)
- Flask Web開發入門、進階與實戰
- 技術領導力:程序員如何才能帶團隊
- Python高級機器學習
- Blender 3D Incredible Machines
- Troubleshooting PostgreSQL
- Learning Network Forensics
- Python之光:Python編程入門與實戰
- 批調度與網絡問題的組合算法
- 響應式Web設計:HTML5和CSS3實戰(第2版)
- Learning Hadoop 2
- UML軟件建模
- Flink入門與實戰