除錯和推理解謎
從年輕就喜歡看推理小說 (其實到現在也還愛看,只是時間少了),而且習慣一開始翻書就一路看不停。從撲朔迷離的線索之中,抽絲剝繭找出線索,最後真相大白;那種看到最後 “原來如此” 的感覺,很容易欲罷不能。
身為一個推理小說迷,以及還算資深的碼農,很難不注意到推理解謎以及除錯兩種心智活動令人驚訝的相似度。
推理小說有好幾種派別: 早期最熟悉的是 “安樂椅神探”。總有一位厲害的偵探,完全無需出門探案,只要由旁人提供線索,不需要親眼看到現場也能推論出答案。早前期在除錯工具不多的現實中,也常會做 “在大腦中 debug” 的事情: 只能用筆和紙,再三重覆檢查邏輯的流程。不過就像神探不是常人,這樣的事也沒辦法常做,不但累人,而且非常沒效率,不可能像書中的主角那麼風光。
後來熱衷的是 “現實派”,主人翁通常是警察之類的執法人員,既不神奇也不是天才;只能一步一腳印,蒐集那些看起來微不足道可是很多時候是破案關鍵的線索。這跟碼農的現實生活就接近多了,除錯的時候多半就是契而不捨的一再重複 trace 程式碼,看看找不找的到微小的差別。Coder 的日常有九成的時間,就是一直盯著黑底白字的編輯器,深怕漏看了甚麼;隨著解錯 (破案) 的時限越來越近,壓力越來越大。
而現代化軟體大廠的除錯模式,就跟以上的單打獨鬥完全不同: 它們的方式就跟 CSI 科學辦案一樣,是團隊作戰。有專門的測試人員執行 test cases,就像蒐集科學證據一樣;而也有專門的工具分析測試結果或是程式產生的 log 檔,如同科學家做 DNA 解譯一樣。而 SDE 解錯純粹是 “證據走到哪裡,案子就辦到哪裡”,沒甚麼模糊地帶,直接了當。
我的心得: 話說回來,看推理小說還是比程式除錯有趣多了: 欣賞別人動腦的成果,比自己燒腦所花的力氣輕鬆太多。