“某R社を5日でクビになった話”を読んで、エンジニアについて考えてみた。

Posted on Sunday, March 8th, 2015 16:23:34

下記を読みました。
某R社を5日でクビになった話 | Code.io

まとめると、「個人開発したプロダクトが見込まれてインターンに行ったけど、Git や SQL などが分からず、Google 先生を頼るも望ましい結果は得られず、結局たった5日でインターン終了させられちゃったよ」といった内容です。別にR社の悪口を言っているわけではなく、「洗礼ありがとう、やる気出てきたよ」みたいな内容です。

思うところは沢山ありますが、まぁ合わなかったんだろうな、といった印象です。個人開発したプロダクトが見込まれたのは凄いと思うし、BOSSとやらの自分で調べる習慣を身に付けさせる方針も、5日で切り捨てた判断も、間違ってはいないと思います。ただ、筆者の知識と、R社が求めていた知識に差があっただけです。バズっているところをみると、結構よくある話なのだと思います。僕も危ないです。

しかし、このエントリーの下記の部分には疑問を感じます。(ここからが本題)

③エンジニアリングはもっと深い
今は、ツールが簡単になり、機械語とか、カーネルとか、シェルとかを学ばなくても、サイトが作れたり、アプリが作れたりしているけど、それは工作であって、エンジニアリングではないと思います。

(中略)

ぼくみたいに文系で、プログラミング歴が1年ちょっとの人間で、最近流行りのプログラミングスクールでプログラミングを学んだからと言って、エンジニアになれているわけでないということを声を大にして言いたいです。

浅くてもいいじゃない、エンジニアだもの

“エンジニアリング” といった単語に格好いい意味を求めすぎている気がします。「”エンジニアリング” = “工作”」という認識の人がいても良いと思います。「”エンジニアリング” を直訳すると “工学” だ。多くの開発は学問に達してすらいない!」とか訳の分からない認識の人がいても良いと思います。

ただし、「声を大にして言う」のはやめてほしい。機械語やカーネルやシェルが分からない人に対して、「お前はエンジニアじゃない!」と言うのもアレでしょう?多くのエンジニアが、機械語やカーネルやシェルを勉強しなくてもアプリケーション開発できるのは、先人の知恵によるものです。その先人たちは、これからのエンジニアが機械語やカーネルやシェルを勉強しなくてもエンジニアリングできるように、エンジニアリングしてくれたわけです。

早くも”エンジニアリング”でゲシュタルト崩壊を起こしそうですが、もう少し続けます。”富豪的プログラミング”なんて皮肉もありますが、メモリやストレージも気にせず、下層に位置するレイヤーの技術を知らず、開発できることは素晴らしいことです。「そういうのを知っているプログラマーが減っててヤバい」というのは事実ですが、知らないエンジニアがいる分には問題ありません。その分、新しい技術を習得できるのですから。

あ、とりあえずこれ挟んでおきますね。

低レイヤーを知っていれば偉いってわけじゃないよ

老害なんて呼ばれる方々が「若いもんは泥臭い技術を知らんからダメだ」なんて言っていたら、「はいはい、言ってろ言ってろ、技術は進化してんだよ」と聞き流しますが、彼は恐らく私(24)よりも若いと思います。そんな方が「機械語とか、カーネルとか、シェルとかを学ばなくても、サイトが作れたり、アプリが作れたりしているけど、それは工作であって、エンジニアリングではないと思います。」なんて言っていると、それはマズいんじゃないかと。

私は、Linux のカーネルを改修したり、デバイスドライバーを開発したり、組み込み系メインでかなり泥臭いことをやってきました。しかし、軽量なスクリプト言語はあまり知りません。特に進化の早いWeb周りなどに詳しくないことに関しては、かなりのコンプレックスを持っています。だから「Ruby on Rails できる奴すげー」って思ってます。多分、PHPしかできない人が「カーネルハックすげー」と感じるのと、同じだと思います。

エンジニアには、業務範囲があるのです。デバドラ作っている人もエンジニアだし、パズドラ作っている人もエンジニアです。PHP で200行ぐらい書いてWebアプリ作ってる人だってエンジニアでいいじゃない。何であのエントリーがあんなにバズったかは分からないけど、多分皆そう思っていると思います。PHP しかできない人が、「俺はハッカーだ!」って言ったら結構な人がピクッとすると思いますが、「俺はエンジニアだ!」って言っても多分誰も怒りませんよ。

必ずしも必要な知識ではありません。Objective-C で iOS アプリ開発してる奴が、「俺、Linux のカーネルコード読めるようになるわ!」なんて言っていたら「先に Swift でもやってろよ」と言います。新しい技術が次々に誕生する今、低レイヤーより習得優先度の高い技術はあるんじゃないかと思います。つまり、「今お前に求められている技術を学べよ」ってことです。

知っておいた方が良い程度

ちなみに、「低レイヤーなんて俺たちみたいなのに任せときゃいいんだよ!」なんて言っているのではありません。私は Web へ進出予定で、今履歴書書き終わったところです。機械語、カーネル、シェルなどは、エンジニアとして必須の知識なのではなく、「知っておくと良い」レベルだということです。

先ほどのツイートの伊藤直也さん(はてブ作った人)は、何かのプレゼンで下層レイヤーの重要さを下記のように語っていました(うろ覚え)

下層レイヤーを知らないと対症療法しかできない場合がある。
例えばセグフォ(segmentation fault)でサーバーが落ちたとき、落ちたら再起動するスクリプトを Perl で書いて解決させたりしてしまう。
そうではなくて、セグフォの原因を追いかけて突き止めてこそのハックだ!

C や C++ は役に立つでしょう。いろんな言語が C で書かれているし、速度の出ない処理を C に置き換えたら爆速になったりもするし、ライブラリの挙動が分からないときに追いかけたりできるようになるでしょう。メモリの概念が分かるようになれば、お得意の言語の作法も変わってくるかもしれませんから、プログラマーとしてグッと成長できると思います。

あとは、カーネルなんて読めても、カーネル弄れるようになるだけです。組み込みなどでカスタマイズしたカーネルだと、上記のようにセグフォの原因がカーネルにあったりもしますが、普通は考えるところではありません。上位の層から順に疑っていきます。機械語なんて、多分一生役に立たないと思います。今あなたに特別必要とされていないんだったらね。僕も昔、Cで書いた “hello, world”を逆アセンブラしたりしたけど、なんの役にも立っていません。Unix しないならシェルも不要でしょう。今は GUI があるんだから。バージョン管理システムに Git 使うなら、それだけ覚えれば良いです。

まとめ

何が言いたいか分からなくなってきましたが、とりあえず何か作ってるならエンジニアリングでいいじゃんってことです。それから、時間は有限なので、自分に今一番必要な技術から習得した方が良いと思います。技術の置き換わりが早い業界なのだから、コーヒーを飲みながらカーネルコードを嗜むような時間はないかもしれません。自分の市場価値を見直して、重要なことだけやればいいんですよ(どうでもよくなった)

あのエントリーを書いた方は、今回の件にめげずに頑張ってほしいです。絶対、これを読む機会はないだろうけど、陰ながら応援しています。ではでは。

Share

  • このエントリーをはてなブックマークに追加
  • Pocket
  • 0 follow us in feedly

Your Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です