今日も頭がイタい…

うん…、どう転んでも人生ハードモードみたいです……

少女マンガにモビルスーツを出してはいけない理由

出落ちなタイトルですが、エンジニアの方がコミュ障と呼ばれる所以を書こうと思います。

昔から、人に質問しても腑に落ちないことが多くあり、最近ようやく文章や言葉にできるようになったので、書きます。

エンジニアの方がコミュ障と言われる理由を個人的に分析してみました。

結論から言うと、やっていることの世界観を教えてくれないからだと思うんですよ。

急に世界観と言われても…

大抵、質問する場合は、質問している方に別の潜在的な質問が隠れていると思います。

というか、僕はそうでした。

その潜在的な質問は言葉にできるほど知識がなくて言葉にできないから、端的な目先の質問になってしまうんですよね。

その潜在的な質問が『世界観』という言葉がしっくりくるのではないかと最近、思いました。

たとえば、

僕は幼少のころスターウォーズを見て、話が理解できなかったことがありました。

なぜなら、当時スターウォーズのようなSFものを見たことがなく話の世界観が全く分からなかったからです。

例えば、話の初めで人間以外の知的生命体が出てきてもこいつらが何者なのかもわからないし、いきなりフォースなんてよくわからないもの能力が出てき て、更にライトセーバーなんてよくわからない武器が出てくるのです。

で、何をやっているのか誰が敵なのかわからないまま話が進んでちんぷんかんぷんのまま終わる。 そして、「つまんない!」と幼くして思うのです。

で、わからないので友人に質問します。

スターウォーズってよくわからないんだけど?、敵ってだれなの?、ライトセーバーってなに?、フォースってなに?」 すると帰ってくる答えは、 「エピソード1から見たら?」 という回答が、返ってくるのです…

僕が求めている答えは、「ダースベーダーがどう誕生したのか?」、「銀河共和国の昔話」ではなく。

よくわからないから、雰囲気教えてという事なのです。

なので解答としては、

  • 「フォース」→「ハンターハンターの念みたいなもの、ワンピースで例えるの覇気みないなもの(当時のワンピースに覇気なんて概念なかったですが…)」

  • ライトセーバー」→「光るレーザーで出来た剣でどうやってレーザーをとどめているかは知らん」

  • 「敵」→「銀河帝国

とかでいいんですよ。

プログラムの話をすると

C言語を勉強していて、後半ポインターの概念が急に出てきてちんぷんかんぷんになってしまう人がたくさんいます。

というか、僕はちんぷんかんぷんでした。

そして、C++,Javaなでどオブジェクト指向の考え方がいきなり入ってきて、オブジェクト型って何よ?

とさらに思い、そのままずるずる、理解していないまま引きずり、開発をする。

世の中にはそんなエンジニアのひとがごまんといる気がします。

それもそうです。

だって、今まで根底にないものを急に出されても人間わからないです。

みんなわからない人に決まって言います。

使っていればわかるよ。そんなの使い方さえ覚えればいい。

ただそれでは、世界観がわかりません。

C言語というかプログラミング言語は、プログラムを動かすという行為をやる上で、アルゴリズム(計算をする)領域は、自分で確保しないといけません。

でも、大抵の書籍は、プリミティブ型というメモリを確保しているものの上でアルゴリズムをメインに勉強します。

そして、考えの中に「メモリを自分で確保する!」という発想がないまま進むのです。

そして、ポインターが出てきたときに、実は今までは、メモリはプログラミムの仕様で特別にメモリを確保してくれただけで、これから急にメモリ確保しね、と言われても根底にメモリを確保するなんて考えが全くなく、話が進み根底の概念が揺らぐので訳が分からなくなるんです。

で、訳が分からなくなり、根底の設定が揺らぐので、可笑しなことをやってしまうのです。

僕は、「オブジェクトがわかりません(使い方がわかりません?)」→「アセンブラからやれ」、「使っていればわかるよ」 ですまされました。

物語の雰囲気がわかっていないのに、続きを見てもわかりませんし、アセンブラからやるのは遠回りですし、求めている解答は深いものではなくもっと簡単なものなんです…(結局、気になってアセンブラを今勉強してますが…)

文面上の解答やもっと深い解答なんて大抵求めてないんですよ…

僕が嫌いな言葉で、「理屈をこね回していないで、まずやってみろ!」という言葉があります。 恐らくこの言葉は、本田宗一郎が頭のいい理論重視の方にまずやってみろよ、と言った言葉だと思いますが、

最近は、「やりたくても何をすればいいかわからないのに、とりあえずやれよ」という間違えた場面にしか使われないような気がします。

そして、あいつは頭でっかちだとか根性がないなどの回答に落ち着くのです。

例えば、僕が干された理由もそうだと思います。

この機能作って、と言われ、どんなクラスやメソッド作ればいいのかはわかります。

でも、言語の根底を文面でしか覚えていないので、このメソッドを組むのにフレームワークのどの関数を使えばいいのか?

使いたい関数はすでにあるのか?

そして、引数をオブジェクトにとってどうしたいのか?

がわからず、「どんなクラスやメソッド作ればいいか」だけ聞いて、そこまでできているなら組めるじゃん!

で、「なんで組まないんだ考えすぎだろ?」、「早く組めよ!」となるのです。

だから組みたくても、リファレンスも例もなくて、IDE使えない状態じゃな参考にするものほとんどないんだって…

そして、プログラムを少し齧った人に相談するとこんな答えが返ってきます。

  • プログラムなんて、所詮inとoutを意識すれば、簡単だろ?
  • そんなもん、似たようなフレームワークとか探して参照すればいいじゃないか?

そんなこと昔からやっているし、意識しているけど、訳が分からなくなるし、例外が多いから根底の僕の考えが間違えてのか? と疑問が膨らみさらにドツボにハマるんです。

長文になってしまいましたが、今回の結論は、エンジニアがコミュ障言われるのは、知らず知らずのうちに身についた共通の認識を、当たり前と思って人に話すから人と意見が食い違えて、会話できなくなるからではないかと思ったということです。

その世界観がわからないと、少女マンガで憎っくき敵が出てきたら、世界観を無視して、モビルスーツで倒せばいいじゃない!というトンチンカンな答えを出してしまう気がしました。

以上。