開発
なぜ命名は重要なのか
Yuki Ito
「良いコードを書きなさい」と言われる
私達エンジニアは良いコードを書くよう常に圧力を受けています。社内でもそうかもしれませんが、世間を見渡せば「デザインパターン」や「リーダブルコード」、「良いコードを書く技術」「コーディングルール」など、さも「プログラマは良いコードを書いて当然!」と言わんばかりに、巷は「良いコードを書くための知見」で盛り上がっています。
でも、そんなに良いコードを書くことが重要なのでしょうか?
人と機械をつなぐ架け橋
そもそも、プログラムとは一体何なんでしょうか。なぜわたしたちはこんなにも苦労して情報工学を学び、プログラムを書いているのでしょうか。「それが楽しいから」とかももちろんあるでしょうが、根本は「コンピュータに仕事をさせるため」ですよね。
ではなぜ、コンピュータに仕事をさせるためにプログラミングが必要なのでしょうか? そもそもコンピュータは機械語(バイナリコード)で動きますよね。なら、最初から人間が機械語を書けば良いのではないでしょうか?
「そんなの無理だ!」と思いましたか? そうなんです。普通の人間にとって機械語を理解するのはかなり難しいことで、それを破綻なく「書く」となれば、到底人間の仕事とは言ないものとなるでしょう。
やっぱり私達にはプログラミング言語が必要ですよね。つまり、プログラムとは「人間も機械も理解できる言語」なのです。ちょうどグローバル社会における英語のように、人間とコンピュータという相容れない私達の間にプログラミング言語があることで、お互いに深く理解することが可能になるのですね。
でもなぜ、プログラムは人間に理解可能なのでしょうか?
プログラムをわかりやすくする技術
プログラムの始まりを知っていますか? もちろん最初は生のCPUの命令列(バイナリ)でしたが、そのうちニモニックという、バイナリの代わりにアルファベット一文字をCPUの命令として読み込むことができる仕組みが実装されました。
なぜこの機能は作られたのでしょうか。簡単ですよね。ただの数字の列より、なんとなく命令に沿ったアルファベット一文字のほうが人間にとって覚えやすかったからです。
また、1940年代に入るとアセンブラが開発され、シンボルといってメモリアドレスやレジスタ番号にアルファベットで名前をつけることができるようになります。
なぜ数字の直書きではダメだったのでしょうか? 答えは名前で書いたほうが、そこに何が入っているか分かりやすかったからですよね。
こんなふうに、プログラミング言語というのは「バイナリ(数字)を、より人間に分かりやすい”文字(単語)”で表現していく」という形で始まりました。その後構造化やオブジェクト指向などが開発されますが、最も基本的で大切なことはここだと思います。
つまり、プログラミングとは、基本的にバイナリを文字で説明する、ということなのです。ひとつひとつの関数や変数に人間の理解できる意味とその表現を与えられることで、後述の処理を書きやすくし、処理の流れを読み取りやすくし、バグを防ぎます。このことこそが、プログラミング言語の最も基本的な役割と言えるでしょう。
プログラムを書くときに重要なこと
先のセクションで「プログラムとは、人間にも機械にも理解できる文章である」と書きました。これは逆に言えば、「プログラムは、人間にも機械にも理解できなければならない」となります。
先人たちはプログラムを人間にわかりやすくするために、まず「命名」という機能を作りました。
これは、「命名」こそがプログラミングにおいて最も大切である、ということを示唆しているのではないでしょうか。
「なぜ命名は重要なのか」という題でブログを書きましたが、これに対する答えは通常、「2週間後の自分は他人である」等よく言われる言葉で足りるものだと思います。しかし、それはどこか説得力に欠くものがあります。「無知の知」ではないですが、人間そこまで謙虚じゃないからかもしれません。
しかしこうして歴史をすこし辿ってみてその本当の意味合いを考えてみると、ちょっとは良いコードを書くモチベーションにつながるのかなと思います。
みなさんもプログラミング言語の歴史を噛み締めながら命名を考えてはいかがでしょうか。