見出し画像

IT業界の業界マップ

SI業界やWebサービスばかりが取り上げられますが、ソフトウェアエンジニアが活躍できる場はたくさんあります。今回は色々な業界を歩いた経験とコンピュータサイエンスの修士までで学んだ知識から簡単に色んな業界を紹介したいと思います。

ご報告ですが、サポートを受けてしまいました。すごく嬉しく励みになり、記事書かなきゃなという気持ちになりました。ありがとうございます!

正直、コメント拒否のための課金500円位は月にサポート頂けると励みになるというか、マイナスをあまりに計上するようなら辞めるかなぁ、という感じはあるのですが、とりあえず、noteさん推奨するコメント拒否機能を有料にするの辞めてもらえませんか?それで二の足踏む人もいるでしょう。商材屋割合も高まるでしょう。コメントは励みにもなると思いますが、正直、性善説が通用しない世界では毒が強過ぎます。世の中、やばいノイジーマイノリティが思ってるより多いものです。

自分は価値と乖離した高額な料金設定で買うまで中身のわからない、いわゆる"商材ガチャ"は99%ハズレと思っているので、読んでくれた方が価値を感じたから払いたい、もしくはもっと読みたい、と思ってくれた時に払って頂ければいいと思っています。しかし超高額でほとんどハズレってなぁ…。再現性高くて口コミでもバズるなら低額で大量に売った方が利益的にもブランディングにもいいわけなので、推して知るべしというやつですね。

で、今後ですが、続けていけそうなら技術的な話、初学者向け、中級者(経験はあるが基礎が十分でない人)向けに書こうかとも思います。最初はデータ構造とかアルゴリズムからですね。

今回は技術的な面から見たソフトウェアエンジニアの業界についてです。メジャーなエリアは結構見ますが、専門領域を含め広く説明している記事とかあまり見ないと思います。どういった技術的な知識が必要か、参考になる書籍も紹介できればと思います。

また、次に考えている記事として、コンピュータサイエンス(以下CS)を学ぶ道を大学のPrerequisite(前提科目)からマップ化して説明しようかと。一般領域(学士レベル)と専門領域(修士以降)は別の記事になると思います。独学では自分が目指してる道につながる道が見えない人も多いと思います。というか、普通見えないと思います。この技術に興味あるならこれを学ぶと理解しやすいよ、という地図になれば、と。志のある人が迷わないように、また、そこから大学で学び直しという海外では当たり前の生涯学習への道に繋がることを願いたいと思います。

時に、昨今の業務委託の経験だけ(学術的バックグラウンドなし)で5年レベルのエンジニアが時間単価1万とか言う話が流れてきましたが、悪いことは言わない、1万で雇ってる会社は一刻も早く内製化した方が良い技術を見積もれないから間違った評価をしてるんでしょうが、日本人の特に10年未満の経験だけの(専門的な勉強をしていない)エンジニアの時間単価の妥当な価値は3500円程度です。自社で実務未経験でもいいからCS卒を雇って数年後には彼らより良い仕事をする可能性が高いでしょう。日本の会社経営には中長期的視点がなさ過ぎる。

ホント日本の企業はCSの専門知識のない(違いの作れない)エンジニアにお金を払い過ぎで、600万位まではすぐに行って、そこで頭打ちになる層と、CSの専門知識のある違いの作れるエンジニアが700〜800万台で足踏みして、特定の少数の企業だけ1000〜1300万という状況なので、700〜800万の層がどんどん外資に行って更に"できる"エンジニア不足になる、という。前者と後者は圧倒的な差があるのに100〜200万の差ですからね。お金のかけどころというか評価できる人が少なすぎて歪んでしまってる。

というか、軽く調べたら、この歪みは世界的に起きていて、アメリカでもIT人材不足が深刻みたいですね。で、Coding Bootcamp卒業5年後の給料とCS卒のmid careerはそこまで変わらない($12kと$13.5kはそこそこ違うか)けど、棲み分けは起きてるようで、Coding Bootcamp上がりはWeb技術周り、CS卒はより専門的な分野を担当してることが多いようです。と言っても、基本ジョブ型だとCoding Bootcamp上がりはそこが頭打ちでCS卒は更に上がってくと思いますが。
ちなみに、USのCoding Bootcampでは平均$14,142かけて、アルゴリズムやデータ構造学んだ上でプロジェクトベースで経験積むみたい。

