程序员的十层楼(11层)

第11层 上帝

看了上面的小标题,你可能会觉得奇怪,这篇文章不是讲“程序员的十层楼”吗?怎么冒出了第11层来了?

其实这并不矛盾,程序员确实只有十层楼,因为爬到第11层时,已经变成上帝,不再是程序员了;所以超出10层楼本身并不重要,关键的问题是看你有没有能力变成上帝。

1、谁是上帝?

菜鸟们认为Linus Torvalds是程序员中的上帝,看完了前面各层楼的介绍,此时再看到这句话,相信你要忍不住在心里笑起来。当然,你会不会笑起来是事先注定的。Don Knuth也不是上帝,他离上帝还有三层楼的距离。即使是大哲们,他们离天堂也还差一层楼,因此这个世界上有史以来还没有任何一个人变成过上帝。

我们感兴趣的是,将来会不会有人爬到比大哲们更高的楼层上,变成了上帝。

要变成上帝,你得有上帝一样的能力,上帝会造人,你会吗?

你也许会怯生生地问:“我可以和爱人生小孩,算不算造人?”,你可能还会理直气壮地说:“现在生物学上都可以克隆人了,早就有人掌握了造人的方法”。

事实上克隆人需要有人的体细胞,必须要先有人才会有体细胞。上帝造人时,这个世界上并没有人,是从无生命的物质“尘土”中创造出的人。因此,用最原始的方法生人和克隆人都是从有生命信息的物质中生人,不能算作造人。

这样看来,你根本不会造人,不过我可以告诉你一个“玄方”,让你有机会学会如何造人。

如果你揭开了人类情感的奥秘,让计算机也可以拥有和人类一样的情感,那么计算机将可以理解人类的需求,具有了“情商”,将具有完整的和人一样的能力。此时,人类进化到了机器人,科幻小说将变成现实,也就是说你已经掌握了真正的造人能力,晋升为“上帝”了。

未来到底有没有人能变成“上帝”,人能不能进化到机器人,这是宿命论中事先注定了的。说到这里,不妨再告诉你一个打破宿命论的方法,这个方法就是你要爬到比上帝还要高的楼层。

“还有比上帝还高的楼层?”,你可能会第1时间内冒出这个问题,其实我也有同样的怀疑。因此在写第12层楼前,有必要弄清楚它到底存不存在,即你可不可以骑到上帝的头上的问题。

2. 骑到上帝的头上?

为了解决是否可以骑到上帝的头上这个问题,不妨先假设存在比上帝高的楼层,也就是存在打破宿命论的方法。

宿命论的本质原因是因为时间是单向运行,不可逆转造成的。如果你找到一种可以使时间逆转的方法,那么你就打破了宿命论,爬到了比上帝还高的楼层。

看到这里,你也许会摆脱刚才陷于宿命论的困惑情绪,变得充满希望般高兴起来。不过,如果你的逻辑思维能力足够好,仔细思考一下,会发现存在一个逻辑上的悖论。

在你找到时间逆转的方法之前,显然这个世界仍然是需要服从宿命论的,也就是说你能不能找到打破宿命论的方法是事先注定的。假设你在某个时间点t0处找到了打破宿命论的方法,你在打破宿命论后,想利用时间逆转的方法回到某个时间点t2。下面来看看你到底能不能回到时间点t2。

取位于t0和t2之间的任意一个时间点t1,你在回到时间点t2之前,必须先经过时间点t1,考虑你到达t1的那一时刻,由于t1比t0要早,这个时间点上你还没有找到时间逆转的方法,所以到了时间t1点后,你无法再使用时间逆转的能力回到时间点t2去,所以你永远也回不到时间点t2,由于时间点t2是任意取的,因此,你永远也无法使时间逆转,或者说你根本就没打破过宿命论,这与你在时间点t0打破了宿命论产生了矛盾。

上面这段话看起来似乎有点像“人永远迈不出一步”的诡辩一样,你可能会想返回到时间点t1时,仍然可以拥有时间逆转能力啊。不过你又会发现一个新的问题,时间点t1本来是没有时间逆转能力的,现在又认为时间点t1又有时间逆转能力,那时间点t1到底是有还是没有时间逆转能力呢?或者说在时间点t0前,宿命论注定了时间点t1是没有时间逆转能力的,现在你又认为时间点t1具有时间逆转能力,那么这两个时间点t1究竟是不是同一个时间点?如果不是同一个时间点,说明你没有回到过去;如果是同一个时间点的话,岂不是自相矛盾吗?

为了说得更形象一些,不妨假设你坐一艘超光速飞船,准备从时间点t0回到时间点t2去,假设你回到t2后,随着时间的流逝,又达到了时间点t0,如果这时你又再次坐超光速飞船返回时间点t2,那么一个值得思考的问题就出现了,“你在时间点t2能不能看到上次返回时间点t2的飞船?”

