Skip to content

《程序开发心理学》第三篇

第7章 程序开发任务的差异

程序员工作绩效的差异,很大程度上取决于其对完成任务目标的不同理解。 对没有强调的目标进行估计,恐怕根本不可靠。(很多时候高效和快速编程只能选择一个) 帕金森定律:时间充裕则工作进度随之而慢,收入多则开支亦随之增多。 上述定律说明,工作目标的存在会反过来影响任务进度。

在完成项目的过程中,经常出现从上线时间倒推开发进度的工作,这会造成工程师会项目进度的压力之下只能按照最乐观的估计给出工作量。然而众所周知,项目开发中充满了各种bug或者dependency等意外因素。一个比较通用的估计是,如果你认为在乐观的情况下可以n天完成的任务,预期2n天内完成是合理的。 所以这些根据目标倒推的方式往往不能很好的工作。而对需求有详细的认识和拆分后,正向的进度安排一般不会差的很远。当然这些都要基于工程师能够胜任工作,并且对自身的能力有清醒的认识。所以在工程师职业生涯的初期或中期,能够有一个很好的引路人或者加入成熟的团队会非常重要。 帕金森定律是基于人性中偷懒的本能作怪,这点是无可避免的。

第9章 智力水平及问题求解能力

努力克服思维的定势,懂得在什么时候采用什么样的方式才是最聪明的人。 消除含糊不清的地方,使你的文档文采倍增。

智力测验

就目前来说,可能没有任何关于程序方面的智力测验是行之有效的;人们只能测试出他当前的能力,却无法预知他将会成为一个什么样的程序员。

如果一位工程师能够针对不同的需求采取不同的方法,而不是有了锤子看什么都像钉子,他的成长空间毫无疑问更大。编程中使用的大多数工具,其入门门槛对中高级工程师来说都不高,通过搜索引擎可以轻易使用。但是很多人确实会局限于自己非常熟练的工具,而不是花几天时间去了解新的可能更高效的工具。 前面一章提到程序员绩效的决定因素,重点在于对任务完成目标的不同理解。我不止碰到这样的需求,要在两三个礼拜内开发出一个供其他团队使用的工具,而且可以自己设计UI。在这样的研发过程中,可以明显看出工程师的差异。有的人做出来的东西就像一个待发布的产品,而另一部分人不管怎么做都比较山寨。 而且决定绩效更重要的是工程师个人的能力。这里特别想说的是,磨刀不误砍柴工似乎总是起作用。有得工程师对新的东西浅尝则止,将精力集中在项目上。而有的工程师则乐意花费更多的时间去将新的东西了解得比较透彻,即使付出一定的做项目的时间。就我目前的经验来看,后一种对项目反而会更有好处。 当然快速的学习能力也是非常重要的。 高强度的加班当然会增加工程师短时间的产出,但是过度的透支精力是有害的。有可能这个工程师在电脑前面坐了一天,却只完成了高效率的人半个小时的工作量。所以在考察工程师的时候,也要考虑他对项目的目标认知。能够列出每天的工作内容,然后专注的高效完成,这样的效率基本上可以提高一倍。

第10章 积极性,培训及经验

一项研究成果是,如果适当的增肌“驱动力”(对程序员的外部压力),那么在开始阶段确实可以提高工作绩效,但是一旦超过一定的极限之后,继续增加这种却动力只会很快令工作绩效降为0.

工作年限越长的工程师,他的积极性就越来自于内在的驱动力,而不那么容易收到外部压力的影响。施加强大的压力只会促使程序员加班更多,但是产出却未必有明显的增加。