Revolutionary Evolution

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

这是我在关于面向对象编程和我对其非传统理解的会议上几乎每次听到的问题:“我该如何说服整个团队开始以完全不同的方式进行一切?”(最近在这里提问)。确实,如果你是独自一人,改变你的编码习惯和软件设计是很容易的。但如果你是一个庞大团队的成员,而且每个人都对Spring框架和过程性编程非常满意,你该怎么办呢?你如何改变他们的编码习惯?更好的问题是:在这个过程中如何保住自己的工作?

简而言之,你不能独自胜利,你需要一个团队,一个组合起来的团队。

我记得几年前,我作为一个架构师加入了一个Java团队,我的老板告诉我,这个团队有很有才华的程序员,但他们需要一些帮助。他还告诉我,这个架构很不错,但需要改进才能变得更好。他还告诉我,我在那里是为了做出改变,他们期待着这样的改变。

在短短几周内,我意识到现实完全不同。那30个程序员中的大多数实际上是初级程序员,几乎分不清对象方法和静态方法的区别。我还发现根本没有架构,只是一堆由不同人在不同时间创建的.java文件。当然,很明显,无论我多么努力,我的想法都不会被接受,因为对这些“有才华”的人来说,它们听起来太可怕了。

如果我是其中一个程序员,坐在那里几年,写一些Java代码,每个月领取两次薪水,我会高兴地遇到一个人告诉我,我在过去几年中一直错得很离谱,现在是时候重新编写一切了吗?无论这个人说得多么有道理,我只会为了保护自己而破坏他。尽管我们声称个人主义和独立思考的价值,但大多数人都非常社交化,并依赖周围的社区。换句话说,他们做的是其他人都在做的事情。这更安全。

那30个人也不例外。他们随波逐流,使用Spring、MyBatis、Singletons、getters、setters以及我们这些真正的面向对象编程程序员如此讨厌的一切。但我必须对此做些改变,这是我为之付费的。然而,仅仅告诉他们从今天开始我们应该摒弃Spring,因为它反面向对象编程,对我来说只意味着一件事:迟早会终止我的合同。

这样的“革命”对程序员和产品都构成了严重威胁。首先,它会使大多数程序员重新回到初级职位,迫使他们从头学习新的编程范式,而他们想要继续享受“高级开发人员”的职位和薪水。其次,激进的架构改变总是会危及现有软件的稳定性。

  • 首先,我选择了年龄最小且最有才华的人(同时)。我和他们都进行了交谈,找出了谁的潜力最高。请注意,我选择的不是最好的人,而是我认为最有兴趣学习和在职业方面成长的人。毫不奇怪,他们是最年轻的(从职业角度来看,而不是年龄)。很明显,他们没有足够的职业指导和成长策略。毕竟是春天,我们能谈些什么成长呢,对吧?

  • 其次,我非正式地成为了他们的导师。初级且有抱负的工程师最需要的就是一位老师。有人可以向他们展示学习路径和获取新知识的方向。我的导师角色主要是对他们编写的代码进行审查,并告诉他们其中的错误,我会通过自己的博客文章以及其他许多关于“良好”软件设计的文章和书籍来支持我的批评意见。

  • 第三,我为整个团队组织了定期的每周讲座。我每个星期一花一个小时站在他们面前,解释为什么NULL是不好的,单元测试是好的等等。每个人都可以自由参加。毫不奇怪,我的“学生”们总是参加。

  • 第四,我正在对代码库的一些关键位置进行重构,并要求我的“学生”审查我的拉取请求。这些小而具有挑战性的任务为我们提供了很好的讨论材料,更加团结了我们的小组。我的最终目标是组建一个支持我的团队。相互审查代码是实现这一目标的完美方法。

在短短几个月内,每个人都明显感觉到整个团队不再那么稳固。我们有主流多数派和真正面向对象编程的少数派聚集在我周围。现状开始动摇。少数派对架构不满,并且不再害怕说出来。架构仍然很糟糕,但已经不再是”我们”的架构。这是我们从过去继承而来的东西,我们决心要改变它…最终。

我最初和主要的目标不是修复架构,而是建立一个支持者的”联盟”,这个目标已经实现了。尽管我没有获得多数派的支持。我的团队只有7个人。但这个规模足以改变30名程序员整个团队的方向。其他人后来被动地加入了我们。

我在不到一年的时间里离开了那个项目(我不是被解雇的)。然而,在我离开时,它正在朝着正确的方向前进:测试覆盖率在增长,对象变得不可变,不再创建新的DTO等等。尽管如此,Spring框架仍然存在。

即使你的职位仍然是”初级”开发者,你也可以在你的团队中做到同样的事情。不要等到你的老板改变你的职位,开始指导你周围的人,并建立一个支持者团队。当规模足够大时,即使没有你的意愿,变革也将开始发生。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-17 at 16:02

sixnines availability badge   GitHub stars