ヤクの毛刈りとピラミッド

2017-12-24



科学や技術というものは積み重ねの構造を持っている。つまり、基礎となる知識や概念の上に新たな知識や概念が綿々と積み上げられている。故にある高度な技術を理解しようとするとヤクの毛刈りのような状況が発生する。

ヤクの毛刈り
必要な作業Aをやるのに、また別の作業Bが必要だとわかり、作業Bのためには作業Cが必要で、作業Aと作業Cを同時にやるには作業Dが必要で…というように本質的な問題へ取り掛かるまでに多くの作業が発生すること

RubocopのようなLint(静的なコード解析ツール)を作ろうと思ってLintについて調べるとASTやパーサーなどインタプリタやコンパイラの知識が必要だとわかる。そして更に型システムや導出則といった概念を理解しなければならないと思う。それらを身につけるために入門書を読むが集合論や論理学の知識が皆無で読み切れず、集合論や記号論理学を勉強し始める…といった具合だ。

当然、実際にはこうしたことを避けることが出来る。例えば、Lintをちょっと作るだけならASTとパーサーの概要がわかっていれば特に問題ない。パーサーも他人が作ったものを流用できる。ASTの扱いも他人のLintを参考にすればそれを模倣するだけでいい。エンジニアは原則としてある地点で一定以上の抽象化された下層レイヤーについては目を瞑る。問題を解決する上では必須ではないからだ。

つまりは言語理論や計算機科学がわからなくてもコードを書いてアプリは作れる、必要になったら覚えればいい、という態度である。出来るだけ知らなくていいことを増やして行く事で生産は効率化されるのだ。それが抽象化であり分業化ってワケだ。「これはどうなってるの? どうしてこうなるの? なぜ? どうして?」とひたすら自分の疑問を掘り下げて行くのはエンジニア的ではなく、研究者的な態度だ。

これらは考え方の違いであり、正解も不正解もない。しかし言うまでもなく、研究で「動けば良い」はあり得ないし、エンジニアリングで「完璧に理解しようとして解決しなかった」もナシだ。 自分が今どちらをやっているのか意識しておく必要がある。学習や研究をしているのであれば、ヤクの毛刈りのように学ばなければならないことが増えて行ったとしても当然の成り行きであり心配することはない。自分が興味を持てる範囲まで心行くまで掘り下げ、横に広がり、上を上って行けばいい。すべてを学んでいては時間が足りないって? 少年易老學難成という言葉があるくらいで大昔から知られている事実だ。驚く事は無いだろう?


 このエントリーをはてなブックマークに追加


<< 同僚エンジニアなるもの   Webエンジニアのためのセキュリティ実践演習: Micro Hardening体験 >>

[43]