雖然目前個人也寫程式賺錢,但是與專業寫程式的那些相比,我並非科班出身。我是在搞了3D與影像後,才慢慢因為工作需要而涉獵多媒體相關程式的設計與製作。雖然學習的出發點是要滿足客戶的需求與多賺一點錢。但是其實後來我發現寫程式也是一件很好玩的事。特別是我寫的程式都是驅動影像與動畫的行為腳本,看著原本不會動的東西突然有了生命,真的很有成就感。學了寫程式後最大的改變,就是突然開始聽得懂以前那些程式工程師講的話。不然以前跟他們開會真是雞同鴨講。可以這樣說,寫程式的人思維是與一般人稍稍有點不同的。特別是後來有一天晚上很無聊,在某電影台看了重播第N次的「駭客任務」,以前完全看不懂的電影,那天晚上竟然就突然開竅了。明白了這部電影倒底在講什麼。說到底,這部電影其實就是在講解如何設計一個程式遇到錯誤時的自我修復能力。不信我解釋給你聽。 


「母體」這個世界,其實就是一個超大的程式。相信看過電影的都人都知道這件事。與現實生活中的程式一樣。只要是程式就會遇到很多例外的錯誤情況。因為各種原因,如操作者亂搞,邏輯迴圈錯誤,邏輯判別例外等Bug,不一而足。想要完全把程式Debug到完美,那是不可能的。不信你去問擁有全世界最強大工程師團隊的微軟,它的作業系統一樣是常當機。所以為了避免程式一發生錯誤就全部掛點。最好的方式就是設計一套自我修復的方式。在程式出錯時可以不讓整個程式全部當掉,最好能在使用者不知不覺的情況下,於背後自我修復成功。

在「母體」這個大程式中,「電腦人」可以說就是修復母體的「修復程序」。程式設計者總是會寫一些修復程序,並在主核心運行時進行檢查。一但程式出現任何錯誤,就會呼叫「修復程序」出來。這時「電腦人」就上場了。在母體這個大程式裡搗亂的壞份子、問題參數就會由電腦人來處理,不是暴力幹掉就是強行抹除。電影裡的電腦人不就是專幹這種勾當嗎?而且因為修復程序要處理可能已經千瘡百孔的主程序,所以必需要擁有最高的優先權與執行權。這也讓「電腦人」這種程序比其它的程序要來的刀槍不入,以避免電腦人程序還沒有修好出問題的主程序,就自己也掛點。這也就是電影裡電腦人如此強壯又打不死的主因。因為在程式裡,「修復程序」的確就是被付予最高的優先權。


但是有時侯「母體」主程式已經破損的太厲害了,叫「電腦人」這個修復程序來也修不好了。這時侯最快的解決方式就是重啟程式。而且最好在使用者介面不變的情況下重啟。這種情況相信多數的電腦使用者都是碰過的,就是在XP的環境下,常常因為IE出問題,結果整個作業系統就頓了一下子,強力關了IE後,連最底下的開始工具列都不見了。要再等一下才會重新出現。這其實就是XP的自我修復程序也沒有用了,XP正在偷偷的重新軟開機。只是還留著桌面給你看,讓你不會那麼無聊與不爽。電影裡的「尼爾」就是重開機的先導程序。而「先知」就是偵測程式是不是已經自我修復失敗的程序。「先知」一直潛伏在「母體」裡監控著,等到先知這個程序研判整個「母體」已經太多問題了,就會把消息餵給「尼爾」這個程序。準備毀滅舊的「母體」。這也就是重開機。


在程式裡,「尼爾」當然是「電腦人」的大敵。因為電腦人的使命就是修復母體。但是「尼爾」程序想要重開機,就必需要中止某些正在運行的重要主程序,這在邏輯上是與一心要修復主程式母體的「電腦人」相衝突的。一但「先知」程序研判母體需要重開機時,呼叫了「尼爾」程序時,常常代表了電腦人程序也正陷在主程序中,還在修復而且無法脫身。這才讓「先知」研判了母體已經無法修復。這時「尼爾」上場,開始一一強行關閉母體程式的重要部份,而還在空轉修復程序的「電腦人」們也是「尼爾」必需要優先關閉的項目。這時侯就是「電腦人」與「尼爾」大戰的時侯了。最好的情況是「尼爾」會贏,殺光了「電腦人」程序,開始進入重開機程序。但是如果「尼爾」沒贏,電腦人與錯誤的問題卡在一起,主動由「先知」程序通知來的「尼爾」被電腦人幹掉。或是電腦人程序在你按了十次「Ctrl + Alt + Del」手動招喚「尼爾」來重開機時,還是每次都頑強的幹掉了「尼爾」重開機程序,繼續在背後空轉。那你就只能冒著傷到硬體的風險,關了電源強迫重新啟動了。


「尼爾」這隻由「先知」呼叫而來的重開機程式,主要的任務有二個,一個就是幹掉保護主程序的電腦人,並且關閉主程式的重要程序,以保護重新啟動的安全。另外一個就是呼叫「鍚安函式庫」。因為一般要重啟整個程式,需要初始化整個程式,通常不是一個獨立小程序能夠完成的。需要由外部的函式庫提供完整的初始化工作。這個能提供初始化功能的函式庫平日也是用不到的,更不會載入。都是深藏在某個地方,直到「尼爾」程式確認已經打敗了電腦人並且關閉了需要關閉的主程序後,可以進入重開機程序了,才會呼叫「鍚安函式庫」。而鍚安函式庫一但接到「尼爾」的呼叫,就會出來重新啟動整個世界。電影第三集裡,尼爾終於要重啟世界了,在最後辦公室裡的老頭跟他說整個世界已經毀滅幾十次了。就是在告訴尼爾重開機的次數。


所以看完這部系列電影,也就上完了程式設計關於程式自我修復能力與背後重新啟動的原理。(還是其實這部電影真的只是拍爽的,一切都是我寫程式走火入魔,自己想太多.......XD)

 

sophist4ever 發表在 痞客邦 留言(4) 人氣()