巨人の骨格、あるいは車輪の構造の話
画像はやっぱり何も関係ない昔沖縄のゲストハウスに置いてたかの有名な作品の1話が掲載されてたジャンプ。何嫌何好自分語、今の時代でより響く言葉だなという感じがする。
今日はこういう話。
たとえば、見ていた動画では「まず言語の実行環境としてpaizaを使います、ここでprint('Hello world')的なものを書くと下の結果のところに、ほらHelloWorldと出てきましたね」みたいな説明がある。これをなるほど、と飲み込み、ここで文法という一定のルールの上で自分が表現したい処理を書いていくのがプログラミングというやつなんだな、と理解し学習を進めていくとまあなんか一通りの処理がひとまず書けるようになっていく。これがいわゆるプログラミングの学習と言われていると思う。
ただ、冷静になるとそもそもプログラムの実行ということはどういうことが起こっているのか(処理系、PATH、デーモンプロセス)、その文法ってやつはどこで制定されて、正誤が判断されているのか(パーサー、コンパイラ)、printと書くとなぜ文字が出てくるのか(システムコール、標準出力、ファイルディスクリプタ、OSのAPI、デバイスとの通信)といういろんなことをまあなんか知らんがそうなっているらしい、と一旦無視した上で理解を進めている。それは当然で、例えるなら車の教習所で習うのはただアクセルを踏めば進み、ブレーキを踏めば止まるということであり、車の機構についての説明が全くされない(必要ないので)ことと似ている。
要するにそんなことを学んでたら、関心があるレイヤー、この場合は対称のプログラミング言語で何らかの処理を表現する、ということだが、そこに行き着くまでに日が暮れてしまうし、またそういう諸々のことがわかってなくても(自分もわかってない)そのレイヤーの事を考えるのには「基本」支障がないからである。
この基本というのがミソで、実際にはこういう裏側の処理はわかっていたほうがよくはある。それはなぜかと言うと、現代のプログラミング環境というのがそれらの事情を(少なくとも車のエンジンの仕組みよりは)完全に隠蔽していないからだと言える。
わかりやすい例だと(C言語等に出てくるような)メモリ管理の話がある。シビアな実行環境、速度が求められる一部の環境を除いて、現代の開発ではGCを用いた言語で開発されるのが大半となっており、メモリ管理の話はほぼ出てこない。今日はちょうど型付けの是非論がTLで巻き起こっていたが、GCの是非論とかはあんまり聞いたことないので、基本的に昔は「わかっていないといけなかった」メモリ周りの話は、いまは「わかっていたほうがいい」話にまでには隠蔽されたが、逆にいうとまだ完全には隠蔽されきれてないということでもある。
結局「そんなことをいちいち掘り下げていたらきりがない」と「わかっていたほうがいい」はバランスであり、その塩梅こそがプログラミング始めてたの人には特に難しいところであると思う。自分も完全に理解していないレイヤーの上で何かを行うことに結構虚しさを感じてしまいがちなのだけど、だからといって無限に掘り下げる体力があるわけでもないので、結論気持ちをごまかしながらやるみたいになってるところが余計に悲しい。コンピューターアーキテクチャの講義は取っていたのだけど、もうちょっとデバイスドライバ周りの話は触れてみて、どこかで納得感を得たいなとは思っている。
この記事が気に入ったらサポートをしてみませんか?