なろう系インフルエンサーの話
勝又健太さんが何やら香ばしい匂いを発していたので、ちょっと突っ込んでおこうかと。彼はとがった専門家ではなくトレンドを触りまくるジェネラリスト系のようなので(自認している通り浅く広く技術を作る側、というより使う側だと思います)、見えてないだけ、だと信じたいが。すごく意欲的な印象だったのですが、この数年はちょっと様子がおかしく、若干目に余る感じになってきたので取り上げさせていただきます。
なお、この記事は本人の発言や記事をもとにした当方の解釈であり、実際の本人の考えはわかりません。本人を攻撃する意思はなく、彼の発言で勘違いしてしまった方へのメッセージの意味合いの方が強いです。正直、ポジショントークか、独学系の方故に純粋に知らなかっただけであって欲しいと思う発言も多いです。少なくとも学んだことのない人が勘違いしそうな部分は指摘させて頂きましたが、自分も若輩者で、勝又さんより若いエンジニアということもあり、今回執筆中に思考をまとめられたことを感謝したいと思います。
また、書いてる途中に懸念が強くなり、ここから派生して、ポートフォリオ商法への懸念という記事を書きました。
というわけで今回は大長編なろう系インフルエンサーのトップランカーの方のお話です。
勝又健太という人の印象
ほぼこの記事が全てを物語ってる気がします。
今回の記事は勝又さんの人物像として、この記事で語ってる考え方をベースにコンピューターサイエンス出身の人間としてCSに関して勘違いしてそうな部分を突っ込む形になります。言っても自分も完璧なわけじゃないし僭越なのですが。
CVを公開していますが、最新技術の表面をガンガン撫でて経験として書けるものを増やすことで、評価者が錯覚してすごいエンジニアと判断する状況を作るため、(本人も語っているっぽいですが)錯覚資産を作るための経験を山積みしてる印象です。技術網羅というか悪く言うと地に足付いてない感じ。
そして、自分も個々の技術は自分で深堀りしていない、と言っているように使えると言えるレベルで留めていそうです。言ってみれば最強のジェネラリストを目指してるような人に感じます。
仕事の領域に関して
2社1年前後いて、GREEでは1年7ヶ月とLinkedinにあり、それ以外はフリーランスのようです。いろんな技術に触れていることは素晴らしいと思いますが、こういった人の仕事は非常に限られてきます。なぜなら、企業は経験の長いエンジニアには深さを期待するからです。チームで作業をする以上、全部を知っている必要はなく(知ってる方が望ましいですが)、分業になるなら、それぞれの領域のスペシャリストがいた方が良いです。実力派スタートアップだと基本的にみんな深堀りしたものを横に広げてるので実は深堀りしてるジェネラリストが中心だったりしますが。いわゆるフルスタックエンジニアですね。というかやらざるをえんのよ。スクラムとかだと特に専門性をまたいで他の人の専門に足を突っ込む。
勝又さんがフリーランスを選んでいるのはその意味では正解かも知れません。特に一人で案件を完結するなら全部できる必要があります。とはいえ、残念ながら右手と左手は同じ脳みそに繋がっているので、仕事は直列になります。その限られた仕事量でプロジェクトが肥大する前の立ち上げフェーズや調査フェーズに絞ってるように見えるのもうまい立ち回りです。ビッグデータや大量アクセスに伴うマルチスレッド化であったり、深い技術はこの段階ではまだ必要ではありません。しかも、立ち上げフェーズのインフラ周りは一度整備してしまえばあまりいじらないでよくて、且つ短時間で利用が終わる技術も多いので、実績を並べやすいというのもあるでしょう。
ただ、これはフリーランスだから活きているものでチーム開発では中途半端な人材か中堅人材になるでしょう。本人もそれぞれの技術は中途半端と語ってる通り。なのに、なぜ未経験者に"自社開発"企業の正社員になることを煽って指導しているのかわかりません。フリーランスで、しかもクラウドファースト信仰を感じる(そっちのほうが楽だし)のもあり、ある程度売上が見込める大規模案件の立ち上げや調査以外の開発者には向かなそう。Qiita見ても調査能力はそこそこ高そうです。むしろ、幅広く浅めならコンサルやマネージメントの方が合っており、コンサル"も"やってる、ようですが、そちらのほうが向いているでしょう。個人的にはコンサルって職業は大半が要らないと思ってるけども。
結局、自分なら実装フェーズでは雇わない人材となります。実装フェーズでは深さであったり、業界によってはまだ世の中にないものを生み出すことになります。ここで必要になるのはCSの深い理解や数学力になります。"手を動かす"にこだわっているようですが、実装フェーズは実際は手より頭を動かしてることが多く、実装箇所によりますが、デザインが大事な部分も多いです。
と言ってますが、なんか↓見ると勘違いしてそう。
Googlerはコードを書かないという意味でなく、考えてから書く、ということですね。実際は設計した後はものすごい量書いてます。手戻り少ないから、いきなり書く人より作業量少ないと思うけど。
1日平均16000コードとのこと。単位がよくわからない。
どうも、こういう勘違いが結構多いように思います。コンピューターサイエンス(CS)をかなり誤解してるように思われ、ちょっとどうなのかな、と。
この人、というか日本のIT業界全体で勘違いしてそうな気がしますが、問題解決って上流工程での要件定義とか設計のことじゃないんですよね。Computer Scienceの学問としては素人なので仕方ないかも知れませんが、CSでの問題解決は問題を分析して入出力の定義とか複雑性(計算量とかNPとかPとか)の分析とかアルゴリズムを検討して最終的にコードに落とすことであって、上流だけの仕事ではないです。コードも視野に入れてアルゴリズムを考えるし(feasibleでないといけない)、テストや大量アクセスとかも考慮する。CSでは101(入門)の授業で学ぶ話では…。
ちなみに、Googleの試験受けたことあるけど、基本的にホワイトボードコーディングで"問題解決力"を見ます。コミュニケーションを通しての分析、考え方、アルゴリズムとそれを実装する引き出しがみられる感じですね。実装面は多少あいまいでもいいけど、分析とアルゴリズムが重要だと思ってます。難易度はアルゴリズムが決める印象。彼らはコードなしで問題を解こうとしてるのでなく、コンピューター上での実現可能性や分析、IN/OUTと解決方法を検討し、定義した上でコンピューター上で実現する手段としてコードを書くという話で、そこにしっかり時間使ってコーディングの占める時間は手戻りも少なく20%~30%という話かと。
Problem Solvingの英語WikiでComputer Scienceには下記のようにあります。
完全に勘違いですよね…。そもそも、海外は基本内製なので当然だろうけど、自社開発に上流下流とかあんまりなくてアジャイルで行ったり来たりするしね。モダンとかSI業界否定しつつ、思考はSI業界のウォーターフォール寄りなんでしょうか…。それとも、コンサルのことを上流と言ってるの?エンジニアリングじゃなくてビジネスサイドじゃん、それ。
ちなみに問題解決に関する定義は学術分野ごとに違っていてMathとかいかしてます。
方向転換した?
Qiitaの記事を見ても2016年のアカツキさんの案件の時は精力的に見えます。Phoenix界隈でPhoenix自体とか、周りのパッケージに数行とかだけどコミット詰んだりIssue書いたり。仕事中にできたから、と言うのもあるけど、元々は熱意のある人だったんじゃないのかなぁ、と勝手に思ったりしました。Qiita見てもマクロいじったり、おそらく、そこそこ技術で戦える人を目指してたのではないかと。
リポジトリ見たら自分でプルリク出して自分でマージして、アリバイみたいでちょっと笑ったけど。フリーランスの一人プロジェクトってそういう感じなの?と。#xxxってIssueに紐付けてるんですが、肝心のIssue説明ないならコメントで良くない?とは思いましたが。しかし、アカツキさんの案件ゆるゆるですね。レビューくらいはクライアントがやりそうなものですが。請負案件ですかね。
他にもMac OSX向けだけだったりHexに登録しないんだ?とは思ったけど。流石に商用サービスでMacはないので仕事で受けてるなら当時既にあったdockerなり、そこそこ定着してたVirtualBoxなりで商用環境のテストすればいいのにね、と。
しかし、Qiitaの記事も2016年の後半から減っていき、その時期に機械学習基礎のCourseraを受けてるんですよね。その後、「まだストリートファイトで消耗してるの?」という技術力での勝負からシフトするような発言をしているのは機械学習のプログラミングが数学に基づいていて、今後そういう方向にシフトするなら勝負できないと思ったのかも知れませんね。コロナ社の機械学習系の本とかいかついですしね。
彼は半年から1年で成長の鈍化が来る、と言っていますが、当然です。簡単なところを抜けたら成長は鈍化します。例えばレベル40からはCSや数学の知識が求められ、土台のない人は逐次行ったり来たりしていると全然進みません。また、つまみ食いでの学びは脳内穴だらけの目印のないマップなので、記憶に定着しにくいです。土台があれば、レベル60くらいまではすんなりいったりするかも知れません。レベル50くらいからは日本語資料もあまりありません。彼の戦略は土台がない人間がレベル90の専門家に真っ向から向かい合っても仕方ないのでレベル30を3つ作って、4つ目で差をつける、というような戦略ですね。まぁ、1対1ならいいのかも知れないけど、チーム開発だとレベル90が掛け算になったりするとつらいし、この戦略はレベル30位で対応できるフェーズでしか取れません。非常に限定的で戦略的な立ち回り、と言えるでしょう。機械学習は最初から数学ありきなので、得意の速習には土台が足りないとの判断と思えますが、賢明です。
まぁ、独学は路上の喧嘩屋なのかも知れないけど、そこから暗殺者になるとかならともかく毒未経験エンジニアを送り込んで業界をじわじわ殺す、とかはやめて欲しい話なのです。あと、武道家は求道者なので敵は自分なわけで、戦ってない相手を仮想的にしてたのかもですね。武道家は年齢関係ないのです。
なろう系インフルエンサーとは
あ、そうそうマスクドさんがナイスネーミングしてたので、今後「なろう系インフルエンサー」を使っていこうと思います(あんまり流行ってなさそうだけど)。テックとかエンジニアと言うには現役としてはちょっと抵抗ありますよね。むしろ、名乗らんでくれ感。
勝又さんはなろう系の中では圧倒的ではあるのでは?と言っても興味ないので田舎ヤンキーみたいなノリでやたらおらついてるストIIみたいな人とWordpressの人(彼は厳密にはWebデザイナーな気がする)しか知らないけど。…と言っても界隈の実力平均がだいぶ低いのですが。
悪徳商法系が多いなろう系でやや異質な存在ではあったけど、サロンでやっぱりそっちに入ってしまったか、と。入り口は違っても、お金を求める人達のたどり着くところはそうなってしまうのでしょうか。別ポストでも書きましたが、ポートフォリオをよくすることをメインにお金を取ってるようですが、悲しいかな、ポートフォリオに他人の能力が影響すると、それは判断材料として不適切になってしまうでしょう。
Web系の認識のズレ
まず、わかってるのか疑問なんですが、"GoogleやAmazon、メルカリやクックパッドのような「Web系企業」で働く「Web系エンジニア」"とWeb系エンジニア最強…でRails使いのWebエンジニアになろうとか言うのは違うな、と。知ってて言ってたら嘘、知らなかったら無知という若干詰んでる話ではありますが、多くの有名なWebサービスの会社ではバックエンドと一口に言ってもUIとエンジンに分かれていることが多いです。UIというと語弊があるかも知れませんが、Railsだとしたら、フロントエンドに分類される以外のDelayed Jobとかを使う思い処理部分を外出しするイメージですかね。Delayed JobからAPIを叩くかも知れない。このエンジンはデータと画面からのボタン等の入力で単純な判断をするビジネスロジックではないです。検索エンジンとか音声認識、画像認識やらクラスタリングのようなリソースを食う高負荷の計算量の多い複雑な処理です。
Webサービスの収益のコアはエンジンです。UIとエンジンに分かれる構成はバックエンドで複雑な問題を解いているサービスで良くあると思います。RailsのようなWebフレームワークだけで完結するのはユーザー参加型とかデータを登録、表示するのが中心なパクられやすい会社が多い印象です。ECとかはユーザーの規模次第でRailだとちょっと厳しい印象だけど最近どうなんだろ。管理画面とかプロトタイプには最適という認識。
速度の問題とかもありGoogleではC++やpythonが多いようですね。下記の記事でGoogleの方が答えてます。pythonはnumpyが裏がC言語でカリカリにチューニングされてて下手するとそこだけC++より速い。
複数の言語を業務で使ってきたと語る勝又さんですが、何故かC++に言及することは少ないですね。自身がQiitaで翻訳されてた「全ての開発者が学ぶべき5つの言語」でもC++はかなり評価高いのに流してました。経歴的になぜかMS系開発環境のVC++は言語に入ってましたがC++は入ってませんでした。いずれにせよC++は11からだいぶ変わってモダンな言語になっているのでそれ以前の経験はカウントしないで良いと思います。
「CやC++を知らずして真のプログラマーになることは出来ません」と自分でも翻訳してるんですけどね。おそらくモダンなC++は深入りしないとちゃんと書けないとわかってるので見て見ぬふりをしたのでしょう。ある意味賢いです。あと初学者はかなりの確率で事故死するのでウケが悪いというのもありますかね。未経験者ウケを狙うなら、簡単で良く動く方が良いわけで。とはいえ、C++はRustに置き換わりそうな流れになりそうで、見ないふりして乗り切った感もあります。フォロー記事でJavaよりRubyと言ってますが、個人的には初学者はJavaの方が良いです。フルフルなWebフレームワークをいきなり触るより、サーブレットとかで簡単なWebサーバーを書いてみるとWebフレームワークの流れや便利さが理解できます。Javaやると第2言語簡単に移れるし。どうせ未経験の受け皿ほとんどSESなんだし。Rubyにしても少なくともSinatraとか挟んだ方が良いのでは。いや、Sinatraじゃ隠蔽され過ぎか…。
抽象度低い実装試してから高い方にいくのはコンピューターサイエンス上がりの人間が好む工程で、CGの授業でも、自分でOpenGLのような斜めの線はどのようにピクセルが決められているか、とか回転には四元数が使われていますが、使わない(虚数のない世界)とどうなるか、とか学べるので、処理をイメージしながら実装ができます。ブラックボックスの中も基本的な考え方やアルゴリズムを知っておかないといざというときに応急処置(バグ原因箇所を迂回したり機能自体削ったり)しかできなくなります。
収益のコアのお話
この方、ビジネスの視点とかしきりにビジネスを語りたがるっぽいのですが(数少ない読んだ記事、動画でもそう感じた)、1つ重要なことを見落としています。
エンジンのないシステムは基本的に技術自体がお金を産んでるわけじゃない、ということです(IoTは除く=現実世界を動かすのは別の話)。日本のWebサービスは基本的にアイデアや元々ある商品が中心になっていて、技術はそれを可視化する手段(場合によっては可視化で人が集まることによる広告収入やスポンサー収入)でしかないことが多いです。技術自体で売り上げを立てられる企業はほとんどないと言えそう。アパレルで言うなら、服そのものではなく、それを飾る棚です。自分が棚を作ったからそのブランドがめちゃくちゃ売れた、自分の手柄だ、なんて大声で自慢する人はいないでしょう。一定以上まともな棚なら、それ以上お金をかけても大して売上や評価は変わらず、支出が増えて無駄な出費になるだけです。それどころか棚が立派過ぎたら、主役の服が目立たなくなってしまいます。過大評価されたフリーランスは簡単に言うと価値以上の値段の棚で無駄な出費ですね。
同様に、有名外科医は高い給料をもらってるからすごいわけではなく、多くの命を、時には不可能と言われるような患者を救うからすごいし、尊敬されるわけです。なのに、たまに盲腸を切るだけの外科部長(教授)が過大評価で給料が多いからと権力にごますって尊敬してるあれ。それがインフルエンサー信者の悲しい現実です。信者の人達がドラマの登場人物で一番嫌いであろうタイプにすり寄ってる事が多いという悲しい現実。
そしてフリーランスエンジニアは彼ら自身でお金を産む部分を担当することは少ないです。まともな会社なら、フリーランスに収益の要となるエンジンを任せる事は少ないでしょう。会社で既に特許が取れてるとかでもない限り。企業秘密の部分だし、外部の人間依存じゃ持続可能でないシステムになりかねない。そもそもそんなの作れる人間自分で会社やるわ、的な。顧問の大学教授にアドバイス受けるとかは結構ある話。スポンサーになって共同研究で特許とか。
実際のところ、エンジンの中ではかなりの確率で数学や競技プログラミング的な技術が使われています。例えば、音声認識だとビームサーチやらWFST(Weighted Finite State Transducer)とかですかね。この辺は低レイヤーでもなんでもなく普通の人気ライブラリでも使ってます。低レイヤーって逃げてるけど、現状物理層に近い低レイヤーいじることなんて少ないし、低レイヤーだから触らない、って別に技術に自信あるならレイヤーどうでもいい気がするけど。そういう技術は機械学習系は結構使われてること多いです。
残念ながら、プログラミングで数学や競プロ的なコードを書いたことのないエンジニアは直接お金を産んでないエンジニアと言えるかも知れません。当然書かない層の方が多く、必要な層ですが、日本はそこ(CSの基礎が必要になるレベル)から上に上がってこなくて、その上の層(一昔前のアメリカはそこがスタート地点な気も)がびっくりするくらい足りてない。別に初心者なら書けなくていいんですよ。でも10年選手がまだ見て見ぬふりをしてるのはちょっと笑えないですね。地力の問題解決能力はCSの学生の方が上では?となる話なのですよ。
自分もそうでしたが、"使う側"より先に行くなら、一度アカデミア(大学とか)に戻るなりして思考回路を自然科学側の"作る側"のモードに作り替えないと厳しい気がします。現状、表面をなぞってて、それでオッケーという感じですが、お金を"産む"技術ってそういうものではないです("自分が稼ぐ"だけの技術ならそれでいいかも知れないけど、みんながやったらじり貧)。機械学習の基礎学んでも機械学習エンジニアに手を出さずにMLOps側に行くのは壁を自覚してるとは思う。高校数学まで復習したと言うけど、勾配降下の偏微分とか大学数学が基本になってきます。
本当に面白い世界はその壁の向こうにあるんですけどね。
かく言う自分も学び直し組だから、数学の勉強は苦労してるし、未だに少しずつ範囲広げてるけど、大変だけど、わかると世界のパズルが少し解けた気分で楽しくもあります。
別に難しいのは丸投げて簡単なとこの守備範囲広げたいと割り切ってるなら良いと思います。ただ、そうなるとチーム開発ではそれぞれの守備範囲の若手3,4人で分業すれば置き換えられてしまう。まぁ、広く見える人が全体を設計した方がいいというのは一理あるけど、"手を動かす"のはそれぞれの担当で良いので広さを武器にするなら手を動かす必要はないですね。
話戻るとニュースサイトはニュースが大事でニュースがなければただのデータを表示するだけの箱です。箱が変わろうと同じニュース(独占記事)なら"そこまで"(程度の問題)アクセスは変わらないでしょう。同じように、エンジンはガワのUIが変わろうと、呼び出す口(API)があれば単体でお金を産めます。ECだとリコメンドエンジンはお金に直結する部分です。それはつまり、エンジンがしっかりしてればUIはSIerとか外注に任せてもお金は産めるということで、その外注の担当する箇所がRailsを代表とするUI部分ですね。そこは取り替え可能なのです。まぁ、機能の整った動画再生サイトとかはかなりリッチな箱なので魔法の箱かも知れない。その辺は数学使ってそうではあるけど。
もしかするとクラウドの有料サービス(サーチとか各種認識AIとか)を使ってて、自分は作る側と思っているかも知れませんが、他者のエンジンで動いてるシステムということになります。そして、他人の作った物がコアになってたら真似をするのは簡単です。自分でそういうサービスにお金を払って使いながら、そのお金を産んでいる技術の中で使われてる手法とかを使わない、使ったことないと言っているのは皮肉な話です。それはそうだし、大多数がそうなんだろうけど、言ってて虚しくない?と。初心者の時は今は荷が重い、で良いとは思いますが。誰かがやってくれる、と思ってる人間が将来作れるようにはならないでしょう。
結局、作る側のエンジニアがそういった自然科学の言語で実装して、使うのエンジニア側は一切書いたことがないというのが現実で、後者は"使う側のエンジニア"、と言った感じ(文系とは言わないでおく)ですかね。技術の深淵は覗かない、コスパが悪い、と言っても、実際は深淵の中にいる人達が直接お金を生むようなものを使って、おこぼれを預かっているのが使う側のエンジニアです。深淵というか、雲の上で抜けると素晴らしい景色が見えると思うけどねぇ。それに車作ってるトヨタよりそれ使ってるタクシー会社の方が稼げることはないでしょう。OSSは別だけど。そういう意味ではすごい話。
日本のエンジニアは給料が安い、と言われますが当たり前です。9割が使う側のエンジニアで自分が書くプログラム自体で価値を産める人がほとんどいないですから。商品がいいから売れるのに、場所作ったからもっと金出せ、とかそっちの筋の人じゃないんだから。未経験1年で給料上げなきゃ辞めろ、って自分が上がる分利益増やしたと言えんのかね。海外の、特にアメリカのエンジニアがCSの学士や自然言語系の専攻を応募条件に求められるのは日本より収益のコアとなるエンジンを担当する可能性が高いからでしょうね。それがこの20年の日本とアメリカの差なのかも知れないですね。世界のトップ企業の上位はアメリカのIT企業がずらりで、日本はかすりもしません。
楽天とamazonはどちらも巨大ECですが、楽天はネットから出れなかったけど、amazonはネットと現実の境目を軽く飛び越して圧倒的な差を付けた。それはエンジニアが現実世界=自然科学の言葉を使えたから、特に壁を感じなかったというのもあるのではないでしょうか?
ビジネスを語るなら、そのシステムやサービスの収益の要が何かは理解しておいた方が良い気がします。確かに数学やアルゴリズムを使わずにシステムは作れますが、ほとんどの場合、そのシステムは技術が収益の中心でなく、収益を上げる他の主役のための脇役です。結局のところ、お金が稼げてるのはフリーランスがすごいから、というより、クライアントのお金を生む製品やアイデアのおかげでフリーランスはお手伝いさん、というのが実態で、とどのつまりフリーランスはなんだかんだ他人のお金に、企業依存して生活していて、自分ではお金を産んでないということです。一部のなれる系はフリーランス最強、会社員は間抜け、みたいなこと言いながら、その会社から報酬もらってるってねぇ。会社もなめられ過ぎでは。親の悪口散々言いながら小遣いだけはしっかりもらう子供みたい。そして、報酬払う企業は儲からないと払えません。わざとか知らないけど、ここの視点無視してませんか?内部留保してるんだから、出せる、なら社員が先ですよね。Web系企業は打ち出の小槌じゃないんだから。なんで主役より金もらおうとしてんのかよくわかんない。
とはいえ、海外でもDevOpsは評価が高いみたいです(会社の平均的な規模が大きいから、という噂もある)。中途半端に表面をなぞったプログラミングを武器にするならDevOpsを前に出して"手を動かす"を武器にしない方が良いです(そうなるとプログラミングでエンジニアになりたい人はサロンに来なくなるかもですが)。そこのコミュニティ内で活動してれば、おそらくプログラミングガチ勢が何か言うこともないでしょう。彼らは専門外の話には基本的には口出ししません(正直、このポストもだけど、めんどくさいよね)。しかし、プログラミングを絡めて情弱〇〇〇〇的なことされたら、おいおいいい加減にしろよ、と重い腰が上がるわけで。
ちなみに自分は完全にビジネスは素人です。が、お金の流れくらい、入り口から入った以上の物が出てきたら錬金術かヤバい金なのくらいはわかります。
Java下げRuby推し
あとRubyの求人数より圧倒的にJavaが多いですね。これはSESだけでなくフリーランスでもです。まぁ、SIerの作ったシステムの機能追加とかもあるかも知れませんが、SIerが巨大なガラクタを置いて行ったなら仕方ないでしょう。あとは長続きしてるAndroidアプリがDalvik Java使ってる可能性もありますね。Kotlinに置き換えてもよいけど肥大化してるとかもありそう。Javaはライブラリが充実してるので一部ではRubyでもJRubyを使ってJavaパッケージ使ったりしてるところもありますね。
ここ数年は機械学習ブームもありPythonが人気逆転してます。IEEE spectrumのランキングはこちら。
どこかで技術を"捨てて"のようなこと言ってましたが、CS卒で技術を"捨てる"という発想ないですね。
僕も成長鈍化したら違う次に来そうなワクワクする業界に移ってるのでモチベーションの作り方は結構近く感じはしますが、こちらはコアに近い部分を触ってるので(積み上げたものがあるので簡単に深淵に手が伸びます)、積みあがってるだけで捨てる必要もなく、土台が大きくなってるだけです。勝又さんの触ってるのは表面に近い部分なので捨てざるを得ないのだと思います。特に黎明期に触ってしまうとあっという間に別物になります。というか、Webフレームワークとかはキャッチアップ地獄になるので、個人的に長居したくない領域です。クリーンアーキテクチャでも語られてるように依存は一方通行で表面から中心に向かって、コアは外側を意識しないで良いですが、表面に近づくほど内側の影響を受けます。フレームワークは言語の影響受けますし。今はdockerに環境を封じ込められなくはないけど。技術の陳腐化の話も聞くけど、表面は簡単に風化(陳腐化)しますが内側はあまり変わらないのですよ。
コンピューターサイエンスの基礎
4/24 修正。一部誤解がありました。すみません。
とあり、自分が受けてた情報処理技術者試験(資格給出たのでデータベーススペシャリストとシステムアーキテクト大昔に取りました)とCSの学部レベルの授業受けた時の知識と深さ全然違ってツッコミましたが、IPA的にはCS的な要素つまみ食いしてることになってるらしい…。確かにオートマトンとかヒープも過去問見ると出てはいるんですね。かなり簡単だけど。CS基礎だとリストとか動的配列は自分で実装します。アルゴリズムだと計算量の分析とか証明も。基本情報だと「知ってる」の深さかも知れませんが、CSの基礎になると、「作れる」までいきます。そこはご認識を。
となると、合格を目指す参考書でなく、範囲を掘り下げる参考書なら使えるかもですね。ただし、CSの学部3年でも少し勉強すれば応用情報技術者試験くらいはいけそう(午前は楽勝)とは思います。基本情報はCS概論とか基礎の入門くらいに捉えると良いんですかね。SI業界向けの大雑把な試験との認識でした。
ちなみにStanfordだと学部生の基礎クラスは100番台ですね。Computer Visionまで基礎に入ってしまう強さ。基本情報だと幅広いもののそれぞれの深さはCSの基礎クラスの1回の授業のテーマになる粒度よりだいぶ小さいですね。結構枝葉レベルじゃないのかな。
京大の教授がコンピューターサイエンス基礎のpdfを公開してるので興味ある人は下記から見てみると良いです。基本情報の内容とは全く別物です。計算可能性の話なので、計算理論の入門編ですね。ひろゆきで有名な写像の話もあります。計算理論ではオートマトンとか出てきますが、正規表現に使われてたりします。前述WFSTもオートマトンのようなもの。
後にコンピュータサイエンスを先行した時に基礎を情報処理技術者試験学んでだ記憶ないのは受かるのに効率的な勉強したからなのでしょうか。とはいえ、「基本情報取ったんでCSの基礎はあります」と言われると、いやいやいや、おいおいおいなにおっしゃちゃってるのでgふぉしg「s、となる訳で。基本情報はCSの基礎を俯瞰して本当にわかりやすい最低限必要な部分(SESでもリテラシーと思われるレベル)をつまみ食いしてるだけだと思います。応用情報技術者でも基礎相当は習得済みと言うのはは厳しい。そして、やはりつまみ食いは定着しないと思います。
taker/giverの考え方が度量狭すぎ
元々あれ?と思ったのは動画のOSSの話で、もっとちゃんとしてる人かと思ってたけど、takerだとかgiverだとか言ってて、Qiita記事にもそんな表現がありました。あーあ、と。OSS書くことは承認欲求ではないし、必要だから趣味のプログラミングとか(場合によっては仕事)で書いて、他の人も使っていいよ、と。「車輪の再発明しても仕方ないから、あるものはシェアしていこう。」それがエンジニア文化です。承認欲求でやってると思うならエンジニア文化理解してない感。giverとかtakerとか言わないでシェアし合う文化だからこそIT系は急速に成長したわけです。
承認欲求だとしたら、「見てみて、こんなの作っちゃった!すごいでしょ?!いいよ、自由に使っちゃって!!」小さい子が「できたよ、褒めて褒めて!」と言うようなテンションですね。
しかし、搾取とかいう人って…なんか、陰謀論とか好きな人?
エンジニアのモテとは
OSS書いてもモテないとかなぁ。そもそも女子にモテるの基準で仕事選ぶならエンジニアよりホストとか役者とかバンドマンとかスポーツマン目指せばいいわけで、目的も手段もおかしい気がします。そもそもIT業界は圧倒的に女子少ないわけで、サイバー系列とかは別だけど、ハンターになろうとしても狩り場がない印象。冬のオープンカーみたいな場違い感。
ちなみに使える"自作"OSSいっぱい公開してるエンジニアは普通に外資とかも含め引く手あまただと思うけど。エンジニアでモテたいなら女子じゃなくて有名企業や面白いプロジェクトの主催者とかだし、人脈重視するなら全然マイナスにならないのでは。そういうのはキャリア設計にならないんですかね?遊びでプログラミングして公開して人脈増えたら大儲けだと思うけどなぁ。そして、母数少ないとはいえエンジニア系リケジョにはYouTubeでお金の話ばかりしてるなれる系よりOSSとかにちょくちょく貢献してる有名ナードの方がモテちゃったりする(ただし見た目普通の前提)のでは?まぁ、仕事とプライベートは分けて考えた方が良いと思いますね。
正直、趣味として楽しんでコード書けない職業エンジニアには苦行だと思うので頑張ってまでやる必要ないでしょうね。プログラミングが楽しくて仕方ない人達が遊びで作ってくれるので、使う側の人はラッキーって感謝してればいい話だと思います。
まぁ、モテはネタだと思うけど、リケジョにモテたいなら当然フーリエ変換位使いこなせますよね?画像処理のローパスフィルタやらX線の画像処理、音声認識でも普通に使いますよ。まさか、フーリエ変換も使えずにITでモテ語ってるわけじゃないですよね?
上流下流を連呼するやん
動画で自分は金になる上流やる人なんで下流の技術で評価されても!的なマウンティングしてましたが、残念ながら実現できないとただの妄想ですから、下流でしか使わない、って、それボロクソ言われてるSIer界隈で良く聞く話な気がするんだけど、いまだに上流下流分けるような仕事してんの?と感じてしまいました。モダンモダン言ってても現場はアジャイルじゃないのだろうか。まぁ、一人案件なのかな。というか、上流っていうかコンサルなのでは。スタートアップ界隈含む自社開発企業では実装する人間も要件に口出しするのが普通だし、中小企業だとインフラも自分達で組むことが多いですね。なので、中小の会社だと勝又さんが数学や競プロ系のアルゴリズム使う仕事をしてないのと同様、勝又さんが組んでるようなフルフルのインフラ環境とか仕組みは使わないで実現できるような案件も多かったりします。
OSS書けるレベルの人なら、難しい案件も魔法のような実装で解決できるけど…上流でテキトーにライブラリ使えば何とかなるっしょ、って下流にぶん投げてる人なんだろうか。SES批判してると聞いた(中で働いたことなさそうなのに)けど、自分の思考パターンは悪しき下請け構造そのものに聞こえちゃうという皮肉。人は儲けてしまうと上流気分に登って行ってしまうのでしょうか。
なろう系インフルエンサーに憧れる未経験を排除するのは老害か
ストIIみたいな人が言ってましたが、未経験とか情弱に彼らの方が刺さる、と。そりゃね、楽して一発逆転思考の人達には厳しい現実より甘い嘘が刺さるでしょう。厳しいと言いながら、その厳しい世界を作ってる人達は技術で遊んで毎日笑って趣味的に稼がせてもらってるんだけども(できる人間が趣味でも技術で遊んでしまうので向いてない人は地獄と言える)。なので、向いてる、プログラミングメッチャ楽しい!と思った人はなれる系ぼったくり側でなくこっち側の遊んでお金もらえる世界に来て欲しいです。結局、現実と向かい合ってこなかった人は簡単に安易な方・楽な方に流れます。それ故彼らが今の地位にいるわけで。変わりたいと言いながら楽な方を選んでしまう底なし沼の住人…。どちらの声が刺さった人が数年後に言ってた通りだ、と思うか。まぁ、想像とギャップがあってもそこで活躍できるのを祈ります。徐々に未経験エンジニアの悲鳴が聞こえてきてる気はしますが…。
しかし、なろう系はなぜかエンジニアリングの専門職のはずなのに、人文科学系の出身がほとんどで、過大評価による収入増を目指させる指導で稼いで、それでお金が余ってもちゃんとCS学ぼうともしないんですかね。なんにせよ、未経験送り込むなら使う側でなく作る側を目指す熱意ある未経験を育てて欲しいものです。人手が足りないのはそっち側かそっち寄りな気がしてます。
なれる系で何千万、何億って稼いでると豪語する人は、伝える人間としてちゃんと学べばいいのに。大学入れば独学と大学の両方のメリデメわかると思いますが、なぜか独学系インフルエンサーって時間できてもちゃんと学ぼうとしないですよね。自分は両方普通と逆の順序で未経験エンジニアも大学でのCS専攻(修士まで)経験してるので、どちらも多少理解してるつもりです(ベースが技術大好きですが)。一部のなろう系は技術を語って有名になっても、全然ちゃんと技術を学ぼうとしない人までいてもはや信者は何を求めてるやら。IT技術よりサボる技術教える人までいて、それは技術者の技術じゃないのだが。「学ばないで通用してる」(勝又さんではない)で信者を釣ってたら仕方ないのかもですが、知ってる人間からしたら、これ、顔真っ赤になるようなこと言ってるぞ、と思うことも多々あり。そりゃね、たいていの技術、慣れれば動かすだけなら1〜3日でできるよねぇ…。
ビジネス系ならMBAとか行った方が箔が付くはずなのに、一発逆転、どん底からの成功が大好きな異常なギャンブル体質の日本の情弱勢がターゲットだからですかね。コツコツ積み上げた方が絶対楽なのになんでだらけて溜まった負債を一気に返そうとするんだろう。
みんなで幸せになれるような業界で自分だけの幸せを目指して周り不幸にしてどうするんですかね。大金を得ても満足できずにお金という手段ばかりに盲目になって、エンジニアのことを語ってたはずなのに気づいたら金の話してない、とか。そりゃね、自分の価値以上に報酬を得ようとする生き方なので、企業には人的負債になって、場合によっては会社傾くような寄生というような手法ですから。つまり、なれる系インフルエンサーに憧れてエンジニアになろうとしてる未経験者を弾くのは会社を守る効率的な手段です。会社はお前らにお小遣いやる親戚じゃないのですよ。価値以下のモノを高く売りつけてくる上に会社に貢献する気のなく半年から1年で辞めるとわかってるのに雇いたい経営者はいますかね?
本気で1000万の価値があるエンジニア目指して努力する、技術を楽しみつくしてやる!という駆け出しエンジニアなら応援するのですよ。でも、300~400万の技術力で会社を次々に踏み台にして1000万楽勝でぼったくってやる!という人が入ってきても、会社と一緒に成長しようとしてるエンジニアには有害でしかないわけです。若くしても害はそちらの方が強いのでは。
老害とか言っとけば情弱は簡単なんだろうけど…。
プログラミングやITの世界が向いてなかったり好きじゃなかったりするのは自由ですが、業界の足は引っ張らないで欲しいですね。しかし、なんで自称エンジニア系インフルエンサーって自分の現場にいなくてよかったと思う人ばかりなのだろう。まぁ、技術界隈に影響力を持つというより情弱界隈への影響力だしね。本物のエンジニアとしてのインフルエンサーは活動の場の中心は勉強会や国際カンファレンスですからね。しょっちゅう経費出してもらって世界飛び回ってる人とか、動画作成に使う時間はそっちの準備に使ってるのが普通か。
しかし、過小評価されがちなエンジニアに適正な評価を受けられるように、楽しみながら適正な待遇を求めよう!ならわかるけど、過大評価されるためには、まで行ってしまってるからおかしな主張になるんでしょうね。頼むから見せかけじゃなくて本当に価値ある人間目指して欲しいし、その基準はお金じゃないんだよ…。
富と幸せ
アリストテレスが2000年以上前に下記のように言ってるのに、2000年経った今もほぼ嘘と同義になりつつポジショントークを駆使して富に幸福を求める虚しさとは。まっとうな方法とは言い難い方法でお金を稼いでも、それが幸せに結びつかないというのはなかなか悲しいものですね。大金を得ても心は潤わず他人に攻撃的なままとなると、何を持って満足感を得られるのでしょうか。お金だけでは心は豊かにならない証明となってしまっています。そりゃ稼いでも尊敬してくれる情弱と同じだけの批難の目が向けられるわけで。多分、その延長線上に幸せはないので、没頭して幸せを感じられる物が見つかると良いですね。
しかし、飽きられて再生数減るとYouTubeと言うメディアで集客してる人達は安易なポジショントーク(嘘)に走ってしまうのかな。耳障りの良いこと言っとけば情弱は簡単に釣れるんだろうね。
最後に
そんなこんな言っても、自分と違う専門領域の人にはリスペクトしてますし、勝又さんは自分が使ったことのない技術も使ってたりします。その経験や黎明期のPhoenixへの貢献も素晴らしいです。業務コード公開できることは珍しいので、仕事のコードとはいえね。自分は最近はスタートアップ界隈なのでインフラも必要なとこは自分でやらなきゃだし、CIとか整ってないと気持ち悪いし、で自分があまりやりたくないところをやってくれるインフラエンジニアの方はいたらありがたい(けど、この規模だと要らない)。といってもロボット+AI業界にいるのでどっちかというとエッジよりになっててあまり大きいインフラ要らない…。そして時間単価1万とかなら自分でやるわ、的な。面倒くさいだけで難しくはないので。
ちなみにインフラエンジニアは下記参照。
今回は僭越ながら、こちら側の専門領域(プログラミング)を若干ズレた説明で目指させてサロンで稼ぐとかはちょっと違うのでは?という感じで自分の考えを書かせて頂きました。考え方に正解はないと思いますが、正直、なろう系の人達の話す未来に健全なIT業界のイメージがわかないです。お金はどこから湧いてくるんだろうか。実現したらほとんどの会社は人件費でつぶれます。
個人的には自分も未経験からなので、プログラミングが楽しいと思えて、向いてるかも、と思ったら実力で稼ぐ道を目指してみて欲しいです。次回紹介するけど、ちゃんと稼ぐ道はありますし、その道で稼いでる人の方が明らかにストレスフリーです。働いてみてやっぱり向いてると思ったら(向いてない人の方が多いですが)貯金して大学に入り直してちゃんとCSの勉強して欲しいと思うけど、少なくとも独学とか競プロコミュニティとか勉強会とか楽しいと感じる世界に没頭して楽しいプログラミングライフを送りつつ、次回紹介するような楽しみながら、無駄な副業に時間を割かずに成長を楽しんでお金も稼げちゃう人生(いやまっとうな方法です)を目指して欲しいと思います。
そんな次回は「なろう系が教えてくれないIT業界のお金の話」を書こうと思います。果たしてフリーランスが未経験から最も稼げる方法なのか、ポジショントークを駆使してサロンや動画で稼ぐのが効率の良い方法なのか、まともに楽しく働いて稼ぐ方法はないのか。
どうでもいいけど、「自走力」って言葉すごい嫌い。
俺ら走ってんじゃなくて寄り道(周辺技術と戯れたり)しながら遊んでんだよね。
この記事が気に入ったらサポートをしてみませんか?