CatCoding

程序员病

2017-01-24

最近看费曼的书《发现的乐趣》,里面有一段描述非常好玩:

好,弗兰克先生开始实施他的计划了,与此同时,他也得了一种病——『计算机病』。现在每个使用计算机的人都知道这个毛病,那种病非常厉害,会干扰整个工作。这是我们面临的一个严重问题。所谓『计算机病』就是你一『玩』上计算机,就会上瘾。计算机真的非常奇妙,你手上操作着那些 x 转换开关,这样弄得到某个偶数,那样弄得到某个奇数。如果你够聪明,很快你就能在一台机器上做越来越复杂的计算。只不过,没多久,整个系统就瘫痪了。

他对工作不再上心了,也不再管理手下,整个系统运转得很慢很慢。但是,真正麻烦的是,他一直坐在一间办公室里,琢磨怎么让制表机自动打印出反正切值,然后机器就开始打印,成排成排地打印,扑哧,扑哧,扑哧,一边打印一边还自动用积分计算反正切值,整张表都是方正切值计算结果。

其实,这毫无意义,因为我们人手一份反正切表。不过,如果你用过计算机,你就会理解他为什么得这种病。计算机能让你知道自己究竟能做多少事情,这也是一种乐趣。他第一次接触这机器,就染上了这种病,这个可怜的家伙——整个项目都是他发起的,可他却得了这种病。

其实很多程序员都有这种病,可以概括为一句话『沉迷于工具』,计算机也是工具,这位弗兰克先生还未解决眼前的问题时就丢掉了方向。好奇心是程序员必不可少的东西,而如果管不住自己的好奇心就会耽误事。对于非程序员来说,这件事情看起来就是『某个杀猪佬,拿到了一把新刀,他觉得这么刀真他妈锋利,然后磨磨刀,再磨磨刀,反正猪是不会杀的』。

程序员经常会『磨刀』,学习算法,是磨练自己的头脑和思维。学习语言,是为了多拥有一个工具或者也可说是锻炼自己的思维 (不改变自己思维习惯的语言不足以学之?)。学习操作系统的原理和细节,也可以理解为加深对工具的认识和理解。在学校的学习方法大多数从基本原理和经典书籍学起,顺便找一些小项目练练手。在步职业阶段后,从实用的角度,我们是否应该直面问题,带着问题找工具,学用工具,理解工具,这个过程中更可以锻炼自己的能力。从个人体验来说,这种方式优于『先锻炼自己的能力,先学会某个工具,然后再找个问题来解决』。举例来说,其实做一些 ACM 之类的题也挺有乐趣的,但我理解为刷题也是在『磨刀』。更让自己有成就感的是,在工作中碰到一个解决不了的算法问题,通过学习和思考相关的东西解决了,这样的方式理解更深。其实如果是步入职场,很多程序员也没多少时间来广泛学习,带着问题来『磨刀』也是必然且更有效的选择。

再多扯一点,不少程序员有一些类似于强迫症的症状 (在很多情况下这是一个好的特点)。而在计算机这个领域里有太多东西容易沉溺,比如编辑器,编程语言,操作系统,框架,范式等。这类工具都有可能让程序员走向某个极端,形成『偏见』。我也有类似的体验,只是现在回想起来觉得挺傻缺、傻气的。大多数程序员都不够拥有开阔的心态来面对这些工具,我们会觉得自己的选择是更好的,能解决一切问题的银弹。这副图能说明这个道理

我现在会注意避免自己陷入这些『疾病』中。比如一个工具,不管是框架也好,语言也好,不要在还没摸清楚门路的时候,花大片时间去学习。而是最好带着一个需要解决的问题,边做边摸索。

发现自己的傻缺,就是成长,对吧!

公号同步更新,欢迎关注👻
Tags: Books