2010年10月1日星期五

程序员眼中的《盗梦空间》

  越来越觉得《盗梦空间》是给程序员们拍的了。那么进入一层梦境到底怎么映射到编程?是递归?是循环?还是简单的函数调用?

  对于一个进入梦境中的人来说是递归,一层层push进了再一层层pop出来,对于很多进入梦境中的人来说,是函数调用,因为停在某一层梦境中的人与其他进入更深梦境中的人是同时工作的。更加确切的说,进入梦境中的人算是程序中设定的全局变量,梦境中虚拟出来的人算是局部变量,而一个程序中一般不会只有一个全局变量,所以进入梦境不是递归操作而是函数调用了。每一个虚拟出来的梦境都是一个函数,可以由任何其他梦境任何时候调用(进入),进入此函数(梦境)的变量(人),一般还是要返回的,就是函数返回的参数了,此变量返回时作为人并非没有任何变化,比如Cobb给Ariadne在梦境中注入了一个思想,那么Ariadne作为变量返回时就是经过处理的了。一般来说编程中函数最好是返回参数的,要么是直接处理后得到的最终值,要么是得到的一个标志变量,但也可以不返回参数,也就是void型的,对应到电影中就是:进入此梦境中的人可以返回,可以不返回,永远留在梦境中。

盗梦空间

  为什么进入一个梦境中比前一个梦境(或许是现实)时间要变慢了?或许可以这么理解:如果我们把现实世界看作主函数(main函数)的话,那么我们一般不喜欢在一条主线中写太长的代码,那么我们希望写一个函数来调用,写好函数之后,在此流程中直接写一个函数调用语句就行了,具体的过程就由此函数来完成,我们默认允许此函数用长一些的时间去完成逻辑功能,当然很多情况下处理时间越短越好。

  进入梦境的时候会选择进入谁的梦境,被选定的这个人在程序中就对应一个最主要的变量,这个人在梦境中如果被杀掉,就对应此函数中的主要变量有问题,不符合此函数(梦境)对此变量(人)的要求。此时就要throw exception并且return回到上层梦境(函数)。

  设计梦境的人就是编写此程序的程序员。此人也可以进入他设计的梦境,而程序员面对自己的程序也要不断深入,因为要找各种bug.如果此程序员留在了梦境中没有出来,我们可以这样理解,这个程序员出了问题或者说这个程序员写的程序出了问题。所以说选择一个好的造梦师(程序员)至关重要,所以cobb才会回到巴黎找他老师(也是父亲?没太弄清楚)要一个很聪明的学生,并把她培养成一个优秀的造梦师。cobb作为一个造梦师,自身条件是很好的,可是有一个致命的缺点:总是抛不掉自己过去的或是生活中或是梦境中做的不好的场景,并且这些场景会经常出现在新的梦境中。对应地,一个程序员,如果总是沿用自己过去写过的程序,那些代码段自己以前写的时候或出现了问题或者问题没有表现出来,但是在新的要求下并不符合要求了,或者写新的程序时候总是沿用自己过去的编程思想,或许那些思想并不适用于新的情况。所以一个程序员很重要的一点是要打破自己的惯性思维,遇到问题即使跟以前遇到过的很像也要仔细地重新审视。打破常规,发散思维,这样一个程序员才会有长足的发展。

  作者:alexzhan,作者电子邮件:alexzhan12@gmail.com ,欢迎来信交流