问题
我的问题是如何教授整理和重构代码的方法和重要性?
背景
我最近正在为一位同事进行代码审查。他们对久违的同事作品进行了一些修改。在新更改期间,我的同事曾尝试重构项目,但一旦遇到崩溃或其他问题就放弃了(而不是追着兔子往洞里找问题的根源),因此重新实现了问题代码和在此基础上构建更多。这让代码陷入了一堆变通办法和幻数之中,所以我和他们坐下来进行重构。
我试图解释我是如何确定我们可以重构的地方,以及每次重构通常如何突出新领域。例如,有两个变量存储了相同的信息——为什么?我猜想这是解决更大问题的一种解决方法,所以我取出一个变量并把兔子追到洞里,在我们进行的过程中发现了其他问题。这最终导致我们发现了一个问题,即我们多次循环相同的东西。这在很大程度上是由于使用了幻数大小的数组混淆了正在做的事情——修复最初的“双变量”问题导致了这一发现(和其他发现)。
当我和同事一起进行重构之旅时,很明显她并不总是能够理解我们为什么要进行某些更改以及我们如何确保新功能与原始功能相匹配,所以我花时间解释和证明通过与早期版本进行比较并在纸上逐步完成每个更改。我还通过示例解释了如何判断重构选择是否是一个坏主意,何时选择注释而不是代码更改,以及如何选择好的变量名。
我觉得坐在一起做这件事的过程对我自己(我必须了解更多关于如何最好地向他人解释事物)和我的同事(他们必须了解更多我们的代码和我们的编码实践)都是值得的但是,这段经历让我想知道是否有更好的方法来教授重构过程。
……最后……
我知道什么需要或不需要重构,以及如何重构它是非常主观的,所以我想避开那个讨论,但我有兴趣了解其他人将如何应对教授这项重要技能的挑战,如果其他人这里有类似的经历以及他们从他们身上学到的东西(无论是作为老师还是学生)。