プログラムを書くということ
自分にとって、プログラムを書くということは、コンパイラに対して意味を与える作業だと考えるようになりました。
意味というのは型だったりconstだったり。あとプログラムの流れというか文脈とかもあります。
型は具体的であればあるほど、コンパイラが意味の間違いを見つけやすくなるので、出来る限り具体的に書いた方がいいと思います。
で、コンパイラは与えられた意味に矛盾があれば教えてくれますが、意味を作り出すことはできません。なので、意味を与えるという部分でコンパイラに頼ることはできません。
昨日のローカル変数に対するconstと同じような話になりますが、「全部constにしてしまえ」というのは、自分が何を作ろうとしているのか正しく把握していないのかなという気がします。厳しく言えばコンパイラへ正しく意味を伝えようとすることを放棄しているんじゃないかと。防衛的プログラミングとかそういうのに近い気がしますね。自分はあれが嫌いなので。
自分はよく型とかを勘違いしたままプログラムを進めていって、そのせいでコンパイラに怒られるのですが、そのたびに「自分は正しくプログラムを書けていない」と反省します。コンパイル時に何とかなったとかコンパイラに教えてもらえたからいいとかそういう問題ではなく、自分が構築しようとしている世界が自分で正しく見えていないということが問題なのです。コンパイラに意味を与えられるのは自分だけなのですから、自分が作ろうとしている世界が意味によって正しく構築されている必要があるのです。
とはいうものの、実際にはずっと意味的なことばっかり考えていられるわけもなく、物理的なことばっかり考えてしまいます。
でもまあ、いつかはこんな感じに意味のみで構築した上でプログラムを書きたいところです。出てくるプログラムは大して代わりは無さそうな気もしますけど。