《程序员》对温伯格的专访

这是gigix在2003年9月对温伯格的一次专访:

软件思想家Gerald Weinberg专访<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

记者/熊节

(本文刊登在《程序员》杂志第9期,版权所有,未经许可,禁止转载)

Gerald Weinberg给自己的评价是“thinker”。的确,与形形色色汗牛充栋的实用技术手册类书籍相比,Weinberg先生的著作(《程序开发心理学》、《系统化思维导论》、《你的灯亮着吗?》……)无不闪耀出睿智的光芒,并因此显得卓尔不群。

Weinberg先生的著作中译本即将问世之时,笔者有幸采访了Weinberg先生,与这位软件业内最著名的“thinker”有了一次近距离的交流……

《程序员》(下文简称“《程》”):Weinberg先生,我也是您的读者之一。最近我刚拜读了您的《程序开发心理学》,真是一本好书。

Gerald Weinberg(下文简称“GW”):承蒙夸奖。

思考与交流

程序开发是一种社会行为。

个性化的邮件发送系统会使程序员与这种交流隔离得更远;而通过终端系统实现的远程任务进入与退出,则会进一步地加剧这种隔离。

——《程序开发心理学》,第4

《程》:现在的程序员,他们的工作环境和您书中描写的早已判若云泥。您认为现在随处可见的PC和宽带网是否会对程序员的工作起负面作用?机器的效率太高,会不会让程序员无形中失去思考和交流的时间?

GW:环境会对程序员起到如何的影响,这在很大程度上取决于程序员自己。对于最好的程序员,他们几乎可以在任何环境下做出好成绩;而对于最差劲的程序员,不管一个环境被吹得如何天花乱坠,也帮不了他们的忙。

但是,尽管如此,我们的确应该努力为程序员提供良好的交流环境和氛围,以免他们死坐在电脑前面钻牛角尖,而忽略了思考和交流的重要性。

《程》:那么,管理者可以做些什么来促进思考和交流呢?

GW:我觉得,管理者应该时常强迫程序员关掉电脑,强迫他们多做一些思考、计划和设计。不过这样是否有效,我也没把握。如果有人强迫你“从现在开始的一个小时内思考”,你大概也不会感到很舒服,自然思考的效果也不会很好。

结对编程(Pair Programming,已经被XP和其他一些敏捷方法采用)看起来是一条不错的补救之道。如果一个人的思路受阻,另一个人往往会想到不错的点子。两个人一起思考,效果会比各自为政要好得多。

一般来说,工作环境越开放,程序员之间的交流就会越多。如果管理者不鼓励程序员之间串岗聊天,交流很快就会销声匿迹。有些管理者仍然固执地认为:程序员不应该在工作时跟别人说话,他们就应该把脑袋埋在电脑屏幕前面。这种想法是错的,这样的管理者根本就不懂得编程工作的本质。

所以,一般来说,如果管理者和程序员能够懂得思考和交流的重要性,他们能更好地利用现代化的编程环境。

可怜的管理者

经过整整一代的更替,许多高层的主管经理在软件方面依然一窍不通。

管理能力的缺乏,总是致命的问题;而软件开发经验的缺乏,不过是某些主管经理们很方便的一个借口。

——《程序开发心理学》,第6

《程》:最近Tom DeMarco的《人件》在中国热销,每个人都在关注我们这些“可怜的程序员”,不少公司开始致力于改善程序员的工作环境。可是,我发现还有不少“可怜的领导者”,欠缺领导软件团队的经验使他们焦头烂额。您为他们准备了什么东西吗?

GW:我当然不会忘记他们。软件项目的领导是一项独特的工作,我也写了一本关于这个主题的书:《成为技术领导者》。

《程》:在我们的团队里,部门经理跟我们程序员一样年轻、一样聪明。而且他为人很好,每当我们遇到问题时,他总会帮我们解决。正因为这样,他自己的工作常常被耽搁下来,不得不经常加班。而且他常常过于注重细节,忽视了整体的计划。您能给他一点建议吗?