というか、世界的にIT人材不足なら、CS卒で英語のできる日本人は海外出たほうが良い気がする。海外の会社にフルリモートで勤務して物価の安い日本で生活が最強か。GAFAMじゃなくても全然給料良いし。正直日本のCS卒ならアメリカのCoding Bootcamp上がりよりはできると思います。IPO後の選択肢にしよう。と言っても、専攻が自然科学系だとCoding Bootcamp上がりでもフィールド限定したらCS卒と同等かそれ以上かも知れない。

ところで、↓見て驚愕したのですが。ITエンジニアで、最初の配属先の例が「誤字脱字チェック」「マニュアルに沿った問い合わせ対応」「通信会社の電話対応」とか、それは事務職じゃないの?大丈夫?Twitterで見たITエンジニアで求人打ってコールセンター勤務の噂は本当だったのね…。

いきなりレベルの高い案件を任せる、なんて乱暴なことは一切なし。未経験でも安心の理由です!

ひいい

業界分類

まず最初に業界を分類したいと思います。
インフルエンサーの影響でWeb系くらいしかわからない人にも色んな世界があるのを知ってもらいたい。研究開発で大学に勤務、というのもありますが、今回は省きます。それ以外の研究者はどこかに紐づくと思います。

  • SI業界

  • Web業界

  • 自社製品開発

  • ゲーム業界

  • 通信業界

  • 映像・音声業界

  • セキュリティ(情報理論)業界

  • 機械学習・AI業界

  • ロボット・自動車業界

SI業界

SIerとSESで構成されるあのSystem Integration業界です。
この業界ではCSの知識や自然科学の理解ができる人は能力を持て余します。技術力に対して給与が良い業界ですが、技術力が低め=簡単なことでバグって炎上するということなので、ホワイトで自分が楽しめる業界を選ぶことをお薦めします。未経験からエンジニアを目指したい人は1社目はここが多いでしょうが、前述のように謎の事務職に就かされるところもあるみたいなので会社選びは慎重に。

この領域は人文科学、社会科学、自然科学で例えるなら人文科学に近い領域で、人との間で生み出されるシステムを作り出すような世界です。人の思い付きや趣味嗜好、解釈によって左右されがちです。

技術力

昔はほぼJavaで、今はよく知りませんが、求人見るとRailsも普通にあるし、10年前からAndroid案件(DalvikJavaだったけど)とかもチラホラありました。下請けで入れるなら、もしくは協力会社として入れるなら幅広いスキルを扱います。Webシステム開発が多いので、流行りのWeb系エンジニアがWeb周り限定(CRUD中心)ならやることは大差ないです。むしろ、フレームワークが全部やってくれないような構成も結構あると思うので下手にモダン過ぎるところより学べるかも知れません。炎上の仕組みとか未経験が多い現場のヤバさも含めて。学習や成長の観点では1社目Railsとか最悪だと思うけどなぁ。裏側何も見えないのでは…。

今はわからないけど、コードを書かない人間が高く評価され、プログラマ/SEのLv20で強制マネージャーLv1(開発と管理は全く別スキル)に転職されるようなシステムが当たり前だった業界。大手ほど技術力が怪しく、設計書という名の作文が投げつけられて中抜きされる業界です。

SIer vs フリーランス

SIer/SESとフリーランスは叩き合ってる気がしますが、自分がフリーランスで働いていた時、同じ現場にSIerもフリーランスもいました。スマホゲームでクライアント(Android/iOS向けゲームエンジン)とサーバー(主にAPI: Java)で、SIerはサーバー中心でフリーランスはクライアント中心という違いはありましたが(自分は両方やってました)、平均的にはSIerの方がレベル高かったです。というか、SIerから来たエンジニアの能力は正規分布に近く、平均前後の能力(最頻値はやや中央より下)でたまにすごくできる非CS自然科学系専攻卒が混ざってる感じでした。経験積んだマネージャも来てたので、多少劣る人でも問題は起きない感じ。一番できたのはフリーランスでしたが、一番できないのもフリーランスで数人は数日で退場してました。なので、正直技術で言えば、どんぐりの背比べです。

ここは個別の処理は負荷が高くなく、ユーザーも頻繁にというより不定期にアクセスして、DBのインデックスで、場合によってはサーバーの増設で対応できるようなどちらかというとIOバウンドな負荷になると思います。

使われる技術

