`

程序员的十层楼

阅读更多

转载至: Zhouweiming 周伟明

程序员的十层楼

自西方文艺复兴以来,中国在自然科学方面落后西方很多,软件领域也不例外。当然现在中国的许多程序员们对此可能有许多不同的意见,有些人认为中国的程序员水平远落后于西方,有些则认为中国的程序员个人能力并不比西方的程序员差,只是整个软件产业落后而已。

那么,到底中国的程序员水平比西方程序员水平差,还是中国有许多优秀的程序员达到或超过了西方程序员同等水平呢?要解决这个问题,必须先知道程序员 有多少种技术层级,每个层级需要什么样的技术水平,然后再比较中国和西方在各个技术层级的人数,就可以知道到底有没有差距,差距有多大。

当然,对于如何划分程序员的技术层级,不同公司或不同人会有不同的划分标准,下面的划分仅代表个人的观点,如有不当之处,还请砸板砖予以纠正。

第1层  菜鸟

第1层楼属于地板层,迈进这层楼的门槛是很低的。基本上懂计算机的基本操作,了解计算机专业的一些基础知识,掌握一门基本的编程语言如C/C++,或者Java,或者JavaScript,...,均可入门迈进这层。

在这层上,中国有着绝对的优势,除了从计算机专业毕业的众多人数外,还有大量的通信、自动化、数学等相关专业的人士进入这一行,此外还有众多的其他专业转行的人士,人数绝对比西方多出甚多。并且还有一个优势就是我们这层人员的平均智商比西方肯定高。

没有多少人愿意一辈子做菜鸟,因为做"菜鸟"的滋味实在是不咋的,整天被老大们吆喝着去装装机器,搭建一下测试环境,或者对照着别人写好的测试用例 做一些黑盒测试,好一点的可以被安排去写一点测试代码。当然如果运气"好"的话,碰到了国内的一些作坊式的公司,也有机会去写一些正式的代码。

所以,菜鸟们总是在努力学习,希望爬更高的一层楼去。

第2层 大虾

从第1层爬到第2层相对容易一些,以C/C++程序员为例,只要熟练掌握C/C++编程语言,掌握C标准库和常用的各种数据结构算法,掌握STL的 基本实现和使用方法,掌握多线程编程基础知识,掌握一种开发环境,再对各种操作系统的API都去使用一下,搞网络编程的当然对socket编程要好好掌握 一下,然后再学习一些面向对象的设计知识和设计模式等,学习一些测试、软件工程和质量控制的基本知识,大部分人经过2~3年的努力,都可以爬到第2层,晋 升为"大虾"。

中国的"大虾"数量和"菜鸟"数量估计不会少多少,所以这层上仍然远领先于西方。

大虾们通常还是有些自知之明,知道自己只能实现一些简单的功能,做不了大的东西,有时候还会遇到一些疑难问题给卡住,所以他们对那些大牛级的人物通 常是非常崇拜的,国外的如Robert C. Martin、Linus Torvalds,国内的如求伯君、王志东等通常是他们崇拜的对象。其中的有些人希望有一天也能达到这些大牛级人物的水平,所以他们继续往楼上爬去。

第3层 牛人

由于"大虾"们经常被一些疑难问题给卡住,所以有了"大虾"们只好继续学习,他们需要将原来所学的知识进一步熟练掌握,比如以熟练掌握C++编程语 言为例,除了学一些基础性的C++书籍如《C++ Primer》,《Effective C++》,《Think in C++》,《Exception C++》等之外,更重要的是需要了解C++编译器的原理和实现机制,了解操作系统中的内部机制如内存管理、进程和线程的管理机制,了解处理器的基础知识和 代码优化的方法,此外还需要更深入地学习更多的数据结构与算法,掌握更深入的测试和调试知识以及质量管理和控制方法,对各种设计方法有更好的理解等。

学习上面说的这些知识不是一挥而就的,不看个三五十本书并掌握它是做不到的。以数据结构算法来说,至少要看个5~10本这方面的著作;以软件设计来 说,光懂结构化设计、面向对象设计和一些设计模式是不够的,还要了解软件架构设计、交互设计、面向方面的设计、面向使用的设计、面向数据结构算法的设计、 情感化设计等,否则是很难进到这个楼层的。

当然除了上面说的知识外,大虾们还需要去学习各种经验和技巧。当然这点难不倒他们,现在出版的书籍众多,网络上的技术文章更是不胜数,然后再去各种 专业论坛里泡一泡,把这些书籍和文章中的各种经验、技能、技巧掌握下来,再去学习一些知名的开源项目如Apache或Linux操作系统的源代码实现等。 此时对付一般的疑难问题通常都不在话下,菜鸟和大虾们会觉得你很"牛",你也就爬到了第3层,晋升为"牛人"了。

看了上面所讲的要求,可能有些大虾要晕过去了,成为牛人要学这么多东西啊!要求是不是太高了?其实要求一点也不高,这么点东西都掌握不了的话,怎么能让别人觉得你"牛"呢?

需要提一下的是,进入多核时代后,从第2层爬到第3层增加了一道多核编程的门槛。当然要迈过这道门槛并不难,已经有很多前辈高人迈进了这道门槛,只 要循着他们的足迹前进就可以了。想迈进这道门槛者不妨去学习一下TBB开源项目的源代码(链 接:http://www.threadingbuildingblocks.org/),然后上Intel的博客(http://software.intel.com/zh-cn/blogs/ )和多核论坛(http://forum.csdn.net/Intel/IntelMulti-core/ )去看看相关文章,再买上几本相关的书籍学习一下。

在国内, 一旦成为"牛人",通常可以到许多知名的公司里去,运气好者可以挂上一个架构师的头衔,甚至挂上一个"首席架构师"或者"首席xx学家"的头衔也不足为 奇。有不少爬到这层的人就以为到了楼顶了,可以眼睛往天上看了,开始目空一切起来,以为自己什么都可以做了,什么都懂了,经常在网络上乱砸板砖是这个群体 的最好写照。由此也看出,国内的牛人数量仍然众多,远多于西方的牛人数量,在这层上仍然是领先的。

也有不少谦虚的"牛人",知道自己现在还不到半桶水阶段。他们深知爬楼的游戏就像猴子上树一样,往下看是笑脸,往上看是屁股。为了多看笑脸,少看屁股,他们并没有在此停步不前,而是继续寻找到更上一层的楼梯,以便继续往上爬。

 

 

 

 

 

 

看了上面的小标题,你可能会觉得奇怪,这篇文章不是讲“程序员的十层楼”吗?怎么冒出了第 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 层楼是不存在的,自然没有人可以骑到“上帝”的头上。

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

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics