マシン語?量子論?どこまで掘り下げるとプロ?

マシン語はプログラミングの深淵であり、母であり、基礎です。

http://d.hatena.ne.jp/shi3z/20070911

個人的にマシン語を愛するというのは構わないけど、

プログラムが書ける、という状態は「マシン語が書ける」という状態の延長線上にあるべきで、マシン語を理解していないということはマシンを理解していない、つまりプログラムを理解していないのとほぼ同じだと思います。

http://d.hatena.ne.jp/shi3z/20070911/1189493767

これでは、愛は盲目と引いた目で見てしまう。


元記事のコメントにもあったけど、マシン語必須なら量子力学は?なんて話もあって、結局程度問題、という曖昧な話になりがち。


だから具体的に『仕事に役立つ知識・スキルは須く知る/体得する「べき」』として、「マシン語が書ける」は体得するべきかどうか、をはっきりさせよう。

心構えとか精神論はひとまず置いて、仕事の役に立つかどうか。具体的には、レイヤー化の階層を越えて、プログラミングに影響を与えるかどうか。


たとえば、

  • 物理メモリが有限というハード面の事実は、メモリを無駄遣いはダメ、という形でプログラミングに影響を与える。
  • ディスクはメモリより遅いというハード面の事実は、無用なディスクアクセスはダメ、という形でプログラミングに影響を与える。
  • 関数呼び出しはスタックを消費するというハード(?)面の事実は、再帰関数の使いどころ*1という形でプログラミングに影響を与える。
  • データはメモリからレジスタにロードして処理してメモリに書き出すというハード面の事実は、レジスタビット長を超えた変数は(ハードでアトミック操作が保証されてないと)マルチスレッドアクセスでは排他しないとダメ、という形でプログラミングに影響を与える。

など。


これらは、必要なハード面の知識ではあるが、マシン語のスキルとは関係ない。そう考えると、「マシン語が書ける」スキルが役に立つ場面が浮かばない*2。というわけで、考えつく限りでは「マシン語が書ける」スキルはプロに必要なスキルではない。


下を意識しなくて良いようにレイヤーというモノがあるわけで、その上で仕事する分には、レイヤーのほころびからの漏れを理解・対処するだけの、下位レイヤー知識があればいい*3。あとはその頻度やインパクトで、他の事とのプライオリティをどう付けるかという話。良い結果を生むために学ぶものは他にも幾らでもある。


(追記)core見る時…。やっぱり『べき』でいうと「必要」かも(汗)

*1:末尾再帰の最適化がされない場合

*2:もちろんコンパイラ屋さんとか組み込みでカリカリチューンが必要な人は別。反則なバイナリハックをするのも別

*3:その漏れから芋蔓になる事はあるけど…