案件次第ですが、キラキラの人達が目指してるRails+AWSもありますし、ネット接続不可でJava(金融系?)もあるでしょう。スマホゲーム系だとC++使うこともあります。DBはOracleからNoSQL系、キャッシュサーバーとかもあるのでは?世の中に無いものを作るような挑戦的な案件はほぼないと思いますが、表面的な特にCRUDのWeb系技術の案件は網羅してると思われます。基本的にスクラッチから作ることより大きめのプロジェクトの機能追加とか改修で入ることが多いです。

案件ガチャ

案件ガチャと言う人もいるけど、限界なら営業担当に相談すれば別に配置替えが全くないわけでもない。案件ガチャになりたくないなら、この業界は意味不明に業務知識信仰があるので(普通に2か月~半年も業務につけば知識なんて自然につくのに技術より評価されたりする)、入りたい案件の知識付けて営業に業務知識アピールしたりすれば、当然付加価値付く人を優先して案件振るので、就きたい案件につきやすくはなるでしょう。まともな会社なら。その方面の資格取ったりもありだとは思います。ちなみに案件ガチャを語ってるインフルエンサーがSES経験ほぼなかったりするので注意。経験した人間としては言われてるほど悪くないし、フリーランスも仕事で言えば大差ない。

個人的には、未経験エンジニアの現実的な受け入れ先はここしかないと思う。自社開発じゃないと無理とか言ってる未経験はきっとブラック自社開発に入りそう。自社開発、ベンチャーならともかく資金調達と経費の競争なスタートアップで未経験入れるのは狂気の沙汰と思いますが。SI業界は人売り業界なので、現場に出れれば会社としては給料以上の売り上げが立つため、待機にならなければ赤字人材にはなりません自社開発に入った未経験エンジニアは1〜2年は赤字人材(働きが給料よりマイナス)でしょう。それで1~2年で辞めるとか世も末だよね。

つまり、資金的には教育に回す余裕があるので、現場の最低限の仕事ができるよう未経験でも受け入れて研修をした後に現場に出すところが多いです。自然科学系の専攻じゃない人が未経験からエンジニアになりたいなら、ここで3年位経験を積んで最低限の技術力を身に付けましょう。3年もすればその会社で新しいことは少なくなるのでは。勘が良ければ2年、悪ければ5年位ですかね。開発向いてなくてインフラに流れた人もいました。かつてインフラに行く人はそういう人が多かった印象。

会社選びの注意点

会社次第でブラックかホワイトか変わるので、しっかり会社選びをして、給与も満足できるレベルに昇給できる会社を選びましょう。前述エンジニアじゃない仕事を振って安心、とか言っちゃう会社もあるので、そういうところに入るとキャリアを年単位で無駄にします。

自分はというとアホ程資格取って2年目から600万位もらってました。資格取得に先行投資(受験料のみ、参考書は会社の経費)はしたけど、昇給額の1~2か月で回収できました。正直もらい過ぎ。できる人が少ない(必要ない)時代だったので、未経験というか非CS出身者中だったのもありあんな仕事でももらえましたが、経験ベースの技術は5年とか働けばたいていの人が身に付くので、400万位が妥当でしょう。昔から発注側が技術わからな過ぎてインフレが起きてる業界

お客さん次第ですが、基本クライアントの代わりにBtoCのサービスを開発することが多く、BtoCは基本的に夜間リリースです。一応上流から下流まで経験できる、とはいえ、この業界の上流の仕事って、自社開発でどこまで活きるのか微妙。コンサルという胡散臭い仕事には活きるかも?

ただ、海外と同じレベルで内製化に向かったら現場待機が増え、徐々に人が減っていく未来もありそうです。いい加減日本内製化進めなよ、と思う。

Web業界

幅広過ぎてまとめるのが難しいですね。
個人的な感覚では、Webを扱う企業でもソフトウェアエンジニアを名乗ってるのは健全な会社が多い印象。WebエンジニアとかWeb開発エンジニアと名付ける会社見ると、え、Web周りしかやらんの?と思う。前者はGoogleであったりメルカリであったりだと思う。後者は色々あるけど名前は伏せておきます。普通にエンジンを持たずにCRUD中心なんだろうな、という印象。だって、エンジン触ってるとWeb感あまりないですから。管理画面でRailsいじるとかくらいで。

