ユーニックス総合研究所

  • home
  • archives
  • code-dirty

コードが汚いと人間はどうなるのか?その悪影響と改善方針

コードが汚いと人間どうなるのか?その悪影響と改善方針

コード(ソースコード)の美しさを探求するのはプログラマーとしては自然な姿だ。
コードが美しければモチベーションが上がるし、プロジェクトの保守性や自己肯定感も上がる。

だが、美しいコードを書くのは容易なことではない。
たいていの人は無様で汚いコードを書くことになる。

この記事では汚いコードが人間に与える影響について考えてみたいと思う。

関連記事

魔法の壺、プログラミングのライブラリ(Library)とは
頭悪い人にプログラミングは可能か?可能です
開発を3倍速にするプログラミングの考え方4つ
英語できないけどプログラミングはしたい。そんな人はこの方法がおすすめです
意味のないプログラミングの特徴3つ

汚いコードはなぜ生まれるか?

見るだけで嫌悪感を抱き、あらゆるモチベーションが低下する極悪なコードを見たことがあるだろうか。
職業プログラマであれば見たことがある人も多いだろう。

なぜそのような「汚いコード」が生まれてしまうのだろうか?
だれだって汚いのはいやだ。
美しいほうを選択したくなるのが普通だ。

しかし、じっさいに生まれるのは汚いコードである。
なぜそんなことが起こってしまうのか?

これはつまりこういうことである。

  • スキルが低い
  • 課題が難しすぎる
  • 美意識がない

これらの要素が存在すると、コードはとたんにエレガントなその風貌を変えて、小汚い醜いコードへと姿を変えてしまう。
どういうことか1つずつ検証してみたいと思う。

スキルが低い

コードが汚くなる原因の大半はこれが原因であることが多い。
単純にスキルが低いのだ。

コードを美しく書く条件の1つに「分割統治」という考え方がある。
これは、問題を複数に分割して大きな問題を小さい問題にする。
そしてその小さい問題を1つずつ解決していく。

分割統治を適切に行うと、コードがたいへんシンプルになる。
複雑だったコードがほぐれて、1つ1つが理解しやすいコードへと変身する。

しかし、スキルが低いとこの分割統治を適切に行えない場合がある。
つまり分割統治と言う考え方を知らないか、あるいは実践できるほどのスキルがないのだ。

こうすると、大きな問題や複雑な問題をそのままにして解決しようとする。
すると途端にコードは複雑になっていき、汚くなってしまう。

あるいは「抽象化」もそうだ。
抽象化とは、複雑な処理を抽象的にするアプローチだ。

これはたとえば複数行の数値計算のコード片に名前を付ける。
そしてそれを関数にしてきり出す。

こうすることで具体的だった数値計算のコードが、「名前」によって抽象化される。
コードは見易くなり、コードを読む人の労力も見かけ上は減る。
(抽象化されたコードを理解すれば全体像がわかる。ただし具体的な内容はその抽象化された内容を意識しなくては身に付かない)

分割統治と抽象化はコードを美しくするのに必須の概念だ。
だがスキルが低いとこれらをうまく扱えないのだ。

課題が難しすぎる

プログラミングで解決しなければならない「課題」が難しすぎる場合も、コードは汚くなりやすい。

これはたとえば先ほどの分割統治や抽象化がうまく行えない場合だ。
複数の問題が複雑に絡み合っていて、分割もできない。
分割ができないから抽象化も難しい。

このためスキルがある人でも複雑なコードを書かざるを得ない。
複数の問題を同じファイルやクラス、関数内で解決しようとする。

そうするとコードはダーティーになり、美しさとはかけ離れたコードが生まれることになる。

いっぱんにスキルがある人でも、こういった問題には直面することがある。
つまりスキルがある人も見方を変えれば「スキルがない」のだ。

上には上がいる。

そして課題は大小さまざまなものが生まれる。
自分のスキルの範囲で美しく出来るものは限られてくる。

これを解決するにはどこまでも貪欲にスキルを付け、あらゆるコードを美しく出来るすべを知らなければいけない。
実験と探求を重ね、1人の求道者になってコードを生成する毎日を送る。