GWTom DeMarco把这种情况称为“糟糕管理的第二法则”——插足团队成员的具体工作。你可以告诉他,“不应该这样做”——这是Tom DeMarco说的。如果他还不停止,就告诉他“糟糕管理的第一法则”(这是我自己总结的)——“如果你劳而无功,就再多做一点。”也许让他再辛苦一点,他就会发现问题,并自己调整过来。如果这样都还不行,就把上面说的两条法则告诉他的上级领导,让他们来安排吧。

《程》:您是否认为“扁平式”的企业组织更适合软件开发?毕竟,软件设计只存在于开发者的脑袋里,所以高层管理者有必要了解每个程序员的想法,对吗?

GW:这也不尽然。管理者不一定需要了解所有的细节,他们的工作是“管理”而非“开发”——也就是说,他们只需为程序员创造一个良好的环境,激励程序员的工作热情,程序员自然会把该做的事都做好。

《程》:您在书里提到一个有趣的现象:在分配任务的时候,人们可能说“我可以在两个月内搞定”;但他们实际需要3个月甚至更多的时间。最近我们在实践XP,我想之所以出现这种盲目乐观的估算,是不是因为他们没有将任务细分的缘故?

GW:真正的问题是,人们常常把“估算”和“承诺”混为一谈——我不知道别的地方情况如何,起码美国人经常这样。所谓“估算”,本来就是一种不精确的东西。没有人知道未来会怎样,要是有人说他能准确地知道未来的情况,他不是白痴就是骗子。

要想获得更加可靠的估算结果,最好的办法就是像你说的:细分任务。对于长达一个月的任务,谁都不可能准确地估算出完成的时间;但对于一到两天的任务,就能够比较准确地估算。

而且,细分任务还有另一个好处:你可以让管理者看到整个估算结果的缘由。这项任务需要两天、那项任务需要三天……整个项目的时间计划不是信口开河吹出来的,这样管理者也不能随便要求开发者压缩进度。

“业余”和“专业”

“程序开发”这个词所蕴含的行为方式是无穷无尽的。

一位业余程序员可能刚刚用六条语句写就了一个BASIC程序,可以用来求解二次方程的根,便开始就程序开发的理论与实践侃侃而谈——最令专业程序员们反感的,莫过于此。

——《程序开发心理学》,第7

《程》:我注意到您多次强调“业余程序员”和“专业程序员”之间的差异……

GW:因为我认为这是一个非常重要的观念。并不是“以编程为生的人”就有资格自称“专业程序员”的,但真正对软件学科起到推动作用的全然是专业程序员。这并非贬低业余程序员,任何一门学科都有业余爱好者,这无可厚非。但有必要划清业余选手和专业选手之间的界限,这样业余选手也能找到自己努力的方向。

《程》:可是,如今软件的范围如此宽泛。从政府机关到航天飞机,从移动电话到超级市场,到处都有软件。各种软件之间的差异如此巨大,我们又该如何区分专业程序员和业余程序员呢?

GW:在我看来,首先应该考虑的是他们编程的目的。如果只是为一己私利而编程,如果编程的结果对别人毫无影响,这就是业余程序员的编程方式。

举个例子吧,计算机系的研究生在知识的深度和广度上都已经相当不错了,但他们通常只是为自己编程——为了学习、或者为了拿到学位,所以他们仍旧只是业余程序员。如果他们在学习之余还有一份工作,为别人开发实际使用的软件,这时他们就是专业程序员。

请记住,专业程序员未必都很出色,业余程序员也可能出类拔萃,但他们编程的目的是不同的,这决定了他们之间本质性的差异。

《程》:自从知道您对“专业”和“业余”的划分之后,我就一直想了解您对共享软件(share-ware)的看法。很多年轻程序员怀着淘金梦去做共享软件,您认为共享软件对于软件行业有什么贡献?

GW:几乎所有的共享软件都是垃圾。虽然商业软件和开源软件也有不少垃圾,但共享软件几乎全是垃圾。我曾经试用过一些共享软件,但仅仅是尝试而已。如果我要掏钱买一个软件来用,我一定要求有一家值得信赖的公司为它提供支持。至少在美国,值得信赖的软件公司并不多。很多公司开张不到五年就倒闭,然后他们的顾客再也得不到任何支持。而共享软件,它们的用户能得到的保障就更少了。不,至少我不会去买这样不可靠的软件。