〇〇エンジニアというと、できることに制限のあるエンジニア感が。ソフトウェアエンジニアで良いと思うんですが。大学でしっかり基礎を学ぶとフィールドが変わる学習コストはあまり大きくないです。応用は基礎の上に来るし、幅広い基礎を持ってれば、例えば2000mの山を登るのに0からより1000mから登れる方が早い。しかも、俯瞰で道も最適化できる。なので、幅を限定しないソフトウェアエンジニアというポジションでの募集は学位を要求することが多いかも。

ちなみにWordPress使ったWeb制作とかはエンジニアでなくWebデザインの世界なので、デザイナー業界の仕事という事で今回は取り上げません。その仕事はソフトウェアエンジニアの仕事ではない

また、企業向けのエンタープライズなブラウザベースのソフトウェアも除外して、そちらは自社製品に回します。

なろう系インフルエンサーがWeb系エンジニアが最強と言っていますが、前述のアメリカのCoding Bootcampのページにもありますが、独学系や人文科学系エンジニアはこの辺に集中していて、この辺が技術的・数学的理解の限界になっていそうです。CS卒や自然科学的要素が必要な業界の知識に対応できる人だと、能力的に持て余しかねないのでもったいない業界になります。より深い技術に対応できるなら、興味にあった深い知識が求められる業界をお薦めします。Webでは難しい実装は少ないので、技術力より"ライブラリを知っていること"や"フレームワークの使い方に詳しいこと"が求められるケースが多いです。

この業界は科学の分類で言うと社会科学のようなもので、Scienceですが、自然科学のような厳密性が求められない領域と言えそうです。技術的にも社会(環境)が変われば、それに応じて変化するようなもので、自然科学系の領域と違い(本質主義に対する構成主義的な)移ろいやすさがあるように思います。

技術力

RailsやDjango、PhoenixなどWebフレームワークを使ったバックエンドと呼ばれるあれとVue.jsとかCSSなどフロントエンドと呼ばれるあれが使われますが、できれば、それとプラスでコアとなるエンジン的な技術部分があるところだと技術の幅が一気に広がります。というか深くなります。それは機械学習であったり、検索であったり、ブロックチェーンであったり様々だとは思いますが、CRUDメインだとSESとあまり変わらない印象。自前でエンジン作らずにライブラリを簡単にカスタマイズするとかが日本の企業には多い印象。その辺は簡単にパクられて競争優位性はないですね。しかし、誰かがやらなきゃいけない(=から自動化・自動生成が進んでる)。

技術で上を目指さない収入が目的職業エンジニアは、この業界は難易度低めで似たようなこと中心なのでCRUDとその周りの細々したこと専属になると良いかもです。その辺は技術力より情報収集力が求められる分野です。ある種、難しい技術より、簡単に使える技術を色々触りたいなら次々新しいものが出るので浅くても広く楽しめるというのはあるのかも知れない。あと、直感的(画面で見える)のでわかりやすさはあります。挑戦より安定を好む人はこの業界はもってこいかも知れません。

エンジン周りをC++やPython, Rustとかでいじるなら次の自社製品業界とほとんど同じで、技術力高めです。競争優位性を作り出すような「他にない」もしくは「他より良い」結果を出せる技術が求められるため、場合によっては論文(基本英語)を読んだり、色んなOSSのコードリーディングしたりも頻繁にすることになると思います。場合によってはFWハックしたり。

負荷としてはガワに関しては個別はさほど高くないものの量が多く、インデックスに加え、サーバー分散、キャッシュなども必要ですが、I/Oバウンドな負荷が中心でしょう。エンジンは個別で重い処理が多く、マルチスレッドなどCPUやGPUレベルでの分散が必要なCPUバウンドの負荷となります。

エンジンも物によってですが、これ以降の細分類以下は更にアルゴリズムや特殊なデータ構造を使うなどの高速化も必要になってきます。

細分類

下記ページをちょっと参考にさせてもらいました。少しドリルダウンします。

  • Webサービス開発

  • インターネット広告

  • SNS

  • ポータル・検索

  • EC

  • フィンテック

Webサービス開発は上記の説明でだいたい大丈夫なので、それ以外のWeb周辺業界の技術的要素を解説していきます。この細分類以降は社会科学的な領域と自然科学的な領域が混ざり、次項以降は自然科学的な専門分野(世界をコンピュータ上に投影して実装するような領域)が中心になります。

インターネット広告

