温伯格在《技术领导之路》中讲过一个很重要的观点:技术人员更喜欢和机器打交道,只是因为他们“以为”自己更适合和机器打交道;但是,优秀的技术人员必须(也必然)具备好的沟通能力。所以,温伯格鼓励各位技术人员多练习与人打交道的能力。这个观点我非常赞成,好的技术人员一定需要“勇敢”面对他人,不能自我束缚在机器的世界里。
但是,“技术人员(主要是软件开发人员)不适合跟人打交道”的负面影响不止于此,这种刻板印象(stereotype)会影响到整个开发团队,甚至团队之外,导致大家和开发人员沟通时,会自觉或者不自觉地切换到“和机器沟通”的模式上来。比如,单纯依赖邮件而避免见面沟通,再比如,“你只管这么做出来就好了,别管我用来干什么”。以面向机器的模式来与人沟通,结果往往是整个项目(而不是那一堆代码)割裂开来,皆不欢喜。
软件开发本来是高度依赖创造性的脑力劳动,或许有一点神秘,但绝对和机械古板无缘。不幸的是,很多人混淆了“软件”和“软件开发”:软件可以没有活力,而软件开发却不能没有活力;程序可以很机械地执行,程序员却不能被当成执行机器。于是,在整个开发过程中,找不到一丝“人文关怀”(“人文”其实也叫“人性”,它与“文”并没有太多关系,只是“人性主义”约定俗成翻译成了“人文主义”而已),后果当然不容乐观。
要改变这种状态,就应当重视软件开发的人文关怀,把开发人员当成活生生的人,把开发过程和机械执行区分开来。要知道,尽管很多软件开发人员看起来像“闷瓜”(充其量是“闷骚”),不好捉摸也不好打交道,但他们其实很渴望也很在乎人文关怀。只是开发人员一般不善于表达,因此并没有太多资料来研究软件开发中的人文关怀(或者开发人员真正在乎的人文关怀)。也正因为如此,如果希望开发出了不起的软件,才需要格外重视人文关怀。
那么,要如何落实对“不善与人打交道”的人的人文关怀呢?按照我的经验,不妨多注意以下几个方面。
第一,开发环境。
这里说的“开发环境”不是指的IDE,而是开发人员所使用的软硬件。这类设备是大多数开发人员唯一的生产工具,它们的好坏直接决定了开发人员的生产效率。可惜许多人似乎并不理解这一点,很多公司只给开发人员配备普通的办公电脑,于是开发人员也只能贡献出普通办公人员水平的程序。
目前来看,硬件上应当有比较大的内存(8G以上),至少两台显示器(最好有一台可以很方便地旋转),用起来相当顺手的键盘鼠标(这点非常重要),软件上应当有无障碍访问Google的线路,健全开放的代码库等等。提供这些条件,一方面可以切实提高工作效率,另一方面,可以大大改善开发人员工作的心情。后一点看起来无关紧要,却体现出对开发人员的尊重,其影响甚至超过前一点。
第二,内部交流。
我见过许多开发人员,即便是与旁边或者对面的同事交流,也不愿意说话,而喜欢在IM上打字,这样的效率非常低,更严重的问题是造成隔膜——上班时间都没话说,下班时间就更没话说了。想要形成有凝聚力、配合默契的团队,就始终只能是美好的愿望了。所以,日常工作中一定要鼓励面对面的交流,(尤其是多人参与的讨论,可以专门安排地方交流),以逐渐形成面对面交流的行为习惯。不少开发人员即便自己比较闷,内心也不排斥甚至渴望活跃热烈的工作气氛。
我曾经招募过一名相当不错的程序员,他虽然不擅言辞,却不喜欢大公司内“死气沉沉”的技术部,更希望呆在人人都愿意说话,人人有话说的小团队。平时工作中我也着力倡导开发人员三五成群地当面交流,这样非但不影响其他人的工作,还很受大家喜欢。因为对开发人员而言,当面对话其实是非常必要也非常合适的交流方式。
第三,工作意义。
我曾说,程序员职业素养的体现之一就是对业务的了解。现实中,确实有不少一些程序员对业务不够了解,不过程序员对业务没有足够的热情只是一方面原因,另一方面,业务部门不愿意让程序员详细了解也是常见的情况。许多公司的业务部门需要开发力量时,既不描述项目的背景,也不介绍项目的意义,只生硬地扔过来几份文档(而且很多是粗制滥造的文档),就完成了对接。
究其原因,有时候是这些人将程序员视作简单的“码农”,认为他们不需要了解业务,只需要写代码即可;也有写时候是因为程序员思维比较严谨,遵守逻辑,而不少业务部门的人缺乏这类训练,表达想法和需求时如不够严谨细致,更习惯“看一步算一步”的野路子。前一种情况是态度上的不尊重,后一种则是能力上的欠缺(或懒惰)。无论是哪种情况,都会给开发人员造成非常不好的影响,最终结果就是项目的支离破碎,大家都龟缩在自己的地盘上,“铁路公安,各管一段”。
按照我的经验,绝大多数开发人员并不排斥理解自己所开发的软件的实际应用和意义,以此为基础,大多数人甚至有兴趣去提出改进方案,这其实是非常好的状态,其前提是,需要为给程序员提供足够多的空间和机会去理解自己工作的意义,而不仅仅是告诉他们“你只管这么做就好了,别问我为什么这么做”。
第四,个人成长。
“一个人要怎样才愿意呆在一家公司?”我的朋友叶欣告诉我的是:如果这个人觉得公司有前途,自己也有前途,就会呆下来。这个答案我非常认可。但是在实际工作中,后一个“有前途”往往被忽略了。
在软件开发中这个问题更严重。一方面,开发人员经常被视为生产代码的机器,大家只关注他提交的程序,而不关注他是如何提交程序的,在工作中有什么收获;另一方面,很多开发人员对于前途常有持续的焦虑,又得不到解决。常见的结果就是开发任务显得冷冰冰、硬邦邦,开发人员也感觉自己做的都是简单重复劳动,产生倦意甚至抗拒情绪(我知道许多人会说,要想成为一名好的开发人员,就应当在简单重复劳动中精益求精。这个道理确实没错,但也需要有合适的切入点,换句话说,应当让开发人员认可精益求精的价值,并真切体会到它带来的好处)。
其实,有许多开发人员对自己的未来是有所打算的,比如有些人可能希望更了解业务,有些人希望更深入钻研技术,还有人希望走上管理路线。技术团队的领导平时应当抽足够的时间了解这些设想(如果能给点建议或指点就更好了),在安排新工作时有所照顾和侧重。这样,开发人员就可以感觉到自己的成长,觉得自己的工作是有前途的,工作起来也更有积极性。
在专门论述软件开发管理的Managing the Unmanageable中,作者提出了一个类比:管理软件开发人员就好像养猫。意思是说,要悉心照料软件开发人员,这是说得非常对的。而且我看,既然有那么多人愿意为了养猫费尽心思,那么多给软件开发人员一点人文关怀,也是理所当然的。
之前有几位读者反馈说排版不够好,我仔细检查才发现,我主要是在自己的iPad mini2上用微信(因为方便阅读),没留意到iPad和iPhone的排版讲究是不一样的。本次已经做了调整,如果大家还有改进建议,请直接提出,谢谢。