星期五, 5月 25, 2007

下車再上車?


以前的同事pj曾經說過一個笑話,一群人開車到郊外踏青,在差不多算是荒郊野外的地方車子故障了,一群人急得想各種辦法要把車子修好,但是都徒勞無功,最後,一位在微軟工作的軟體工程師說話了:「我們把車子熄火,全部的人下車,再上車試看看,可能就沒問題了。」凡是用過電腦的人,多多少少會遇到類似下車再上車的狀況,對像可能是特定的應用程式,也可能是整個作業系統,怎麼找就是找不出問題,但是,把程式重開或是重開機之後,問題就不見了。而開發人員遇到這種狀況的機會又比一般的使用者來得高。



這種狀況,常常是因為系統在開發過程中沒有考慮到一些特定的狀況所造成的。但是隨著作業系統愈來愈複雜,今天,除了特殊的應用之外,單工的作業環境已經愈來愈少見了,導致要在開發階段就考慮到所有的狀況已經是愈來愈不可能了。為了因應這種狀況,近代的程式語言大都包含了例外處理的機制,這個機制最主要的目的就是讓程式在遇到開發時期未考慮到的狀況時,能夠死得漂亮一點,死得優雅一點,最低限度,要讓使用者知道,程式已經死了,而不是讓使用者去和一個不穩定狀態的系統打交道。



例外處理,是程式設計的一個很重要的課題,雖然有些人認為例外處理讓部份程式流程更不容易被追蹤(trace),但是不可否認的,在支援例外處理的程式中,程式碼可以以更容易被人類讀懂的方式來表示,而不是一長串的if/else if /else。畢竟,程式碼除了建立系統之外,也是程式設計師之間最主要的溝通工具。如果說,少男漫畫中的主角是用拳頭交心,那程式設計師就是用程式碼交心了。

2 則留言:

Unknown 提到...

車上載的是使用like unix的旅客吧,只有微軟的系統crash了,才不得已要下車吧(restart)

Steve Chuang 提到...

是啊,這個笑話是在酸微軟,不過,不只是微軟,在許多race condition沒處理好的程式/系統中,也常常會發生這類下車再上車問題就解決的狀況,而這類的bug也是在多行程程式開發中最難抓的bug。