天看到CSDN网友sunlen在BLOG中写的“程序开发的心理研究”,让我想起了Weinberg先生的著作——《程序开发心理学》。在计算机界,还没有任何一本计算机方面的书,在初次出版之后,能够在长达25年的岁月中一直保持活力,而且这种活力到仍在继续。《程序开发心理学》是开创“以人为本”研究方法的先驱,它以其对程序员们在智力、技巧、团队和问题求解能力等方面独特的视角和敏锐的观察经受住了时间的考验。以下是sunlen在程序开发心理学的一些个人见解:
本文只是根据本人的一些经验,还有外界的一些文章,总结出来的程序开发过程中程序员的心理的一些总结,并没有通过严格的验证。
一、开发项目的原则
一般研究发现,一个人刚进行一个新的公司,或者接受一个新的任务,他总得要一个适应的过程,这段时间叫做适应期,这个过程根据不同的人所需要适用的时间长度不同,对于一个程序员来说,如果接受一个难度适中的项目,他一般需要3个月的时间来适应,当然,这个时间只是一个一般比较普遍的情况,可能有些人1个月可以适应了,有些人搞了半年,还是对系统很不熟悉。这个适应期大概包括下面几个部分:
1 对环境的适应
社会是由人组成的社会,当然程序员进行一家新的公司、或者一个新的环境,总免不了要跟人打交道,可能有人会说,“每次开发系统都是我独自一人完成”,恕我坦白一点的说,这样开发出来的系统根本不能算是一个系统,现代项目开发一般需要包括前期需求分析、需求文档开发、设计文档开发、代码编写、系统测试等。要使得这一总个流程顺利的进行下去,那需要人与人之间的合作,所以一个程序员到了一个新的环境、面对一些陌生的人、总得有一点的时间相互之间进行交流,建立起一种友谊。
2 对项目的适应
我们接受一个项目,不管是全新的还没开发的项目,还是已经处于维护状态的项目,我们总得对它的业务逻辑、开发风格、编程规范、系统构架等有一个了解。业务逻辑是指一个项目相关的操作是怎么进行的、各个操作具体如何操作等等。开发风格是系统原有是如何进行开发的,现在国内有很多系统都是一招了一个新人叫他进行代码的开发,结果他等到开发完了才发现原来他花了很久才开发出来的类(java和c++中的一种概念,相当于一个功能模块,可以被其它功能使用),其实系统早已经有了,使用的时候这样调用可以了,等等。编程规范大家应该都知道了,现在基本不同的语言都有自己的编程规范,比如说java有java编程规范,同时,不同的公司可能根据自己的情况定义了一些规范,比如说,判断一个变量是否为空,有些公司要求将null放在前面等。系统构架是指一个项目的总的框架是如何搭建的,采用哪种语言等,比如说、现在很多开发网上应用系统都采用Struts+Spring+Hibernate构架(采用java语言)。这些都需要一个适应的过程,如果对这些都还没了解清楚匆忙的开发编写代码,那写出来的将会是一些格格不入的代码、不管这个代码单独拿出来看的时候是多么的完美。
适应期过后,接下来是一段比较长的稳定期。这段时间一般有半年到一年的时间。在这段时间里面,程序员对系统业务比较熟悉,开发系统得心应手,他们一般在定位一个系统问题的时候,能够比较快地查找出问题并处理,而不像一些新手一样,对系统调试N久之后,才将问题处理,之后才发现,问题只不过处理了一半,在其它地方存在的相同的问题没有处理,或者处理完一个问题之后,却导致其它地方出了问题。
稳定期过后,程序员开始陷入了厌烦期。这个厌烦期是没有期限的,随着时间的推移,程序员可能越来越讨厌自己的工作,他经常抱怨系统编码是如何的差劲,而完全忘记了这个差劲的系统也有他的一份功劳在内。他们工作的时候不像以前那样有积极性,经常在上班前2分钟到达公司,还可能在下班前半个小时开始收拾东西、给家人打电话、等待的下班时间的到来。他们开始对反馈的一些问题应付了事,他们开始对新近来的员工指手画脚,在开会的时候发短信,等等。
根据上面我们可以发现,一个程序员新接触一个新的项目的时候,我们要给他一段时候熟悉系统,而不管他是多么强的一个高手。很遗憾的是,现在国内很多公司一招了一个新人,开始压一大堆任务给他,而完全不给他们适应的机会。这样产生出来的经常是一个千疮百孔的系统,甚至完全是一个失败、无法使用的系统。当一个人开发对现在的系统厌烦的时候,要开始分配新的任务给他,让他去熟悉、开发新的系统,而不要总抱着这样的想法,是现在系统他熟悉了,让他开发合适,让他去开发新系统还要让他花时间去熟悉新系统等等。这样下去的结果可能有两种,一是开发人员被迫辞职了,剩下来的是一个没有人熟悉的系统,招来的新员工在这个系统上花费了大量的时候,才搞个一知半解,甚至系统可能这样寿终正寝了。还有一种结果是开发人员因为高工资继续留下来,但是系统的开发进度越来越慢,bug越来越多,开发人员也变得有恃无恐的,而领导层却越来越担心由于开发人员辞职导致系统无法进行下去。
二、、早点回家吧!
我想国内企业擅长的是剥削劳动者的劳动力的,甚至有人叫嚷着:“没有程序员是不需要加班的”。他们将一个又一个的任务压在程序开发人员的身上,将完成时间压缩后再压缩,直压得开发人员两眼冒星,口吐三口鲜血后在当天的工作日志上写道:“是我连续第三天通宵了,总共处理了283个系统问题,后系统终于跑起来了,用户终于同意通过了检查,我光荣的完成了使命!”。
在这里我并不想批驳公司对程序开发人员的剥削,这种高强度开发对系统的影响,它终也会损坏到公司的利益。项目开发跟一般工厂上组装一件电器是不一样的,我们的项目要实现一个功能,是有很多种实现方式的,还要考虑系统构架、可重用性、可读性等。比如说,一个好的系统构架,你会发现实现起功能来又快又好,而且能够应付系统开发过程中业务逻辑的变化,而一个差的构架,实现起功能来很困难,而当业务逻辑变化时,你会发现几乎所有的代码都需要重新修改,这会令你陷入绝望的境地,而不像一个好的架构那样修改一下配置文件或者两段代码都搞定了,这其中的快慢有时可以用N次方来形容的。而恰恰是这种好的构架在前期需要大量的时候进行设计,如果一味求快的话,那么开发人员根本没有时间进行一个好的构架的设计,这样前头快的做法,将会对后续的开发带来影响,使得开发起来更加困难。可重用性也是一样,如果考虑可重用性的话,那么可以将一些逻辑抽象出现,写出一个类,这样,还后续开发的时候,如果有相同的逻辑,可以使用这个类了,如果对这个逻辑进行修改的话,那只要修改了这个类,所有的逻辑都同时改变了。如果完全不考虑这些的话,那么后续开发都要开发类型的代码,如果对逻辑修改的话,那么将是很麻烦的事情,当然,这个进行抽象成一个类的动作,比自己开发更花时间,但是更好。对于可读性,对于一个紧急的开发,你可能发现里面连一个注释都没有,很可能开发人员后来翻出这些代码来看的时候,他已经不记得这到底是什么意思了,甚至连是不少他开发的都不记得了。
所以,我想说的是,不要给程序开发人员太大的压力,只要适中可以了。还有,不要一味的要求开发人员干活,要适当的表现出对他们的关心,比如说,的时候,跟他们说:“,早点回家吧!”,这样对开发人员的作用是很大的。
三、监狱里的囚犯
我想大概国内的软件公司是全世界男女比例失调的吧,随便走进那家公司,你经常会看到的是大批的男性开发人员的,而作为女性的一般都是些文员,市场人员,资料开发人员等,领导层他们有自己的想法,他们这样想着,如果招了一个女性开发人员进公司的话,那么她晚上不能加班太晚,不然还得负责她的安全。还有,在中国程序员眼里,女性程序员大多不懂编程,整天问东问西。还有,领导们可能担心招了女性程序员之后,会影响到大家的情绪,可能是造成公司内部分裂的根源,等等。同样的,也是女性自身方面的问题,国内的女性一般偏向于学习文科方面的东西,在大学里面,学习理科的女性要比男性少得多。等等这些都造成了现在程序开发行业阳盛阴衰的现象。
这种现象所引起的后果是国内很多的男性开发人员都很内向,不善于跟女性交流,见了女性有些还会脸红。很多在公司里面勤勤恳恳,工资也不低,人长得也不衰,但是是没有女朋友。他们的生活是压抑的(至少是性压抑吧)。程序员好像被关在监狱里的囚犯,白天干活,经常加班,晚上回去睡觉,第二天又开始新的工作。他们在公司里的经常是在处在一个被压迫的状态,很少有时间进行其它的活动等。
我想这是有害的,中国如果继续这样发展的话,将会阻碍软件行业的发展。领导应该多考虑招一些女性的程序员,多组织一些活动等。让程序员感觉到公司里面的一些人性化管理,这是一个公司的软环境,让程序员安居乐业的软环境。