如果回答不能看到飞船,那么上次返回的飞船那里去了呢?显然很难解释通。如果回答能看到飞船,那么你可以到达时间点t2后,下次时间到达t0时,你又坐飞船返回t2,这次你将可以看到上两次的两艘飞船。如果这样一直循环下去,最后你会发现你可以在时间点t2看到无穷多的飞船。用程序员的术语说,叫做“程序陷入了死循环”,最后系统必然会出现“Out of Memory”现象而崩溃。

当然,你也可以认为有其他的方法,不需要飞船,可以一次性从时间点t0直接跳跃到时间点t2,并不需要经过时间点t1。下面不妨来分析一下这个方法是否可行。

既然是直接跳跃到时间点t2,那么你必然是在一个无穷小的时间里出现在时间点t2的某个空间里,例如你要在时间点t2回到某个广场上。首先说明一下为什么是无穷小的时间里出现的,因为如果不是无穷小的时间里出现的话,那么必然可以取到一个时间点t1,会导致前面所说的时间点t1上出现悖论。

你在广场上出现的时,广场上的空气必然要为你让开空间,而这是在无穷小的时间里完成的,那么很容易推导出你周围的空气获得的加速度和速度都是无穷大,因而它具有的动能也是无穷大,无穷大的能量和无穷大的速度意味着什么?一只鸟都可以将飞机撞下来,如果宇宙是有限大的话,它可以让这个宇宙炸毁无穷次;即使宇宙是无限大,它也足以让宇宙炸毁一次。宇宙都毁灭了,又何来的时间?还能说你回到了时间点t2吗?

也许上面说的这些你仍然难以相信,不妨再说得更现实一些,假设你要回到100年前的一个时间点,这100年中,天上有多少流星湮灭了?有多少新星生成了?宇宙膨胀了多少?你有能力让湮灭的流星复原、生成的新星重新返回未生成前的状态,膨胀的宇宙收缩回去吗?如果这些东西的状态没有回复到100年前,又怎么能说明你回到的是100年前的时间点呢?

根据上面的推导和分析,个人认为使时间逆转的方法是不存在的,所以第12层楼是不存在的,自然没有人可以骑到“上帝”的头上。

宿命论将在有时间的时间里永远统治这个世界。

转载于:https://www.cnblogs.com/guojiantuan/archive/2009/04/24/1443035.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

函数局部变量和函数的参数在栈中的布局

#include <stdio.h> #include <iostream>using namespace std; void func(int p1, int p2, int p3) {int a p1;int b p2;int c p3;std::cout << "函数参数入栈顺序(栈在内存中向上伸长):从右到左" << std::endl;std::cout << &quo…

经验:Windows To Go准备工作

如果您准备使用USB设备带着您的移动Windows的话&#xff0c;您需要做好准备。从开发预览版到正式版&#xff0c;我也一直关注着Windows Go To这个新功能&#xff0c;所以&#xff0c;总结了些经验&#xff0c;分享给大家&#xff0c;希望能够帮助到大家&#xff0c;或者减少您的…

图表相同数据会自动合并问题(finereport)

finereport中&#xff0c;对于图表的操作&#xff0c;当遇到需要显示多个重复分类下的多个值时&#xff0c;由于自动合并相同数据&#xff0c;无法达到效果反复查询手册无果后&#xff0c;困扰好久&#xff0c;终想到了一个解决的办法&#xff1a;1、给查询的数据添加个列序号&…

简单的C语言程序合集

输出九九乘法表1 #include <stdio.h>2 int main()3 {4 int i,j;5 for(i1;i<9;)6 {7 for(j1;j<9;j)8 {9 if(i>j)10 {11 printf("%d*%d%d ",j,i,j*i);12 }13…

C#中读取“已注册的文件类型”的图标及读取指定文件图标的方法 (转)

