软件工程不仅仅是关于编程:它还需要分析、持续交付、API 集成、维护、协作,最重要的是:一种创造性的努力。
作为一名工程经理,你有责任帮助开发团队培养创造性思维技能,但这说起来容易做起来难。你究竟如何能够在紧迫的截止日期逼近时仍然能够帮助软件开发同事培养创造性思维呢?在本文中,我们将探讨不同层次的创造力如何影响个人、团队和公司,哪些策略有助于创造性地解决问题,以及作为程序员,什么时候需要创造力,什么时候不需要。
创造力究竟是什么?
对于一名软件工程师来说,到底什么是创造性?当一项工作具备以下特点时,它可以被称为有创造性:(1) 原创性的工作、(2) 高质量的工作以及 (3) 与手头任务相关。然而,这种观点并不完整:如果我是一名初级的 C#程序员,第一次使用反射对我来说可能是具有创造性的,但对我旁边经验丰富的同事来说则一点都不新鲜。
那么,质量是由谁来决定?静态代码分析工具?同事?哪一个?相关性也一样。这个话题可能会成为技术代码会议上无休止争吵的开始。这种对创造力的看法最大的问题在于过分强调个体创造性,而不是环境(团队、[公司]文化、社会等)。
所幸的是,在看待创造力时,我们也可以考虑上下文环境,这将创造力演变为一种社会评判:你的同行决定你的编程工作是否具有创造性。
这听起来像是一个非常模糊的理论:这对软件工程来说意味着什么?说到创造力,有七个不同的方面起着重要作用:技术知识、协作、约束、批判性思维、好奇心、创造性思维状态以及使用特定的创造性技巧。在本文中,我们将重点关注这些方面的团队上下文属性,以及工程经理可以做些什么来帮助促进这七个方面。
让我们来深入探讨。
创造力与技术知识
首先是技术知识:如何收集、内化和运用知识。有许多不同的个人知识管理(PKM)技术可用来管理日益增长的信息流。
当被问及时,一位受访者完美地总结了这一主题:“没有输入,就没有输出:创造性是不同输入的混合”。
这些技术大多围绕如何高效地收集这些“输入”,最终通过运用知识来产生原创的“输出”。那么问题就变成了:工程经理在这里可以做些什么来让这些技术奏效?第一步是让人们注意到这些 PKM 工具的存在,并展示如何使用这些工具来帮助程序员掌握当今需要掌握的许多技术。建立内部维基百科,寻找替代信息来源,或者通过组织编程马拉松和知识共享会议来促进思想的交叉汇聚。
创造性协作
协作对创造力有什么影响?现在我们开始踏入管理领域!由于软件工程是团队合作完成的,问题就变成了如何建立一个优秀的团队,让它的产出比各个部分的总和还要多。影响“梦之团队”形成的因素不止一点点。我们可以使用“集体创造力”这个词,因为没有集体,个体天才的创造力并不会走很远。个体创造力比我们认为的要微不足道得多。我们不应该以招募孤独的创造性天才为目标,而应该尝试努力建立由异质群体组成的集体,他们有不同的意见,有助于将创造力发展到极致。我们应该创造能够促进和吸引创造力的环境。
但这说起来容易做起来难。
经理们可以开始采取简单的行动朝着这个宏伟的目标迈进。例如,帮助促进决策,因为一旦团队之间的沟通出现问题,创造性的流动就会严重受阻。研究人员 Damian Tamburri 将这个问题称为“社会性债务”。就像技术债务一样,当存在很多社会性债务时,不要指望会发生任何具有创造性的事情。经理应该扮演社区牧羊人的角色,帮助减少这种债务。
Tamburri 及其团队提出了几种令人愉悦的社区风气: “自命不凡的成员”,这些人要求苛刻并要求毫无意义的精确,这可能会导致不必要的延迟和沮丧。“超级社区”,这是一种不稳定的思维环境,一切都在不断发生变化。“新手搭便车”,指的是让新人完全放任自流,这会给他们带来烦恼和巨大的工作压力。保持低社会性债务会让开发者和团队感到愉快,研究证明,快乐的开发者更有创造力!
基于约束和批判性的创造性思维
下一个创造性主题是基于约束性思维的优势。与流行观念相反,适量的约束并不会削弱创造力,反而会推动创造力!当然,关键在于要“适量”。
约束太少,几乎什么都不会发生:(谁会在乎,我们在做决定之前再试试几个框架吧。)
约束太多,几乎什么都不会发生:(非常严格的截止日期加上硬件和现有遗留软件约束最终会扼杀项目并耗尽开发者的精力。)
经理在这里的角色很清楚:引导开发者利用自我施加的约束达到创造性最有利的点,在自由度过高或约束过多时帮助减少或改变约束。诚然,并不是所有的约束都能轻易被改变或被(部分)忽略。
然后,我们将批判性思维作为典型五步骤创造性过程的重要组成部分:参与(90%的努力)、孵化(通过保持距离打断过程)、打磨(剩下的 10%工作)、验证(它奏效吗?)和最后的呈现/接受。
经理在这里的任务是引导程序员通过这个永无止境的反馈循环,例如,时不时地让他们刹车或提出关键性问题让他们进行自我反思。另一个关键点是弄清楚离散性和聚焦性思维模式之间的区别。想想在开发过程中戴上不同的帽子:重构、重新设计……然而,并不是每个人的思维速度都像你一样快,也不是每个人都被锁定在与你相同的聚焦模式中。警惕同事(以及整个团队)的思维模式,并更好地调整这些模式,这样可能会带来更多创造性的结果。经理应该特别注意这种思维振荡,并确保每个人及时转换思维方式:长时间的聚焦思维将导致精疲力竭,而不是更多的创造性想法。让开发人员喘息一下吧!
如何培养创造性思维
接下来是培养好奇心态。如果办公室环境除了无聊的灰色混凝土板外什么都没有,那么这种心态就不太可能被激发出来。走出舒适区对你的(创造性)思维方式有很大帮助。例如,离开办公桌,出去走走,不去想那个棘手的问题,等你回来的时候,解决这个问题的机会可能会增加一倍。
培养好奇心的另一种方式是编写一些无聊的程序来取乐。在浏览代码时对经验和意外发现持开放态度,这可能会让你找到解决问题所需的联系。在代码中闲逛通常会被经理认为是浪费时间,但实际上,它能保持团队的动力和好奇心,这对于一个创造性的程序员来说是非常重要的。另一个需要考虑的是经典的专家与通才争论。当然,两者都有各自的优点,但作为经理,你的任务是警惕过度专业化(或疲惫)的迹象。在这种情况下,你可能需要激励开发者通过结对编程学习新的技能。持续地激励你的团队保持好奇心。
下一个主题是利用你的创造性思维提出原创且可持续的解决方案:“心流”、如何进入创造性心境、深度工作与浅层工作、应对干扰以及如何激发创造性的见解。
作为经理,帮助员工保持正确的心态是很重要的。这意味着要确保你的团队成员在某种程度上免受不必要的干扰:无论是外部的还是内部的(包括你自己!)。为此,可以采用几种实用的工具来准备和处理干扰,例如引入“请勿打扰”时段或远离开放式办公室。此外,在激发创造性见解时,需要考虑这是你自己做还是大家一起做的事情?与往常一样,这取决于具体的情况。
一种鼓励创造性思维和创造力的企业文化无疑也会有所帮助。顺便说一句,开放式工作场所对创造力是有害的,但封闭的小办公桌也是如此。办公室应该设计成封闭的一群子环境,在这里,人们可以在不经常妨碍彼此的情况下偶遇和交流想法。麻省理工学院的20号楼是一个很好的建筑示例。
帮助构建创造性工具箱
最后,经理可以帮助开发者建立一套特定的创造力技术工具,例如,在陷入困境时从问题的结尾而不是开始着手。这时可以从其他领域借鉴工具,比如作家用来提高创造力的各种写作技巧,这些技巧也可以应用于编程领域。说到借用创意,有Austin Kleon所谓的“好的偷窃”和“坏的偷窃”之分。
作为Tamburri所说的社区牧羊人,经理们应该警惕这些问题,因为道德问题在软件工程中变得越来越重要,尤其是随着像 ChatGPT 和 GitHub Copilot 这样的 AI 辅助代码生成工具的兴起。
总结
本文总结了经理们可以采取哪些措施来帮助程序员培养创造力的七个核心主题:创造性和技术知识、成功地进行创造性协作、基于约束和批判的创造性思维、如何培养创造性思维,以及帮助构建创造性工具箱。
也许最重要的一点是:帮助你的同事意识到创造力是一种可以训练和学习的技能!
许多初级程序员认为他们要么有创造力,要么没有,但实际上,他们可能只是尚未拥有创造力。经理们可以做的一件事是:将创造力视为一种可达到的技能,并且只要有耐心,就可以培养出来!当然,创造力水平可能会因项目和个人而异。此外,它会不断发展,并与具体的上下文环境相关。请记住,每个人都可以成为一名有创造力的程序员。
原文链接:
https://www.infoq.com/articles/enabling-developer-creativity/
评论