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