程序员应该学开车

来源:互联网 发布:阿里云服务器带宽跑满 编辑:程序博客网 时间:2024/04/29 02:30
说实在的,过去从来也没有想到这辈子还会学会开车。没学会开车之前,有时做梦开车,只不过更像开飞机。现在学会开车了,结果经常做梦找不到车,或者找不到地方停车。:)
闲话少说,这会儿想说说开车和编程之间的关系。用我外公(抗战前就开车了,开了50年了)说:开车很简单,两分钟就能学会。但是要开好车,则需要一辈子。
几年前我学了开车,尽管不是两分钟就学会,但在同组的几个人中,学的是最快的(如果再早十年,就更快了,年纪小学东西快)。开车实际上是一个颇为复杂的并发操作,刚开始的时候总是让人手忙脚乱的(挨师傅骂,是非常正常的事)。
举个例子,开车到一个路口,打算右转弯。首先开方向灯,然后减速。但是不能随随便便地马上就能打把转向了。作为驾驶员,保证行人和自行车的安全是非常重要的。于是,在打把之前,先得从右反光镜里观察右侧的非机动车。同时眼睛还要扫视车头右侧的人和自行车。在右前方没有阻挡的情况下,开始转弯。但这还没完,因为减速,必须换档。如果垂直方向的道路是绿灯,那么还必须注意避让那个方向的车和人。还有一个小麻烦,驾驶室左前方的挡风玻璃立柱往往会影响视线,形成盲区。有经验的驾驶员会不停地前后摇动头部,以避开立柱的遮挡。
综合起来讲,当你驾车在一个繁忙的十字路口右转的时候,往往是:左脚踩着离合器,右脚带着刹车,左手打方向,右手抓着排挡,头不停地转动,或前后摇动,视线在右反光镜、车右侧和右前方、正前方、左前方这几个方位间不断地扫视。脑子当然不能闲着,高速运转,寻找车流和人流中的空隙,以便快速穿入。此时的司机,就像一台跑着多线程的笔记本。
通常,人脑一个时刻只能处理一项任务。因此,我们初学的时候,基本上会把车开得七歪八扭。但随着练习时间的增加,这些动作慢慢地会融入我们的潜意识,渐渐地成为反射性的动作。于是,我们便学会了并发地开车。
当一个程序员编程的时候,有很多与开车相似的地方。比如我们编写一个程序,在一个窗口中绘制一些曲线图,我们实际上需要同时处理很多方面的问题。首先,我们得对付语法,尽可能地回想起语法要点,以便编写出有用的代码。然后,我们必须调用系统服务,我们必须回忆起每个参数的类型、次序和含义。并且需要明确每个参数和返回的约定。必要时还得对某些异常作出必要的处理。我们要尽可能多地回忆起预定义的常量、枚举或宏。我们还要竭力避免破坏代码的软件工程性,尽可能做到DRY。为了实现程序,我们还必须明确图形构建的算法,以及色彩线条的设定。最重要的,还要尽力避免编写引发错误的代码。
在很多情况下,我们几乎同时处理着这些问题,时常让脑子超负荷。这也就是编软件累人的地方。
我们通过编程练习和开发活动不断地操练这些工作,最后就像开车那样把编程的基本技巧作为本能存储在大脑中,在未来的开发活动中使我们驾轻就熟。
至于为什么程序员应该学开车,那就很容易理解了。因为编程,还可以把某些不是顶顶要紧的工作放一放,比如DRY、错误处理等等,先完成功能再说。但开车,只要疏忽了哪一项,便会引发事故。开车有助于训练人并发处理问题的能力。对于程序员,就更容易处理诸多相互混杂的编程要领了。