2011年1月17日月曜日

コピペ・プログラミングの善悪の境界

コピペ・プログラムは悪い事だと言われる。

コピペ・プログラマは駄目人間だとも言われる。

一方で、実際の現場ではコピペ・プログラミングは現実によく行われている。

リーダが「追加が決まった例の機能は、コピペで済むからラッキーだね」なんて言って、PM と一緒に嬉しがったりする。

当のプログラマも、「任務遂行のためならコピペも辞さない俺って、なんて冷徹なプロだろう」てな感じで、どこか得意げだったりする。

どう言う事か?コピペは良いのか悪いのか。

より正しく言うと、悪いのはコピペ自体ではなく、コピペにより生ずる重複コードの放置だと言える。古来より、共通コードはサブルーチン化すべしと言われてきたし、近年においても Merciless な Refactoring が強く推奨されている。

要は、結果的に重複が解消されて、保守性が下がる事もリスクが増える事もなくなれば、コピペそのものは別にどうって事ない。

もちろん現場の緊急事態においては、コピペ解消に要する数分~数十分を惜しんで保守性を犠牲にしリスクを高め、従って後になって無駄にコストばかり膨れ上がるという高利の負債を受け入れてもなお、一時も早くコミット/リリースせざるを得ない状況もある。

しかしだからと言って、TODO コメントで重複コードである旨を表示して、後続のプログラマの注意を喚起するくらいの事ができないわけはない。

それすらやらないという事こそ、もう言い逃れのできない不作為、無知、鈍感と言わざるを得ない。プログラムの仕事が分かってないという事になるのではないか。

★まとめ
  • コピペしない ← OK
  • 作業の流れで一旦コピペしても、重複は残さない ← OK
  • やむを得ず重複を残したが、他人が怪我しないように手は打った ← ギリOK
  • コピペでコードを重複させましたが、何か? ←


★豆知識
  • かなり古い本だが『AntiPatterns』でも、"Cut-And-Paste Programming"として、Clipboard Coding、Software Propagationといった別名と共に紹介されている。
  • Refactoring』 では、Code Smellのうちの"Code Duplication"として紹介されている。
  • 以下、元祖 wikiwiki から
    • OnceAndOnlyOnce:「書くべきコードは一度だけ、ただ一度きりのみ書きましょう」と言う、おそらく最も有名な重複防止の標語。
    • Refactoring Mercilessly:昔から XP で言われているプラクティス。特にコードの重複の解消を念頭においていると考えても良い。
    • Duplicated Code:言わずと知れたコードの重複。CodeSmell(駄目なコードの兆候)の最たるものとされている
    • Copy And Paste Programming:ずばり今回のテーマ。冒頭で一応、プログラミング手法の一つとして中立的に紹介された後、なぜこれが駄目なのかと延々と批判が続く

0 件のコメント:

コメントを投稿