プログラム言語を覚えて思ったこと
私が最初にJava言語(以下「Java」)に触れたのは2000年頃だったと思います。
当時はまだC言語とC++という先行していたプログラム言語を使える人が多く、Javaを扱える人が多くはありませんでした。今からだと想像つきにくいのですがJavaはなんとなく敬遠されていました。まだ主流の言語ではなく「オブジェクト指向言語」という売り文句が難解に見えたこともあったでしょう。それに当時のPCのスペックだと随分処理に時間がかかった記憶があります。
駆け出しの私はとにかく何でもやろうと思っていたのでJavaを覚えることにしました。最初はわからないことだらけで本やネットで調べたり実際に動かしたりと相当時間をかけたように思います。
しばらくして頭が整理されてくると不思議なことに気づきました。処理の内容を頭で検討しているときに日本語ではなくJavaでそのまま考えているのでした。英語を学んでいた時にも同じような経験をしたことがあったので「Javaも言語なんだ!」という当たり前のような当たり前でないようなことに気づきました。
プログラム言語も「言語」である以上、日本語や英語などいわゆる自然言語と同じように考える道具になりうると私は思うのです。
ソースコードについて感じたこと
仕事でJavaを使っていると必然と他の人のソースコードもみることになります。ソースコードというのは人間が読み書きするためのものです。コンピュータは実行ファイルを見て処理をしますがその元は人間の書いたソースコードです。ソースコードを実行ファイルへ翻訳することでコンピュータは処理のないようを知ることができます。この翻訳を英語で「編集」の意味ですが、compile「コンパイル」と呼びます。名詞でもあり動詞でもあるので「コンパイルする」などとも言えます。
理屈としてはどんなソースコードを書こうがコンパイルされた結果が同じであれば行われる処理は同じです。例えば以下のようなソースコートの違いは実際の処理に影響はありません。
- 改行あるなしや空白のいれ方
- 内部でしか使われない変数の名前のつけ方
- コンパイルする時には無視されるコメント
他にもあるでしょう。でもこの違いだけでもソースコードの書き方は人によって異なってきます。
日本語の文書、手書きにしてもワードにしても読みやすい読みにくいという違いがあります。これは適切な段落分けができていなかったり、用語の整理ができていなかったりということから起こります。文書作成をよくする方は思い当たることがあると思います。
ソースコードについても同じように読みやすい読みにくいがあります。ただソースコードについてはこれが最終的な成果物ではなく機械がどのように処理をするかが重要になります。逆に言うと
処理さえ間違いなくできればソースコードが読みやすいかどうかは重要ではない
ということもできます。
とはいえソースコードは人間が読むので後から修正したいときや、処理の内容を知りたいというときには読むことになります。このときのためにソースコードが読みやすいというのは後からそれを読む人にとって楽なことです。私は人物像と関係なくソースコードを見て好きになった人さえいます。
一方でソースコードを見て心配になることもありました。変数という値の入れ物には名前をつけるのですがそれが実際の名前と合わないときでした。まるで塩と書いた調味料入れに砂糖をいれて、砂糖と書いたものに塩をいれておきながら「自分はわかっているからできる料理には問題ない」と言ってはばからないようなケースさえあります。他の人がその調味料入れを使ったら大惨事ですよね。自分だってそのことを忘れてしまうかもしれません。
読みやすいソースコードを書くべき理由
とにかく動くものを作らなければいけない、という切迫した状況にいるとソースコードの見やすさは軽視されがちです。しかしソースコードは修正が必要なときには何度も見直します。そのときにソースコードが見づらいと間違った箇所を見つけるのに時間がかかってしまいます。散らかった部屋で目当てのものを探すのは辛いことです。
上の例で言うと砂糖に原因があるのに塩を調査してしまうというような事態です。中身が違っていることをいつか忘れてしまうかもしれません。「自分だけが知っている」というのは「その時の自分だけが知っている」ということです。
何をするかを決めるのは人間です。機械はそれが正しかろうが間違っていようが忠実に従っているだけです。なのでまず人間が内容を理解する必要があります。その時に見やすいソースコードはかならず理解の助けになります。
処理を正しく動かすために、また問題を早く解決するためにソースコードを見やすく書く必要がある
と考えるほうが長い目で見ると得策です。
外国語としてJavaを捉える
どのような機能を作るのか理解して誤解のないように記述する。これだけで混乱はなくなると思います。そのために日頃「動けばいい」の精神で気にすることのなかった事柄にももう一度目を向けたいと思います。
自分の親が話す言葉を母語とするのであればJava言語は外国語になります。英語やフランス語を学ぶのと同じようなアプローチでプログラム言語を見るとまた理解が深まるのではないか、というのがこのブログの狙いです。