寫程式中的神秘事件
「迷信」這個詞,查 Encarta 上說的是「非理性地相信某種行為或儀規具有神奇的效力」。即使像 IT 這樣理性的科學技術,還是到處可以見到例子: 例如機房要放乖乖之類的 (我想這時候一定有人大叫: 不要不信邪!)
寫程式也是一樣。我在年輕的時候,經驗還不夠,曾經很不自量力的一個人寫了電腦電報機 (computer telex 嘿嘿我敢說讀者知道這個東西的一隻手數得出來) 的操作程式,當時還是 MS-DOS 還沒有沒有硬碟的環境。有一個情況,那個時候怎麼想也想不通,為什麼在其中的一個函數中,放了一個完全用不到的變數,程式就不會當? 一旦拿掉就必死無疑? 難道電腦裡面住個一個精靈,非要我「獻祭」一個變數不可? 還好多一個變數不要錢,就老老實實地留在那裏,程式就出去了。
那個時候太嫩了,完全沒想到是 stack overflow 的問題。
之後還有就是從 debug mode 轉成 release,source code 一個字都沒動,就是不能執行。「我的環境都 run 的好好的阿」,我想這個詞大家都不陌生,應該算是程式當掉的標準回應之一,與「重新開機吧」並列。
最近的例子是,想把一套 C++ 的 library 從 Llinux port 到 Windows 上,因為很冷門,網路上找不到甚麼資源。硬著頭皮問作者 (是個 Google guy),他只飄來一句 "不要浪費時間,Windows 上是不行的",就不理我了。不信邪,仗恃著對 OS 的了解,硬是搬到 VS 上面去, compile 也過了,也仔細檢查所有會用到的 api ,沒看到哪裡是只有 Linux 有而 Windows 沒有的。反覆 trace 來 trace 去,結果就是不行,看來作者對 Windows 有仇,放了無形的蠱,硬是不讓在上面 run。
上星期中午吃麵的時候突然想到,阿對了,兩個平台的 compiler 行為不同 ! 嘴裡的麵條差點噴出來。
我的心得是: 當 AI 之類的複雜技術越用越多,會不會取代人類我是不知道,但肯定迷信會越來越多。