代码与善意
人们很容易将软件开发视为纯粹的技术活动,认为人类因素无关紧要,一切只与计算机有关。但事实恰恰相反——软件工程本质上是一门关于人的学科。
多年来,我们在试图改进软件开发时犯下的许多错误,都是因为只关注系统的技术层面,而忽视了编写代码的是人类这一事实。当你看到有人更关心优化而非代码可读性,当你看到有人拒绝写注释却花整天时间压缩shell脚本的行数,当你遇到无法沟通却崇拜小体积二进制文件的人——这些都是这个问题的不同表现。
代码即思想
实际上,软件系统是由人编写的。它们被人阅读、被人修改、被人理解或不被理解。它们代表了编写者的思维方式,是我们地球上最接近原始思想表达的载体。软件本身并不具备人性、生命、智能、情感、善恶——这些特质只存在于人类身上。软件完全且仅用于服务人类。
软件是人类的产物,通常是一群需要协作、沟通、相互理解的人们共同创造的产物。因此,关于与软件工程师团队合作,有一个重要观点:在开发社区中对他人刻薄没有任何价值。
建设性反馈的艺术
对同事粗鲁无益。愤怒地告诉他们错了、不该这样做也无济于事。真正有帮助的是确保软件设计原则得到应用,确保人们遵循使系统易于阅读、理解和维护的良好路径。但这并不需要你变得刻薄。
举例来说,当有人写了糟糕的代码时,你可以有两种评论方式:
刻薄的方式: “我不敢相信你认为这是个好主意。你读过软件设计书籍吗?显然你不该这么做。”
这是对开发者的人身攻击。
建设性的方式: “这行代码难以理解,而且看起来有代码重复。你能重构一下让它更清晰吗?”
关键在于你是在评论代码,而不是开发者。更重要的是,你没有做个混蛋。第一种回应显然粗鲁——这会让人想与你合作吗?会激励他们贡献更多代码或改进吗?不会。第二种回应则让人知道他们走错了方向,同时表明你不会让糟糕代码进入代码库。
更深层的意义
你阻止程序员提交糟糕代码的根本原因与人有关——要么关乎用户,要么关乎其他需要阅读系统的开发者。通常两者兼而有之,因为使系统更易维护完全是为了持续有效地帮助用户。无论如何,你作为软件工程师的工作都与人息息相关。
是的,会有很多人阅读代码和使用程序,而你审查代码的对象只是其中一员。你可能会认为可以为了系统整体利益牺牲一些善意。也许你是对的——但为何要在不必粗鲁时选择粗鲁?为何要营造让团队害怕犯错而非乐于做对事情的环境?
超越代码审查
这不仅仅关乎代码审查。其他软件工程师也有话要说。无论同意与否,你都应该倾听。礼貌地认可他们的陈述,以建设性的方式传达你的想法。
有时人们会生气——请理解。有时你也会生气,那时你大概也希望队友能理解你。
现实与平衡
这听起来可能像不切实际的心理呓语。但请注意:我并非主张"人人永远正确!必须永远同意所有人!永远不能指出错误!“不,人们经常犯错,软件工程和世界上有许多你必须拒绝的坏事。世界并不总是美好的,充满愚蠢的人——其中一些可能就是你的同事。
但即便如此,对这些人粗鲁也不会带来任何有效结果。他们不需要你的憎恨,而需要你的同情和帮助。而且你的大多数同事可能并非愚蠢——他们可能是聪明、善意的个体,只是像你一样偶尔犯错。请给予他们信任,与他们合作,保持善意,从而共同创造更好的软件。