Jef*_*tes 8 language-agnostic refactoring
我的问题是你如何教授整理和重构代码的方法和重要性?
我最近正在为一位同事进行代码审查.他们对长期以来的同事工作进行了一些修改.在新的更改过程中,我的同事试图重构项目,但是一旦遇到崩溃或其他问题就放弃了(而不是在洞中追逐兔子以找到问题的根源),因此重新实现了问题代码和在此基础上建立更多.这使得代码处理了大量的变通方法和魔术数字,所以我和他们一起坐下来重构它.
我试图解释我是如何识别我们可以重构的地方以及每次重构如何经常突出新区域.例如,有两个变量存储相同的信息 - 为什么?我猜想这是一个更大问题的解决办法,所以我拿出一个变量,把兔子赶到了洞里,发现了其他问题.这最终导致我们发现了一个问题,即我们多次循环相同的事情.这在很大程度上归因于使用魔术数字大小的数组来模糊正在做的事情 - 修复最初的"双变量"问题导致了这一发现(以及其他).
当我和我的同事一起进行这次重构之旅时,显然她并不总是能够理解为什么我们做出某些改变以及我们如何确保新功能与原始功能相匹配,所以我花时间来解释和证明每个更改都通过与早期版本进行比较并逐步完成纸上的更改.我还通过示例解释了如何判断重构选择是否是一个坏主意,何时选择注释而不是代码更改,以及如何选择好的变量名称.
我觉得坐在一起做这个的过程对我自己来说是值得的(我需要学习更多关于如何最好地向他人解释的事情)和我的同事(他们更多地了解我们的代码和我们的编码实践)但是,经验让我想知道是否有更好的方法来教授重构过程.
我理解什么需要或不需要重构,以及如何重构它是非常主观的所以我想避开讨论,但我有兴趣了解其他人如何应对教授这项重要技能的挑战,以及其他人这里有类似的经历和他们从中学到的东西(无论是老师还是学生).
与大多数编程一样,重构技能需要练习和经验。认为它可以被教授固然很好,但它必须被学习——并且在不同环境中可以完成的学习量存在显着差异。
为了回答您的问题,您可以以教学方式教授重构方法和良好的设计,这很好。但最终,你我都知道,只有通过长期的艰苦经历才能达到一定的水平。