プログラミングの本質とは

 プログラミングの本質は、条件分岐と繰り返し(と連接)だけでチューリング完全が実現できることであると考えている。つまり、いわゆる構造化定理である。
 プログラミングの勉強を始めた頃は、一体どこまで勉強すれば自分はプログラミングが出来るといえるのか、まったくわからなかった。構造化定理を知ったとき、ああ、これだけ知っていれば全てのプログラムが書けるのか、と感動したし、振り返ってみても、あの瞬間はプログラマとして一つの到達点であったと思う。もちろん、そこから先の道のりは、まだまだ長かった訳だけれども。
 構造化定理の良い点は、チューリングマシンというなんだか抽象的かつ重要そうなものと、自分がいつも書いているプログラムの間をシンプルに結びつけてくれる点であると思う。実際にプログラミングをする際の道具立てとしては便利なものが色々とある(高階関数だとかクロージャだとかね)訳だけれど、精神を支えているという点で構造化定理よりも大きな柱は自分にはない。
 構造化定理の次にプログラミングがわかってきたと感じられるようになってきたのは、コンピュータの動作原理が何となく分かってきて、C言語のコードがどういう風に機械語になるのかある程度推測がつくようになった頃だったと思う。構造体のメンバ参照というのはポインタのオフセットで行われているんだな、とか、関数の呼び出し情報はスタックに記録すればいいのか、とか、コンパイラの教科書にわかりやすく書いてあるようなことを自分で発見していた。そういう無駄な遠回りをしてきた経験から、全てのプログラマは一度簡単なコンパイラを書いてみるべきだと信じている。でもまだ、自分はコンパイラを書いたことはない。お恥ずかしい。
 本質うんぬんからあっという間に脱線してしまったが、全てのプログラマは一度はコンパイラを書け、ということです。自分もいつかそのうち、書いてみたい。暇になったら…。