軟體工程師的大腦瑜伽

日期:2011年4月9日

有個朋友帶了一個半個月還解不掉的bug來找我,這個程式會跑,但就是得不到想要的結果,我看了之後,打算先改掉一個確信是有問題的地方再看看,他反對,他說那個地方他改過了,但是會出現錯誤訊息。我說改看看吧,順便讓我看一下那個錯誤訊息。改了之後,果然出現了錯誤訊息。我讀了一下那個訊息,然後根據那個錯誤訊息,再改了另一個地方。就這樣,10分鐘解決了,他不可置信的確認了好幾次。

日常生活好像也常常有這樣的情況,想要改善某個問題,心理明明知道哪個地方才是問題,卻擔心改善那個問題所產生的後果,於是找「最沒有壓力」的地方下手。然而,在路燈下找鑰匙,終究是一無所獲。幾年前辜家公子改革台泥時,堅信「漸進式改革不可能成功」十幾個一級主管全部資遣,到了第三代還能有面對這種壓力的魄力,難怪辜家能夠家大業大。

(台灣)公務員辦事也是這個邏輯「找最沒有阻力的地方下手」,怎樣方便就怎麼辦,反正不要影響福利與退休金就萬事OK。像是淡北高架道路,公務員不會去求證顧問公司的動機與可信度,到底塞車問題有多嚴重,需不需要,有沒有效益,有沒有替代方案,會不會危害生態,那種跟利益團體對抗,以及跟政客對抗的事情,公務員是不會去碰的。以前就有公職的朋友講過這樣的話。我在淡北高架道路說明會曾遇過一位自稱任職中央職等很高的文官,他說他礙於身份不能公開反對,但他私下「傳授我這個秘訣」。話說回來,我相信淡北高架道路是個少數的例外,除了台北縣政府堅持之外,其他台北市政府、公路局都反對,甚至台北縣政府交通局也是反對的,這條高架道路最後是由水利局來蓋,可見水利局是最無法抗壓的單位,所以才會有水利局反而破壞水土保持的情況出現。多勞者,一種是能者,另一種是弱者。而這條高架道路能不能蓋得成,就看對環境生態堅持的力量能不能勝過誘惑利益的壓力。公共事務的本質,回歸「實力」兩個字,這個悲哀的現實,背後有「欺善怕惡」的人性,看來我們台灣還只是一個服膺叢林法則的野蠻文明。

解Bug是我從事軟體這一行,感覺最痛苦也最有收穫的地方。像那位朋友的經驗,我也有過好幾次,以前寫Perl的時候,因為Perl使用很多的符號,像是$@%,某次整整花了一個禮拜才找到,原來該用$的地方,用了@(代表不同的資料類型)。就只有這一個字元的錯誤而造成。如果有學過Regular Expression的人,大概也能體會那種”差一個小符號,就差很多”的苦楚。使用Perl的經驗,讓我義無反顧擁抱Python,所有程式語言中,Python寫出來的程式最接近自然思考,光是這點就夠讓Python成為強大的語言,我敢預測,未來如果有超越者,必然是因為那個超越者更接近人類思考的緣故,使用更多的感官,而不只是文字,讓人類更容易精確表達自己的意圖給電腦知道。電腦不能可完全取代人腦,但取代50%應該沒問題,未來工程師的角色有可能越來越不重要。上禮拜,我對一群大學學生拋出一個問題:兩百年前,照相機發明了,畫家怎麼辦?在我們有生之年,懂人語的電腦發明了,工程師怎麼辦?(他們已經都三、四年級,不能轉系跑掉了)

然而,在找bug的過程裡,無形中也閱讀了很多的材料。重複「假設、修正、驗證」的過程,也更加熟悉整個程式語言與系統的運作。是因為解bug,才讓工程師有機會成長,所以我佩服那位朋友的耐性,他能為一個bug堅持半個月,那半個月裡面他學到的東西可能勝過聽課一學期。