だが、こういった人材は非常に貴重である。
ましてや複数人が参加するプロジェクトのコードを美しく維持できる人などまれである。

それほどそういったプロジェクトのコードは複雑になりやすい。
もしあなたの周りに複数人のプロジェクトでコードを美しく維持できる人がいたなら、その人には敬意を払ったほうが良いだろう。
その人はあなたの何倍もプログラミングについて知っている可能性がある。

美意識がない

美意識とは、コードに対する美意識だ。
これを言うと笑ってしまう人がいる。
しかしコードにも美意識は求められる。

コードに対する美意識が無い人は、あまりコードが汚くなっても気にしない。
というか汚いコードへの免疫を持っている人が多い。

複雑な問題を解決するのだから、そもそも美しくコードを書こうとするのが間違っている。
コードは汚くてもいいのだ。
そういう考えを持っている人だ。

このアプローチはある種、正しい。
たしかに大小さまざまな問題をすべて美しく解決するというのは並大抵のことではない。
むしろそれらを美しくしようとするのは多大な労力がかかるし、それなら最初から汚さを許容してコードを書いたほうがいい。

じつはスキルがある人でもこの考えを持つ人は多い。
たとえばFacebook創業者のマーク・ザッカーバーグのコードはスパゲティだったと噂されることがある。
しかしマークは、幼少のころからソケットプログラミングなどをマスターしていた生粋の技術者である。

そう考えるとスキルがある人が汚いコードを書くというのも納得できるものである。

つまり実際のスキルとコードに対する美意識というのは、また違うベクトルである可能性が高い。
スキルがあっても美意識を持たない人というのは存在するのだ。

汚いコードが周りに与える影響

汚いコードは周りにどのような影響を与えるか?

たとえばC言語には「マクロ」と呼ばれる機能がある。
マクロはコンパイル前にプリプロセスという処理過程で、コードを指定のコードに置き換える役割をする。

つまりこれを使うと自分だけの疑似言語を簡易的に作ることも可能なのである。
あなたが一時の好奇心と気まぐれでそういった簡易言語を作ったとする。

そしてその簡易言語でプロジェクトを1つ作ってしまう。
ちなみに簡易言語のドキュメントはない。

さて、数年後、再びそのプロジェクトのコードを見たあなたはどうなるだろうか?
あなたはその簡易言語の「理解」から仕事をはじめなければならない。

C言語に加えて、昔の自分(つまり他人である)が作ったわけのわからない言語を学ばなくてはならない。
きっとあなたはひどいストレスを抱えるだろう。

汚いコードの与える影響は、これと同じことが言える。
汚いコードはその時の自分だけには理解できるものなのだ。
しかし時間が経ち他人となった現在の自分や、赤の他人からすると、まったく理解不可能なのだ。

汚いコードは「汚いコードの理解」から仕事をはじめなければならない。
「汚いコード」というレイヤーが、コードの上に1層存在することになるのだ。

汚いコードは時間を無駄にする

このように汚いコードというのは、われわれの時間を無駄にむさぼる魔物である。
もしあなたが時間を節約したいなら、コードは美しくしておくべきだろう。
頭をひねらなければ理解できないコードは、美しくはない。

美しいコードは単純明快で、一見すると馬鹿みたいに稚拙に見えるものである。
しかしそれは誰にでも理解できる素晴らしいコードなのだ。

わたしたちの人生は有限である。
つまり人生における時間とははかないものだ。
時間を節約するあまり、時間を浪費することもある。

だから基本的には無駄な時間を過ごさないというのが大事だと言われている。
であるからして、汚いコードを書かないように努力するのは大事なことなのだ。

おわりに

今回は汚いコードなぜ生まれるか?そしてどんな影響を人間に与えるか考えてみた。
美しいコードは時間を節約できるすばらしいものだ。

時間が足りていない人は美しいコードを書くようにしたほうがいいだろう。
みなさんのプログラミング・ライフに光があらんことを。

🦝 < ビューティフル・コードは

🐭 < ダーティー・コードに勝る