一年多前我加入团队的时候,公司是一个有着超过25年的非常成功的行业软件和解决方案提供商,位于德国。行业软件的本身是基于Windows和OSX的客户端平台解决方案以及服务器接口,由于HTML5的崛起,公司决定要把行业软件的功能逐步转移到Web上,甚至是手机,平板等智能设备上。
这种行业软件开发的背景决定了团队的软件工程师,是优秀的桌面软件开发程序员,他们能够熟练的驾驭此类行业软件的开发,并且在自己的工作领域都有着丰富的经验和出色的作品。这些都是我开始和他们一起做开发的时候所没有设想的地方,通常而言,我养成了一个学习的习惯,就是从来不去任意裁断一个程序员的技术和能力,不论是非常优秀的程序员,还是刚开始学习的,我觉得对于任何人做一个裁断都是不公平的,因为无论是优秀还是刚开始学习,都同样会经过一个学习的过程,而我们不能因此而否定过程的重要,只是看现在的结果,所谓万事皆有可能,任何人都可能某一天达到专业,而同时,我也不会向任何人去学习,因为我总认为技术有着它专业的标准,所以只要专注如何达到专业就可以了,而且每个人都有自己的理解方式,我们对于世界本身而言,都是独一无二的,所以认为如果是向某个人学习,这其实是一种对于学习的误解。
这样的习惯想法有一个好处,就是不会因为时常在意谁的技术如何,从而影响自己的工作,但是也无形之中形成了一种我没有意识到的从我身上散发出来的“傲慢”,而当冲突因此产生的时候,才可能意识到自己的所谓”傲慢“态度所在。
与这个团队的工程师一起工作,从一开始就不是一个顺利的过程,当你尝试去了解你需要做的工作的时候,你看到的是一个todo列表,还有一些简简单单写下来的项目目标等等。由于习惯了对一个项目开发事先做计划的方式,所以从一开始就开始一个艰难而必须的改变,这种改变在行为上是很快速的,但是心理上并非如此,对于这种没有完善计划的方式的各种意见,沉积到心里,直到有一天爆发出来。
由于开发的继续,todo列表变的越来越丰富,而项目变的庞杂,而对于项目中的某些成员而言,由于他们对于我所做的工作的技术并不熟悉,所以他们会询问我一些问题,当他们询问这些问题的时候,我一开始就犯了一个严重的错误,因为我从来没有设想过他们的技术背景或者有意去了解一些,所以当他们问到我一些,我认为答案很显然的时候,我开始怀疑他们是不是在和我开玩笑,而当我去回答他们的问题的时候,我总是假设他们对于其中的某些前提以及有所了解,所以使用简单的快速的回答来结束对话,这样的回答必然是不能被他们理解,所以事情的结果比我想象的要糟糕许多,当我紧接着接到多个极速的”What"的提问的时候,我仍然没有意识到这一点,当接着又有若干个“Why”和粗鲁的态度出现的时候,我感到他们的恼怒,但是,那个时候,我确是一头雾水,感觉到不耐烦,并开始反问他们。
可想而知,事情的结果如何,幸运的是,团队的管理者是一个能够尝试去理解别人的人,经过若干次的摩擦之后,他发现了我的问题所在,并且尽可能的提醒我,并告诉我,我应该注意的地方,如我前面所提到的,任何事情的改变,对于自己来说行为上容易,但是心理上很难,特别是我没有意识到自己的问题所在的时候,当他告诉我,我是一个聪明的,有天份的,思维敏捷的程序员的时候,我错误的权当这是我的优点,尽管我其实并不这样认为,然后他告诉我说,我需要慢一点,听完别人的解说,然后开始回复的时候,我权当是因为他们的不知道,其实我听了一半就知道他们所要说明的问题了,所以想要节省时间,快速的解释给他们,并把这当成了他们的误解。
虽然这样的情况持续了一段时间,看似一切良好,而事情也没有再象原来所出现的那样激烈,但是这并不意味着这一切的结束,而是更加的糟糕。
在一次不愉快的争论之后,团队管理者告诉我,让我们双方向对方道歉,我开始思考问题的所在。
事情的经过非常的可笑,当团队的其他成员,开始学习并且使用新的技术的时候,我发现他们的代码和这种技术的最佳实践相差太远,我尽量的把我的工作范围限定,并把自己的代码和他们的隔离,从而保证他们可以写自己的代码,不至于影响到我的设计,但是当他们提交他们的代码到我负责的工作中的时候,我通常都会拒绝采用他们的代码,这带来了他们直接的质疑,为什么不采用他们的代码,是不是因为不够好,虽然我有所解释,但是问题仍然激化到,他们开始比较我写的代码和他们所写的代码的效率,这是那一次争论的开始,我知道通常而言程序员都是傲慢的,但是当问题到了需要比较谁写的代码好的地步,当时,我觉得这是一种侮辱,所以告诉他,如果他不满意,可以把项目分成了两个部分,我们各自工作在一个部分,事情也确实是这样,项目的代码分成了两部分,我们各自开始在自己的代码上工作,并且因此团队管理者了解到并参与,告诉我们需要向对方道歉。
此时我才停下来,思考整个事情的问题所在,并且思考自己的问题所在,当一个项目一开始的时候,管理者给予了我很多的信任,这种信任会产生一种误解,就是我认为我在负责这个项目,所以我开始负责计划每一部分,挑选合适的技术,并熟知可能的实现。这种对于责任的态度其实并没有什么不妥,问题在于,我固守了我的计划,这种执着的态度,把个人的角色和项目中个人所应该具有的角色混淆起来,在没有项目中个人应该具有的角色的明确定义之下,给自己定义了一种角色,并且一直错误的执着着。
在与项目其他成员的争论中,我也开始思考他们的技术背景,习惯以及态度,事实上,他们对于新的技术知道的很少,而且并没有全盘的计划,甚至于不确定每一个实现的可能,而最重要的是,他们是非常自负的程序员,所以如果告诉他们说,你不够专业,也许是对他们,在工作上而言,最大的侮辱,即便是不采用他们的代码,对于他们而言,也是非常难以理解的,而当他们开始边学边用的写代码,并看到自己的代码工作了的时候,他们觉得有着足够的能力来完成项目,这个时候,如果我是正面的回应他们,我们的对话一定是不愉快的,不论我多么的礼貌,事情总会向着不合理的方向发展,因为我持有对于他们的项目观点的否定,而且始终坚持,没有放弃。而对于我而言,所需要选择的恰恰是放弃,这个问题有时候很难理解,为什么我们需要放弃一个更好的方案而采用一个不够良好的呢?事情的本质就是,项目本身的存在,不是以个人的方式存在的,而我们互不相识,也不存在个人的积怨,即便是相识,也都是礼貌的交谈,所有矛盾所导致的,是因为项目的存在,而从审视自己的角度看,都是因为自己所坚持的那些观念,如我所想,其实万事都有其存在的方式,团队如此,公司如此,项目如此,并不是一个良好的计划就是最佳的解决之道,随其自然,放下心中所执着的才能化解矛盾本身。
当追溯到事情的前后,以我发现在这种冲突中,最好的办法,就是真正的改变自己,不是从行为上,而是从心里上,把所有自己的意见,看法,对于自己的行为的维护,以及各种埋藏在心里的东西都拿出来看一遍,不是去衡量和对比从而去判定自己的想法是如何的优秀,所以自己有着各种正当的理由,而是彻底的抛开所有这些成见,而直接面对问题的所在。
我发现,我所执着的这些其实都是可以放弃的,我可以放弃一个更加良好的方案,可以放弃我的意见,可以放弃我的态度,可以放弃我对于自己角色定义(当然这个定位是错的),然后尝试给自己一个新的定位,到底我应该在项目中起怎样的作用,并且把自己的思考详细的解决方案告诉团队的管理者。
幸运的是,团队的管理者看到我的信之后,采用了良好的策略解决了问题的所在,我知道我心里还是有很多无法抛开的所执着的观念,还没有发现,而这些观念对于个人而言,本没有错,但是对一个团队而言,一个不在那个角色上的成员而言,可能是大错,我尝试改变,不仅是行为上的,而首先是观念上的,正如我所感觉到的,和傲慢的程序员一起工作并不是件坏事,反而是一件好事,因为他们的存在,让我看到自己的“傲慢”的一面,从而变的更加谦虚,理解和学习到了更好的沟通方式。
(英文稍后添加,纯粹是为了个人的爱好才写英文部分,勿见怪)