一時期流行ったアドテク業界ですね。DSP(Demand-Side Platform)とかSSP(Supply-Side Platform)とかあるみたい。RTB(Real-Time Bidding)とかちょっと特殊な手法を色々使う感じです。インターネット上での広告配信なのでクラウドを使うことが多いようですね。

SNS

TwitterやFacebook、インスタなどに代表されるSNS。日本のサービスはMIXI, モバゲー、GREE辺りが強かったんですが、もはやスマホゲームプラットフォーム化からゲーム開発になってる感。LINEはWebに入れづらいか。大量アクセスとデータを扱うならビッグデータが当たり前の世界でかつてのC10K問題とか、そういう新しい問題が立ちふさがる領域です。マルチスレッドや分散サーバー、キャッシュなど、高負荷に耐えうるシステム構築の知識と技術が要ります。

かつて、みんな大好き業務経験が全く無い大学生が作ったプログラミング学習に大金払った人がも結構いたようですが、彼の作ったシステムのサーバーがローンチすぐにいきなり落ちてましたが、その辺になるとそのレベルでなく別物ですね。数の暴力。サーバー増やします、とかやってた気がしますが、サーバー増やすだけじゃどうにもならない領域です。

Twitterのフルスタックエンジニア募集見るとJs中心にJava, Scala, C++辺りと各種FWにDBと、さほどどこかの人が言うような"モダン"なものは使わずガッチリっぽいです。Railsだと正直大量アクセスに耐えきれないのでは。Phoenixならいけそうなんですけど。

ポータル・検索

検索はGoogleとかで有名ですが、日本ではサイトとしては弱い印象で、エンタープライズ向けが多いです。クローリングしたものを形態素解析を行った上、前処理を行いあいまい検索に対応したりしつつ、逆インデックスとかインデクシングを行い、検索時も前処理したり、インデックスの圧縮やら、膨大な量になるとメモリに載せずに直接インデックスから引くとか、適切な順序にするためのランク付けも必要。今はディープラーニングとかも使われたり。自然言語の知識も要求され、かなりテクニカルです。

ちなみに、ここにElasticsearchの利用は入れません。流石に、売りの部分をライブラリでまかなうことはないですね。自社の検索サービスやエンジンを持っている会社がこの業界です。業界というかサービスというか、検索は自然言語処理業界に内包される気がするけど。

ポータルはYahoo!Japanなどが強いですが、幅広く情報を集める仕組み、またリコメンドエンジンも使われると思います。自然言語処理が多く使われる業界です。

検索に関しては詳細は下記の本をどうぞ。

少し簡単なのはこれとか

GoogleのPage Rankの論文。

http://ilpubs.stanford.edu:8090/422/1/1999-66.pdf

EC

Amazonや楽天、ZOZOなどのネット通販業界です。基本はCRUDで、支払い連携やリコメンドエンジンなどなど。細かい自然言語処理が使われていると思います。検索は自前もあればライブラリもありそう。ここも大規模アクセスが、というか、今のWebは基本的にその辺考慮できないと駄目ですね。とはいえ、SNSとかEC、検索ではサーバー増やしたりスペックでぶん殴ればなんとかなるような問題だけではないので、アルゴリズムの知識とかも必要そうなんですが、どうなんだろう。外部連携も多かったり、支払い周りはかなりクリティカルな領域なので慎重さが求められそうです。

Amazonは画面の中だけでなく、外で倉庫や流通も支配して一人勝ちした感がありますが、日本は画面の中でしか戦えてない印象。実際は色々やってるかも知れません。

フィンテック

FinTechをWebに入れて良いのか微妙ですが、顧客は基本的に画面で操作するのでしょう。これは裏側のエンジンがメインで機械学習ガッツリだと思います。Webフレームワークのガワの部分と裏側のガッツリ機械学習になると思います。freeeみたいなとこだと、OCR(Optical Character recognition: 文字識別)からの分類タスクとかやってるんでしょうね。ブロックチェーンはセキュリティ業界がメインですが、ここでも使われますね。後は生体認証とか使うとこ増えてるかも?

この領域もRailsとかガワのWebフレームワークいじる人と、エンジン周りのいかつめのアルゴリズムをいじる人の組み合わせになると思います。結構論文とかも読むのでは?という想像。

自社製品開発