如果从软件行业的角度来说,共享软件给年轻人们灌输了很糟糕的习惯,让他们以一种业余选手的方式工作。共享软件的作者们习惯于单打独斗,总是凭着自己的爱好工作,这种牛仔式的工作方式至少是缺乏专业精神的。

找到你想要的人

程序员平均的智商甚至要超过大学研究生。

程序开发是一项极具多样性的行为,因此根据单一的“分数”,任何测验都无法充分地衡量所需要的智力。

——《程序开发心理学》,第9

《程》:您认为大学对我们的软件产业究竟起了什么作用?在中国,高校大幅扩招,结果是我们根本无法从文凭上判断一个毕业生的能力和才华……

GW:没错,在美国也一样,大部分毕业生严重缺乏实际项目的经验,只有一张毫无意义的文凭。虽然计算机系的毕业生更多了,但企业却更难找到优秀的人才,因为文凭能提供的信息更少了。大学教育在很大程度上是被浪费了:很多人就为一张文凭去读书,但当他们拿到文凭时,企业已经不敢相信文凭了。全世界都有这个问题。在学校教育之外,我们需要借助其他的手段来教育、甄别软件开发者。

《程》:如果不看文凭的话,又该如何挑选人才呢?譬如说,如果您要面试一个开发者,您会怎么做?

GW:如果你要招聘一个程序员,就应该给他一个编程类的问题,要他当着你的面马上解决。据我自己的经验,大概1/3的人会拒绝这样的测试,他们认为自己的简历已经足够说明问题了,我绝对不会雇佣这样的人;另外1/3的人会马上埋头苦干,甚至不多提一个问题以澄清需求,这样的人缺乏分析问题、解决问题的能力,我也绝对不会雇佣他们。

最后,大概有1/3的人会表现出解决问题的能力。他们会提出各种各样的问题,获取更多的信息。如果得不到想要的信息,他们会刨根问底。开始动手之后,他们还会不断地请“客户”来检查阶段性成果,以确保自己的方向没有错误。在开始编程之前,他们会做简单的设计,并且在几种设计方案之间权衡选择。他们可能无法解决整个问题,甚至可能选择错误的方向,但我能看到他们解决问题的方式,这才是招聘开发者时最应该考虑的。

我从来不会让应聘者做选择题一类的测试。软件开发是一件困难的工作,比选择题困难得多,它需要不断的思考和交流。

另外,如果应聘者有工作经验,我会请他介绍以前参与的项目。从他们谈论项目的言辞之中,我也能获得大量的信息。

* * *

技术和管理

成为领导者的技术明星们面临的最难的一个选择就是可能要远离最新的技术。在我的职业生涯中,我必然要牺牲一部分技术资本以改善人际交往能力。我不清楚——即便是我愿意——我现在是否还能够收回当初的实现反向的转换决定。就像许多完全在创新工作中成长起来的问题解决领导者解决问题型领导者那样,我相信自己在任何时候都能回到技术主流中去,但事实可能并非如此。

——《成为技术领导者》,第5

《程》:再问一个有关程序员职业发展的问题吧。几乎所有的人都认为,软件开发是年轻人的职业。程序员们一边挥着汗水,辛苦地熬夜写代码,一边又对自己30岁以后的职业发展方向充满惶恐。您是程序员出身,以后又经历了大学教授、系统设计师、咨询师、培训师等多个角色的转变。你对程序员的职业发展有什么见解呢?

GW:是的,对于我们当中的很多人来说,都存在着职业发展的问题。我的好几本书中都谈到了这个问题。我希望我的这些书能够对中国的读者有所帮助,就像它们帮助了许许多多美国(以及其他国家)的读者一样,使他们能够在职业发展道路上做出正确的选择。

* * *

《程》:最后,按照惯例,请您对中国的软件开发者们说一句最想说的话吧。

GW:难道只能说一句吗?(笑)

就把我常用的签名档送给中国的开发者们吧,它们都是中国的古老谚语,相信中国的朋友会喜欢它们的。

智者千虑,必有一失;愚者千虑,必有一得。

十年树木,百年树人。

听而易忘,见而易记,做而易懂。

你可能感兴趣的:(编程,软件测试,项目管理,敏捷开发,中国移动)