質問
私の質問は、コードの整理とリファクタリングの方法と重要性をどのように教えられるかということです。
バックグラウンド
私は最近、同僚のコードレビューに取り組んでいました。彼らは、昔の同僚の仕事にいくつかの変更を加えていました。新しい変更の間、私の同僚はアイテムをリファクタリングしようとしましたが、クラッシュやその他の問題に遭遇するとすぐにあきらめました (問題の根本を見つけるためにウサギを追いかけるのではなく)、問題のコードを再実装し、その上にさらに構築しました。これにより、コードは回避策と魔法の番号のもつれに陥ったため、私は彼らと一緒に座ってリファクタリングを行いました。
リファクタリングできる場所を特定する方法と、各リファクタリングで新しい領域がどのように強調されるかを説明しようとしました。たとえば、同じ情報を格納する 2 つの変数があったとします。なぜでしょうか? より大きな問題の回避策だと思ったので、変数を 1 つ取り出してウサギを穴に追い込み、他の問題を発見しました。これにより、最終的に、同じことを何度もループしているという問題が見つかりました。これは、行われていることを難読化するマジック ナンバー サイズの配列の使用が少なからず原因でした。最初の「二重変数」の問題を修正することで、この発見 (およびその他の発見) につながりました。
このリファクタリングの旅を同僚と一緒に行ったとき、特定の変更を行った理由と、新しい機能が元の機能と一致していることを確認する方法を彼女が常に理解できていないことが明らかになったので、時間をかけて説明し、証明しました以前のバージョンと比較し、紙の上で変更を段階的に確認することで、各変更を確認します。また、リファクタリングの選択が悪い考えかどうかを判断する方法、コードの変更ではなくコメントを選択する場合、および適切な変数名を選択する方法について、例を挙げて説明しました。
一緒に座ってこれを行うプロセスは、私自身 (他の人に物事を説明する最善の方法についてもう少し学ぶ必要がありました) と同僚 (彼らは私たちのコードとコーディングの実践をより理解するようになりました) の両方にとって価値があると感じました。しかし、この経験から、リファクタリング プロセスを教えるより良い方法はないかと考えるようになりました。
...そして最後に...
リファクタリングが必要なものと不要なもの、およびそれをリファクタリングする方法は非常に主観的なものであることを理解しています。ここでは、似たような経験をし、彼らから何を学んだか (教師または生徒のいずれかとして)。