Webをベースとしない製品開発です。エンタープライズ向けのものと個人向けがあると思いますが、最近はサブスクとかも多いですね。Adobeの製品とか。後は、例えばカメラのUtilityソフトだとかドライバもここに入りますかね。自社製品とメーカーは分けたほうが良いかも知れませんが、とりあえず、メーカーとかハードウェアに付随するソフトウェアもここにさせて下さい。単体で完結するものでなくパーツとして使われるハードウェアや家電、というイメージです。

技術力

ここはWebより平均的に技術力は高めと言えるでしょう。組み込み含め低レイヤーのものもあるし、難しめの技術課題に取り組んでるところも多そうです。使う技術は様々でCやRustでのシステムプログラミングや、機械学習等も普通に使われるでしょう。Webのように変化の激しい技術ではないので、しっかりとした基礎を持って、本質的な理解を求める開発が多かったり、ライブラリのないような領域を触ったりする世界です。ここで通用するなら技術で食いっぱぐれることはあまりないのでは。なんでもやってしまうし、やらなきゃいけなそう。とはいえ、Webの技術はデータやシステム全体の管理ができるくらいでよいのでは。

負荷は前に書いた通りですが、上述のようにシステムプログラミングによる低レイヤーでのアーキテクチャや機器レベルでの本質的な理解も求められます。

ゲーム業界

スマホゲームとコンシューマゲームがありますが、コンシューマはよくわからないです。夢で行く人が多くて給料は安く忙しいイメージ。とはいえ、任天堂とかスクエニはえらい儲かってる感じ。ゲームが作りたい人には最高だろうけど、そうでない人は結構大変でしょう。

スマホゲームはソシャゲーは大変です。リリースまでも結構大変だけど、結構プレリリースでやめることもあるし、BtoCなのでリリースは夜間も多いです。ゲームによってはエンジニアよりデザイナーが評価されます。会社によってはデザイナー職の女子多めだったりもする。リリース後のイベント運営とか、話の通じない企画との戦争になったりします。リリース後が本番で時間との闘いで忙しい業界です。好きな人には楽しいでしょう。

技術力

なかなか高めです。だいたいゲームエンジン使うと思うのでゲームエンジン次第でしょうか。C++やC#, Js辺りですかね。APIとして、Javaや…Railsも使えるかもですが、処理速度が場合によっては厳しいか。ガワアプリでゲーム組むとしてRailsで行けるのか、DAU増えてくると厳しい気がする。正直Unityで学んだ技術(スクリプト書くやつ)は他で使えるのか微妙な印象。とはいえ、VR/ARに転用しやすく、やっと火が付きつつあるので、しばらくは安泰か。あとはグラフィック系の知識があると幅が広がります。ゲームエンジン内でOpenGL使ったりもできるし、三角関数であったり、行列演算、ベクトル周りの知識に慣れているとコードがキレイに書けたりもします。数学力の高い人は即戦力になれた印象。

一時期バブル状態でしたが、すでに飽和しててパイの奪い合いの印象です。お金が流れ込んできてた時代は結構贅沢にクラウド使ったり(開発者1人に1インスタンスとか)。障害でしょっちゅうやられたりしたのはいい思い出です。もう絶対行きません。

この業界は社内向け・社外向け問わず勉強会を積極的にやっている印象です。今は控えてるかもですが、興味あれば参加してみるのも一興かと。

通信業界

あまり詳しくないですが、NTTを始めネットワークエンジニアがメインの業界です。とはいえ、ネットワークは電気通信系のエンジニアがメインなのでCSとはややずれるか。と言っても、ルーター周りであったりのUtilityだとか、通信に付随する部分のソフトウェアには関わると思います。あとはセキュリティ部分は結構ガッツリなんでしょうか。TCP/IPとかアプリケーションより下のレイヤーもいじりそうなので、汎用性は低いものの深めの技術が使われてそうな気はします。

というか、情報収集にNTTの採用ページ見たら、グループ一括採用で「入社する会社と職種は内定時に決定します」って、怖っ!自分には絶対無理ですわ…。

詳しくない&セキュリティは別項目で。

映像・音声業界

数学ガッツリで日本にはあまり仕事なさそう。スクエニのLuminous Engineとかはここに入るんですかね。ゲーム自体というよりグラフィックツールとか映像作品をエンジニアリングする仕事で、海外だとLucas FilmやPixarが有名ですね。PixarのRenderManの開発とかはここかと。RenderManは個人利用は無料なので、試してみるとディズニー映画のようなCGが作れて楽しいと思います。または、NVIDIAでのゲームサポートツールとかもこの辺に入るかも。

