程序员的思考方式(未完待续)

前言

现在程序员已经形成了 —— 尤其在互联网上 —— 一种文化氛围,越来越多的非程序员开始关心和谈论程序员的生活,不管笑料也好,怪癖也罢,程序员的确遵循着一套属于自己的工作和生活方式

更重要的,这种方式在影响着程序员的思考模式,并从另一个侧面,能够看出这个程序员是否一个“专业的”程序员。

本文即是介绍程序员是如何思考的。让刚踏入程序员这个行当的新手,以及那些和程序员打交道的人明白,什么样的程序员算是一个“专业”的程序员,以及如何让程序员变得更专业。

程序员的生产力

管理层 —— 或者说社会 —— 要求编程的生产力需要持续提高。而事实上,那些真正专业的程序员总会不断地从编程岗位上挪走:要么从事不再编程的设计和架构工作,要么被提拔到了管理岗位,同时,计算机行业的发展速度要远远高于生产力提高的速度,并且人越多,项目越复杂,所需的沟通和维护成本就会成倍地增长。程序员总是很难达到管理层设想的目标。

除非一名胜任的程序员,否则没法直接评判程序员的工作质量,你只能从他完成的任务的价值来间接判断他的生产力。可悲的是,一旦程序员从代码中被提拔成经理,可以开始不用写代码了以后,那他就再也不会碰它一下,连看一眼都不会。管理层发明了各种让程序员的生产力量化的手段:代码行数,缺陷密度诸如此类。可是,难道说用1000行代码解决一个问题的办法就一定比100行的高明?反过来呢?你会用数学证明的长度来评判一位数学家的优秀程度么?

自然,程序员会发现自己受到来自上级的持续不断的威胁:他们想要我做一些事情,但是我不知道那是什么,也不知道那有什么意义;我真正有价值的成果却得不到认可!反过来,经理也会不高兴,他的上级要求提高生产力,减少人力 —— 这个可是的确能量化的!他总发现不知道手下的程序员在干什么,也总觉得他们的生产力提高得太慢。

因为程序员的工作是无法直接衡量的,并且没人能直接监督一名程序员的工作状态 —— 他对着漆黑的终端,手指敲着什么,但谁知道他在想什么呢?因此,只有提高程序员内在的动力才能真正提高生产力。按照马斯洛的需求模型来看待这个问题,人有五层需求。能来做程序员这个行当的人,想来都能满足自己的生理和安全需求了。那么剩下的就是社交需求、尊重需求和自我实现。

很多人抗拒换一份工作的主要原因是如果去了新的环境,需要重新建立人际关系 —— 这对于木讷的程序员来说打击太大了。于是我们会发现,如果有人从A公司跳槽到B公司,他在A公司的朋友去B公司就不是那么难了。因此,当程序员在公司内部拉帮结派时,经理要反思,可能某些程序员之所以不换一份工作,仅仅是因为“社交需求”还能得到保障而已。

而尊重需求和自我实现也是如此,程序员都在做一些很有创造性的事情 —— 至少自己是这么认为的,都希望自己的创意被认可。然而做为管理层是无法评判这些创造力的好坏的,怎么办呢?把这项重任交给程序员之间的代码评审吧,是好是坏,他们自己会知道的。

程序员的处事原则

程序员喜欢规则。就像计算机里简单的1和0,或者复杂的代码编译器,只要有规则就是好事,不管它有多复杂。如果你告诉程序员这里有若干规则,但是不告诉他们是什么,他们就会想尽一切办法找到里面的规则。

刚入编程行业的新人在入职时都会被教导:需求完成就进入开发阶段了,这时需求理应不再变化。他们记住了这条规则,因此在需求变化的时候,程序员总是会大惊小叫甚至怒气冲天。然而程序员对规则的理解也在不断深化,有经验的程序员对需求变化总能笑而视之,这是因为他们发现了规则的增强版:需求理应不再变化,但是需求总会发生变化。

如果部门里多了一条编程规范,一开始的时候,程序员会吵吵嚷嚷,并且尝试破坏它 —— 就因为这条规则是原来没有的,但是一旦他们发现这条规范真的是被强制执行了以后,他就会把这条规则加入到自己的规则库中。反过来,如果他们发现这条规范并不是强制执行的,那么他们会推导出一条新的规则:这些规范不算数。大家也会觉得很舒服,因为一切又变得有规则了

程序员的敬业与宅

很多程序员会过于敬业,虐待自己的身体以完成工作,以至于牺牲了自己的健康。况且,因为加班又加班,工作质量也会受损,这有什么意义呢?不过,说老实话,很多人这样做是为了满足自己内心隐秘的放纵欲望 —— 就象彻夜狂欢一样,只是以工作做为借口而已。

我们或多或少有一些偏见,运动员很大块头,都很蠢笨;而程序员聪明,却没啥力气,我们选择了后者,因此我们身体不好是显然的(注意这个催眠词!)。可实际情况刚好相反:身体好,就能更集中精力,提高工作效率,这样也就有了更多空闲时间,也有了更健康的生活方式,身体就更好了。身体和工作是一种正向的循环关系,然而总有很多程序员处在相反的循环中。

如果一个人总在一个封闭的环境下工作,他解决问题的方式也会变得单调死板。所以,如果程序员想提高工作效率,就要在工作中不那么一心一意地投入,去找一些能刺激大脑别的机能的事情。我们工作中已经有了太多的理性,来点感性如何?智力已经锻炼得够多了,来点精神上的锻炼如何?其实,大脑的健康不仅仅是来自它受了多少锻炼,而是哪些素质得到了锻炼

将问题变成计算机问题

程序员无时不刻都在解决问题。他们把现实世界的需求变成一个计算机问题,然后解决掉,在这过程中需要不断地思考。

然而,有人却不愿意我们思考,或者说,干扰我们思考。他们总用一些催眠词:“差不多”、“可能”、“有一个”、“应该”、“显然”、“将来”……然后我们的大脑就会不知不觉地忘记思考。在说“可能”的时候,其实说的是肯定;在说“显然”的时候,其实是想赶紧按照他的方案行动;在说的“将来”,其实是永远也不的代名词。

而且由于计算机世界和人类世界的巨大差别,程序员恰恰又要用计算机解决人类世界的问题,对问题的定义和思考就尤为重要了。关于如何思考和解决问题,我会另起一篇文章详述。

小结

本文是《理解专业程序员》的读书笔记,分两篇,本篇从程序员的生产力、处世原则、工作方式三大方面介绍了程序员是如何思考的。欢迎留言分享你的读书心得,也欢迎follow我的twitter@cnberg 或者新浪微博 @berg,我会在上面随时分享我的感受和心得。

1 条评论

  1. 于 2012-08-06 @ 22:21:55

    嗯 受教了。看来我需要提高效率,而不是花费更多的时间!

发表评论

火花来自思想的碰撞,请留下你宝贵的评论吧: