程序开发心理学 (杰拉尔德*温伯格 著)
第I篇 作为人类行为的程序开发
第3章 如何研究程序设计 (已看)
第II篇 作为社会行为的程序开发
第III篇 作为个人行为的程序开发
第7章 程序开发任务的差异 (已看)
第8章 人格因素 (已看)
第9章 智力水平以及问题求解能力 (已看)
第10章 积极性,培训以及经验 (已看)
第IIII篇 程序开发工具
第1章 阅读程序
第2章 优秀程序的要素
第3章 如何研究程序设计
自省
如果离开自省,调查就不可能获得任何结果, 而离开了广泛的调查, 自省的价值也很难在应用中令人信服
观察
当试图把在某个环境的观察结论带到新的环境时, 我们应该多加谨慎,因为新,旧环境之间可能在很多方面存在差异
实验
心理学测量
利用行为科学中的数据
小结
思考题
参考资料
第4章 程序开发组
正式与非正式组织机构
自然环境与社会结构
错误与唯我独尊
无私式程序开发
建立与维护程序开发的环境
小结
思考题
参考资料
第5章 程序开发团队
第6章 程序开发项目
第7章 程序开发任务的差异
与爱一样, 程序开发这个词所蕴含的行为方式也是无穷无尽的.中学用BASIC语言在终端上的随意涂鸦, 可以称作"程序开发",但是工程师为专用的分时计算机编写尽可能紧凑的微指令程序, 也被称为程序开发.
我们对这种称为程序开发的行为, 没有做过细致的分类; 也许, 我们在探究程序开发绩效的差异时所遇到的困难,有相当部分正是由于缺乏这种细致的分类而造成的.
专业的与业余的程序开发
也许, 二者之间最为深刻的区别, 就在于他们编写程序的最终用户.
业余程序员所需要学习的, 只是其待解决的问题, 专业程序员确实需要其专业----程序开发----而通过程序开发所解决的问题, 不过是在他们水平提高过程中的一次偶然事件
程序员想要做什么
与任何其他的人造物一样, 在设计程序时, 也应该考虑到其特定的生命期以及应用领域
在对程序进行设计时, 其中的任何部分既不能过分设计, 也不能设计不足. 由于种种原因, 程序中的有些部分对开发者的智力有很高的要求, 而另一部分则可能需要大量的精力; 程序员们往往习惯于在前一类工作上投入过多的时间, 这是程序员中的一种职业病
每个程序都有其特定的细致和复杂级别, 这种级别取决于它的具体用途. 从某种意义上讲, 如果付出的努力超出这种级别, 要比低于这种级别更为不专业. 如果希望确定单独一名程序员的工作是否出色, 我们就必须看看, 它是不是按照恰当的级别来处理这个问题, 但是从专业程序员的标准来看, 这种才气与个性往往正是不极不合适的. 重要的是根据手头待解决的问题来调整自己的工作方式的能力, 而一旦缺乏这种能力, 任何人都绝对不适合做一名专业程序员
程序开发工作的不同阶段
我们必须消除的另一个错误理解是: 程序开发是一种整齐划一的工作, 所以需要一批整齐划一的人才. 至少对于专业程序员来说, 要把定义说明转换成最终的程序, 需要经过各种不同的工作, 而为了完成这些不同的工作, 就必须要有各种类型的人才
在一个组织的有条不紊的项目中, 因为可以根据不同人的各自所长, 分配对应的任务, 所以任何一名程序都不必(也不可能)具备完成整个程序的所有能力.实际可能发生的情况是: 虽然在程序开发的某个阶段, 某为程序员可能具备非常对口的能力,但是一旦进入另一个阶段, 这些能力却或多或少地可能称为累赘. 在对整个系统进行设计规划时, 要求设计者能够把握全局, 然而在进行调试阶段之后, 则必须尽可能地了解到每个细节,以至细节的细节. 在进行编码工作时, 则经常需要把代码的冗余降到最低的程度, 然而在进行文档化工作时, 则需要把一个本来很简单的句子扩充为一段
程序员水平低的一个标志就是, 一旦由于计算机出现故障而无法运行程序时, 他只会呆坐在自己的座位上, 无所事事, 如果不能依照预定计划进行当天的工作,他就会茫然不知所措
为了使程序员通过项目收获最大, 我们可以把他们指定到其不是最拿手的岗位
小结
思考题
参考资料
第8章 人格因素
当我们使用人格这个术语时, 我们所指的是我们通常用来刻画一个人时所使用的所有性格特点的总和----也就是对一个人的某种总体介绍.从这个意义上讲, 一个人的人格就是其有别于他人的特点
疯狂的轰炸机
作为我们的个人特征所有方面的总和, 人格必然会体现在我们的一言一行之中. 尤其是, 人格将会在我们所编写的程序中得到体现, 而且更特殊的,他将体现在计算机操作员所看到的那些程序之中
人格的改变
尽管没有为众人普遍接受的关于人格的定义, 在我们关于人格的研究中, 可以把下面的定义动作一个行之有效的模型----因为根据这种定义, 人格即会影响程序开发, 反过来也会受到程序开发的影响:
所谓人格, 就是一个人的所有特征的集合, 根据这种具有唯一性的集合, 能够确定这个人如何适应不断变化中的环境, 同时反过来, 这个集合本身也会受到这个适应过程的影响
人格中经久不变的部分
人格的变化对任何人来说都不是家常便饭, 而我们应该更加关注的, 应该是人格中或多或少的那些经久不变的部分, 因为, 这些部分对程序员的影响更大
培养容忍宽容人格的最佳方法, 就是"去穿穿别人的拖鞋"
关键的人格特征
如果一个程序员缺乏在高压力的环境中坚持一个多星期的能力, 也许我们就可以肯定地说, 他不是一块程序员的材料. 当然, 我们所讨论的是专业的程序开发----其特点是, 工作及其日程计划都是由外部强加的, 而对于业务的程序开发来说, 也许是因为其从事者的饭碗不会维系在"是否能在下周四前找到某个程序错误"之上, 所以这种工作充其量只不过是一项轻松的消遣
尽量把自己手头的资料规整好的习惯
对于从事程序开发工作的人们来说, 至少应该多少具备一点的另一重要人格特点就是谦逊. 一名程序员如果不懂得谦虚, 那么其命运将注定是希腊戏剧式的; 成功首先导致骄傲自大, 进而狂妄又会导致隐性的自我毁灭, 即使Sophocles,也设计不处比这更好的情节, 来表现程序员的自负----他们不过才刚刚学会几种简单的雕虫小技, 就沾沾自喜, 以专家自居, 他们为自己虚构的美梦, 最后总难免被计算机(程序开发过程中的解围之神)难以抗拒的强大力量碾得粉碎
在对程序开发至关重要得各种人格因素中, 最后一个应该是幽默感,如果某个傻瓜缺乏自嘲得能力,那么在乏味得恒许开发过程中他肯定坚持不了多久
人格测试
鉴于程序员成天与之打交道得都是冷冰冰得计算机,所以一些世俗得观点往往会认为, 程序员本身也必然是冷酷无情的. 但是实际上, 这种推断与实际情况恰恰相反: 正因为计算机缺乏灵活性, 所以程序员才更需要灵活----只有这样, 计算机与人的灵活性相结合, 才能如虎添翼, 进而满足现实世界中的种种需求
程序员的人格测验
有没有人曾经想过,面对一位前来应聘者,我们是不是应该首先问问他们是否喜欢程序开发的工作呢?
小结
正是由于程序开发任务与生俱来的复杂性, 所以程序员的人格----其个性以及特征----对其工作成功与否的影响之大, 远远超过人们通常的估计
思考题
参考资料
第9章 智力水平以及问题求解能力
心理集合
对于某些类型的错误定位工作来说, 心理集合(psychological set)已被证明是一种障碍
问题求解的一些维度
只要我们希望在问题求解时获得成功, 我们就必须进行一些假设.
所谓高明的人, 并非有什么万能的解题模式可以适用于所有问题, 而是拥有一系列的"解题模式",但是他们对其中的任何一个模式都没有偏爱, 所以不至于出现因为对某种模式割舍不下, 而忽视了最适用于当前问题的那种解题模式
无论如何终极地对它做定义, 智力只是一个从统计上讲才有意义的概念.
程序开发的智力因素
不同的工作环境, 青睐不同形式的智力行为; 类似地, 在程序开发过程中的不同阶段, 也会给不同的程序员提供一展风采的机会
一个程序员无论是缺乏创造能力, 还是缺乏选择能力, 都会成为其程序设计工作中的掣肘因素.
但是一旦进入编码阶段, 其他一些能力的地位就反过来显得突出了. 在这种时候, 思路开阔而笼统的那些人将风光不再, 而那些精于细枝末节的人则会如鱼得水. 同样地, 等到测试阶段, 另一天赋类型的程序员----尤其是那些对系统的整体性(所谓的格式塔完形心理, 即在未经任何定位之前,就认定某些东西的位置有误的一种整体的感觉)独具慧眼的人----又将走上前台, 成为主角
然而, 更为难得的是优秀的文档员. 在文档编纂的过程中, 在很多方面都可能会出现问题. 首先, 要是程序本身就写得很蹩脚, 再好的文档也不会有妙手回春的神力.而由于程序员往往需要为自己的软件产品编写文档, 所以如果要成为一名优秀的文档员, 你首先必须是一名出色的程序员----当然, 你还必须培养自己运用语言和图表来自我表达的能力. 最后, 你还必须有足够的耐心, 以消除你当中最后的几点含糊不清之处----要知道, 最后的5%努力, 总能使你的文档文采倍增
智力测验
智力测验的得分只说明了被测应对该测验的能力
程序员的智力测验
即使有如此之多的变种, 他们之间的差异也不足以保证测验结果的客观性, 因为人们总是可以从一次又一次的测验中学到一些东西
小结
优秀的程序员是培养出来的, 而不是天生的
较之智力因素, 人格因素, 工作习惯以及培训等方面的因素要与此更为相关. 这些因素与智力因素不同, 他们都可以通过后天经验发生改变. 因此, 选拔程序员的问题就转化成为培养程序员的问题.
思考题
参考资料
第10章 积极性,培训以及经验
积极性
给程序员施加高压, 以期他们能够很快地排除某个程序错误, 这种做法已经被证明是最差的策略----尽管截至目前,这仍是最为普遍采用的策略
只要允许程序员按照自己所偏好的方式进行工作, 那么程序开发这项工作本身就是对他们最大的激励
培训, 课程学习与教育
大致上讲, 我们所说的教育, 指的是掌握一般性的原理与技巧的过程, 而我们所说的培训,不过是学会某种特定技能的一个过程. 所以,我们可以说驾驶培训或者军事培训,也可以讲成人教育或者文科教育
如果没有前期培训的铺垫, 后面的教育就无从谈起
学习的阻力
作为一位名副其实的专业人员, 作为一个真正有实力的人,承认自己的不足,不会有任何的损失
如何学习程序开发
如果一名程序员想要不断提高, 他就不能仅仅依赖于正式的培训, 也不能指望主管精力某天大发慈悲,根据需要把他送去进修. 同样地, 他也不能依靠纯粹的所谓经验, 因为经验不简单一定会交给他所有的东西,如果程序员需要发挥其经验的作用, 他首先就需要学会如何去学习
掌握学习之道的第一步,就是要了解自己拥有什么,缺乏什么----也就是要有自知之明
人们的学习方式还有另外一种重要的划分方法: 为了获得最好的学习效果, 有的人需要动手实践(比如求解问题, 编写程序等等),而另一部分人则需要与其他人共同讨论.
如果一位劳动者讨厌自己所使用的工具, 那么他就不可能干得很好, 反过来讲, 只有我们所使用的工具,才能够教会我们如何去成为一名出色的劳动者
小结
思考题
参考资料
第11章 程序语言
第12章 程序语言设计的一些原则
第13章 其他的程序开发工具