Posted on 2010-10-04 10:08
wjywilliam 閱讀(225)
評論(0) 編輯 收藏 所屬分類:
Other
越來越覺得《盜夢空間》是給程序員們拍的了。那么進入一層夢境到底怎么映射到編程?是遞歸?是循環?還是簡單的函數調用?
對于一個進入夢境中的人來說是遞歸,一層層push進了再一層層pop出來,對于很多進入夢境中的人來說,是函數調用,因為停在某一層夢境中的人與其他進入更深夢境中的人是同時工作的。更加確切的說,進入夢境中的人算是程序中設定的全局變量,夢境中虛擬出來的人算是局部變量,而一個程序中一般不會只有一個全局變量,所以進入夢境不是遞歸操作而是函數調用了。每一個虛擬出來的夢境都是一個函數,可以由任何其他夢境任何時候調用(進入),進入此函數(夢境)的變量(人),一般還是要返回的,就是函數返回的參數了,此變量返回時作為人并非沒有任何變化,比如Cobb給Ariadne在夢境中注入了一個思想,那么Ariadne作為變量返回時就是經過處理的了。一般來說編程中函數最好是返回參數的,要么是直接處理后得到的最終值,要么是得到的一個標志變量,但也可以不返回參數,也就是void型的,對應到電影中就是:進入此夢境中的人可以返回,可以不返回,永遠留在夢境中。
為什么進入一個夢境中比前一個夢境(或許是現實)時間要變慢了?或許可以這么理解:如果我們把現實世界看作主函數(main函數)的話,那么我們一般不喜歡在一條主線中寫太長的代碼,那么我們希望寫一個函數來調用,寫好函數之后,在此流程中直接寫一個函數調用語句就行了,具體的過程就由此函數來完成,我們默認允許此函數用長一些的時間去完成邏輯功能,當然很多情況下處理時間越短越好。
進入夢境的時候會選擇進入誰的夢境,被選定的這個人在程序中就對應一個最主要的變量,這個人在夢境中如果被殺掉,就對應此函數中的主要變量有問題,不符合此函數(夢境)對此變量(人)的要求。此時就要throw exception并且return回到上層夢境(函數)。
設計夢境的人就是編寫此程序的程序員。此人也可以進入他設計的夢境,而程序員面對自己的程序也要不斷深入,因為要找各種bug.如果此程序員留在了夢境中沒有出來,我們可以這樣理解,這個程序員出了問題或者說這個程序員寫的程序出了問題。所以說選擇一個好的造夢師(程序員)至關重要,所以cobb才會回到巴黎找他老師(也是父親?沒太弄清楚)要一個很聰明的學生,并把她培養成一個優秀的造夢師。cobb作為一個造夢師,自身條件是很好的,可是有一個致命的缺點:總是拋不掉自己過去的或是生活中或是夢境中做的不好的場景,并且這些場景會經常出現在新的夢境中。對應地,一個程序員,如果總是沿用自己過去寫過的程序,那些代碼段自己以前寫的時候或出現了問題或者問題沒有表現出來,但是在新的要求下并不符合要求了,或者寫新的程序時候總是沿用自己過去的編程思想,或許那些思想并不適用于新的情況。所以一個程序員很重要的一點是要打破自己的慣性思維,遇到問題即使跟以前遇到過的很像也要仔細地重新審視。打破常規,發散思維,這樣一個程序員才會有長足的發展。
作者:alexzhan,作者電子郵件:alexzhan12@gmail.com ,歡迎來信交流
??? 轉載自月光博客?[?http://www.williamlong.info/?]?