キミのコードが汚い理由The Rational Edge(2/3 ページ)

» 2007年01月12日 11時00分 公開
[Gary Pollice(ワーチェスター工芸研究所実務学教授),@IT]

汚いコードができるわけ

 筆者は、汚い、もしくは粗雑なコードができるのには以下の3つの理由があると考える。

  1. 時間のプレッシャー
  2. 学習不足
  3. 熱意

 では、これらを1つずつ見ていこう。

時間のプレッシャー

 ソフトウェアプロジェクトは遅れるものだ。ウォーターフォールプロセスを使うと反復型アプローチよりさらに遅れるが、大半のプロジェクトは採用するライフサイクルモデルに関係なくある程度は遅れる。反復と増加を繰り返すライフサイクルにおいては、遅れがスケジュール的なものではなく、機能的なものに起因する場合もある。

 プロジェクトが遅れ始めると、開発者とチーム全体が近道をしようとする傾向になる。これが人間性だ。「ワニに丸のみにされようとしているときに、自分が沼に入った目的を思い出そうとしても難しい」というではないか。プレッシャーが掛かると、何かをあきらめることになり、目の前のこと以外は見逃しがちになる。先の例の場合は、取りあえずワニに向かっていくことになる。筆者は、プロセスも典型的に無視されてしまうものの1つであることに気付いた。プロセスは、具体的な行動を取るか、特定の成果物を生み出す必要があるが、これらを回避できるのならそうするだろう。追い込み作業が一息ついてから作業を再開しようと考えるし、そうするつもりでいても、そうなることはめったにない。

 必要に応じて捨てられるということに関しては、クリーンなコードにもプロセスと同じことがいえる。われわれは、意味のある「netPay」などの変数名を使う代わりに、短くて、貴重な時間の節約にもなる「np」などを使ってしまう。有意義なコメントも、アルゴリズムの説明も付加しなくなる。期限が迫り、コードを何としても動くようにしなくてはならなくなる。

 期限に合わせてコードを書くこのようなアプローチはあまりに近視眼的で、後から自分たちが苦労させられることになる。

学習不足

 高校、大学、あるいは何らかの方法でプログラムを学習したとしても、クリーンなコードを書く方法について本当に学んだ経験はおそらくないだろう。これは、教育機関に時間的制約があることも要因の1つだ。ある一定の時間に教えられることには限界があり、プロジェクトの期限が迫るとプロセスが排除されてしまうのと同じように、クリーンなコードに寄与することの多いコーディングスタイルや読みやすさなどの内容は教育課程から省略されてしまう。

 各種教育機関におけるプログラミングの講義概要を見ると、講義の名称や目標にプログラミングスタイルが含まれるものもいくつかある。しかしよく見ると、目標に向けて最後までやる講師はまれであるように思える。課題や成績評価基準にも、クリアで読みやすく、うまく書かれたコードに対する評価を加味した内容がない。営利目的でプログラミングを教えるコースは学校よりさらに悪い。こちらはさらに講義時間が短いのが普通で、会社に戻ってから学んだばかりの言語に関してのみは生産性を高められるよう、必要最低限の知識を教えることしか考えられていない。

熱意

 大学のコンピュータサイエンスの教科課程の大半は、各種言語のプログラミング入門になっていない。それよりむしろ、学生は各種言語の十分な基礎教育を受けているものと仮定され、OSやネットワークの課程にコーディングスタイルや読みやすさに関する内容が含まれることはほとんどない。学生は、問題を解くことで評価されるだけだ。スタイルが考慮されることはない。

 誤解しないでいただきたいのだが、コンピュータ科学者はエレガントなコードを高く評価する。筆者としては、ソフトウェアエンジニアリングの教授はコードのクリーンさに特に注意を払ってくれるものだと思いたい。しかし、この評価の対象が必ずしもコードの読みやすさや保守性であることもない。われわれは、コードの読みやすさや構造よりエレガントなアルゴリズムや技術のエレガンスを評価することも多い。

 コードをきれいにではなく適切に書くことに価値を感じているのは大学だけではない。これは実社会でも起こることであり、残念ながらプログラミングコンテストでも見受けられる。ACM International Collegiate Programming Contest世界大会決勝の採点方法からの引用をご覧いただきたい。

 「チームは解いた問題の数で順位が決められる。上位12チームのうち回答数が同じチームは、まず所要時間の少ない順番、そして必要であれば最後の有効処理が実行されたときのタイムで最終順位を決める」[注4]

 そう、そこにはクリーンなコードを評価する規定が全くないのだ。筆者は、コードのエレガンスと読みやすさを「判定」することが簡単な作業でなく、どちらかといえば主観的な作業であることは認識している。また、エレガントなコードを書けば回答を早く取得する確率も高まるといくら主張しても、筆者はこれを立証する調査を1つも知らない。ここで筆者がいいたいのは、重要なプログラミングの現場では、クリーンなコードが全く考慮されないことが多過ぎるということだ。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