人から教えてもらうことと知識で解決することの違い

時々、「ここでハマりました」「ああ、それは○○と言う理由で、こうすれば解決出来るよ」「手順書に書いてなかったのでわかりませんでした。」
なんて言う会話をすることがあるんだが、その○○と言う理由が、業務によるものではなく、どちらかと言えば環境周りであったり、インフラ周りの事情であったりする。

例えば、

pip install sphinx

を実行しようとしたら、timeoutが発生しました。
色々調べてみたら、--proxyオプションを指定しないといけませんでした。
予め誰かが教えてくれてたら、あるいはマニュアルに書かれてたら、時間を無駄にせずに済みました。

と、教えてくれなかったことを非難してくる人がいる。

しかし、翻って考えてみよう。
もし自分たちのマニュアルにきっちりと--PROXYオプションを指定することと書いていたとする。あるいは、何らかの情報共有ツールの中に、きっちりと--PROXYオプションの指定が触れられていたとする。
社内で実施する限り、それはうまくいく。担当者は何の疑問も覚えず、何事もなくsphinxをインストール出来ることだろう。

さて、その担当者が出張でホテルへ宿泊した。ラップトップが新しくなったので、ホテルでインストールしてみるか、と思い立つ。マニュアルに従い、インストールしようとすると、--proxyを指定しているにも関わらず、timeoutが発生することに気付くだろう。
当然、そのproxyは社内でなければ繋がらない。
しばらく時間を費やしたあと、担当者は、「proxyを外すときがある場合のことを書いてませんでした」なんてことを言ってくるかも知れない。

ちょっと待てよ

それはマニュアルの親切さではなく、

  • 君の根本的な知識不足
  • 君がマニュアル脳

である事が理由だ。
マニュアルは、読む側に一定の知識を要求する。
応用するには知識が必要だ。
自分の知識不足を棚に上げ、マニュアルの不備を指摘するのは、教科書に書いてない問題は全て悪問だと言わんばかりの言い草だ。

エンジニアは、こうしたことが頻繁に発生する。
つまり、ネットで何か調べて実行しようとしたら、うまく動かない。
それは調べた結果が不親切であるためでも、必要な事項が書いてなかったためでもなく、読む側の知識が足りなかっただけに過ぎない。

全てを教えてもらったとしても、全てを理解出来るとは限らないのだ。
教える側に知識があり、それを与えてもらう機会がどれだけ多かったとしても、その知識を自分の血肉にするためには、それを理解するための知識が必要なのだ。

体系立った教育がなく、OJTをして新人を教育しようとすることは、新人自身がたゆみなく学び続けないといけないことを意味するが、なぜそうなのかと言う説明が一切ない。
そこに悲劇が登場する。