ソフトウェア技術者がどっかの段階で覚えなきゃいけないこと
少し前の話題にいまさらつっこむ。
マシン語を知らないとプログラムが書けないとかいっている人の話はやっぱ違うと思う。多分、下層を知ればいいというもんじゃない。もちろんマシン語の知識が必要な分野もあると思うけど、ソフトウェアエンジニア全員の必修科目だとは思わない。
個人的に思うソフトウェアの本質は、
- 万能チューリングマシンが他のチューリングマシンをエミューレートできるとか
- SICPというかLispのeval/apply(陰陽)ループとか
- Smalltalkのメタクラスまわりとか
- 言語の実行環境をその言語で書くとか(SqueakとかPyPy)
- UMLをUMLで定義するメタ階層とか*1
ソフトウェアにはメタな構造があって、さらに根源のところでは自己記述っぽい形でぐるぐる回ってるというイメージを持つ事じゃないかなーと思う。これはソフトウェアの本質そのものなので、知っておいて損は無いはず。
こういう知識は一見机上の空論っぽいけど、普通にアプリ作るときでも絶対役に立つ。設定ファイルのフォーマット一つ考えるだけでも、この手の知識が有ると無いとでは大違い。DSLなんてド直球にそれですね。
ホントは、いまだによく理解できてないんだけど。