usingSystem;usingSystem.IO;usingSystem.Drawing;usingMicrosoft.Win32;usingSystem.Runtime.InteropServices;namespaceGetIconDemo { ///<summary>///提供从操作系统读取图标的方法 ///</summary>publicclassGetSystemIcon { ///<summary>///依…

Redis基础知识点

Redis基础知识点&#xff1a; 1、Redis 采用的是基于内存的单进程单线程模型的 key-value 数据库。 2、默认16个数据库&#xff0c;类似数组下表从 0 开始&#xff0c;初始默认使用零号库。 select 0~15 命令用于在 0 ~ 15 号库之间进行切换 3、dbsize 命令查看当前数据库的 …

关于SQLSERVER的全文目录跟全文索引的区别

很久没有写随笔了&#xff0c;本来之前想写一篇关于SQLSERVER全文索引的随笔&#xff0c;可惜没有时间&#xff0c;一直拖到现在才有时间写&#xff0c;不好意思让各位久等了~ 先介绍一下SQLSERVER中的存储类对象&#xff0c;哈哈&#xff0c;先介绍一下概念嘛&#xff0c;让新…

安装rlwrap 的简单方法

1. 下载安装 epel包 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 2. 安装rlwrap yum install rlwrap -y 然后进入oracle 就可以 正常的上下键进行功能切换了 注意需要使用命令 rlwrap sqlplus / as sysdba 转载于:https://www.cnblogs.…

简单的C语言程序合集-2

输入一个整数n&#xff0c;求从1到n这n个整数的十进制表示中1出现的次数。&#xff08;google面试题&#xff09; #include <stdio.h>int main(){int n, N, count 0;printf("plesae input a number: ");scanf("%d",&N);for(n1;n<N; n){ in…

在Delphi中如何创建和使用udl文件

如何在Delphi中创建和使用udl文件&#xff1a;方法一&#xff1a;直接弹出UDL对话框:use ADOConed; EditConnectionString(ADOQuery1);方法二&#xff1a;⑴、右键---新建---文本文档&#xff0c;重命名为 connSet.udl 。⑵、双击打开 connSet.udl 按提示操作配置数据库&#x…

redis事务的简单介绍

所谓事务应具有以下特效&#xff1a;原子性(Atomicity)&#xff0c; 一致性(Consistency)&#xff0c;隔离性(Isolation)&#xff0c;持久性(Durability)&#xff0c;简称ACID&#xff0c;但redis所提供的事务比较简单&#xff0c;它通过MULTI、EXEC、DISCARD和WATCH等命令实现…

Android Zip文件解压缩代码

在Android平台中如何实现Zip文件的解压缩功能呢? 因为Android内部已经集成了zlib库&#xff0c;对于英文和非密码的Zip文件解压缩还是比较简单的&#xff0c;下面Android123给大家一个解压缩zip的java代码&#xff0c;可以在Android上任何版本中使用&#xff0c;Unzip这个静态…

C语言指针(1)嵌入式linux

计算机中所有的数据都必须放在内存中&#xff0c;不同类型的数据占用的字节数不一样&#xff0c;例如 int占用4个字节&#xff0c;char 占用1个字节。为了正确地访问这些数据&#xff0c;必须为每个字节都编上号码&#xff0c;就像门牌号、身份证号一样&#xff0c;每个字节的编…

最全android Demo

1、BeautifulRefreshLayout-漂亮的美食下拉刷新https://github.com/android-cjj/BeautifulRefreshLayout/tree/BeautifulRefreshForFood2、Material Design-动画风格的选项卡tab切换功能https://github.com/neokree/MaterialTabs3、TwinklingRefreshLayout-支持下拉刷新和上拉加…

网站优化之Ajax优化及相关工具

web2.0大量的ajax的使用&#xff0c;提高了ui交互的效率&#xff0c;但是过度的滥用会带来不少的问题。 ajax使用注意事项&#xff1a; 1 尽量避免使用同步ajax调用。在一些登录的场合常常使用同步调用服务器的登录接口。 同步调用&#xff0c;需要将页面上的所有元素给锁定住&…

MessageQueue Message Looper Handler的解释说明

总结4个关键概念 1、MessageQueue&#xff1a;是一种数据结构&#xff0c;见名知义&#xff0c;就是一个消息队列&#xff0c;存放消息的地方。每一个线程最多只可以拥有一个MessageQueue数据结构。 创建一个线程的时候&#xff0c;并不会自动创建其MessageQueue。通常使用一个…

C语言中的内存分配

在任何程序设计环境及语言中&#xff0c;内存管理都十分重要。在目前的计算机系统或嵌入式系统中&#xff0c;内存资源仍然是有限的。因此在程序设计中&#xff0c;有效地管理内存资源是程序员首先考虑的问题。 第1节主要介绍内存管理基本概念&#xff0c;重点介绍C程序中内存的…

强化学习(十七) 基于模型的强化学习与Dyna算法框架

在前面我们讨论了基于价值的强化学习(Value Based RL)和基于策略的强化学习模型(Policy Based RL)&#xff0c;本篇我们讨论最后一种强化学习流派&#xff0c;基于模型的强化学习(Model Based RL)&#xff0c;以及基于模型的强化学习算法框架Dyna。 本篇主要参考了UCL强化学习课…

js如何读取客户端Excel文件

详细见 http://www.oejia.net/blog/2012/08/07/Js_read_xls.html 原理是利用了IE关于Excel的ActiveX插件&#xff0c;所以此功能只支持IE系列浏览器 var tempStr "";var filePath document.all.upfile.value;var oXL new ActiveXObject("Excel.application&qu…

Redis之简单动态字符串sds

转载&#xff1a;https://segmentfault.com/a/1190000012262739 redis在处理字符串的时候没有直接使用以\0结尾的C语言字符串&#xff0c;而是封装了一下C语言字符串并命名为sds(simple dynamic string)&#xff0c;在sds.h文件里我们可以看到如下类型定义&#xff1a; typede…