【衝撃の事実】なぜ頭の良い人はソースコードが汚いのか
はじめに
どうも、私立YouTube高専校長です。
本日は、サムネを見て、驚かれた方も、いらっしゃると思いますが、プログラミングに、知性は邪魔。馬鹿こそ最強ということで、 一般的に、プログラミングというのは、頭のいい人が、知恵を絞って、カタカタ、キーボードを叩いているというような印象があると思いますが、 実は、作業としてのプログラミングにおいては、知性はむしろ邪魔にすらなる。という衝撃的な話をしたいと思います。
皆さんは、人の書いたコードを読んで、 なんだこのコード!めちゃくちゃ読みづらい! そんな経験をしたことがありませんか? 誰しもが一度は、経験した事があると思います。
プログラムを、読みやすく書くためには、 変数の命名規則だったり、インデントだったり、コメントだったり、何とか原則みたいな、 ゴージャスの名前がついたコツやらノウハウがあり、それだけで、本が何冊も出ています。
しかし、巷では、まことしやかに囁かれている噂があります。 それは、「頭の良い人は、ソースコードが汚い」という物です。
頭の良い人は、説明が下手と言われたり、なにかと揶揄されがちですが、 実際に私が、学生時代、学校で最も頭の良い友人の課題を見せて貰った事があります。 彼は、数学や物理が得意で、私が過去に出会った人物の中でも1,2を争う頭脳でしたが、 信じられない程汚いソースコードで、いつもプログラムを書いていました。
もちろん、これは、全員に当てはまる訳ではないですが、一体、なぜこのような都市伝説が流布しているのでしょうか? 火のない所に煙は立ちません。
実は、この都市伝説には、プログラムの可読性を語る上で、重要な教訓が含まれています。 また、この教訓から、読みやすいソースコードを書くためのコツを導くことが出来ます。
まず、大前提として、読みにくい/読みやすいソースコードとは何でしょうか? 読みにくいソースコードの特徴や、読みやすいソースコードの書き方は、ネットや本で調べると、 なんとか原則だの、何だの色々ありますが、可読性というのを一言で表現すると、認知負荷が高いか/低いかという話です。
例えば、変数や関数名を見れば、ある程度処理の内容が推測できたり、インデントが揃っていれば、パッと見て読みやすいというのは、 そのソースコードの読み手に対する認知負荷を下げるための工夫です。
逆のことをすると、読み手に対する認知負荷が上がり、読みにくいソースコードになります。
極端な良い方をすると、あなたが疲労してたり、酔っぱらったりしていて、 認知機能が低下した状態でも理解できるようなコードは、読みやすいソースコードです。
その上で、通常時の、認知機能というのは、当然、個人の能力に依存します。
そして、頭が良い人と周りに思われるような人というのは、往々にして、認知機能が高い人です。
したがって、私が思うに、「頭の良い人は、ソースコードが汚い」という都市伝説の発端は、 頭の良い人は、読みやすいコードを書く能力がないという事ではなく、 頭が良いと、読みにくいコードでも実装できてしまうということに、事にあるのではないかと思います。
普通、一般的な人が、読みにくいプログラムを書いてると、途中で意味わからなくなってくるので、書き直すなり、書くのをやめます。
しかし、頭がいいと、読みにくいソースコードでも、なんとか動くところまで、 持って行けてしまうので、読みにくいソースコードが、爆誕するのです。 これは、認知負荷の基準は人によって、違うので仕方のないことです。
したがって、プログラムを書く時は、認知機能が低い人でも、読みやすいように配慮して、ソースコードを書く必要があります。 そして、これは、同時に、自分にとっての、読みやすさにも繋がるので、自分のためにもなります。
難しい言い方をすると、ソースコードは色々な人が読むので、ハイコンテクストに頼るなという事です。 これは、東大生のノートが汚いという逸話にも、通じる物があると思います。
読みやすいコードを書くコツ
それでは、読みやすいソースコードを書くためには、具体的に、どうしたらいいのでしょうか? 私は、この問いに対して、2つの方法を、提案しています。
①「設計までに、知性を使い切る」
1つ目は、「設計までに、知性を使い切る」というものです。 先程、ご説明したように、コーディング時に、知性を使う必要があるということは、そのソースコードは、認知負荷が、高くなる可能性が高いです。 したがって、設計までに、知性は使い切って、コーディング自体は、設計をソースコードに落とし込むという作業だけに集中できる準備をしておきましょう。
これは、他のモノづくりに当てはめて考えれば、至極当たり前のことです。 例えば、家を作るときには、建築士さんは設計に集中して、職人さんは設計通りに、作ることに集中します。 職人さんが、いきなり、金槌を持っても、良い家が出来ないということは、火を見るより明らかでしょう。 これは、初心者プログラマーには、見落とされがちな、真実です。
②「一回忘れてから、ソースコードを読む」
2つ目のコツは、プログラムを書いた後に、一回忘れてから、ソースコードを読む。というものです。 認知負荷が高いソースコードは、短期記憶に依存している事が多いので、 いくら、頭が良くても、一度忘れたら、めちゃくちゃ読みにくくなるはずです。 したがって、一度忘れてから、読み直すと、客観的に読みやすさを判定する事ができるようになります。
これは、時間の制約上出来ない事もありますが、非常に有力な方法です。 私自身、たまに自分が書いた古いコードを見ると、ドン引きするくらい読みにくくて発狂することがあります。 古いと言っても、1か月も経てば、結構忘れているものです。
以上が、2つのコツでした。
他にも、もっと具体的なコツはネットや本で調べると、沢山出てくるので、是非調べてみてください。 リーダブルコードという本は、この界隈における代表的な本ですが、薄いので、1日で読めると思います。
また今回ご紹介する情報以外にも、我々は、日本の技術者の技術力向上に向けて、 5年後も10年後も役立つ、有益な技術情報を日本語で分かりやすく発信しているので、 そういった動画を見逃したくない方は、今のうちにいいねとチャンネル登録しておいて貰えればと思います。
今後は、もっと組織化して、コンピュータ科学だけでなく、 古今東西あらゆる分野のテクノロジーを解説していきたいと思うので、 是非、応援よろしくお願いします。
コメントも、非常に勉強になるので、是非よろしくお願いします。 是非一緒に、楽しいTech Lifeを過ごしましょう。
本日の動画の内容は以上になります。ここまでご視聴ありがとうございました。