有一位名叫加里森·凯勒的艺人谈论 虚构的沃比根湖小镇 。在关于这个主题的现场独白结束时,他“结束”了以下总结。
好吧,这是来自乌比冈湖的消息,那里的女人个个都强壮,男人个个都帅,孩子个个都在中等以上。
软件英雄
我们一生的大部分时间都在寻找一个所有孩子都高于平均水平的地方——一个我们都能成长为英雄的地方。社会崇拜现成的英雄:皇室成员、运动员、名人,甚至在某种程度上,伟大的思想家、高管和艺术家。也有基于情境的、基于角色的英雄,例如急救人员,甚至是在紧要关头表现出一些英雄主义的人,例如将潜在的溺水者从结冰的湖中拉出来。这里的关键是特殊性。英雄是特殊的。
对于我们这些没有在世界大赛中打出本垒打或在电影中打出本垒打的普通凡人来说,我们只能自己编造自己的特殊故事。房间里最聪明的女士?从每年的慕尼黑啤酒节中收集传奇啤酒杯的人?有时你必须深入挖掘才能找到一个你明显高于平均水平的场所。正是出于这种需要,我认为铁杆阴谋论者和那些对有机食品、整体医学和“古老”疗法无休止烦恼的人——拥有某种不寻常的知识,即“羊群”所缺乏的是通向 专业的途径, 如果 本身 不是英雄主义。
我们在软件世界中有英雄。他们是对领域和现有代码库拥有百科全书知识的人。他们是那些在关键时刻以可靠着称的人——早起,迟到,在关键时刻带着装腔作势但满意的表情。他们在 学院颁奖演讲 中让项目经理神魂颠倒,滔滔不绝。在没有交付压力的情况下,他们有时会迟到,有时会早退,因为他们被信任拥有团队中 A 级球员的特殊特权。但他们这样做时知道,在任何时候,他们可能需要突然介入并完全接管,而团队的其他成员则摆弄他们的拇指并让开。
你知道吗?他们 喜欢 它。因为在他们立方体农场定义的狭窄范围内,他们是英雄。他们是迈克尔该死的乔丹。他们在生活中找到了自己的 特殊之处 。
然后,还有我们其他人
为什么要对软件英雄进行心理分析?我收到的 Ask Erik 表格的问题之一(如果您想了解某个主题,请在 此处的 侧边栏提交)是这样解释的。
我倾向于加入新团队,支持软件工艺原则。团队成员最初接受了该消息,但英雄们将测试和重构作为较低优先级的项目推迟到以后重新访问。总有一天永远不会到来,我得到了一个纯粹主义者而不是大量使用代码的代表。我厌倦了这个,继续前进,并希望有更好的结果。我怎样才能改变游戏规则并在这些群体中赢得信誉?
我知道这一点,我很同情。我同情,因为我经历过。不止一次。因此,精神分析的原因是“了解你的对手”的变体。软件团队中的英雄是那些已经习惯了 与众不同 的令人陶醉的感觉的人。你威胁那个。
英雄通常不是 专家初学者 。新手专家通常很无能,并且普遍蔑视任何人都可以在他们的小领地上教给他们任何东西的想法。他们认为承认知识差距是软弱的表现。另一方面,英雄们乐于学习和成长,特别是因为这种成长为他们提供了更多英雄主义的弹药。但是,就像专家初学者一样,他们对 你的既得利益并不特别。在这个场地特别的是他们的东西。
所以,如果你只是想以你认为最好的方式进来练习你的手艺,你能做什么?
酷玩
首先,当你进入一个有英雄的团队时,我不会把你的 TDD 挂在袖子上。 (我认为干净的代码实践和英雄几乎是相互排斥的,所以如果有英雄驱动的文化,你可能不需要担心他们对工艺的认真态度)。如果你进来谈论软件应该如何完成,或者甚至只是将自己确立为来自不同的学校,那么你就走错了路。当你这样做时,你就是在宣称 自己的特殊性 ,那是他们的事。
我不是说你不应该继续你的修行,而是说你应该安静地做,只有在被问到的时候才谈细节。 “那是什么?” “哦,我做 TDD,所以那些是我的单元测试。如果你愿意,我可以告诉你它是如何工作的。”如果他们要你停下来,那就做一个烈士。告诉他们您将编写测试,但只是将它们保存在您的机器上。告诉他们您将继续编写测试并删除它们。明确表示你不会在实践上让步,但你很乐意迁就它们。
交付,即使它伤害
为了支持这种坚忍的抵抗,你需要确保你交付。如果您是代码库的新手和/或工艺实践的新手,这可能意味着很多额外的晚上和周末。预先投资这些以巩固您的声誉(提高您的工艺的额外好处)。重要的是要证明专注于工艺的人可以跟上。
请注意,您无需为了交付英雄而自杀。那不是你的目标,无论如何这只会让他们处于守势。这里的想法不是要成为首席英雄,而是要证明你可以按照自己的方式做事。管理层 喜欢 英雄,因为他们不明白他们的大部分英雄行为都是为了解决上一轮英雄行为造成的问题。你不会说服管理层相信你的话,而不是他们的软件英雄,但你 可以 说服他们你可以自力更生,没问题。
低能见度绿地志愿者
一旦你悄悄地、谦逊地证明你可以试驾、童子军,并且仍然跟上,通过向(对他们)提出奇怪的提议来开发一些内部工具或其他不光彩的工作,消除英雄们可能认为越来越大的威胁,主要是单独作业。这将使您立即远离他们的威胁雷达,并为您提供一条跑道来展示干净的代码库是什么样的。 (或者,您可以在业余时间或工作期间处理此问题,这样您就不需要显式分配。)
这是一个漫长的过程,但是一旦进行了一段时间,就为管理层和所有其他参与者安排演示。向他们展示如何无所畏惧地进行重构。向他们展示如何在短时间内实现新功能。向他们展示干净的代码可以做什么。
如果你做得好,你将最终获得授权,开始将这种新奇的干净代码扩展到更高可见度、更高优先级的项目中。英雄并不愚蠢,他们当然也不懒惰。一旦潮流转变并且管理层支持这个想法,他们就会进行 180 度大转弯,开夜车观看 Pluralsight 课程 并阅读 TDD 书籍 。他们的目标:成为领域/代码库的英雄,并且在这种新的干净代码方面足够出色,以保持他们作为团队中首选人物的地位。
跳跃时更挑剔
最后,我将解释什么最终对我最有效。在采用干净代码的地方工作多年后,就像在汹涌的河流中逆流而上,我停止了在这样的地方工作。我会取得艰苦奋斗和令人疲倦但令人满意的进步。然后我会去度假一个星期,然后回来发现 400 个单元测试被注释掉了。您可以在 dink 和 dunk 业余商店中赢得干净代码的战斗,但这既累人又令人抓狂。
我不再这样做了——不是为了项目工作,也不是为了 W2 的东西,如果那仍然是我的事的话。我预先解释说我不感兴趣,除非一个团队有工匠精神,或者专门带我来安装它。在这方面我并不后悔。
但我通过艰难的方式学到了这一点。我不止一次想过,我会在一个实时生成遗留代码并向他们展示自动化测试的小组中工作,从而把它赶出公园。面试会令人鼓舞——“哦,是的,我们完全计划让 TDD 进行敏捷驱动的开发。”但是,当遇到困难时,没有时间做任何事情,只能复制并粘贴另外六个直接从数据库读取的标记文件。
因此,请跳过那些对干净代码、敏捷、TDD 等“感兴趣”的商店。采访那些声称这样做的商店,并提出一些问题来弄清楚他们是认真的还是只是为了营销而捏造的目的。当然,这会稍微缩小范围,但拥有一些高质量的前景总比无休止的令人失望的前景要好。
而且,如果所有其他方法都失败了,如果您正在寻找重视干净代码的开发机会,请联系我。我当然可以让您与认真对待这件事的组织和人员取得联系。它有一个市场。