本书开创"以人为本"研究方法的先驱,在长达25年的岁月中一直保持活力,至今仍在继续。1997年,本书作者温伯格因其在软件领域的杰出贡献,被美国计算机博物馆的计算机名人堂选为首批5位成员之一。
在计算机界,还没有任何一本计算机方面的书,在初次出版之后,能够在长达25年的岁月中一直保持活力--而且这种活力到今天仍在继续。《程序开发心理学》是开创'以人为本'研究方法的先驱,它以其对程序员们在智力、技巧、团队和问题求解能力等方面独特的视角和敏锐的观察经受住了时间的考验。
Weinberg先生在1971年出版的、具有深远影响的第1版的基础上,增加了令人耳目一新的内容,构成了这本《程序开发心理学》的银年纪念版。新增的内容包括:新的前言,每一章之后的评注以及针对影响程序员职业生涯的若干问题发自内心的真知灼见。
Weinberg先生以其独特的视角回顾了自己当年的见解,重新审视了与今天的程序开发尤为相关的问题,并强调了今与昔的异同。内容包括:作为社会行为的程序开发、心理学测量、无私式程序开发、程序开发团队、大型工程中共同的社会性问题、智力水平,以及问题求解能力、积极性、培训以及经验,还有程序语言设计的一些原则等等。
第I篇 作为人类行为的程序开发
第I篇 作为人类行为的程序开发——评注 4
第1章 阅读程序 5
一个例子 6
机器的局限 8
语言的局限 9
程序员的局限 11
历史遗留问题 11
规范 13
小结 13
思考题 14
参考资料 15
第1章 阅读程序——评注 17
第2章 优秀程序的要素 19
技术规范 21
日程计划 24
适应性 24
效率 27
小结 30
思考题 30
参考资料 31
第2章 优秀程序的要素——评注 33
第3章 如何研究程序设计 35
自省 36
观察 38
实验 41
心理学测量 45
利用行为科学中的数据 49
小结 51
思考题 52
参考资料 53
第3章 如何研究程序设计——评注 57
第II篇 作为社会行为的程序开发
第II篇 作为社会行为的程序开发——评注 64
第4章 程序开发组 67
正式与非正式组织机构 67
自然环境与社会结构 71
错误与惟我独尊 73
无私式程序开发 78
建立与维护程序开发的环境 83
小结 88
思考题 88
参考资料 90
第4章 程序开发组——评注 92
第5章 程序开发团队 97
团队的组建 97
目标的设定与认同 103
团队的领导者及其领导方法 109
团队中可能出现的危机 118
小结 125
思考题 126
参考资料 128
第5章 程序开发团队——评注 130
第6章 程序开发项目 135
调整过程的稳定性 135
绩效评价 140
项目结构 147
大型项目中共同的社会性问题 151
小结 155
思考题 157
参考资料 159
第6章 程序开发项目——评注 161
第III篇 作为个人行为的程序开发
第III篇 作为个人行为的程序开发——评注 169
第7章 程序开发任务的差异 171
专业的与业余的程序开发 171
程序员想要做什么 176
程序开发工作的不同阶段 184
小结 190
思考题 191
参考资料 193
第7章 程序开发任务的差异——评注 195
第8章 人格因素 197
疯狂的轰炸机 197
人格的改变 199
人格中经久不变的部分 202
关键的人格特征 205
人格测试 211
程序员的人格测验 215
小结 217
思考题 218
参考资料 219
第8章 人格因素——评注 221
第9章 智力水平以及问题求解能力 223
心理集合 223
问题求解的一些维度 227
程序开发的智力因素 230
智力测验 234
程序员的智力测验 236
小结 242
思考题 243
参考资料 244
第9章 智力水平以及问题求解能力——评注 248
第10章 积极性、培训以及经验 251
积极性 252
培训、课程学习与教育 257
学习的阻力 261
如何学习程序开发 267
小结 273
思考题 274
参考资料 276
第10章 积极性、培训以及经验——评注 278
第IV篇 程序开发工具
第IV篇 程序开发工具——评注 285
第11章 程序语言 287
程序语言与自然语言 287
程序语言设计 292
小结 295
思考题 296
参考资料 296
第11章 程序语言——评注 299
第12章 程序语言设计的一些原则 301
一致性 301
简结性 308
局部性与线性 314
传统与革新 318
专用的、多用的以及玩具式语言 325
小结 329
思考题 331
参考资料 323
第12章 程序语言设计的一些原则——评注 336
第13章 其他的程序开发工具 339
程序测试工具 339
操作系统 345
分时与批处理 353
文档管理 357
小结 367
思考题 368
参考资料 370
第13章 其他的程序开发工具——评注 374
第V篇 结语
第V篇 结语——评注 385
银年纪念版序言
《程序开发心理学》(The Psychology of Computer Programming)是一本令人称奇的书--其令你感觉奇特的程度,不亚于你听说有人能够活到125岁时的感受。我们所从事的这一行发展得飞快,据在下所知,还没有其他任何一本计算机方面的书,在初次出版之后,能够在长达25年的岁月中一直保持活力--而且这种活力到今天仍在继续。
令我自己更为惊讶的一点是,在写作这本书的时候,我根本就没有想到过它会有什么与众不同之处。在那之前的15年内,我一直在编写代码、带领程序员小组以及为程序员们提供培训和咨询。我确实曾经考虑过写一部关于计算机程序开发(在那时这项工作还鲜为外人所知)的小说,不过我意识到自己当时的写作技巧实属贫乏,写出来也不见得有人会信。我于1969年赴意大利休假八周,其间灵感突发,于是写成了"The Psychology of Computer Programming"的初稿。
那个时候,我已经出版过几本关于如何为不同计算机开发程序的书,非常畅销;但是这本书对我来说却是一次新的探险。为了这本书的出版,我经历了许多挫折--有些是我在此前出版书籍时所不曾经历过的。截至当时,McGraw-Hill一直是我的出版商。这家出版社一开始请了几位审阅人,他们看过我的手稿之后一致认定,没有人会愿意买这本书。于是我又转向Prentice-Hall,他们勉强同意--但前提是,我必须同时把我的几本很赚钱的书也交由他们出版。然而我觉得还是找一家更为热情的出版社为好,因此又将书稿同时交给四家出版社进行评阅。到这时,时间已经过去了两年,因此我决定哪家出版社首先表示愿意,我就交给它出版。最后四家出版社表示愿意,但是最早的是Van Nostrand Reinhold--在1971年,这本书终于付梓出版了。具有讽刺意味的是,就在这本书出版的当天,负责此书的编辑被解雇了,理由是"对计算机出版界一无所知"。
无论Van Nostrand出版社对这位编辑如何评价,这本书很快就在技术类书籍中成为佼佼者,先后印刷了20次,并且在25年之后仍然在不断印刷。最后Van Nostrand出版社将本书以及他们所有的计算机书籍的版权转让给另外一家大出版社--在此后的数月之内,这本书就因为印刷中断而脱销。经过了几乎是遥无尽头的艰难谈判,我终于重新获得了版权,并委托Dorset House出版社来出版本书的银年纪念版。
我之所以要出版这本银年纪念版,是基于以下几个方面的考虑:
1. 让软件行业的新一代人士可以读到本书的原版;
2. 这一领域依然很年轻,我希望能够从历史发展的角度,为这一领域提供一些其所亟需的纵览性观点;
3. 利用这个千载难逢的机会,对软件产业的发展做一评述,并对我以前的思想作一反思。
在这个新版本中,我并不指望去对软件心理学进行更新。首先,Ben Shneiderman以及其他人已经在这方面颇有建树,其水平远在鄙人之上。其次,正如Ben曾经评价说的,实际上这本书谈论得更多的并非软件心理学,而是软件人类学--在后续的几本书中,我在这两个方面都做了展开论述。
在重新审视本书时我的感受颇多,我认为至关重要的一点是,我希望能够暂时驻足片刻,以体会一下在过去的25年间,我自己以及软件产业究竟前进了多远。对于软件产业而言,本书的第1版也许不能称作为一个转折点;但是对于我自己而言,它的确是一个转折点。从那时起,我编写的代码少了很多,而且也更少参与对程序员团队的管理工作。然而另一方面,我却培训了成千上万的程序员及其团队的主管,并且为成百上千的软件项目提供了咨询。我开始把更多的精力用于审查代码、设计方法、审查设计方案、了解需求以及汇总需求。与此同时,我还专门花了许多时间,以培训那些有可能成为软件经理的人,并且为他们提供咨询。有的时候我也确实会想要回到从前的生活方式,那种整天惟一的工作就是编写代码的生活方式非常简单,不像现在这样需要兼顾这么多的其他事务。在软件产业界中,这是一种非常普遍的感受;但是尽管如此,却很少会有人去按照自己的真实意愿身体力行。
我在今天可以明确看出的一点是,这本书的第1版实际上就是一张关于我自己所从事的研究方向(比如团队、领导艺术及方法、问题求解以及问题定义等)的领航图。我把此后20多年的时光,都用于将这些大题目具体化,因为这些问题一方面非常重要,另一方却没有很好地为人们所理解。纵览自己在本书之后出版的一系列其他图书,我觉得自己的确在致力于填补这些"空洞"。请允许我在此按照出版时间列出这些书的名字:
1973:"Structured Programming in PL/C, An Abecedarian" 。针对程序开发技术以及编写程序开发文本的新式教学方法,我们进行过一项实验。这本书中汇集了这项实验的成果。
1975:"An Introduction to General Systems Thinking" 。这本书直接考察了关于系统思想的各种深入思考过程。(经过20多年之后,这本书同样仍在出版发行。)
1975:"Structured Programming" 。Dennis Geller、Tom Plum和我一起写成的这本书,荣获了结构化程序设计系列丛书奖。这本书再次就程序开发思想及其教学的新方法进行了探讨。
1976:"High-Level COBOL Programming" 。写作这本书的目的,在于帮助COBOL的程序员转变思维方式。但是,这一目标似乎并未实现。
1977:"The Ethnotechnical Review Handbook"。Daniel Freedman和我自掏腰包,出版了这本手册的第一版。写作这本书的目的,是希望激励人们,使之在程序开发的每个阶段都去阅读程序,并且使他们学会如何阅读程序。在当时的情况下,面向市场的出版商中没有哪家愿意经销这种技术评述性的书籍。(这本书最后的版本仍然在出版发行。 )
1977:"Humanized Input: Techniques for Reliable Keyed Input" 。这本书是在人性化界面设计方面的一次早期尝试。
1979:"The Ethnotechnical Review Handbook"。这本书后来做了重新修订,增添了我们后来在阅读及分析程序方面所学到的无数内容。
1979:"The Principles of Specification Design: Film Series and Workbook" 。这本书是与Bob Marcus合作完成的,它代表了我们在改进问题定义方面的首次突破性成果。
1979:"On the Design of Stable Systems"。这本书是与我的妻子Dani Weinberg一道完成的。它将思维模式进行外推,以确定为了生存下去系统应该如何设计。(这本书的第2版仍在出版发行,书名改为"General Principles of Systems Design" 。)
1982:"Are Your Lights On? How to Figure Out What the Problem Really Is" 。Don Gause和我合作完成此书,我们在其中针对问题定义的问题进行了深入研究,时至今日它依然是关于问题解决的畅销书。
1982:"Rethinking Systems Analysis and Design" 。这本书的着眼点在于系统分析员的思考方法,或者说他们应该如何思考。
1982:"Understanding the Professional Programmer" 。这本书的着眼点在于程序员的思考方式,或者说他们应该如何思考。
1985:"Computer Information Systems: An Introduction to Data Processing" 。在这本书中,Dennis Geller和我一起针对教学方法以及软件工作中的思维过程等问题作了进一步探讨。
1985:"The Secrets of Consulting" 。这本书针对软件开发人员(以及其他人员)与其客户之间的关系进行了讨论。这本书的创新之处大放异彩,直到今天它依然十分畅销--这足以说明,在咨询工作中存在着某种具有普遍性的原则可循。
1986:"Becoming a Technical Leader" 。这本书着重讨论了领导方法以及团队等问题,至今仍然销路看好。
1989:"Exploring Requirements: Quality Before Design" 。这本书由Don Gause和我合作完成,我们在其中将问题定义的问题探究到更深的层次。
1991:"What Did You Say? The Art of Giving and Receiving Feedback" 。这本书是与Edie和Charlie Seashore合作完成的。在信息往复传递时,需要人性化的交互;该书总结了我们在这方面已经掌握的知识。
1991-1997:"Quality Software Management" 。这是一套四卷的系列丛书。其中囊括了在软件成果以及软件人员的管理方面本人所了解的所有内容。通过这一丛书,我也在系统的思想、测量、行为以及变化等领域,从心理学的角度提出了新的课题。
直到完成了"Quality Software Management"系列丛书之后,我才感到自己在1/4个世纪之前开始着手研究的问题总算是有了一个总结。回顾这些年的发展过程,尤其是在重读本书的第1版时,我清楚地看到原来我是一个比自己预料中还要蹩脚的预言家;但是值得表扬是,我已经料到自己是一个比预料的还要蹩脚的预言家。实际上,这个问题和所有的技术评论一样--虽然比自己预料的要差一些,但是比自己一直担心的情形还是要好一些。
如果技术评论曾经对你的工作品头论足过,那么关于本书的银年纪念版,我决定采纳自己常给别人提的一点忠告,那就是:我决不会去掩盖自己的错误--因为也许正是通过这些错误,我的读者才会获得更大的收获。为了在这方面对读者有所启发,我力求保持最初版本的固有风貌--不折不扣、货真价实的古董;同时,一旦灵魂受到震撼,我也会增加一些"事后诸葛亮式"的评注。我真诚地希望,你能够透过这个现代历史资料和文物的大杂烩获得某些启示;哪怕是能够对你有些许的帮助,也是鄙人莫大的荣幸与快慰。
第1版序言
写作本书的主要目的只有一个--启动一个新的研究领域:作为一种人类行为的计算机程序开发,或者简而言之,程序开发心理学。所有的其他目标都从属于这个主要目标。例如,在力所能及的情况下,我会尽力使得本书趣味性更强,同时使技术的味道更淡一些,从而让得更多的人愿意阅读它:这些人不仅有程序员,也包括程序开发的主管经理;同时,因为我们现在可以通过很多种方式参与到程序开发的过程之中,所以还应包括与程序开发有关的其他所有人。我努力希望实现这样一个目标,即让读者在读完本书之后评价说:"嗯,程序开发的确不只是与硬件、软件有关。从今往后,我将从新的角度来看待这些问题。"
正因为这是一个新的领域--或者说是对那些已经为我们所熟知的事物的一种新的观察方法--所以我们还不能为其中的某些思想找到"科学的"依据。本书中的许多观点,的确仅仅是作者的个人主张(而且是强烈的主张),然而除了本人多年以来的个人观察之外,这些主张尚没有更好的理论基础。毫无疑问地,其中很多主张中存在的错误是显而易见的;即使是更有依据的一些思想,也同样可能存在谬误之处。但是我想指出的是,错误的思想与毫无思想之间存在着天壤之别。如果哪位读者对其中的某个观点另有高见,我真诚地希望他能够通过实验来证明我的谬误。
正如我所希望的,书中给出的大量实例说明,大量的误解与曲解阻碍了我们所从事的这个行业的发展;我和我的学生们通过极其简单的实验,已经对此提出了挑战。然而与问题本身的规模之广相比,我们所提供的素材实在是太有限了。各种不同的统计数据都显示出,今天担任程序员工作的人已经有数十万之众。如果我们的经验确实会对大家有所启发,如果程序员及其主管经理在读过本书之后,哪怕只是学会了将程序员当作活生生的人,而不是另外一台机器来看待,那么这些程序员就将会更高效地发挥作用,同时会对自己的工作更加心满意足。
如果我们学会从心理学的角度看待问题,那么在硬件和软件的设计方面,我认为我们同样有可能取得巨大的进步。但愿设计师们在读过本书之后,能够学会运用心理学的原理来指导其设计工作。当然,我并不指望区区一本书中的点滴思想和思索能够为他们直接提供所有的信息;但愿他们能够在本书的启发之下,学会从其他的渠道获取信息。到目前为止,至少从工程或者数学的角度来看,程序开发仍然是一个深不可测的过程;然而实际上,这一过程与心理学有着血脉相连的关系,这种关系如此密切,以至于哪怕是在心理学方面的些许开窍,所带来的帮助都是难以估计的。这个断言并非无稽之谈--我个人以及我的学生们在教学、学习以及程序开发时都会将心理学牢记在心,我们的亲身经历与切身体会都证实了这一点。我希望本书的读者能够通过自己的工作实践,对这个断言进行验证。
本书中显而易见的一个特点就是,其中的思想并非只来自我个人;实际上,这些思想都是在集成了很多人的经验和智慧之后才形成的--这些人中有很多是我的学生,他们来自IBM公司分别设在纽约、日内瓦以及纽约州立大学宾厄姆顿分校的系统研究所。在这十年之间,我有幸能够在学生中结识如此之多的第一线程序员;正因为如此,我才能够综合形形色色的程序开发环境的特点,并将自己一管之见不断扩充、完善--而要是凭借一个人的力量,恐怕任何人毕其一生也不可能有如此丰富的经历。有一点大家应该都能理解,为了尊重(无论是清白的还是有过失的)当事人的隐私,我们将这些经历作了适当的加工整理。
如果没有与学生们长期的相互砥砺,没有他们丰富而且极具启发性的经历,这本书是不可能完成的。另一方面我也觉得,如果出于谦虚的考虑而毫无原则地将书中的一切谬误都归到自己的头上,那也是毫无意义之举;同时毫无疑问地,因为这样或者那样的原因,的确会有一些与我相关的经历会被曲解。然而既然我已经采纳了这些经验,并且用来支持书中的某些观点,那么我就应该承担这部分的责任--类似地,由于读者会根据自己的经验与需求,对书中的所有观点进行权衡、取舍,所以你们应该对此自行负责。如果说有什么本来应该是我的最后一个愿望,那就是奢望书中提到的某些东西能够为读者接受,甚至成为他们的信条--然而,我并不希望读者在阅读过程中贸然接受某种观点,因为这种读书的态度正是我们应该努力戒除的。本书中提供的素材,只是读者在自己思想形成的过程中需要消化、吸收的食物,而不应该是个人思想的简单替代品。
我想在此感谢我的各位学生、老师以及朋友,感谢他们对我个人的帮助,以及对本书的贡献。老师、朋友和学生--对我来说,他们实际上是一个整体,并且没有区别;我也希望他们这样看待我自己。我要把这本书献给他们,我的这种感激之情不仅限于献辞那一页上,而且已融入于书中的字里行间。我的妻子不仅在日常生活中给了我无微不至的关心,而且还从一位人类学家的视角,阅读了本书的每一页;我对妻子的感情,仅仅通过献辞是远不足以表达的。
Gerald M. Weinberg