音声も面白いと思います。ボカロとか作曲ソフトですね。機械学習のBGMとか出てくると思う。特にハリウッド映画で日本人のエンジニアの名前を見ないので誰かしら挑戦して欲しい。Webで画面に出るのが面白いと感じた人、こっちの方が技術力高くてもっと楽しいと思いますよ!(当社比)

技術力

C++が多いのかな、と思いますが、LucasFilmだとPythonとか。OpenGLとかVulkanも使われる?行列演算とかGPUとかバリバリ使われるし、レンダリングはかなりコストが高いので、理解して使っていれば技術力(数学力伴う)は高いと思われます。プログラマブルシェーダとか、GPGPU的な技術も。画像処理ではフーリエ変換、ラプラスフィルタとか各種フィルタ、ガウシアンノイズ(ホワイトノイズ)とか、色んな技術があります。リアルタイムフォトンマッピングとか気が狂ってる。音声もフーリエ変換使ったり、色々ローパスフィルタとかかけたり。基本的にコンピューター上に現実世界を投影するので、数学をプログラミングします

グラフィックに興味ある人はリアルタイムレンダリングを一読下さい。

Lucas Filmとか

Pixarとか

セキュリティ業界

ウイルス対策ソフトであったり、暗号化であったり、ファイアウォールだとかもここなんですかね。あとは監視系のソフトとか。ブロックチェーンも分類としてはここになると思います。基本的には計算理論に基づいてるはずなんですが、多分日本ではその辺は雑そう。いや、知らないだけで、流石にちゃんとやってるか。人文科学系の未経験エンジニアとかいたらちょっと怖い業界ですね。アルゴリズムとか計算理論ガチガチで数学的な証明がガンガン出てくる業界。

技術力

本来高め(PとかNPとか情報量的安全性であったり、計算量的安全性を考慮する世界なので、いかついけど面白い計算理論の世界の話になるはずです。

ちなみにうちの大学だと計算理論の応用の授業は殆どない博士向け授業でした。かなりいかつかったけど、パズルみたいで楽しいといえば楽しかったです。

機械学習・AI業界

最近流行りのやつです。機械学習も抽象度が高めで色んなところで使われますが、PFNのようにプロジェクトが変わったら業界は変わるけど機械学習は使われる、というような中心に機械学習・AIがあるのをここに分類したいと思います。逆にエムスリーさんのように、プロジェクトが変わると機械学習を使わないことがあっても医療系という場合、医療業界と分類したいと思います(医療は取り上げないけど)。

言語は数学と英語が中心です。ちゃんとしたML/AL系の会社だと皆日常的に論文(英語)読んでます。インターンも大半が学会で発表してるようなレベル。学校と仕事は違うとか言いますが、この業界ではインターンが土台を作ったリポジトリを社員が体裁整えたりします。どっちが技術力高いか、というと、微妙な話だけど、英語力で言うと、学生の方が難しい話を片言でして、社員は流暢だけど日常表現中心にしか話せない、というような状況になったりもする。

ライブラリの組み込みモデルをそのまま使うだけのとこは検索業界のElasticsearch利用同様、ここには入れません。流石にライブラリをメインの技術として使うというのはありえないでしょう。簡単にパクれてしまう話。未経験から可能性があるのはそういうとこだけど、ガチの人や会社からするとそれはAI技術でなく、普通のWeb開発とかソフトウェア開発の技術です。本体の機械学習エンジニアとは仕事内容が異なるでしょう。そういうところは中心が機械学習でなく、プロジェクトによって機械学習"も"使われる、という感じかと。

技術力

ダントツでしょう。もはや基本的に数式を実装する世界。CSの基礎や大学数学の素養のない人には違う世界の言語に感じるかもです。Web開発だけで経験を積んでもちょっと厳しい世界。まぁ、UIないとなのでRailsとかも使ったりしますが、この辺の技術使える人は余裕で書ける感じです。管理ツールにそこまでテクニカルな実装要らないのもあるかもですが。

モデルとか色んなところで解説記事あったりしますが、実際に使う場合、SOTAのやつみたいな大きいモデルを使うとコストが高いので自分で組むと思います。極小量子化とかで重みを謎レベルに小さくしたり、DLに最適化した専用チップ開発しだしたり、結構やりたい放題のスタートアップがちょいちょいいます。この業界は博士課程に通いながらとか、大学教授が顧問に付いたり、アカデミアと協力して最先端を行くような技術を追う業界です。未経験から経験積んだだけのエンジニアだと、下手したらインターンの学生が言ってることも意味不明かも知れない。というか、今も新しいことがどんどん出て来てる業界なので、学生の方が知っててもそれはそれで仕方ないか。

ディリクレ分布だとか、マルコフ連鎖モンテカルロ法だとか、ベルヌーイがどうとか、ベイズやらグラフニューラルネットワークとか情報幾何やらカーネル関数の話やら、そんなマニアックな話が日常的に飛び交う会社もあります。

ロボット・自動車業界

IoT周りですが、ロボットとAIは相性が良いと思います。DeepLearning(DL)により、コンピュータが目や耳、言語のパターンが認識できるようになりました。それが最も活きるのはロボットでしょう。同様に、目が、異常検知が人の命を助けるのは自動車業界も一緒です。

技術力

制御自体は大して難しくはありませんが、物理的制約というソフトウェア単体ではない問題がそこにあります。また、制御方法によっては行列演算が必要であったり、Modbus通信であったり、独特の通信手法やネットワーク監視が必要になったりします。ROSであったり、それに紐づくSLAMなど、新しい、現実世界とつながるフレームワークを使ったりします。言語としてはC++, Python, Rust辺りが多いと思います。ROSは公式にはC++とPythonをサポートしてます。Pythonだと機械学習とも相性が良いです。基本的には通信とそれを制御する画面でDjangoやFlask辺りを使うかも知れません。ROSのバインドがあるなら言語はあまり関係ないかもです。

Modbusなどではビットやレジスタ単位での操作が求められたり、メカトロニクス寄りの知識が求められることもあります。

HWと結びつく利点

実はML/ALはPoCは取りやすいもののなかなか導入に至らないという問題があります。HWが結びつくロボット業界やIoTではPoCでもHWの購入が必要になり、サンクコスト効果で導入に繋がりやすい部分があると思います。また、実際に現実世界で動いてるのを見るとなかなか感動的なものです。

最後に

エムスリーさんの医療業界とか量子コンピュータ業界だとか、全然フォローできてないところもあると思いますが、この辺で。

途中で科学分類的な例えをしていますが、数学やCSは形式化学という抽象的なレイヤーに位置していて、それぞれの科学要素のコンピュータ上の投影によって分類が決まってくるような感覚を持っています。意外と例え(SIは人文科学、Webは社会科学、それ以外は基本的に自然科学)が個人的にはしっくり来たのですが、いかがでしょうか。

ここで色々技術的な話の種を投げたつもりですが、それを見て「技術マウントうざっ」と思った人は多分業界向いてないでしょう。ストレス多そう。少なくとも自分が見てきたすごい人や伸びる人は知らない技術の話が出ると興味を示して、「何それ、おもろ!今度調べてみよう」としっかり種を埋めて、日々情報という水をかけて、興味が一定ラインを超えると実装を始めます。というか、翌日やってみてる人もいたり。

まぁ、仕事としてエンジニアやってて、自分ができなくても誰かがやってくれるならいい、と考えるのは自由ですが、それでプロと胸を張れるのか…。簡単な仕事だけやって、「エンジニアは簡単な仕事です」とか言われるとうーん、となります。「野球やってます」、って球拾いでも野球部ではあるわけだしねぇ、みたいな複雑な気持ち。球拾いで「野球なんて簡単だよ」とか言われても、ですが、それに誇り持ってんならもう何も言えねぇ、的な。そんな未経験エンジニアがポコポコ生えてますねぇ…。春だから変な人出やすい、で済めばよいのだけど。

好奇心を持って知らないことを楽しみながら学んで成長を喜べる人が結局エンジニアリングの世界では最強だと思いますし、それがコミュニティとか人の中での活動になると評価されていくものです。そうであって欲しい。少なくとも、SNSで稼いだ自慢してる内は情弱にしか尊敬されません。ぜひ、面白いと思える分野、領域を見つけて寝るのも惜しいと思えるくらい熱中して技術の世界を楽しんで欲しいです。

こちらの補足記事を書きました。
海外のCS学位ある場合にどんなに仕事に就けるかという記事をもとに、日本で評価が高過ぎる世界中でCS学位なしでもなれる仕事についても言及しました。こちらの記事長過ぎなので、また時間のある時にでも読んで頂けると幸いです。


この記事が気に入ったらサポートをしてみませんか?