渡るネットは嘘ばかり

元文系、米国大学院CS修士号持ちITエンジニア。自称エンジニアが撒き散らすゴミを少しでもキレイにしたい

ブロガー界隈の有名フリーランスエンジニアを見てプログラミングを始めないでくれ

なんかマナブやばいな、ついでに色々見てたんですが、最近技術ではない方向で前に出てきてるエンジニアが増えてるようですね。

技術ブログは一般の人は見ないからわからないかもですが、技術ブログ系はエンジニアが見るだけで、基本的にそこで収益を得てるものも少ない印象があります。技術者の業界というのは業界の発展のために、無償で貢献(楽しみとしての人が多い)する人がすごく多く、それによってライブラリの充実の恩恵として再利用性や車輪の再発明を避けたりできてたりします。なので、この人達は金儲け系のブロガー界隈では話題にならないですね。

一般向けに言葉を発信する人が少なめだったというのもあるのかも知れませんが。というか、よく見たら取り上げようと思った人全員文系エンジニアですか…。文系エンジニアは技術よりお金に向かい、理系はお金より技術に向かう傾向でもあるんですかね。

今回はやまもとりゅうけん、マナブ、勝又健太さんを取り上げようと思いましたが、りゅうけんが香ばし過ぎたので、やまもとりゅうけん特集にしようと思ったものの、なんか同じことばっか書いてるし、ほとんどアフィリエイトだし、ツッコミどころ多すぎてバカバカしくてやめました。とりあえず、この人から派生した系統多そうだからまとめて書きます。一部引用入れます。批判というより、ガチ勢からの見え方程度に思ってもらえれば。

ちなみに勝又さんは元々GREEで開発統括をやったり、ちゃんとしたエンジニアっぽいですね。ブロガー系フリーランスエンジニアには下手したら言ってることわからないのでは?早稲田の政経上がりらしいので、プログラミングガチ勢というより経験と努力で業務に特化してる感じはありますが。なので、本人も理論系は専門家に任せてるようで。最近はサロン屋もやってるようですが、ちゃんと技術にフォーカスできてるなら良い気がする。りゅうけんさんとかビジネス的な立ち振舞ばっかな気がしますね。そもそも技術なさそうだし。普通に考えると、個人のサロンってどんだけ面倒見られるの?という話があり、

mba.globis.ac.jp

スパン・オブ・コントロールとかって概念が出てくるみたいだけど、直接効果的に管理できるのは10人以下、そうなるとその下にまた10人ずつ付くような構造じゃないと、組織として機能しないだろう、って話ですね。オンラインで一方的に発信して、質問とかの中からピックアップして返すとか、オフラインでは講演後懇親会とかが限界な気がするけどなぁ。りゅうけんって人は露骨に情弱狙いっぽいので、できるエンジニアはまず来ないでほとんどが未経験の努力したくない人だろうし。自分はエンジニアとして彼から得られるものは、金に貪欲な人はこの程度のレベルでも稼げる時代なのね、という感じですね。ネットワークビジネスやってたって人だから、稼ぎは信用してないけど。あの人達の盛り癖すごいよね。200万使って150万稼いでも利益ないやん、的な。

エンジニアはお金は面白いことに情熱を持って取り組んだ結果付いてくるものという感じで、ある程度の報酬確保できたら、お金より面白いこと、成長を求める変態揃いなので、もしかしたら感覚おかしいのかも知れないけど、そういう業界です。そのせいで非技術系自称エンジニアが金儲けに一般人を食い物にする構図が出来てしまってるところもあるのかなぁ…。

勝又さんのとこは結構経歴的にもガチっぽいし、独学でもCSとか数学の重要さを理解して学び直ししてる人なので、非エンジニア系学部卒の人には良さそう。

なんか、りゅうけんベースで書いてた時にツッコミどころ多すぎてメチャクチャ長いです。マジで冗談は休み休み似して欲しいと思いながらエンジニア入門カテゴリを流し読みしたんですが、もう最後の方同じような話のアフィリエイト丸出し過ぎだし。

フリーランスについて

まずはフリーランスから正社員に戻った今のフリーランスエンジニアというものに対して思うことを。

技術が好きなら基本的にお薦めしない

自分も流れでフリーランスで稼いでましたが、今感じるのは技術者として一線で活躍したいなら、この分野ならこの人、となるまでは正社員の方が全然良い、です。在宅で働きたがるフリーランス志望は多いですが、実際のところ、今リモート勤務で家で働けるベンチャー多いですね。今の会社でも週の半分リモートの人とかいます。その働き方を求めて、なら別に余計なやること増えるフリーランスにならなくてもよいのでは、という感じ。しっかり努力して成長しての転職なら正社員でも年収は上がっていきます。700〜800万位までなら。たまに香ばしい名前のtwitterアカウントで、「自由にコードを書きたいからフリーになった」という人いますが、案件受ける範囲ではフリーランスの方が自由はないと思います。「今募集ある案件が扱ってる技術」しか使えないし、その人が使ったことない技術とか先端技術で高額でフリーランス雇うところ少ないんじゃないかな。本とかググって出ない技術やってるところは論文読みながらとか、売上に直結しないサーベイとかにも結構時間を割くので、フリーランスにやらせるわけないですしね。まぁ、その論文発表してたとか、国際会議で定期的に採択されるレベルのフリーランスなら別ですが。また、20%ルールとかあるところは仕事中も自分の好きなコードを自由に書けたりするけど、フリーランスがそれやったら「サボらないでください」と言われますね。

経費の話

フリーランスで書籍代を経費で落とせる、とか言ってる人もいますが、それは経費扱いで税金の対象になる収入から引く、というだけの話です。技術力に力を入れてる会社はたいてい書籍は稟議通せば買えます。購入後は会社の所有で自由に借りれるところが多いです。また、技術カンファレンスとかの旅費や滞在費も出してくれる上に、その間も当然給料が出ます。フリーランスで最前線にいようとすると実費で、その期間は業務時間にカウントされないので、なかなか重いです。ここが結構大きい。

技術力

また、フリーランスで技術力を上げるのはなかなか大変で、正社員は実際は半分くらいの時間は勉強に使えたりしますが、当然フリーランスの費用に学習時間は含まれません。正社員ならセミナーや勉強会を開いて知識を共有したり、登壇等で会社のブランド力を高められますが、フリーランスの学習に金を使っても無駄金、というか、学習しないと仕事できないような奴連れてくるなよ、という話になり、下手すると1ヶ月持たずに退場もありえます。ググって思い出して目的達成できる、位ならいいですが、どんな技術で実現するかすらわからない仕事だと、どうにもならないと思います。

同時に、フリーランスの募集があるのは自社での技術力があまり高くない会社が中心だと思います。フリーランスの単価は高めであるため、その高めのお金で社員が納得できるようなところしかフリーランスを利用しないし、一定レベル以上のお金を払うなら社員を雇った方が良いという話になります。レベル高いところは見積もりもきちんとしてるので、割安に感じるだろうし、教育必要なレベルが来られても余計人手足りなくなる(できるエンジニアの時間を奪う)わけで。自社開発系で余裕があるところはリリースを遅らせるだけなので、フリーランスを入れてまで急ぎません。フリーランスを入れてまでリリースを早めたい現場というのは結構炎上しがちな現場とも言え、その期間業務に追われ、しかもコードベースが洗練されていないので、毎回同じようなコードを書いたりします。

技術スタックが広がらない

上記の通り、業務のための勉強も仕事中は簡単にしかできず、プライベートの勉強時間を使ったり、基本的に忙しい(慢性的に人手が必要な)現場が多いので、リリース前とかは勉強会に出れなかったりもするので、自分のやりたい勉強に割く時間が減ります。りゅうけんさんは半年で新しい技術を扱えるところに行った方が成長が早い、的なこと言ってますが、雇う側として、なんで社員より高い金を払って、その分野未経験の人間を入れるんですかね。基本的に経験あるところでしか取ってくれないですよ。逆に経験ない分野を任せてくるとしたら、技術力の見極めができない会社とかほぼ内部にエンジニアがいなくて全て(責任も)押し付けられる感じとしか思えないですね。高い金を払う=その仕事を高いレベルで達成できる、が要求されるわけです。やっすい額ならあるかもだけど。

また、フリーランスの戦場は技術力で言うと真ん中位、上中下で言うなら下〜上の下位まで(下の上〜中の下辺りがボリュームゾーン?)なので、ホントの上の人達(フリーランス要らない会社)と関わらないので技術力に過信しがちな気がします。

結局、今できることと、その近くの例えば同じツールの使ったことない機能を使ってみるくらいのレベルが多くなると思います。普通に考えましょう。フリーランスに社員以上の金払って勉強させてたら社員キレるでしょ。何故かこの辺努力しない系の"稼いでる"フリーランスエンジニアは仕事で学べると言ってますが、理論系のものは仕事中に学べないですよ。なので、「こうやったら動く」は手を動かせば学べても、「こうやって動いてる」は学べないわけです。解析できるレベルなら別だけど。

給料

上記のようなデメリットがあるため、金の払いは良いです。その分野で即戦力として通用する程度の実力があれば1000万前後は難しくないです。隙間空かなければ。まぁ、ある程度の残業代(契約時間以上の超過料金をもらえる場合)も含んでかもですが。消費税がつくのも結構大きいですね。その反面、国民健康保険はアホほど高いです。正社員だと、IT健保は安い上2万以上の治療費は後で返ってきます。その分厚生年金は高い→将来でっかく返ってくる感じです。ブロガー界隈歩いてる人とかアフィリエイターは年金信用してないかも知れませんが、早死しなければ少なくとも貯金より全然増えて返ってきますよね。算数的な話。僕はエージェント介さずに入って、結構ちゃんとしたところだったので、末締め翌末払いで源泉徴収もあったので、その辺は楽でした。確定申告も税金は払うより1ヶ月分の給料レベルで返ってきてた。

年金

フリーランスは基本的には国民年金ですが、国民年金は平均6.5万、厚生年金は22.1万です。何もしないで年180万ほど差が付くので、フリーランス後に年金生活を30年するなら5400万差が付きますね。そして、厚生年金は会社と折半です。

allabout.co.jp

給料の壁

これはあまりフリーランスエンジニアの方は語らないですが、給料で言うと、中小企業 < 国内有名企業 <= フリーランス << 外資なわけです。実力派ベンチャーは国内有名企業よりやや下、ボーナスの差くらいかなぁ。外資Googleとかで働くと正社員の特権を持ったままフリーランス以上に稼げるわけです。技術好きがフリーランスで副業とかせずに開発に集中して稼げるのは1200万〜1500万が限界なのでは?仕事だからじゃない技術好きのフリーランスアフィリエイトみたいな副業したくないですよね…。なので、金目的の人達は怪しげなアフィリエイトYouTubeに走るわけです。理系出身なら断然正社員で外資を目指した方が良いです。これはCS卒に問わず。特にデータサイエンスとかだと他の理系領域出身も強いですね。

個人的に技術力で勝負したい文系なら、フリーランスは選択肢としてあり(文系だと外資では高卒と変わらない扱いなので、よっぽど業界で目立つ技術を持っていないと応募すらできない)ですが、本当に技術で勝負したいならフリーランスの間に貯金をして、300(国内)〜1000万(海外)位貯めて大学でちゃんと勉強し直した方がいいです。外資へのパスポートがてらちゃんと体系的に学ぶと見える景色が一変すると思います。

個人的に日本だと学部からしか入れない場合が多いので、海外で文系学部卒からのCS大学院を選択しました。アフィリエイト業界の人の言い方をするなら、「控えめに言っても人生変わります」。まぁ、こういうことちゃんと学んでる人間に独学で勝てるわけなかったわ、というのが文系の独学から大学院出た感想です。文系のフリーランスエンジニアは否定ばかりしていないで独学でもいいからコンピューターサイエンス学んだほうが良い。独学でもやってみたらちゃんと学びたくなるので。理論系はプログラミング以上に独学きつい気がしますけどね。

文系だから、と限界を置くなら、大学入り直せばいいだけなんですよ。なんでGoogleとかAmazonとか世界のトップレベルの外資がCSの学位にこだわるか考えてみて下さい。基礎の大事さ、なんてどこの業界でも同じです。あ、基礎ってプログラミングの基礎構文じゃないですよ。その裏で動いてる仕組みとか考え方です。世界は生涯学習当たり前だし、IT業界は日本の会社でもCSで勉強するのに開くブランクはマイナスになりません。日本の会社がブランクにこだわるならCSの学位取って外資入ってしまえばいい。GAFAとかじゃなくても給料良くてブランクあっても評価してくれる外資はいっぱいあります。

日本のエンジニアは1000〜1500万を限界に設定しますが(フリーランス単独か役員報酬含めて)、学位持って外資に行けるならもっと上のステージもあります。Googleのアップデートでお前のサイトはクソだ、って叩き落されながら情弱をはめて稼ぐより、よっぽどいい人生だと思いますよ。

ブロガー界隈だけで有名なエンジニアの方々の話

パット見非エンジニア系の学部出身が大半ですね。学歴で大学名出してる人もいますが、エンジニアで非エンジニア学部だと海外では高卒と同等に扱われます。日本ってビリギャルがウケたり、最少限の努力、時間で成果を出した人を尊敬する人が多いですが、言うまでもなく時間かけてる人の方が地力強いですよ。ケンカ最強を自慢してる荒くれ者と格闘技を本格的にジムで習ってる人の違い位差が出ます。それは新しい領域や技術を触る時に大きな差になるんですよね。1からググって学び直すのと、既に中腹まで土台があって細部を整えるだけの人で、どれだけ差ができるかなんて言うまでもないです。

金の話ばかり

「お金稼ぎたい」でエンジニア目指すのはお薦めしません。
「エンジニア 鬱」で検索してみて下さい。特に技術力がない間、向いてない人は結構精神やられたりします。しかも、技術力のない現場で起きやすいので、最初の段階でやられやすいため、勉強するのが楽しめないと苦しい職業な気もします。自分は学べば学ぶほどできることが増えるので楽しんでいたら上がってきた感じはありますが。

https://note.com/denkigai/n/nafff6bd87802note.com

これとか結構壮絶で。そこそこいろんなことに挑んでそうな人なんですが。それでも向いてないと辛い想いをする話。

現状のプログラミング学習支援サービスのほとんどは「Hello, World!」から「Ruby on Railsinstagramっぽいサービスを作ってみましょう」までは手厚く支援してくれるが、その先で迷う人を増やしていると言っても過言ではないと思う。

これは常々書いてきたことで、それっぽく動く何かを作ってプログラミングすげー、までは教えてくれても、それが実際実務ではおもちゃだと教えてくれない。というか、就職したことなくて、実務でガチの負荷に耐えるシステム作ったことない経営陣の教室もありますしね…。その〇〇っぽいサービスに負荷ツールで同時1万アクセスとかさせたら面白い感じになる気がします。

そしてこれは2つの失敗に共通する話だが、「プログラマーになろうとしている時点で向いていない」という考えもある。(中略)
いわゆるプログラマー、ソフトウェアエンジニアというのはビジネスで言う「HOW」のプロである。実装方法がわからなかったり、見たことがないエラーが出たときに、根気強くドキュメントを調べて動くまで頑張る、というのが仕事の基本となる(もちろん仕事なので限度はある)。
つまり、「プログラマーになるには?」という質問をしている時点で、「調べて実装する」というスキルが不足している。
たぶん業界で活躍しているようなエンジニアはほとんどが「気がついたらプログラミングしていた」タイプの人だと思う。彼らが人の何倍も手を動かしているのは間違いないが、彼らはそれを「努力」だとは思っていないだろう。一方、「努力してプログラミングしている」人たちは、彼らの領域に至るまでにさらなる精神的な追い込みをかけなければならない。

これは結構真理だと思っていて、自分は高校時代になんか自分もHP作りたいな、と思っていきなり書き始めて、気付いたらプログラミングやってた人です。一線にいる人は子供の頃にゲーム作ったとかも多いですね。そして、できるエンジニアほどリバースエンジニアリングができるので、コード読めば理解できるから、わからなかったらドキュメントどころかライブラリとか言語自体のコード読んだりしますね。基本的にプログラミングって言語やライブラリの公式ドキュメント読めばできるように情報が開示されています。

金さえ稼げれば技術力なくても楽な方がいい、という人は何かエンジニアというかビジネスマンって感じですね。金のためにITの仕事をしてるというのは、何か、好きで技術力高くてそこそこの給料で働いている会社員より社畜感が強い気がします。金のために好きじゃないことやってる、でもフリーランスは自由、稼げる…うーん。自由な人が好きじゃない仕事するってなんだろうなぁ。現場で、あいつ金もらってるけど大したことないな、と思われるのはエンジニアとして悔しいというか、軽く惨めな気分になることだと思うけど、まぁ、金目的なら気にしないか。フリーランス高収入低技術エンジニア…。技術好きじゃないし、勝負できるレベルでなくて本当に簡単に稼げるなら、希望者集めてフリーランス集団作ってエージェントやればいいのに…。こう言うと突然仕事好きなんで現場にいたい、とか言い出したりしますよね…。どっちやねん!

ちなみに情弱(ブロガー・アフィリエイト)業界の人達は稼いでる人ほど戦闘力高いと思っていますが、エンジニア業界では技術力が高いほど戦闘力が高いと思われます。エンジニア業界で稼いでる自慢してもあまり尊敬されないので気をつけましょう。徐々に技術力と収入が一致し出してるので(特に外資成するとフリーランスが副業必死にならないと稼げない額を、定時どころか短時間の"好きな"開発案件のみに集中できるようになる)、一部のフリーランスエンジニアの、技術力あるのに稼いでないエンジニアをバカにする風潮は薄れていくでしょうね。そもそも、技術力あると700〜800万はもらってるので十分だし、煩わしいことして成長できる環境から離れて100〜200万稼ぐより、好きなことやりながら外資とかメガベンチャー目指したほうがいい、という感覚の人が多そう。そういう人は世界飛び回って差額分経費出てたりしててもおかしくない。僕は好きじゃないのにエンジニアやるなんて、求められること多いし大変そうだなぁ、と他人事で思ってますが。好きを仕事にして手に職付いて給料も伴ってくれば最高の職業だと思うけど、好きじゃないなら、ストレスすごそう。

実際経験上、若干給料下がりながらでも新しい業界に挑戦した方が生涯収入は高くなりそう、っていうのを実感してたりもするので、金に変えられない将来のための投資とも言える時間はあるし、壁を超えていくエンジニアには結構必要だったりします。

まとめ:エンジニア業界では稼ぐことが最優先と考えている人ばかりではないので注意

プログラミングについて

プログラミング周りは、プログラミング教室へのアフィリエイト誘導のポジショントークだとは思いますが…。なんか、わざとなのか偶然かわからないですが、ブロガー界隈の有名フリーランスエンジニアってプログラミングがメインの職じゃないことが多いんですよね。なのに、何故かプログラミングを語ってるという…。それでか、フリーランスでレベル低めの現場が多いせいか、ちょっと仕事が出来だして調子に乗った駆け出しプログラマみたいな感覚で語ってる人が多く感じます。さすがに、ちゃんとやっててこれだと出来なすぎなので、勘弁してください、という次元で。アフィリエイト誘導ですよね?そう信じたい。

簡単・誰でもできると言う

まぁ、情弱や金稼ぎしか考えない人は大変な事したくない系が多いですよね。簡単で稼げたらとっくにバランス変わってない?という話なので、思考停止してるわけですが。その辺を事実誤認させた人手不足トークで補おうとしてる説明も多いですね。人手はないけど、それは初心者に教える時間も取りたくないぞ、という話。だからこそのフリーランスでしょ。で、最初に戻る…んですが、その辺の一攫千金思考層をターゲットにアフィリエイトで金使ってもらおうとすると簡単アピールになるのでしょう。一昔前はセドリとか、バイナリーオプション詐欺、ネズミ講ネットワークビジネスもそうですね。簡単に稼げるぞ、って。どう考えてもネットワークビジネス簡単に見えないけどね。売れるものを売るのは簡単だけど、身内でしか売れてないものを売らないといけないとか、考えられないです。これまでの人生で簡単で稼げると言われて稼げたことありますかね?なんで「自分月商500万です」、なんて文字列を信用できるのか。
実際のところ、スタンドアローンで自分の手元で動かすプログラミングはすごく簡単です。localhostフレームワーク動かしてアクセスできる、とか手順に沿って作業するだけで画面表示までいくし。環境設定のチュートリアルだけでwebの画面出ますよね。それですら作れないガチで向いてない人もいるんですが。え、日本語読むだけじゃん、的な。

そして、業務で扱うと求められるものが変わります。プログラムが難しくなる一般的な要素として、

  • 大規模アクセス
  • 並列処理
  • 組み合わせ問題

とかがパッと浮かびますね。プログラミングが簡単、と言ってる人の作ったサービスに、負荷ツールで同時1万〜10万アクセス打ち込んでみると面白いと思います。リソース食い尽くして暴れる魔物と出会えるでしょう。並列処理はマルチスレッド、マルチプロセス、マルチコア的な話がありますが、データレースとかレースコンディションの問題、false sharingとかも手を動かしてるだけだとわからない話ですね。比較的簡単だけど、DBの排他制御とかもね。組合せ最適化が出てくると、大抵がNP-complete/NP-hardになって、階乗のオーダーの問題が多く、入力が大きくなるとあっという間に現実的な時間で解けなくなる系の問題です。

また、コード面として

  • 可読性
  • 可用性
  • 拡張性
  • 実行速度

を満たした設計や実装をするには、本とかで先人の知識を学ばないと難しいでしょう。テストちゃんと書いてCI導入とかも含め。コード読んで書いてるだけだと、そこの現場のレベルしか身につかないし、フリーランスエンジニアが入れるのは、技術ある人でも中の上程度のレベルなので、ちゃんと学んで書いている人が少なく、自分で書籍とかから学ぶしかない状態が多いでしょう。実行速度に関しては、アルゴリズムとかデータ構造わかってないとなので、コンピュータ・サイエンスの基礎を学ばないと難しいでしょうね。NP-hardの問題にTSP(巡回セールスマン)問題と言って、セールスマンが複数の都市でセールスをして元の場所に戻るのに最短の経路を探す、というような問題がありますが、これは一定の街数(かなり少ない)を超えると現実的な時間で解けないことがわかっているので、近似アルゴリズムとかを使ったりしないといけないわけです。

ja.wikipedia.org

プログラミングは確かに始めるのは簡単ですが、奥が深く、一人前になるのは難しいものです。趣味で遊ぶレベルなら簡単ですね、という感じで、「プログラミングが簡単」という人は上記に挙げたようなチャレンジングな課題に取り組んだことがなく、簡単な仕事しかしたことのない経験も知識も浅い人なので信用しない方がいいです。この人達の大半はプログラミングがメインの仕事じゃない、か、難しい仕事をしたことがない事が多いですね。

いわゆる「完全に理解した」レベルでうぬぼれて、本質に触れて「なにもわからない」段階に到達したことのない人です。初心者に毛が生える頃ってなぜか無駄な自信を持つものです。後で考えるとものすごく恥ずかしいけど。難しいことがあるのを知らないで簡単と言っているのはまさに井の中の蛙に見えます…。

togetter.com

ツールとか言語は使う側と作る側がいて、もちろん後者の方が難しくて、かっこよくて、稼げるわけですが、日本で後者に携わる人が少ないせいか本質的な部分を扱うプログラムを書いたことのある人が少ないですよね。前者のプログラムは比較的簡単で、後者はすごく難しいです。難しいことを知らない、やったことがないから簡単というのは無知を晒してるようなものです。

当然簡単なプログラミングもありますが、優秀なエンジニアがついでに30秒で片付くものをメインに書く人は必要ありません。簡単な作業を自動化できずに人が必要な現場ならあるかも知れませんが、単調で面倒でストレスの多い作業な可能性が高くストレスも多いでしょう。そういった仕事を中心にであれば簡単なプログラミングだけで十分かも知れません。

まとめ: プログラミングは実現したいこと次第で簡単なものから難しいものまであるが確実に奥が深い

理系との違いがわかってない

時が経てば経つほど、理系出身エンジニアとの技術力の差もなくなっていきます。(りゅうけん)

これとかね。単純作業はそうだろうね、という感じ。難しい技術になればなるほど土台に数学力が求められるので、学習曲線に文理、というか数学力で差が出てくると思います。大学院で、この数式を実装するだけ、とかって課題があったりするけど、実装するだけって…どうやって?!とかありましたしね…。問題解決でない簡単な「データをルールに従って処理する」というような、誰でもできる"作業"では差はなくなっていくでしょう。この辺の文章を見る限り、難しい問題解決の課題、計算量が実務として問題になるような課題に関わったことがないのがよくわかります。

簡単で作業が多い、忙しいけど実力上がらない現場ではこれは正しい、という感じです。
りゅうけんさん、書籍をあまり読んだことがないようですが、コロナ社の本とか機械学習プロフェッショナル(MLP)シリーズを読んでみるといいです。別に、数式全部解ける必要はないけど、何をやっていて、どういう意図か、とかわからないとチューニングとかも無理なのでは。

現場で物理系出身の初心者が、あっという間に10年選手の文系エンジニアをごぼう抜きしたのを見たことがあります。エンジニアリングがわかってる上に、数学の土台があるので、かなり強いです。少し難しい領域になると幾何学とか代数学活きてきたりしますしね。これは⊕に閉じてるので正しく動くことが保証される、とか。そもそも電子計算機を使って行う処理なので、計算の法則が理解できるのは強いです。

文系エンジニアが劣っていると言いたいわけではなくて、前提として積み上げてきた土台が違うという話です。非技術系学部卒じゃなくても、同じくらい積み上げていれば何の問題もありません。技術の土台に数学がある。アルゴリズムが正しいことを証明するにも数学が必要。詳細に言語化する時に数学が必要なのがガチプログラミングの世界なわけです。「経験から、感覚で正しく動くと思います」、とか言われても、ガキの使いか!という話で。ちなみにプログラミングを通した数学は楽しいですよ。数式からCGで現象を再現できた時とか、より数学的な話だと偏微分とか動かしてみると簡単に理解できますし、数学は世界を表現する言語だな、と思っています。つまり、現実世界をコンピューターの世界に投影するには、数学が必要不可欠というわけです。まぁ、データを右から左に流しながら、ルールに沿って変換するような単純労働は文理の差は全くありませんが。建築業で言ったら材料を運ぶだけなら差は出ないみたいな話ですね。そういう現場に理系の人間が入ったらいる場所を間違えているので職場を変えたほうが良いです。

まとめ:文系と理系では技術力の高い難しい本質的な領域は差が付きやすく、基礎的な技術は差がつかない

数学は要らない

前のと少しかぶりますが、難易度10段階で6くらいまでは数学は要らないかも知れません。ただ、標準ライブラリ等では数学が使われているわけで、数学が要らない、というより「誰かが数学を必要なプログラミングをしている場合、数学は要らない」という話です。他に人がやっているから使ってないだけですね。ライブラリでできないことを実現するには数学が必要になることは多く、画像処理をガリガリやっている人や、機械学習の中のコードを書いている人は数学ばかり使っていると思います。結局、「プログラミングに〇〇は要らない」、と言っている場合、制約が付いています。「他の人がやってくれるなら」「それを使わない現場で仕事するなら」とか、そういうことです。当然、制約が少ないエンジニアの方が優秀で現場を選べるわけで、制約が多いほどできる仕事は減ります。とはいえ、未経験や独学上がりのエンジニアは、どこに、何が、使われているかつまみ食いしていない部分はわからないことが多いので、〇〇ができなくてもいい、と言っている場合は、制約を隠しているというより、そもそも使われていることを知らない、可能性があります。

例えばサッカーでキーパーをやって、蹴り出さず全て投げるなら「足でボールを蹴らなくてもサッカーはできます」とも言えますが、それは「サッカーをやるのに足を使う必要はありません」とは話が別ですよね。物事に制限をつけてそれを一般化して語っている状態です。

また、上司が外資上がりだったりちゃんと学んだ人間だと、アルゴリズムやシステムの定量的な解析を求められるかも知れません。「ここの処理遅いけど、計算量どうなってんの?」「は?(計算量?)10秒位だと思うですけど。」とか言ってら、いいよ、もう来なくて、という感じですね。マネージャーが定量的な根拠を求めない精神力重視の現場なら良いでしょうが。

まとめ:数学を使わない仕事、誰かが使ってくれる現場であれば数学は要らない

仕事は短期間で移るべきか

この辺から、ガチ勢は目を覆いたくなるくらい酷い話が続きます。

半年〜1年くらいのスパンでどんどんと現場を切り替えていけるような人の方がスキルは確実に上がっていくんですよね。(りゅうけん)

冗談だろ、としか言えません。半年って、大きな難しい案件だと1つ終わらない長さだけど。そりゃ上積みがほとんどないレベルなら考えられるけど、そんなレベルの人は、逆に超高額で外資とかに抱えられて、色々先端分野に挑戦してそうだけどね。
もし、これが事実なら短期のSES案件で常駐場所が頻繁に変わる下請け企業のプログラマが最強になってしまう気がしますけど…。質の良い(問題解決として難度が高い)案件を、品質の高い仕事ができる同僚とできるのが、技術力アップで一番いい環境だと思います。背伸びしてできるくらいの難度がベスト。あとは、理論的に難しい案件だと、半年で下手したら理論理解しきれない可能性すらある気がするけど。最初はもやっとした感じで、徐々に案件が進むと霧が晴れていく感覚があります。まぁ、インフラで初期の環境構築から安定稼働させて次の現場に移るなら、確かにそれはありですが、プログラミング系だとないなぁ。しかし、インフラでそんなにフリーの人間入れるものなんですね。バックドアとか仕掛けられそうで怖い。昔いたところはインフラだけSIerに任せてたこともありますが、それは会社が責任取れますからね。当時は、そこの会社のデータセンターにサーバーとか置いてたりしました。

体験として正しいとしても、それはインフラだからだろうね、という感じ。プログラミングだと半年で任されるのは表面的な、いわゆる「手を動かすだけでできる」簡単な仕事くらい。手を動かすのが大事、って言う人多いけど、それは基礎体力づくりで、要はスポーツでのロードワーク的な話ですね。慣れるには、基礎力付けるには繰り返すのが大事、という。素振りだけでHR王にはなれないけど、素振りは大事、みたいな話です。内部構造や要素技術の十分な理解が必要な仕事は半年までに任されることは稀にはあっても半年で終わってることはほぼない気がしますね。大前提として、軽い仕事を繰り返しても経験値は大して上がらないんです。簡単な仕事が早くできる人になるだけです。スライムを倒し続けても、スライムが余裕で倒せる以上のレベルにはなかなか上がりません。半裸の覆面のおっさん(カンダタ)に叩き潰されます。レベルの低いシステム業界で、自分ができるエンジニアと勘違いするよくあるパターンです。僕の業界経験2年目とかも、そんな感じでした。転職活動で自分の立ち位置が見えてから、本気で恥ずかしくなりましたが。ググってするだけの仕事を繰り返しても上手くなるのはググり方だけです。

自分の感覚では、一つの現場で学ぶことがなくなるのは1年半〜3年位ですね。半年で学ぶことがなくなった場合、それ以上難しい事は任せられないと判断されている状態、と考えた方が良いかも知れません。それか、元々簡単なことしかやらない現場だったか。簡単なことを早くできるようになるのは成長ではありません。ただの慣れです。勘違いしちゃいけないですね。想い出すだけでちょっと恥ずかしい…。

まとめ:本質的な仕事を任せられる程度には同じ場所にいた方がいい

努力しない言い訳を作る

情弱狙いだからだと思いますが、ホントに努力しない人間なら同じ現場に来て欲しくないなぁ。

paiza.hatenablog.com

グーグルが採用したいのは、ジェットコースターを選ぶタイプ、つまり学習を続ける人々だ。彼ら"ラーニング・アニマル"は大きな変化に立ち向かい、それを楽しむ力を持っている。

自称稼いでるアフィリエイトだらけのサイトのフリーランスエンジニアって、フリーランスからの視点ばかりで、企業側の視点を意図的に無視してる感じがありますね。努力する人と働きたいんですよ、企業は。特にエキサイティングな仕事をしてるところはそうです。人海戦術の、誰でも良いから人が欲しいという奴隷商のところは、仕事すれば何でもいいと思うけど、そういうところで働きたい人いますかね。

IT資格

最近、Web開発に資格は要らないと吠えてる人多いですが、実務に必要か、と言うと、そりゃそうだけど、特にSESやフリーランスのプログラム系の職種なら高度情報処理技術者の資格とか持ってたり、DB・プログラミング周りの資格持ってると、転職でも単発でも書類通りやすいと思いますよ。経歴は盛れますが、資格は盛ると簡単にバレます(合格証見せられない)からね。あと、資格を通じてその領域の幅広い知識が得られたりもします。つまみ食いしてると、いざという時にこいつ本質的なことわかってないなぁ、というのがバレます。ブログでアウトプットした方がいいとか、資格の勉強のアウトプットって問題解いたり試験受ける部分な気がしますが…。そして、受かるレベルって、突っ込んだこと聞かれて答えられるレベルなはずなんですが、ほとんどの人は資格の勉強しないで資格の勉強を叩いてるからなぁ…。自分で持ってないとか言ってると、知らないことは価値のないこと、というカチカチマインドに思える。インフラは知らんけど、未経験読者のほとんどが目指してるプログラマだと結構資格は効きますよ。特に駆け出しの間は実績少ないですし。僕は未経験で入社して3ヶ月で高度情報処理技術者の資格取ったら、かなり箔が付いて、SESの書類ほぼ素通りだったし、転職活動でも書類は強かったです。普通に未経験なのに応用情報技術者とか持ってたら、僕は持ってないけど、すげえな、と思ったりします。かなり幅広く深いですから。これは試験わかってないと理解できないかも知れないけど。ただ、受けてないとしても、有名な試験の難易度理解できない人間が面接官やってる会社は底が知れてる気が。それで仕事できるかは別だけど、実務しないでそこまで理解できるなら、かなりITエンジニアとしての理解力高いと思います。基本情報レベルでも明らかに努力している、穴のない知識体系を身に付けようとしてる意志が見えます。同レベルの実績の2人が並んだら、努力が見える方を選ぶのがまともな感覚なのでは。

例えば、会議中に、これ実現できますか?「ちょっと待って下さい、ググります!」という人間と「技術的な課題としては〜があるものの、これなら〇〇の技術で実現できますよ」とサッと出てくる人で、どちらと仕事したいですかね。かつて、SESからWeb系に転職しようとした時に「ググってわかるは技術じゃない」と言われましたが、そういうことです。ググればわかるなら単金高い君じゃなくていいよね、という話。知識が定着してないからググらないと出てこない。ど忘れはあるとしても、体系的に土台から覚えていれば、ある程度のレベルでは答えられるようになるし、体系的に学ぶのに、資格って悪い判断ではないと思うけど。ググって出てくる情報は大半が断片的だから。資格は持ってなくてもマイナスにはならないけど、取ってればプラスになる、程度ですが。少なくとも、そこの専門領域を学んだことがある証明にはなります。理論はわからないけど、ググれば答えはわかるのでググりますね!とか言われても、こいつ大丈夫か?と思いませんか。とりあえず、取らずに文句言うのはかっこ悪いのでどうかと…。そして、そういう人ほどググったコードをコピペしてバグらすというね。

まぁ、CS学位も一種の資格です。努力や実績として結果を残してプラスに成ることはあっても、マイナスになったことはないですね。決定的なプラスにはならないけど、判断材料が増えて悪いことはないです。自分の知識体系を育てて、しっかりと根の張った大きな木にするために学ぶことをやって損はないです。資格は書類の賑やかしと同時に、自分を育てるモチベーションになるものですから。努力を否定する人は努力したことのない人が多いので、大半が資格持ってないですね。自分が持ってないのがマイナスにならなかったから要らない、と言ってるだけで、持ってる場合の立場がわからないか、他人の目に見える実績に嫉妬してる感じがしますね。持ってなくてもマイナスにならない、と、持っていたら多少でもプラスになる、は全く別の話です。努力しないための言い訳は格好が悪いものです。とは言え、転職活動のために取る、みたいな目的なら、身につかないからやめたほうが良いです。自分が成長できる定期的にあるハードル位に置いておくのが良いです。

まとめ:資格はなくてもマイナスにならないが否定するなら取ってからにしないと格好悪い

勉強会

勉強会意味ない発言は、稼いでるはずなのに勉強会やカンファレンスで登壇したりしてないのを正当化したいのかな、と思いますが、勉強会要らないとか、ググればわかる、ってね…。何度でも言うけど、「ググればわかる」は技術を身に付けていないことと同じです。慣れてきた駆け出しのやりがちな勘違い。誰でもできることならできるという主張で、確かに、ググればわかることは多いですが、ググらなくても分かる人との差は明確です。知識として染み込ませてる人と、都度ググる人と頭の回転の速さの違いは明白です。そもそも、考える時に外部記憶装置使ってますからね、人なのに。外部記憶措置は数桁速度が遅いのですよ。

勉強会にはモクモクとかもありますが、ググってわからない最新の課題に取り組んでいるものや、最新のツールの導入からメリデメ紹介してるのなど色々ですね。業務で体験するのが最善の学び、と言うと自分で経験したことしかわからないけど、勉強会の追体験では他人の経験からも学べるわけです。2倍にも3倍にもなるわけで、意識の高い人達を見てモチベーションが上がったり、twitter等でつながることで技術情報が手に入りやすい状況が作れます。ツール選びも自分が確認するツールが一つ減るなら儲けものです。

ハマりどころも事前にわかったりするので、失敗してググって解決するという手戻りの時間と労力の無駄遣いが避けられます。勘所もわかってくるので、"鋭い"エンジニアになるにも勉強会はプラスになります。インフラとかって、ダウンタイムをなるべく減らしたいと思います。それを未然に防ぐための知識を得る場と考えて準備できれば、マイナスを無くすか減らせると思うんですが、落ちたらググって直せばいいと言う思想だと直すまでの時間損失が発生します。自分の経験だけでなく、他人の経験も取り込んだほうが良いのは明らかです。失敗が損失に繋がる仕事であれば経験して学ぶ、じゃ遅いと思うのですが…。というか、勉強会なんか行くより現場でググればいいとかいうエンジニアはAIじゃなくてGoogle検索に仕事奪われそうな気がするんだが。

初心者はモクモクもいいですね。1人じゃ何を作っていいかわからなかったり、家でやる気が出ない人は勉強会でコードを書けばいいのです。

登壇してないに関しては、このブロガー界隈での"稼いでる"フリーランスエンジニアは技術で稼いでるのではなく、立ち回りとかで稼いでるからと言うのが大きいのでは感がありますね。技術力は勝又さんを除いて(MLOpsだしちょっと未知)凡庸な感じか中の下くらいが多く見えます。

何より、勉強会やコミュニティ活動というのは、技術好きには楽しいものです。これが理解できないのはエンジニアとしてもったいないなぁと思います。

まとめ:勉強会は技術力を加速させ問題の予防に繋がる楽しい場

プライベートで勉強しない

プライベートは自由ですからね。その選択は自由です。とはいえ、楽しくてエンジニアやってる人はプライベートでもプログラム書いたり電子工作したりしてるわけですよ。成長の差は明らかですよね。

axia.co.jp

これの但し書きは概ね正しいでしょう

プライベートで勉強しなくても何とかなります
但し書き1:勉強しない人は勉強する人には勝てません
但し書き2:勉強しない人は勉強する人ほど給料は上がりません
但し書き3:勉強しない人は勉強する人ほど重要な仕事を任されません
但し書き4:業務時間で習得したスキルは10年後使えなくなるかもしれません
但し書き5:勉強しない人は転職が厳しくなるかもしれません

某氏のすごいところは、「努力しないこと」を全面に出してることですよね。よくクライアント取れるよなぁ…。自分がフリーランス採用する側や一緒に働く仲間だったら、努力しない人と働きたくないけど…。戻りたくなったら余裕で会社員に戻れる、とか言ってましたが、フリーランスから戻った人間としては、舐め過ぎだと思いますね。僕もそう思っていましたが、現実は大変でした。技術的にこっちの話が逆に通じない時もあったりしたけど、場合によっては、企業に属さずに働いてた人は協調性が…みたいなこと言われても仕方ないのですよ。特に、企業側の視点を無視してフリーランスでは実力と報酬のギャップが得られるような話してる人は企業側の利益から考えてマイナスな人材に思えますが。

同じような仕事ばかりしてるなら、勉強しなくても経験だけでなんとかなるんですよね。努力してないのがわかる人には新しい領域の仕事とか重要な仕事を任せたくないですよね…。正社員に戻るにしても、努力しない=成長が遅い人を取りたいとは思わないだろうね。社員の話ですが、努力できるのがわかってるエンジニアの場合、使ったことのないプログラミング言語アサインすることもありえます。基礎ができてれば、案件中に学べますから。とは言え、言語仕様をちゃんと理解しないと地雷踏んだり、最適化されずパフォーマンスが出ないので、結構な努力必要ですね。と言っても、業務中も勉強できるから、そこまで時間的な犠牲は大きくないかも。強制しないでもそういうのを楽しんで手を挙げられる人は技術の幅がどんどん広がるのは目に見えてるでしょう。フリーランスで経験ない言語となると、現場でよっぽど信頼されてからで、技術的に社員に荷が重い場合にはあるかもですが、稀でしょう。その際には、当然同じくらい、プライベート中心での努力が求められます。フリーランスは現場に仕事にくるわけで、勉強しに来るわけでも企業が育てたいわけでもないのですよ。できるからやってもらうだけなので。

まとめ:プラベートで勉強しなくても通用はするが、勉強する人間には勝てない

本は読まない

かつては入門レベルの本ばかりでしたが、今は下手なプログラミング教室より技術書の方がレベルが高いとこまでフォローしてることが多いです。

自分も留学前に陥っていた状態なんですが、ググればわかるじゃん。本買うやつ馬鹿なの?と思っていましたが、今やsejukuとか入門レベルの内容をプログラミング教室が不確かな記事で説明してるものも多く、それが正しい情報かわからない人は本を買ったほうがいいです。今後、dockerとかが入門書で用意されるようになれば、ありがちの入門者が環境構築に失敗して挫折することも減るでしょう。本は少なくとも、編集や校正を通って一流の同業者がチェックした確度の高い情報です。本当に知見のない領域ならゴミまみれのネット上で情報探すより確実です。
StackOverFlowとかは有益なのは確かで、本にも出てない情報はその辺で調べることも多いです。というか、初心者は公式リファレンスで大抵解決できる気がするけど。慣れるまで見方わからないかな。

ちなみに機械学習系は理論わかってないと実装できなかったり(APIないレベルの部分)、チューニングできないのでめちゃめちゃ本読みますね。前述MLPシリーズとか。ある程度のレベルになると、言語系は使ったことのない言語でもガチ系の本1冊で書けたりするし、つまみ食いでなく体系的に学びたいなら、本の方が良いです。本は要らないという人の知識は大抵虫食いで穴だらけです。ググって見つけた、それっぽい解決策は地雷が埋まってることも少なくないです。正しい動きはしても言語的にはNGだったり。経験で学ぶ、は確かに一番の道ですが、それだけだと情報の少ない未経験に対応できないし、理論わかってれば仮説を立てられるわけで。仮説の検証というプロセスが問題解決の基本なはずですが。

まぁ、この辺の感覚が文系エンジニアと理系エンジニアの違いなのかな。経験だけだと難易度高い問題設定だと限界は近いんですよ。特にプログラミングはね。さらに英語の文献も読めたら学びはかなり加速します。

ちなみに、会社の優秀なエンジニアはこの本は持っておいたほうがいい、という本は会社のではなく、自分で購入して机に並べてすぐに見れるようになっている人が多いです。中級に向かって本よりネットに流れて、中級から「なにもわからない」ステージに達すると、また本に戻る感じがある気がします。で、その先は執筆する側になるのですが。

まとめ:本は体系的に穴の少ない知識を学べ、情報の正しさが保証されるので結果的にコストパフォーマンス(時間等含め)が良い

経験のない座学を否定

これは結構酷いので引用ベースで。あまりに酷すぎなので魚拓で引用しておきます。これ、ガチ勢ドン引きレベルですよ。

megalodon.jp

一方、大学やプログラミングスクールだとどんなスキルを持っててどんな実績を上げてるのかも分からないような人から教わらないといけません。

ちょっと待って、この人どんな大学通ったの?神戸の大学だっけ?全部、対象外の研究室のTAとか、道で震えてるところを拾われたバイト、とかが教えてたのか?大学の授業って、基本的に教えてる科目を専門分野にしてる教授とか、研修室の博士課程の人間が受け持つものなんですが。完全に専門家で、スキルも開示してるし論文もわかるはず。これはガチでビビる。有力ベンチャーとかは大学教授が顧問でついてたり、サイバーエージェントでも働きながら博士取ってた人もいるし、ある程度以上のレベルのクライアントで働いてたら、アカデミックを下に見ないと思うけどなぁ。流石に、この文章は後から「大学」も足して気が狂った文章になったのだと信じたい。二日酔いの朝に最初に目が合った見知らぬ女性に求婚するようなレベルで意味がわからない。

なので、個人が可視化されたエンジニアの人達から学ぶ方があまりハズレを引かなくて済むんですよ。もちろん期待はずれだと思う事もあるかも知れないけど、少なくともプログラミングスクールや大学で教わるよりもまだマシだと僕は思います。

情報発信=可視化というか、論文の採択とか技術系の登壇とかの実績のほうがSNSでのインフルエンサーであるだけよりよっぽど信用できると思います。少なくとも、「素人に人気のインフルエンサー」と「アカデミックな領域で先端の研究をしている教授」のどちらが信用できるかは言うまでもないはず…。冗談でしょ、としか言いようが。インフルエンサーになって自分の実力を勘違いしてるのでは…。この人藤沢某みたいだなぁ。

結論プログラミングをどこで学んだとしても長期的に見るとそんなに大差はありません。

あなたそもそもプログラミング職じゃないでしょ。基礎構文だけで言えばそりゃそうですが、長期的にそれだけの仕事する人って…。そんな言うならAtCoderで1ヶ月で黄色とか行って見せて下さい、という気持ちです。コーディングなら大差ないかも知れないけど。WordPressって技術力で言えばMarkdown使いこなしてブログ書くのと大差ない感だし。中級から上級の間にあるものすごく高い壁を超えるための鍵は、ほとんど大学で学ぶ内容、というか大学院で学ぶ内容にあると思いますよ。特に応用のアルゴリズムはかなり差がつくと思いますが。別に、独学でいけるなら大学入らなくてもいいけど、ガチ数学ですね、その辺は。基本的に、こういうのは経験したことのある人間しか判断できない話で、自分の経験がないものを軽視するのは自分の成長に自分で限界作ってるか、見て見ぬフリしてるだけですね。

こんなこと言うと身も蓋もありませんが、エンジニアは座学でどれだけ勉強したとしてもそこまでレベルアップしないんですよ。

これは独学から大学に戻った経験からして、座学が必要なのは、本質的な問題を解決する場合で、表面的な問題を解決する程度ならそうかもね、という感じですね。動的計画法とかBinary Indexed Treeとか、ひたすらコード書いてるだけで身につきますかね?貪欲法なら思いつくかも知れん。証明は出来なそうだけど。big-O記法とかでアルゴリズムの解析できますか?最適なデータ構造の選び方、説明できますか?なぜ、その暗号が安全か説明できますか?座学が価値があるかは、座学をちゃんと受けた人しかわかりません。文系科目から関係ない仕事に就職するのと同じノリで、大学で学ぶことを評価されてもなぁ、という感じ。おそらく、本質的な問題を抱えた事例の問題解決に携わったことのない人の言葉です。こういうのを見ると、やっぱり、エンジニアとして情報発信するなら、独学でもいいからコンピューターサイエンスの基礎は勉強して欲しいな、と思います。どう裏で動いてるかわかって最適化したコード書ける人と、なんとなくこう書くといいらしい、おまじない!って言って偶然似たようなコードになった人のどっちが信用できるか…。まぁ、説明してもわからないでしょ、でおまじないで煙に巻く人も多いですが。

なので座学ではほとんどレベルアップはしません。それはJリーグを目指すサッカー少年が、ピッチに上がらず必死にルールブックやサッカーの上達本を読んでいるようなものです。

うーん、今時、トップレベルのサッカースクールは戦術をボードとかで学んで、ポジショニングの意味とか、それぞれの動きの狙いを教えた上でコート上で反復すると思いますけどね…。脳の最適化として、ただ身体を動かすんじゃなくて、考えて、意識して動かすと成長は驚くほど早くなるんですよ。その意識するため考える種にスポーツでも座学は必要なんです。昔身体に覚え込ませる、って言ってた反復は、結局は脳の伝達回路の最適化です。正しい経路を理解して、その道を太く強くすることは大事です。

ameblo.jp

CSの授業受けたことがないからわからないのかと思いますが、座学って座学だけで完結するわけじゃなくて、座学で理論を学んでそれを応用した技術が課題で出て実践するんですよね。仮説を立てて検証するのがエンジニアリングの基本だと思うんですが、この人の考え方だと、いきなり仮説を立てずに実践して失敗してやり直すみたいなイメージに見えます。トライアル・アンド・エラーにしても仮説は立てないと無駄死にしまくると思いますが。リセットボタン押し放題の子供の遊びじゃないんですよ…。仮説を立てるためには理論が必要で、理論を証明することも必要で、その辺は座学なわけですよ。ただコード書いてればいきなりひらめくロマサガみたいなシステムはエンジニアには搭載されていないのです。天才なら車輪の再発明できるかも知れないけど、それ、最初から学んだほうが良くね?という話で。この辺は必死にプログラミング教室とかコンサルに向かわせる手法ですかね。この人のブログ的には後者だろうけど…。

プログラミングの学習は人で選ぼう!

人で選ぶなら体系的に俯瞰でCSの技術をわかってるCS卒をお薦めします。パフォーマンス・チューニングとかハードの要素も強いけど、並列処理でfalse sharingの問題とかコード書いてるだけじゃわからないでしょ…。

megalodon.jp

ただ別にね、勉強会でわざわざ学ばなくてもググって学んだらいいんですよ。僕はそれで十分だと思うんですよね。
(中略)
なので、既に現場に入ってるような人はわざわざ座学で学ぶよりも仕事を通して学んでいった方が絶対効率が良いんですよ。

もう、ガチですげーな、これ。今年ですよ。5,6年フリーランスやってこれって、マジでフリーランスって成長しないんだなぁ、という圧倒的な証明ですよ。どれだけレベルの低い現場担当してんだ…。圧巻ですわ。この人、フリーランスですよね?フリーランスに経験ないことを学ぶような場を提供する会社あるんですね。フリーランスは仕事で学ばせてもらえる機会、圧倒的に減ると思いますが。僕は座学で知ってて、課題レベルで書いたことあって他の社員も外部の人間も経験ないから、で任せられた話とかもありますけど、それは知識があったからだしなぁ。知識を学ぼうとせずに完全に現場で学ぶんでしょ?フリーランスで?ウソでしょ…。傭兵が鍛錬せずに戦場で学ぶ、新しい武器があったら戦いながら覚えればいいと言ってる感じ…。死んでダメージ受けるのはクライアントだが。

結論ですが、僕はフリーランスエンジニアになる為の勉強はしてません。ほぼノー勉です。

エンジニア向いてないのでは…。かなりガチ目にエンジニア向いてないのでは…。優秀なエンジニアは趣味で勉強しちゃったりしますね。本人も自分が凡人って言ってて、向いてる優秀な人間が毎日楽しみで勉強してて、凡人がノー勉って…。でも、金はもらう( ー`дー´)キリッ、的な。この人がネットワークビジネスにハマったのわかる気がします。それとも、これは"フリーランスエンジニアになる為の"で限定した引っ掛け問題で、影で優秀なインフラエンジニアになる勉強はしてるのでしょうか?

paiza.hatenablog.com


例え1日10分だとしても、1年でノー勉の人とどれくらい知識に差ができるんでしょうね。まぁ、仕事としてお金のためにやってるとか言ってるし、それでこのブランディングなんですね。こんなプログラミングは簡単だとか言って蟻地獄に引きずり込まないと稼げないなら他の仕事やってほしいなぁ…。確かに、動くだけのプログラムを書くのは簡単ですけどね。まぁ、そんな簡単なプログラムに高いお金払おうと思う人はいないですよね…。入り口は簡単だけど、ゴールのないめちゃくちゃ長い道、と言えると思います。

基本的に自分の市場価値が上がる要因になるのは現場でやったことのみだからなんですよね。

おいおい、あなた、他人の市場価値を判断する立場になったことないでしょ。SIerから即逃げ出して派遣からずっとフリーランスで、他人の市場価値の何がわかるんですか…。レバテックで受注した案件の額面とか程度なんだろうけど、エンジニア業界で一度、ちょっとレベルの高いところで就活してみたらいいと思うけど。特にプログラマ職だと技術課題出るとこ多いから、ちゃんと学んでるかバレますよ。たいてい基礎技術なので、基礎技術軽視して表面的な仕事しかしていない人は落ちます。

とは言ってもプログラマーやインフラエンジニアの仕事が好きで好きでたまらないのであれば勉強会に出るのは全然良いと思いますよ。だけど、僕はぶっちゃけエンジニアの仕事なんて金の為にやってるだけなんで。

金のためにやってるエンジニアが、"参加者多数の勉強会で既出の解決策"を知らずに失敗したら、プロ失格だと思いますけどね。金のためにやっている人ほど必死でやらないと好きでやってる人に勝ち目ないと思うけど。まぁ、同じフィールドで戦ってないという話か。勉強会では"転ばぬ先の杖"を配ってるんですよ。しかも無料。○○みたいなブログ書く時間あったら行ってみたらどうですかね?一度行ってみたのがレベル低い会だったとか?この回のエントリー書くより、よっぽどいい時間の過ごし方だと思うけど。そして、こんなこと言いながらフリーランス薦めるって…まぁ、アフィリエイトではめ込むためだろうけど、酔っ払って書いた記事かなんかじゃないのか、これ。異常なクオリティの低さなんだけど。中学生の読書感想文のできの悪い方から何番目から取ったような内容ですよ…。この頃からアフィリエイトで放っておいてもチャリンチャリンし出したのか、軽く○○ってるんじゃないかって言う質の悪さで本当にこれからエンジニアを目指す人には絶対読まないで欲しい

まとめ:座学で理論がわからないと言語化(アルゴリズムの証明や計算量等定量化含む)ができないので、独学でも基礎技術は学ぶべき

githubはない

githubで自作アプリ公開すべし、と言いながら自分が持ってない人多いですね。自称稼いでるフリーランスエンジニアの業務実績のほとんどはサイト上にしかないです。仕事でしかコード書いてないとそうなりがちだけど。そして、Qiitaもなさそう。

まとめ:技術系で有名になるならgithubくらい持ってるべきだし、持ってない人の技術力はあやしんでよい

公式ブログがWordPress

プログラミング簡単とか言ってるのに、自分のブログをWordPressで作ってる人ばかりというね。WordPressが悪いとは言いませんが、web系の技術の練習とかに使えばいいのに。「このサイトもRailsで作ってます、マジプログラミング簡単」とか言えば説得力出るのに。かつて勝又さんもマナブの件ので言ってますが、WordPressって技術的にレガシーだし、せっかく技術を試せる場を持ってるのに、移行も面倒で古い技術をわざわざ使い続けるってどうなの?技術のアンテナどうなってるの?話に出せる程度に表面はなでておくけど、人には手を動かせ、と言いながらも、実際手は動かさない、って感じですかね…。前に絡んできた人もそうだけど、プログラミング教室薦める記事書くのに自分はWordPressでサイト作ってるって、激しく説得力ないんですが…。ちなみに勝又さんは2013年頃にGREEWordPressいじってますね。経験者の発言。当時GREEですらWordPress使ってたのか、というちょっとした驚き。

labs.gree.jp

前にも書きましたが、WordPressCMS(コンテンツ管理システム)やブログと呼ばれるジャンルの製品で、カスタマイズも簡単だし、開発者よりユーザー寄りの製品です。プラグインのバグとか色んな条件に引っ張られるし、技術を楽しんでる人は公式ページの技術としてはあまり選択しないのでは。というより、しないで欲しい。せっかくのサンドボックスなのに。プログラミング系の仕事の人はWordPressプログラマの仕事と思っていない気がする…。どちらかと言えばデザイナが少しプログラムした方が良いものになりそう。あ、ちなみに、ソース表示したらプラグインとかにWordPressプラグインを示すコメントとか見えたりするんですよね…。見えていいのか、それ、と思ったりもする。

まとめ:WordPressでHPを作ってる人は開発者というよりデザイナー・ユーザー寄り

求められてるスキルセットの提示が低すぎる

2年程度で十分だからフリーランスになるべき、という話が多いですが、2年の実力って、SESなら60万くらいかも知れませんが、その60万のうち20万位は会社の信用が乗っていて、何かあったら責任取る、という安心もあるので、実際のSESの額は高めになっていて、フリーになると額は落ちると思っていいでしょう。このレベルの人は何十万人もいると思われ、もし一定数が会社員より稼げる、とフリーランスになったら、同じ報酬額の要求水準はかなり上がるでしょう。単純計算で中抜きなくなった額と考えがちですが、会社の信頼とかの額を無視しちゃ駄目ですね。この2年程度で60万、例えば4年で100万もらってる人間がきた現場の7年働いてるプロパーが月給50万だとしたら、そのフリーランス追い出すか、そういう評価する会社辞めるのでは?そうしたら、人手不足でフリーランス呼びますかね。で、さらに人減って変わりにフリーランス入れて予算上がって…その会社潰れないか、それ。打ち出の小槌でも開発してんのか?技術力低くてもフリーランスになれば稼げる、というのは採用する側からすると、そういうことですね。技術力落ちてコスト増えるという話。それで会社潰れたらある意味人手不足解消ですね。人の足りない会社が減る、という斬新な解決策です。

会社側の視点から言うと、技術力の低いフリーランスを入れるのは経営上のリスクになりうるんですよ。

マナブの○○ロードマップもそうですが、商材とかサロン系で、技術より立ち振舞い的なの中心な人は、提示する「1000万を目指すためのスキルセット」が駆け出しレベルですね。CS学部でインターンしてたら、新卒の方ができそうなレベル。

note.com

この人のも結構微妙です。僕が2年程度で学べた内容だし、テスターは開発職につながってないですね…。デバッガーとかって専門職ですよ。すごいよ、あの人達。このスキルセットだと、CS上がりなら1年要らないかも知れない。この人、経営頑張ってるっぽいのに、なんでこういうの売っちゃうんだろう。しかも、この人情報系出身っぽいのにテスターを経由する合理的な意味が何一つ見つからない…。「研究生」って学位ないのに東大研究生を経歴で書いてるのもなんだかなぁ、感。本業で頑張って欲しい。

今はそういうレベルで高額もらえる見積もり失敗案件が結構あるかもですが、フリーランス増えたら奪い合いになるし、そうなると需要と供給のバランスで単価落ちるし、徐々に適正化していった場合に、現実では現場で学べないフリーランスが今の技術だけでできる仕事を選んでいくとかなり手詰まりになる可能性が高いし、正社員に戻ろうと思った時に技術が型落ちになってる可能性もありますね。

それにしても、案件のつなぎ目で掘り出し物案件捕まえてを1年繰り返すってかなりの運ゲーに思えますが。僕は非エージェントでの現場で重宝してもらって色んなプロダクトのお手伝いしたから安定してたものの。技術力を上げると運の部分が減って下限が上がると思います。

というか、継続的に案件を出してる会社はフリーランスより社員雇った方が伸びるし、安上がりなのに気付いた方が良いと思うが。まぁ、それに気づかないか、使い捨てのつもりの会社しか案件がないと考えるのが妥当でしょうね。

まとめ:自称1000万超えのフリーランスエンジニアの開示してるスキルセットは大半が見積もり失敗案件じゃないと稼げないレベル

人手不足の理由の勘違い

わざと勘違いしたポジショントークなのかも知れませんが、IT業界が人手不足なのは、純粋に人が足りないSI業界と雇いたいレベルの人間が少ない自社開発業界、という分断が起きていて、未経験とかが入りたいのが後者なのに、後者は未経験者要らない、なので、ミスマッチ半端ない状態ですね。デスマーチとか絶対無理、と言っても未経験者とかスクール出たてが入りやすいのは前者なのだが、という。しかも、日本でも大手ベンチャーとかは海外から雇いだしてるので、別に未経験とか経験の浅い人は要らないんですよね。

報酬のギャップがわかったり、正社員化の方がクライアント側の選択として良い、という海外で普通の判断が基本になると炎上案件の、低単価で人手が必要なとこ中心になって、高単価はガチ強エンジニアが独占しそうな気がします。フリーランスが増えたら、上の方も増えると考えるのが通常。

なかなかバブリーな話ですが、現場経験2~3年のエンジニアが普通に年収2000万円超えする時代もすぐに来ると思いますよ。(りゅうけん)

これをガチで思ってたら頭お花畑だと思うけど…。クライアントどんだけ儲かってんだよ、という話。利益社員に還元した後、フリーランスの技術力低い人間にもそれだけお布施出せる規模って想像つかないなぁ。もしかして、社員の給料上げる前にフリーランスの報酬上げる想定なんだろうか。それは完全に脳に何か寄生してる気がするけど。経験2,3年が70万とかもらえるのは既にお布施案件な気がしますけどね。品質とは何かわからない、とりあえず早く作れる(バグ埋めまくりな)状態で納品してるだろうし。委託でその辺のレビューとかさせられたらかなりきついですね。往復ビンダで途中から自分で書いた方が早い状況になりそう。まぁ、フリーランスが入ってくる会社ではもう働かないと思いますが。

まとめ:人手不足は誰でもいいSI業界と雇いたいレベルの人が受けない自社開発業界とで別の事情

侍推し

いやぁ、sejukuはないよねぇ…

侍エンジニア塾では、全国およそ80名のメンターが在籍しており、ほぼ全員が現役のフリーランスエンジニアです。他のスクールでよくある、「普通の情報系の大学生」とかではありません。

情報系大学生なめてますが、よくあるメンターはスクール上がりの文系大学生な気がします。日本は知らないけど、まともな学校なら、下手な実務経験者より初学レベルの知識(パフォーマンスの最適化とかコードの品質とかじゃない話)では情報系の大学生の方ができてもおかしくない。

というか、紹介されてるエンジニアほとんど独学系で、関わった技術以外、特にハードレベルとかエコシステムわからなそうな気がします。まぁ、そういうレベルでも十分仕事になるものの、代表で書くレベルとしては物足りないというか、正規の教育受けたことがない人が教えるってねぇ…。文学部出て法律事務所で働いてる人が民法の授業教えるような感覚…。なんで、これで安心して教われると思えるのか、自分には北と西が入れ替わった並行世界の人かなんかなのかと感じますね。

まとめ:アフィリエイトのためならsizeof(32)を信頼する人もいる

ネットワークビジネスの手法?

自分の意見を否定する人間は既得権益を守りたいからだ、とか老害言う人って楽して一発逆転思想の人に多いですよね。そういうの、露骨に情弱狙いな気がする…。
エンジニア業界で前述の「完全に理解した」「なにもわからない」「チョットデキル」ってのがあるんですが、結構初期にエンジニアが自信過剰になってるときがこの「完全に理解した」という最初のフェーズであることが多いんですよね。自分も独学からのシステム業界で1年位で会社上位くらいの技術力と言われる感じになって勘違いして、転職時にうわー、めっちゃ井の中の蛙だった、と気づきましたが、自分が本質的に何もわかってない段階にすら行ってない時ってなんか過信しちゃうんですよ。独学で結構業務でやること大体何でもググればできる、って状態で。でも、結局それって難しいこと何も求められない現場だったという話で。なんか「完全に理解した」同士が褒めあってるように見える…。

Google及川卓也さんとかも言ってましたが、優秀なエンジニアってインポスター症候群が多い気がします。自分もこれな気がする。自分が優秀かは置いといて。自分が今の立場で劣ってる、まだまだ足りないって思い続けるから勉強し続けて努力し続ける部分はあると思います。どこまでいってもまだまだだと感じる。すごい人に会う度にそうやって気を引き締めてます。どうも文系上がりのエンジニア系インフルエンサー(ブロガー界隈の有名人)は自己評価が高く仕事をなめてる感が強いですね…。

twitterとかのエンジニアアカウントでも「@未経験」とか「音大出身」とか別業界から的なのが付いてると、ああ、未経験者の中でチヤホヤされて向上心なくした人達ね、一緒に働きたくないなぁ、と思います。僕は未経験・独学からエンジニアになって、社内で評価されても、ちゃんと学んだ人に勝てる気がしなくて、少なくともそれを売りにしたいなんて思えなかった。お陰で成長できたし、学校に戻るきっかけになったし、向上心を持ち続けてると思ってたりします。未経験からエンジニアで活躍してますとか言われてもちゃんと勉強した人にはマイナスになってもプラスにはならないですね。未経験からGoogleまで行ったらすげえな、と純粋に褒めますが…。
まぁ、その辺のアカウントはアフィリエイトとか商材屋なんだろうけど。

ガチ勢が業界を正しく把握してもらいたくて書いてる記事を、金儲け目当てで遠ざけようとするって、ネットワークビジネスで囲い込みの手法としてネットでの批判を信じるな、見るな、とかあった気がする…。それ信じる人はエンジニア業界じゃなくてネットワークビジネス目指して欲しいなぁ…。

プログラミングが難しいと言ってるのは既得権益を守りたい、って言ってるのを信じたい人は、AtCoderAtCoder Beginner Contest(ABC)をやってみて下さい。茶色〜緑が普通の企業で身に付けて欲しいレベルの実装力なので、ABCの最近の全6問だと4問目位、昔の全4問の3問位が一人前に必要なレベルの実装力です。

まとめ

ブロガー系フリーランスエンジニアの発言の注意点として

  • 経験のない重要なことを軽視して否定してることが多い
  • 努力が伴う知らないことを価値がないことと否定していることも多い
  • プログラミング職じゃないのにプログラムが簡単という
  • 企業側の視点を全く考えずフリーランス簡単稼げるばかり
  • だいたいリンクはアフィリエイト

等があるので、情報の見極めは慎重に。ガチ勢噴飯ものの記事も多数です。特に自分のやってないことは必要ないと言うが上のレベルでは必要なので注意が必要です。この人達がエンジニアの代表として露出して行くと、エンジニアって努力しないで稼げる仕事だよね、と思われるのかな。嫌すぎる。大半のエンジニアは、クライアントを欺いて実力以上の額を得られる現場探しに努力するのでなく、クライアントが満足できる仕事をするために努力しているものです。

未経験、独学系を全面に出してるエンジニアはやったことがあることだけ詳しく、知らないことが多いと思います。その人が知らないけど実は重要なことを必要ないと言っているのを信じるのは非常に危険です。特に「ググればいい」と言ってる人は信用しては駄目です。その人がメンターに付いたら、要は、それは「ググればわかる」という答えが大半でしょうね。ググればわかるはその人の技術力ではありません。コンピューターでも人でも記憶はコアに近いほうが処理が速く優れているものです。また、ググってした仕事は身につかないことが多いです。次もググるでしょう。ググればできる、って主張はググらないと何もできないの裏返しなんですよね。PCあればあなたは要らないという話なんですよ。

同様に経験重視の人はhowはわかってもwhyがわかっていないことが多く、表面的な理解しかできていないことが多いでしょう。最初は経験で慣れるのは重要ですが、問題が複雑になるほどにwhyがわかっている人が強くなります。howだけわかるのは言わばハリボテなので応用には対応できません。

僕はもう関わらないレベルの現場だと思いますが、この人達が言ってるレベルのフリーランスが大量に流入してきたら逆に現場の人手不足は更に深刻になりそうで御愁傷様感です。予算持ってかれて教育必要なんでしょ。現場の人間として悪夢ですよ、それ。


あ、ちなみにフリーランスになるだけなら簡単ですよ。
税務署行って開業届を出すだけなので無料5分で出来ます。

俺は覚悟を持って努力してエンジニアになりたい人は応援したいと思ってるので、来年は無料で深い部分まで、"本当は知っておいて欲しい座学"と"数学"と"プログラミング"自体を繋げた講座記事を書こうと思ってます。金のためだけ(余裕ないなら多少金にもフォーカスした方がいいとは思う)でなく、技術を楽しいと思って向上心を持って努力して、業界を盛り上げてくれる人はウェルカムです。願わくば、人生変わって学校入り直してまでガチでやる人が増えて欲しいなと思います。プログラミングに関しては向いている人、向いていない人、すごく向いていない人がいて、向いている人には難易度も簡単なものから意味不明なレベルまで色々あるし、技術を知ると解ける問題が増える、ガチレベルだと悩ましいけど、成長を感じることが多く楽しいものなので、楽しいと思った人は座学というか書籍もちゃんと読んで、ただ動くプログラムでなく、スケールできて読みやすく拡張性のあって品質の高いプログラムを書けるようになって欲しいな、と思います。自分もまだまだ道半ばです。20年くらいコード書いてますが、未だにPRレビューがすんなり通らない(皆一発で通ってない気もするけど)。この道は死ぬまで終わらない気がします。だからこそ面白い。

しかしびっくりする長さに。

[12/27 後日談]
いやぁ、こんなにバズると思いませんでした。1日でほぼ1年分位のアクセスとか怖すぎる…。普段しないエゴサーチとか軽くしてしまいました。

文章が長いのは自分でもわかってて、これは言い訳させてもらうと、最初は某氏(今更)のエンジニア入門カテゴリの記事を、一番古いのから読みながら、ピルクル吹きながら、ゆるゆると引用しつつツッコミを入れてたんですね。それが2万文字超えた辺りで、ツッコミどころ多すぎて収集がつかん!となって、更に、あれ、また同じ記事?もしかして・・・タイムリープしてる?!(色々混ざってる)とかなって、引用を最少限に削りながら、類似記事をまとめたりしたため、ちょっとダラッとして重複のある記事になってしまいました。3年ちょいの記事に対するツッコミ、なので、むしろ「短い」と思って頂ければ(おい!)。しかし、3年以上の記事のツッコミが1エントリーで終わる内容って…。そして、時系列の記事からカテゴリにまとめるの大変だったんですよ。

元々中身のスカスカな記事に内容を突っ込みながら文字通りツッコんだ感じなので、もし、何かしら、この記事から持ち帰れるものがあれば幸いかと。「ググってわかるは技術じゃない」は貰い物ですが、この言葉はもう10年以上忘れられない。自分の慢心をぶっ壊してくれた言葉です。CS卒だと、「そうね」位かもですが、未経験・独学からのガチでやってきたい人達には知識欲をそそる種を蒔こうと試みました。未経験とか初学者層にはわからなくても、"そっと閉じない程度"に抽象化しようと試みたつもりです。また、細かいネタが挟んであるのは、ただのツッコミでは重いだけの長い文章になるので、ニヤニヤしながら最後まで読めれば、と。全くツボにはまらないと、長いだけの駄文になるやつ。

そして、技術者が技術を語ると技術原理主義という何かになるのか、という気付き。個人的には知らない技術は知りたいし、それによってできることが増えたら楽しいことも増える、という素敵なループがエンジニアの一番の楽しさだと思いますが、スタンスが違うと確かに怖いかもですね。全ての人を読者として設定するのは無理なので、スタンスが違うならスルーして頂ければ。技術は向き不向きあるし。しかし、「技術」が中心にない「技術者」って「何者」なのでしょうね。違う肩書を名乗った方が心理的に楽かと。とは言え、本当に伝えたい層は140文字以上読めない気がしますね…。どうせ、「稼げない奴の嫉妬」で終わるんでしょう。価値基準が幻覚の現金で、現実見せられるとそれしか言えない壊れたラジオになる人達ですから。「ジョージ逃げろ!ケツ燃えてるぞ!」「出た〜!嫉妬〜!!」…って、一体何回焼かれたら気が済むの?そう思いたいのだろうけど、金を見せびらかす(儲けてると言ってるだけだけど)と御老公の印籠のように情弱は信じてしまう、という…ネットワークビジネスと同じなんですよね、結局。ハリボテにいつまでも気づかない、気付きたくないのね。「王様全裸だぞ!」って見たまま言っても「いや、バカには見えない服着てんだよ」というあれ。ん?それ、結局全裸じゃないか。あと、元文系卒ですが、高校理系で学部は心理学なので、なんちゃって元文系かもです。経歴詐称気味ですみません。今はML/AI界隈の人間です。

最後に、拙い文章を最後までお読み頂き、ありがとうございました。文章下手くそのツッコミはね、いや、僕は前回のが1年以上ぶりのブログ更新だったくらいで、プロの作家ではないので、ご容赦願えれば。Qiitaとかは箇条書きとコード中心だったり(最近の活動はOSS貢献中心)もするので…。3万字超えると、1人で誤字脱字探してとか句読点チェックは精神的に無理ゲーです。誤り率で言えば悪くないのでは(慰め)?!とりあえず、句読点増やしました(更に長くなる&打ちすぎた感)。句読点難しい。日本語難しい。大丈夫です、もし、僕が執筆して本を出したら、編集さんとか校正さんがよろしくやってくれます。所詮ネット上の戯言、何卒、ご容赦を!!

それでは、良いお年を!

初心者プログラマ、未経験者がプログラミング教室選びの前に読んで欲しい話2019(ランキングとか比較記事は信じちゃ駄目)

久しぶりの更新です。新しい業界に飛び込んで、毎日技術書を読んで新しい技術エリアに必要な知識を付けたり、プログラミング力の底上げをしたりの日々でした。会社にかなりすごい人がいて、薦められた本を読んだりして目からウロコなことも多くあり、1年が経ったら、転職前に技術書で理解が浅かった部分もかなり深まりました。やはりエンジニアリングは積み上げです。基礎をしっかり固めると応用は簡単に感じるようになります。逆につまみ食いばかりで必要なことだけやってると毎回同じ基礎を調べて時間を喰ったり、非常に効率が悪いです。本当にすごい人のいる場所で働く、少なくとも一人はそういう人のいるところで働くのは重要です。
※ ただし、ある程度実力がつかないとそういう会社には入れない

時間が経ったのでもう一度アフィリエイトの記事でプログラミング教室を決める前に知っておいて欲しいこと、2019年版をお送りしたいと思います。
また、noteで無料で基本、有料で掘り下げた話を書こうと思っていましたが、無料で全部書くことにしました。ただ、内容としてはちょっと浅めで、ちゃんと知りたいなら、でAmazonアフィリエイトを貼ることにしました。なので、最低限は無料で学べて、もしもっと書いて欲しい、もっと知りたいならリンクから本を買ってちゃんと読んでね、と。実際のところ、自分で学ぶ習慣もエンジニアになってからは非常に大事です。僕はアフィリエイト目当てのリンクがあると紹介者のパラメータを消したり(ガチのなら踏んでもいいけど大抵は金儲け目当て)する人ですが、まぁ、どうせ買うならそこから踏んでくれたら、記事でちゃんと学んでくれてる人がいるのがわかってもっと記事書く意欲になりますよ。的な。ちなみに、金儲け目当てに紹介してるのと違い、現場で求められたりすごい人に紹介された本を中心に紹介するつもりなので、かなり良書揃い、というか、この言語やるならこの本は読むべき、この領域ならこれを読むと差がつく、という本しか紹介しません。意外とそういうのまとまってるところ少ないですよね。それが本来のアフィリエイトだと思います。

正しいアフィリエイトでどれくらい稼げるかも報告しようかと思います。というか、本業とOSSとかで忙しくて若干やるやる詐欺になってますが。稼ぐ気はあまりないので、小遣い程度、講座を書くために読む書籍代位になればいいや、程度でいいかと。

ちなみに、ここでは結構強めの記事が多いので、別でブログ作って運用します。ブログ+自サーバーの予定。ブログは時系列になって流れちゃってまとめて辿るのが見にくいので、自サイトで項目でまとめた目次から飛ばす予定です。はてブロとか結構SEO強そうなので乗っかちゃえばいいかな、的な。基本一方通行ですが、それでもサポートが欲しい人が多ければ何かしらのサービスやるかもですが、一部のプログラミング教室の言っている、「わからなくなったらすぐに聞くのが大事」ではなく、「聞く前にできるだけ自分で理解する努力をする」というシニアエンジニアに求められる資質を得られるよう導きたいと思います。わからなければ聞け、ってずっと下っ端なのが前提ですよね。できるエンジニアは他の人が知らないことを切り開かないといけないし、そのポジションまでいけないと”プログラマで一攫千金"的な人の期待する収入は得られないと思います。あと、いい会社だと、知らない領域や製品を触る際は教えるというよりペアプログラミングとかしますね。

  • SIer上がり(5〜10年前?)のコンサルが暗躍してそう
  • 情報ソースをちゃんと見よう
  • スキルにWordPressというブロガーを信用しない
  • アフィリエイター向けのプログラミング商材
    • マナブはやばい
  • わかる人に聞きましょう
  • 検索してみよう
    • 無料の勉強会もいっぱいあるよ
続きを読む

AIエンジニアとソフトウェアエンジニア

AIベンチャーに入って数月が過ぎました。Qiita書いたり発表もしたんですが、いかんせんインプットが多くて、咀嚼しきれてない。アウトプットが少なくてすみません。
以前書くと言ってたNoteもそろそろ始めようと思っています。内容としては、無料版でよくあるプログラミングの入門をできるだけわかりやすく、有料版でその裏側のコンピュータ・サイエンス的な知識や原理を説明して、無料でもとりあえずコードは書けるように、有料なら一生エンジニアとして生きていく土台になるような知識や手法が身につくようにかければ、と。そこら中にある入門レベルと同じような技術書をなぞるようなプログラミング教室に行く必要ないよう、有料部分も100〜200円で販売予定です。3000円程度の本と同等の内容で10万以上取ってるところが多くて、正直、今はやっと日本も技術書のレベルが少しずつ上ってきて、すでに難しめの技術書はプログラミング教室以上の内容が書いてあることも増えてきています。言語は無料ではpython辺り、有料版では深く理解できるようCやC++も追加しようかと。需要ありそうなら、無料か会場費だけ出してもらって、初心者向けのもくもく会やってもいいんですけどね。わからないことを聞いたり、どう学んでいいかわからなければレベルややりたいことに応じて課題をあげたり、というような。

英会話とかはネイティブスピーカーと話さないと身につかない部分があるんですが、プログラミングはそういうものではないので、どうも自分の好きなプログラミングを餌に金稼ぎをしてるだけに見えてどうにかしたい気持ちが強いです。そもそも、プログラミングは初心者から踏み出すと視界が変わります(数学的要素が入った瞬間世界を表すことができるようになります)が、そういう魅力を伝える経験や技術力を持ってない人が経営してるパターンが多くて。初心者レベルなのに、少しかじっただけでプログラミングは難しくない、誰でもできるとか言ってる代表を見るとため息が出ます。そんなに浅くないぞ、と。高校から20年位いじっててもまだまだ底が見えない。むしろ、どんどん深くなっていっています。プログラミングは残酷なほどにセンスで、初心者から先はセンスか数学力かのどちらかが強く求められる。趣味として教えるならいいけど、それで即戦力とかありえないから、と思ったりするわけで、その辺がこのブログを始めたモチベーションになってたりします。

数式ベースのいわゆるコンピュータ・サイエンス的な領域だと、経験や知識が一定量あるエンジニアが本を読んでも、論文を読んでも一回で把握できない。何回か読んだり、参照実装見たり、自分でいじってみたり、土台となる論文を読んだりしてやっと理解できる。そして、理解した瞬間に一気に全体が見える。ジグソーパズルみたいです。語学もそうなんですが、一定の理解まで霧がかかってよく見えないけど、突然視界が晴れて一気にわかる。そんな感覚です。

AIベンチャーに入ってから確率変数と戦ったり、ディープラーニング系の案件にも関わっていますが、そんなこんなで今回はAIエンジニアに関するエントリーです。
AIエンジニアは年収のレンジがかなり高く、人材不足という情報もよく目にすると思います。とはいえ、実際のところ、AIエンジニアを名乗って情報発信しているAI領域のソフトウェアエンジニア(AIに特化した技術や先端AI技術の理解力はないもののAI系APIは叩ける人)やデータ分析の人がすごく多いなぁ、と思う今日此の頃。
ちょっとその辺を話したいと思います。AIエンジニア風の普通のエンジニアだと年収も普通のソフトウェアエンジニアと大差ないので、非常に情報が錯綜して、さらにそこにAIスクールが便乗して金稼ぎをしてる印象を受けます。というか、アフィリエイトのせいで、ネットのIT業界に関する情報は9割5部間違ってると言ってもいいと思います。

ちなみに、DIVE INTO CODEのAIコースがほぼほぼオライリーの本と同じ内容と気づいて吹きました。1万円ちょいを100万にする錬金術と言うか、入門書理解できない人達を機械学習エンジニアを名乗る、実態はソフトウェアエンジニアとして、AI風ベンチャーに入れられるという…。DIVE社はまともな方だと思いますけどね。特に非エンジニアが技術を知る、というレベルなら最適だと思います。ちなみに、某社はAI導入1年延期した上50億で訴えられてました…。AIコース出身ってそういうところの送り込まれてそう。ちなみに下記の本は初心者から抜け出したエンジニアなら独学で理解できます。独学で理解できない人のための教室になってるんだろうけど、一線のお金も良くて有望なAIベンチャーはソフトウェアエンジニアでも論文読んだりします。
カリキュラム↓
diveintocode.jp
オライリーの本
www.oreilly.co.jp
www.oreilly.co.jp
www.oreilly.co.jp

目次見ると内容がほぼほぼ一緒。スクレイピングがカリキュラムから消えましたが、これの1冊目を見たんだろうか。スクレイピングってデータ分析寄りで、そもそもwebサイトにとって情報は資産なので、robots.txtGoogle以外弾いたりとかしたり、データ資産を守るために、途中からログインさせてページ伸ばさないと全部表示されないところも増えましたね。webサイト作る側からするとスクレイピングってして欲しくないし、データ提供の意志があればAPI公開するのが普通です。分析でバッチで1日1回セールス系でとかならギリギリなレベルな気がするけど、普通はデータセットが提供されるか、お客さんに作ってもらったり支援したりなので、現場でスクレイピングって聞いたことないです。少なくともうちでは。どちらかというとデータ分析とか情報収集が目的な印象。機械学習だと、教師データの場合ラベルを付けないといけないので、無作為に取ってきた場合、結局ラベル付けにかなりの時間がかかるので、データセット使ったほうがいいし、スクレイピングで集めたデータはデータセットとして売れない可能性高いし…。正直、あまり魅力感じないです。

数学は、偏微分とかできないと数式わからないけど、高校レベルって書いてますね。前提だから、授業では大学レベルなんでしょうか。偏微分は高校のカリキュラムにないです。ちなみに解析学もわからないとちょっときつい気がする。ラグランジュの未定乗数法とか、KLダイバージェンス統計学か。その辺は高校では習わないはず。線形代数微積はゼロからだとそのレベルでしか出してない気はしますが。機械学習で求められる数学は大学レベルです。数学科レベルではありませんが…。大学の多くの理系学部が専門領域をやる土台になる共通の数学クラスって感じですね。

自分の肌感では、実はAI業界に関してはガッツリプログラム書いてきた人より、物理とか別の数式バリバリの領域でシミュレーション程度にプログラム書いてたとかって人の方が強いです。当然AI/機械学習を専攻してた情報工学の学生は別物です。数式とか論文(当然英語)の理解がベースになってくるので、コードの量は業務システムよりだいぶ少ないと思います。手を動かせばいいわけじゃないのがこの領域です。まぁ、理論の理解が正しいかは書いて確認して行った方がいいと思うけど。

目次

AIエンジニアに関する混乱

まずはこの記事を読んで下さい。
gendai.ismedia.jp

ここでAIエンジニアやAI企業として許容されているのはAIの技術自体を"作っている"エンジニアや企業です。これはその通りだと思っていて、AI系ライブラリを使ってAPIを叩いてるだけだったり、データをAPIを使って分析してるだけでAIエンジニアを名乗ってる人が非常に多いです。フリーランスでAIエンジニアを名乗ってる9割がAPI使いですね…。実際のところ、フリーランスで、業務委託で個人で稼げる(数式完全理解レベルと思われる)だと年収3000〜5000万いっておかしくないです。人月500万とか聞く話で。大概が依頼する側が価値基準がなくて出しちゃってる場合が多い気がしますが。こういう人は引き合いが多く、「AIエンジニアになれた理由」、的なブログエントリー書くより、技術系のことを書いてることが多いです。未経験から、文系でAIエンジニアになれた、的なことを書いてる人はアフィリエイトか、実際はAIを扱ってるところでAIの技術自体は作らずに、誰かが作ったものを使っている、いわゆるただのソフトウェアエンジニアの可能性が高いので注意が必要です。AIエンジニアを目指す人がそういう記事を見ても違うところにたどり着きます。
ちなみに今の会社ではAPIと言っても言語的に速度が実用レベルじゃないので、学習はpythonフレームワークでやって、結局のところ学習した重みデータが有れば、同じ構造で組めれば言語またいでも問題ないので、C++とかで推論はやってたりします。

データ構造とかわからないと話にならない

実務レベルの速度を出す部分ですが、C++いじるポジションだと、当然ですが、データの量が膨大なので、データ構造というかSTLを使いこなせないと結構話しにならないと思います。Eigenライブラリ使ったりもします。初心者が書いたら学習終わらない、推論が実務で使い物にならない、というのは頻発しそう。
www.amazon.co.jp
この辺熟知してる人もいます。データ量的にもアルゴリズムやデータ構造わからないとちょっとつらいですね。pythonでのサーベイ(論文の再現実験)とかだとある程度フレームワークが吸収してくれますが、英語の論文を理解して、数式からコードに変換するような能力が求められます。正直、こっちの方がデータ構造とか理解するより遥かに難易度高いです。

C++ポジションは(ちゃんとできる)人材が少ないようですが、C++をEffectiveシリーズ(技術書)とかのレベルで使えることを望まれます。C++やっててよかった(というか、Cできるからいけるだろ、とゲーム会社で使って、すごい人にレビューで鍛えられたら自然にEffective的な書き方になってた)と思ったりします。まぁ、正直言語はなんでもいいけど、最近はWebとかUI寄りよりネイティブ寄りな言語の方が楽しいです。ちなみにWeb系はUIに近づくほど修正が多くなって残業に繋がります。ここ、もう少し寄せたいね、で見せたら、寄せ過ぎだから少し戻そうか、なんてやり取りがあったり、UIはカチッと決めても画面で見たら変わることが多いので結構稼働は上がりがちです。デザインが上がってくるの待ってたら納期ギリギリできて巻き込み事故の被害にあったり…。

AI業界で必要なこと

学ぶ意欲はかなり必要だと思います。今の会社でも情報工学系の修士上がりが多いです。それでも皆毎日勉強して(会社でもできる)、どんどん知識を広げて、アンテナもすごいから新しい情報をシェアして皆で高めあっています。多分、数式は最低限何を意図しているのか位わからないと辛いです。自分で書いて解いてできるレベルの人はそこまで多くない印象。コードを書くのには、コーディング力というより、必要な技術を知っていて理解することの方が重要かもしれない。先端技術なので、基本技術はほとんど知ってる前提で書かれてるし、基本的には統計的手法をプログラムに落とすので統計的な書き方が何を意味してるのかわからないと厳しいです。つまり、社会に出た時点でだいぶ前を走ってた、速い人達がその後も結構全力で走り続けてる業界です。好きでないと怖い(皆頭良すぎ)業界なので、覚悟して飛び込みましょう。

というわけで、ただ書いてある通りに、言われた通りに実装するとかでなく、何を意図して何をする必要があるのか、ということを理解しないと実装できません。実装時間より準備時間が長いです。そういう意味でも、数式や数学的な表現に慣れてる別領域の博士とかが一線にいるのがこの業界の特徴ですね。

未経験からAIエンジニアを目指す人に対して

他の理系領域での経験がある人はガンガン挑戦した方がいいです。そういう人にはプログラミング部分教えてでも来て欲しい気持ちはあります。理系の素養がない人はまずはそこから始めましょう。システム業界でもいいから、まずはプログラミングの仕事に慣れつつ、コンピュータ・サイエンスの基礎となるアルゴリズムであったり、データ構造から始めて、同時に微積分、線形代数解析学統計学辺りの本で基礎数学力を付けて、5年後位を目指すといいと思います。今のエンジニアの半数以上が従事してる、データを変更したり加工したりして表示して出し入れするだけのコーダーの仕事はどんどん自動化が進むと思います。ただ、問題解決の領域は自動化が難しいので、そこを目指して、プログラミングコンテストとかも楽しんで、本当のプログラミングに触れていって欲しいと思います。

エンジニア採用の受難は今も続いている

あまり思想的なことを書いてもあれなのですが、やっぱり正しく生きたいと思うことが多い今日此の頃です。今回、久々の会社員ですが、電車の中で若干ハゲ散らかすような年齢のおっさんが顔を真赤にしてスマホを連打したりぐるぐる回したりしてる人とかを見ると非常に残念な気分になります。自分が上司だったら絶対重要な仕事を任したくないな、と…。前にも書いたかもですが、この数年、行動を決める時、脳の機能的に最適な方法をよく考えます。楽だけど正しくない手段を繰り返すと脳は間違った経路を最適化して、その道を太く、通りやすくしてしまい、間違いをおかしやすくなる。常に最適な方法を模索し、納得できる正しい方法を繰り返す、そうやって生きていかないと人は簡単に愚かな方向に転がっていきます。歩きスマホとか、自分に甘すぎますよね。いい大人が周りの人に世話してもらおうという幼児のような思想が見えて気持ち悪いです…。

宗教的な人間ではないけど、いつも神様が見てる、ではないけど、どこで誰が見てるかわからないし、正しく生きたほうが自分が不利になる可能性が下がるし、気持ちよく生きられると思うのですが、なんだか、周りを見てるとちょっと自分おかしいのかな、とか…。最近、オフですべきこと(ゲームとかもこれになるかと)を公共の場で周りを気にせずにやっている人が多くて、疲れます。見知らぬ人のオフのだらしない姿はなるべく見たくないものです。ネットビジネス(ここでは中身のない金儲け目的のアフィリエイト・ブログを指す)業界で読者が見たくない記事を検索エンジンの上に持ってくるのはSEO対策の技術というより、ゲーム理論で言うところ「裏切り」とか「裏切り戦略」に当たるもので、基本的に検索エンジンは「協調戦略」を優先して裏切りにペナルティをかける造りなので、SEOというのは本来協調によりみんなが幸せになる情報が上にくるようにすることで、裏切りは協調の仕組みを騙す戦略であり、アルゴリズムの変更で騙そうとしているのを見抜くということが進められるわけで、検索アルゴリズムがAIとして内容理解のレベルに来た時、ネットビジネスは滅びると思います。早く滅んでくれ。

長くかかった転職活動ですが、感じた違和感をまとめたいと思います。とりあえず、日本トップレベルの技術力の会社に決まってよかったです。
エンジニアを大事にする、技術を中心としたキャリアを意識する会社が増えている一方、採用現場ではまだその変化に付いてこれてないように思えます。採用担当のエンジニアですら、中からの視点が強くなりすぎて何かを見失っているように感じたりも。やはり、転職するしないは別としても一定期間毎に外からIT企業というのを見る機会を作って客観的に自分を、会社を見つめ直す方がいいように思えます。ITエンジニアにとって転職は基本的にキャリアアップです。色んな会社で色んな領域、技術に触れることは技術者としての引き出しを、広い視野を育てられます。日本では基礎のある人が少ないため専門家を好みますが(領域を変えると新しい分野の基礎となってる部分から学び直す必要があるため)、深さを持ったジェネラリストか研究者レベルの専門家のどちらかが技術者の目指すところなのかな、と思います。職業エンジニアだと、深くなる気はないかも知れませんが。

また、技術力とは何か、転職活動を通じて疑問に感じたりもしました。APIやライブラリをリファレンスを読みながら実装するのはただの作業で慣れれば誰でもできることな気がします。システム業界とかだと、この作業が早くできるだけで技術力があると勘違いしがちです。自分もそうでした。でも、それって説明書を読みながら電化製品を使える、とかそういうレベルですよね…。家事に慣れると効率的に早く済ませられると思いますが、それは技術と言えるのかどうか。

アカデミックな世界では、例えば、論文を読んで、それを実装しようとしても、どう書いていいかわからなかったりします。試行錯誤を繰り返して、論文を読み返して、正しく動くとこまでやりきると、これまでやってた実務での実装が歯ごたえなく感じたり、今までの何だったんだ、と感じます。競技プログラミングでもシビアな基準で条件を満たすコードを書いていると、世界のトップクラスのトラフィックが桁違いな会社で求められる水準の違いを感じます。

人事と現場での認識のずれ(人事系の事案)

希望と違うポジションに書類通過後に変更される[10/27追記]

某メガベンチャーD社の得意技です。過去2回あって、どちらも、面接を辞退しました。書類通過の連絡があって、ホッとしたのもつかの間、その後、ポジションを変更したいと連絡がきます。経歴的にこのポジションで面接したい、と言ってくるわけですが、経験のあるポジションでなく別のポジションを希望するというのは志願者は十中八九理由があって違うことをやりたいと思っています。僕の場合は成長の鈍化で、その領域の大半のことができるようになってきて、この先に学べることが少なくなったと判断しました。その中で、業界的に忙しく、巻きで進めても勉強会に参加したりする時間が取れるわけでなく、他のメンバーの作業が分配されて積まれる状態で、仕事を通じての成長より作業になりかけていました。スマホゲーム業界はこの数年日本のITの中心的な位置にいたように思えますが、機械学習/AIの技術の急激な発展もあり、参加事業者が増えすぎてパイの頭打ちになって、色んな意味で先が見えてきたところもあり、新しい領域に挑戦しようとしてたのに、卒業したいポジションで面接と言われ、希望したところなら面接しないと伝えられてお断りしました。それなら最初から書類落としてくれ、と。D社には以前の同僚が何人か働いて、皆転職しています。元々の希望部署も、その同僚の知人が夢の有りそうな領域だけど、夢のない仕事をしてるようで転職する、という話を後で聞きました。ちなみにこの会社前も同じことしてきたんですよ。10年前くらい。その時はシステム会社からの転職で、ゲームエンジニアを希望してたのですが、書類通過後に子会社の航空系サービスのシステムで、と言われてお断りしました。今回、ゲームエンジニアとして成長して、AIエンジニアに応募したらゲームエンジニアで面接したいとか、自社で育てられないのでしょうか?いいとこ取りしたい感じを受けてしまい、途中からD社を紹介したいというエージェントが何人かいたのですが、社名を伏せてた時点でD社以外なら、とNG出して断ってました。一生関わることはないでしょう。印象が最悪です。中では多少挑戦が効きそうですが、最初ゲームエンジニアから数年を無駄にしてまで入りたいほどエンジニアとして魅力ある会社でもありません。このやり方(成長して戻ってきてね的な)ができるのは世界的に有名で技術力もある会社くらいです。会社の規模で技術者への魅力は決まりません。日本は技術力が高くなくても、エンジニアに魅力がさほどなくても大きくなってるIT企業が結構多いです。

技術力を測ろうとする非技術者の人事担当

外資系M社の話ですが、あちらから声をかけて頂き、最初に電話で人事の責任者と話して、最適な部署を決める、というような話でした。
しかし、向こうからお声掛けくださったのにも関わらず、圧迫面接に近い感じで関西弁でぶっきらぼうに対応されました。この人事の方は日本の大企業から転職してきた人だそうで、せっかくの外資系なのに感覚が非常に日本的でした。専門分野に分かれてるということで、何が得意かということを聞かれ、フルスタック的にやってきたのでインフラは弱めだけど、それ以外はだいたいできるという話をしたら、広すぎる、とのことで…。別に複数部署の候補でもいいと思うんですが、なぜ1領域に絞る必要があるのか、1つのことしか深くできないと考えるのか理解に苦しみます。さらに、スマホゲームを作ってると言っているのに、カーネルとかドライバを書いたりしていますか?と聞かれて、これは駄目だ、と思いました。スマホゲーム入れるためにROMを焼かせるのか、と苦笑しました。非技術者的にはカーネルとかドライバって技術力が必要そうに感じるかも知れませんが、別に難しくないです。癖があるだけです。学部レベルの授業でカーネルを書きましたが、コンパイラが厳密({}は改行が必要だったり)とかそういう程度で、カーネル内のコードをリバースエンジニアリングできれば特に難しくもなんともないです。自社サービスをやっている会社ではバグの原因の特定は問い合わせとかすることはなく、自力で解決することが多いです。なので、DBに問題があればダンプを取って解析したり、バグレポートでもスレッドダンプから原因解明とかは当たり前にやっていて、クライアントもサーバーもやっていましたが、両方やったら深さが半分になるわけではなく、どちらも専業と同じ深さを求められるので、その辺でやってたことを伝えたら、深いですね、とかコメントされましたが、日常業務で当たり前にやってる作業の一つでした。逆にCG系の専門的な話したら、「ほぅ…」とだけ言って話を変えられました。絶対わかってなかったと思います。

それで、声を掛けてくれた人に、とんちんかんな質問をされたことを伝えると、キャリア相談会に来てみないか、と誘われ、行ってみました。クラウド系の部署なんで、一番向いてない部署かな、と思ったんですが、4つの領域の内3つのプレゼンがあり、ケーススタディの部分で遅延の原因を予測してみたら当たってました。たいていシステムが遅延する時はネットワークかDB含むI/Oの問題が多いですよね。実装の問題であれば、突然遅くなるというより、最初からずっと遅いです。
で、あれ、意外とクラウドでもいけるかも、とは思ったんですが、個別相談で、その職はサポート職だったので、そこで製品や中の技術に詳しくなって開発職に、というキャリアパスを相談したら、ゲーム業界の実装力の高さを理解していただいた上で、開発をガチでやりたいなら本社にアプライすべきだ、というアドバイスを頂き、プレゼンでもかなり先の長そうなピラミッド構造を見ていたので、そりゃそうだな、開発に移るまで時間かかりすぎだ、と思ってました。
それで、声を掛けてくれた方に、そう言われて、自分でもそう思うと辞退の意味で感謝を伝えたにも関わらず、数週間後にお祈りメールがきました…いや、一番苦手な領域でも余裕だと思ったんですが、という。そもそも辞退したつもりだったので、不愉快な感情だけが残りました。

技術にこだわるキャリアパスを用意するのに業務未経験で書類を落とす

コンピューターサイエンス(CS)をちゃんと学んだ人間にとって、業務で携わったことのない領域でも、土台となる知識や技術はあります。それぞれの領域は相互に関連しあっていて、キャッチアップが簡単だったりするし、基礎のない業務経験のある人と比べ、1年後の成長は比べ物にならないと思います。CSのマスターを持ってる人間の実感として、完全に0な領域って殆どないと思います。そもそもの問題として、技術者として、マネージメントに移らずに、技術を極める方向でのキャリアパスを用意する会社が増えているにも関わらず、業務経験がないと面接にも呼ばない。ということは業務経験があって技術側のキャリアパスを進む場合にそういう会社では残りの技術者人生20年以上をその領域で過ごさないといけないということなんでしょうか。技術好きで最先端の技術も扱いたい人間にとっては地獄のような環境ですね。技術者のできることは基本的に知っていることです。確かに、業務経験があれば、知っているのでできますが、入社後にキャッチアップして身につけることは可能なわけです。エンジニアの素質は才能と素養だと思います。素養部分があると新しい技術を覚えるのが早いです。なぜなら関連技術を知っていたり、似た数式を理解した経験があると、既に脳内に思考の経路が細くてもできてたり、転移させて理解したりできるわけです。才能面は実装課題出せば、最低限の実装の才能は見れるし、素養は学歴である程度見れるでしょう。CS出てる人間を技術課題も出さずに業務経験がないから、と落としていたら、そりゃあ人手不足になるのも当たり前です。こういう会社の技術者は新しいことに挑戦する余地が無いように思えます。

ちなみに、その領域の業務未経験(当然他の領域でそれなりに活躍してた前提)で入って迅速にキャッチアップして通用する人と、業務経験がないと使い物にならない人と、どちらが優秀なエンジニアでしょうか?聞くまでもないですね。業務未経験の領域にapplyした人は基本的に落とす、という企業は後者を前提として採用しています。そうするとどうなるか。無難な人しか集まりません。その分野しかやっていない人なので、その部署はその分野のエキスパートでも他の事はできない人ばかりが集まります。成長より安定を取る人ですね。中には本当にその技術が好きでとがっている人もいますが、一握りでしょう。何かにこだわりがある人は領域というより、言語であったり特定の技術な気がします。それ以外のこのカテゴリの人達は新しい技術や知らないことがあっても、それより、慣れたことをやりたがる人です。職業エンジニアの割合も高い気がします。そういうところではやることが決まって尖った仕事はできるかも知れませんが、周辺技術を使えない故に、尖りすぎて製品化ができなかったり技術の組み合わせによるイノベーション的な発想は出てこない気がします。IT業界自体や、プログラミング未経験なら仕方ないですが、他で十分な経験があるのに、その領域が未経験で書類で落とす、となると学習能力が高くて成長意欲のある人、そして天才的な人の挑戦すら門前払いということです。成長意欲がある人ほど落ちやすくなるわけで、技術課題くらい出してみればいいのに、と思う。何故か、この手の企業は異常に自社の技術力に自信を持ってたりしますね。過信というか。特化型のエキスパート揃えてるだけなんですが。個人的には3〜5年同じ領域でやれば研究職以外は成長が鈍化して、数年の経験の差が価値を産まないくらいになると思ってます。爆発的に広がってる機械学習界隈は数年じゃ鈍化しないように感じますが、それ以外の領域は個人差ありますが、できるエンジニア基準だと3年もいれば大抵のことができるようになるかと。できないエンジニア基準だと差が大きくなりますが、そんなんターゲットじゃないでしょう。と言っても、ここ数年で機械学習系の学術領域に踏み込んでる企業では、優秀なエンジニア間でも、1年の経験で結構差が付いてもおかしくないですが。

経験上感じたのは、アカデミックなベースを持っていて、学生ベンチャーから始まった会社とかは結構、業務未経験を気にしない傾向が強く、学術的にも最先端を追っていて技術力が当たり前に高い事が多いです。逆に、文系やコンサル上がりの社長、要はサービスの企画から当たった企業は経験を重視している傾向が強いように思えました。尺度の問題なのでしょう。おそらく、学術的な知識や理解力が必要な分野(AI/機械学習/IoT辺り)は前者が伸びて、後者はそれ以外の分野に強いように思えます。後者は無難な技術者を人数揃える系ですね。どちらを好むかは転職者次第だと思います。なので、分野と採用方針のミスマッチが起きてる会社は大きめのところでも鈍化するじゃないかと思ってます。

この、適応できるかを考えず優秀な人材を落とすタイプは、所謂、やって後悔するか、やらなかったことを後悔するかで言うと後者になります。オンラインテストで一度時間を取ればある程度の素養を見れるんだから、中途半端に時間取って書類で考えるより、書類を流し読みして少しでも適応能力ありそうなら、そのフローに流し込めばいいと思います。

勘違い技術者

クライアントエンジニアを落とす理由がwebの技術力不足

ちょっと笑っちゃった話。某大手K系列の会社で、最初の頃はクライアントエンジニアも受けていたのですが、面接ではそれなりに盛り上がり、技術力もそこまで高いとも思わず、これは余裕だな、と思ったのですが、なぜか、webの知識と経験が足りない、と落とされました。クライアントエンジニアを受けて、ですよ。お前ら何をやらすつもりだよ、と。webだけで5年以上は経験あるんだけど…。そこから先はwebは経験や慣れが要求されるものの変化が激しく、細かい修正で時間取られて成長に繋がりにくいため避けてます。webはUIの細かい修正とかで残業かさみがちなイメージ。ちなみに、ここに偶然、昔の上司(マネージャ)が転職したんですが、3ヶ月で辞めたい、技術力低すぎ、と言っていて、落ちてよかった、と思いました。

技術力じゃなく慣れを見る技術課題[10/27追記]

最近急成長のM社ですが、ここもクライアントエンジニアでした。で、課題が、自社アプリ風のAndroidアプリを作るという課題で…しかも、今どきNative開発かよ、と。半分以上の時間がUI組む部分でしたし、つまらない上に、クロスプラットフォームフレームワークとか使ってる人より、むしろ愚直なNative実装に慣れてる人なら簡単にできるだろうな、というものでした。あれで技術力は全く見れないと思います。アルゴリズムが必要な部分も全くなく、まぁ、Kotlin使えるか、程度は見れるんですかね。それ、いるの?的な。言語を数種類使えるエンジニアにとって新しい言語って別に何のハードルでもなく、下手するとリバースエンジニアリングだけで使えたりします。当然言語仕様は全て把握すべきですが。いくら会社に勢いがあったとしてもあんな問題出されたら、他に数社内定でたら絶対行かないでしょう。ここは連絡途絶えました。エージェントにお祈りきてるかも知れません。時間の無駄なので、そういう技術課題はむしろ技術者に不安を与えるし、止めたほうがいいです。そんなもので技術を見ようとするリーダーとか現場って何を仲間に求めてるの?と思いました。あれだと技術力が担保できないので入った後のチームでの開発が大変そうで、業界で名の売れてるレベルの引く手数多の人は課題を見た時点で辞退すると思います。金余ってて研究開発に資金投入できるにしても、周りの人間が優秀じゃないと技術者は伸びていかないものです。自分へのハードルを下げてしまうし、情報を集めてワクワクしてもそれを共有できない、一緒に未知の世界に挑戦できないと優秀なエンジニアの居場所としては物足りないのではないでしょうか。

企画力を求めるエンジニアドリブン

某大手R社系列で、技術者からの提案でサービスが生まれることもある、などと、技術者の意見も重視してる環境を求人票で謳っていたのですが、面接で、あなたならどんなサービスを提案しますか?と聞かれてポカンとなりました。有名なサービスを複数持ってるのは知っていましたが、内部のデータとかサービスの実装とかわかりません。それで突然サービスを提案しろって、それはエンジニアのサービス提案のやり方でしょうか?エンジニアから提案をする場合、サービスの実装やデータ(材料や設備)を知った上で、論文や技術書を読んだり、実装面でピンときて、こういう面白いことができるんじゃないか、とインスピレーションが湧いた時に提案するものであって、何もなしに持ってるプロダクトからサービスを提案するのはエンジニアのやり方じゃないと思います。料理人の面接で、冷蔵庫の中身も現行のメニューも見せずに「今冷蔵庫の中にある食材で作れる新メニューを提案しろ」と言われてるようなものです。そういう状況では車輪の再発明が起きたり、的外れな提案も起きます。技術的な土台を知らずにサービスを提案するのは企画職の仕事でエンジニアのやることじゃないです。エンジニアから技術的な視点でのサービスの提案からプロダクトができたりする、というのはGoogle的な技術者の発想を活かせる環境ですが、技術者にも企画を要求するでは話が全く違います。その質問した方はインタビューで非常に志の高い感じで、エンジニア視点のことを言っていたのですが、おそらくエンジニア発信で会社に大きく貢献するプロダクトを作ったのだと思います。それは素晴らしいことですし、誇っていいと思いますが、その自信から、こういう質問をすると方向性が間違ってしまいます。あれではエンジニアにも企画力を求めますよ、という意味の質問になってしまい、技術好きで技術ベースに深掘りした物づくりしてる人は逃げるのではないかと感じました。この会社は結果が来る前に第一志望の内定が来たので結果がわかりませんが、おそらくお祈りだったと思います。ちなみに上記K系列でもうちでやりたいことありますか?とか聞かれて、ECのアプリで提案とか言われてもなぁ、的な。企画しに入りたいわけじゃないんですよね。基本的に、現場ではチケットやisuueとして改善案が溜まっていて、エンジニア発信のサービス改善はそれに対する提案が多いので、特に企画力がなくても支障はないですし、企画力が重視されたら本末転倒です。エンジニアに企画力を求めるなら企画職は何をするんでしょう?いないのでしょうか、そこの会社に企画の専任者は。そもそもの話として、外から見た程度の内部の事情を自分の技術とミックスしてカネになるような企画を提案できるなら、転職せずに起業しますよ。ターゲットを見失ってるとしか思えない。

やたらインフラの質問をする

個人的にインフラは経験重視で専門部署を持ったほうがいい領域だと思っています。ここは技術力というより、経験による試行錯誤で磨かれる部分です。インフラ構築というのは一つのプロジェクトで1回あればいい話で、まぁ、その後はみんなで拡張したり改良していく話になるとは思いますが、経験が大事なのに経験が蓄積しにくい部分です。ならば、1ヶ所に集中させてノウハウを蓄積した方がいいです。特にインフラは費用に直結する部分なので、その会社でのベストプラクティスを用意できるように一元管理した方がいいです。個人に裁量を持たせるにしても、こういう用途で、こういう特性があるから、こういう構成はどうだろうか、とインフラ部門に相談して、インフラから最適化した答えをもらって、その方向で進める、そういう分野だと思ってます。この技術での学習に環境を用意するとしたらインフラどう構成しますか、とか聞かれても、「え、大きい会社なのにインフラ部門ないんですか?」と驚きを隠せない、というのが現実です。グループ企業とかあったら、ノリッジ共有すべき領域です。ハードウェアとかって、自作PC作ったことある人なら、相性でメモリが認識されない、みたいな経験あったりすると思います。ハードとかインフラって理論上最適に思えてもうまくいかないケースとかもあるので、何度も言いますが、一元管理した方がいい。まぁ、インフラをどうこうする経験って少ないので、質問で差別化しやすいのかも知れませんが、逆に、ここを個人の裁量に任す会社危険じゃない?もし稟議通す必要あるなら、ちゃんと部署作ったほうがいいんじゃない?的な気がしますし、機械学習エンジニアが入社前に必須な知識とか技術の話なのか、それ?と思います。まだ、用途にたいしてデータストアと言語選ぶとか技術スタック選定するとかならわかるけど。それもチームで1人いればいいし、新人に任されんだろうから、プロジェクト2,3個通じて学べばいいだけじゃないのかと。専属インフラエンジニアがいなくても、社内で貯めたノリッジベースで判断できるような仕組み作った方がいいと思う。インフラの質問はこういう仕組みでやってましたが説明できれば十分だと思います。というか、でない場合、開発の仕組みがまともにできてない会社と判断して良さそう。インフラの異常検知系の知識はみんな知っておいた方がいいけど、構築に詳しい必要はないです。某技術を使うためのクラウドのインフラ、の質問されたけど、正直、何を期待していたのか。一旦ローカルで動かしてボトルネックになってる部分強めな構成で組めばいいんじゃない?とか思う。空中で算出しなきゃいけない問題でもないような。

社長権限

手術後にあった話で、某一部上場のM社ですが、技術部門の経営側に移った元技術者の方に、複数部署の候補にしたい、と言って頂き、実際の部署のメンバーと話しても技術的に問題ないと言われていたのに、最終で社長の出すクイズの1問でハマり(有名社長とマンツーマンで緊張もあり)、影響受けた本とかどうでもいい話もあり(自分の人生がたった数冊の本で決まったとは思えないし、色んな本から受けたものが少しずつ蓄積して自分の知識体系ができているので、影響受けたと言うならほぼ全ての本が悪い意味も含め影響してると思うから、むしろ、数冊の本を選べるほど単純に生きてないと言いたかった)、感触悪いまま終わって、翌日結果出す、と言われてたのが1週間以上待って、「年齢に対して技術のバランスが悪い」と後述するけど、海外なら裁判沙汰の理由で落とされました。ちなみに1ヶ月半活動延長したのはこれが原因と言えなくもない。というか、フルスタックでバランス悪いとか、対象の領域に対して浅いとかならともかく。技術セクションでは技術面でのお墨付きをもらってて技術力が原因って。そもそも、社長と技術の話してないし、非技術者なんですが、1部上場して数百人社員がいる状態で、現場が欲しいって言った人間を社長が気に入らなかったら落とすってなんなんでしょうね。10人の一族経営のところとかならともかく。個人的には社長が面接に出る場合、他の役員を連れてじゃないと公平性が保てないと思ってます。そういう会社は女子は顔で選ぶ、とか密室的な社長の好みの判断で社員が選ばれるリスクが出て、優秀な人間が運で落ちる可能性が結構出てくると思います。今回のクイズとかも、偶然聞いたことある問題受けたら勝ち、みたいな無意味な話です。頭の回転の速さを見たいとしても、そういった不確定要素が多く入るのでは判断が厳しいし、技術者は頭の回転は速いほうがいいけど、営業とかと違って、その場で全部決めないといけない仕事でもないので、若干的外れな気がする。ちなみに社長面接で聞かれるのはGoogleで意味がないので止めたような質問が中心です。
何はともあれ、技術セクションではめちゃくちゃ好反応だったのに、社長に落とされるということは一生縁のない会社なのでしょう。業務経験詰んだとしてもラスボスにあの人が出てくるのなら一生受からないでしょう。

人事に覚えておいて欲しい話(番外編)

海外では年齢はNGワード

外資系にapplyする場合、顔写真と年齢は基本的にNGです。裁判の材料になるので、応募者に絶対入れないでね、と言うところがほとんどです。前述、社長一発レッドの話でも年齢と技術のバランス、と見送り理由を伝えられましたが、海外では生涯学習が当たり前なので、年齢問わず人間は成長できる、学べる、なので、「年齢」を理由の一部に使った場合、海外出身の応募者の場合、裁判になってもおかしくありません。いや、しかし、前述社長は外資の出身だったような…。

中堅以上の技術者に技術力不足と言えば納得すると思うな

社長一発退場のところも、クライアントエンジニアにwebの技術を求めるところも、面接で技術力で足りないと思うような質問ややり取りがなかったにも関わらず、技術力を理由に伝えられました。おそらく、技術力が問題と言えば仕方ないと思うと思ったかも知れませんが、文系エンジニア(広範囲の基礎がない)とかでもなく、CSで大学院出てる人間としては「はぁ?」と思ってしまいます。技術力が問題だとするなら、せめて答えられない、もしくは答えに窮する質問をして下さい。さらに、技術課題を出してきた会社が技術力を原因にするということは、選考に使った技術課題が適切でないということです。候補者も少なからず時間を割いて技術課題をやっています。その課題で技術力見れないなら、何のための課題でしょう。その課題を解けるレベルなら、入社後キャッチアップしていける、ということじゃないと時間を割いてやらす意味がない。今回3社の技術課題がかぶって大変な事になりました。在籍中に転職活動してる人だと大変どころか、時間が取れなくて落ちる可能性すらあります(1個1個が数日から2週間位かかる)。技術力で落とすなら、online assessment(hackerrankみたいな簡単なプログラミングコンテスト形式の課題)が正答できないとかじゃないと、ある程度以上の技術者は技術力不足という言葉に納得出来ないと思います。オンラインテストなら2時間とかで済みますし。その分、問題を作る側にも負荷がかかりはしますが、雇う側も本気になるべきです。1度数問作れば使い回せるわけですし。1社それでも、「ちゃんと解けてるけど経歴上欲しいほどではない」、とか言われて、じゃあ、最初から課題投げるなよ、と思ってそこのアプリをスマホから削除しました…。志はメチャメチャ高い会社ですが、落とすための選考をしてるのは非常に残念だと思いました。正解しても落とすような問題は完全に出題者の落ち度です。業界の有名な技術者が集まるような需要と供給がマッチする会社はたいてい技術課題でアルゴリズムに近い部分を聞いてきて、面接ではこれまでの経験と技術に対する学びの姿勢を問われたように思えます。中に入ってからのことは基礎があればキャッチアップできるわけで、詳細な次の業務での内容を突いてきたりはしませんでした。少なからず転職をすれば、知らない領域や技術に触れる必要が出てきます。そこを端から探す面接は良い人材を採る面接でなく、少しでもズレがあったら落とすための面接で、技術者の成長を信じていません。となると、判断してる人達がその会社であまり成長できていないのでしょう。最初から通用する超即戦力(普通の即戦力でもアジャストの期間は必要です)だけしか取らないとなると、その会社は技術者が育つ土壌がないと判断すべきです。また、国際経験豊かな人が技術部門を仕切っている場合、それなりに納得できる理由を用意してくれました。そういう会社は落ちても非常に印象がいいです。


おまけですが、githubを公開したほうがいいと言われますが、見てくれるところがすごく少ない印象。採用に関わるエンジニアは業務の合間に、ということもあるのかも知れませんが、個人レベルのコードをリバースエンジニアリングするのに時間がかかる人間が人事やってるのはどうなのかと。技術課題とかオンラインテストしてればいいんですが、それもなく、githubも見ずに技術力を測ろうとするところは技術力のない会社だし、求めてない会社だと考えていいと思います。なので、技術好きにはそういうところも観点として会社を見れると思います。githubではゲーム的なものは一切出してなかったんですが、ゲーム主体の経歴で、とか言われて、ううーん…と唸ったりしました。ゲームが好きなわけでもなく、去年くらいまでの5年ほどは、スマホゲーム業界に金と人が集まったり、技術的にも色んなことができるからゲーム開発に携わってただけで、ゲーム業界を主体にやってきたつもりもないし、自分の技術の基盤はそこにないと思ってます。git見てくれれば分かる話なのですが、悲しいです。結局のところ、ゲーム業界は広い技術が求められますが、ゲームエンジンの制約の中での物づくりなので、深掘りできない部分も結構あります。最後の方はエンジンぶち抜いた実装とかもしてましたが…。逆にgitをしっかり見て、経歴の会社も調べてくれた会社があって、自己紹介も要らないレベルで理解してくれてたのは感動しました。が、そこは2次面接で何故か書類全く見てない感じの人が来て(次は体験入社と言ってたのになぜか挟まれた面接)、話噛み合わず落ちたのですが…。

なんて色々偉そうに書いてますが、エンジニアとしての自分の立ち位置としては上中下のやっと上に入って来た辺りだと思っています。PFNとかの条件のように、定期的に論文を学会に出せるレベルではなく論文を読んで技術を使える程度ですし、情報オリンピックに出たこともありません。紆余曲折を経ながら、アカデミックな経験も積んで、アカデミック側の視点もインダストリー側の視点も持ってる(経験的に逆なのは日本では珍しい気がします)ので、視点は広めと自負してはいますが、技術者として、ここからの壁は確実に数学とか周辺領域の知識も深めないと進めない領域だと思ってます。システムから入って多少インフラ的なこともやりながらクライアントにたどり着き、アカデミックという文系も多く、専業になりがちの日本ではちょっと変わった守備範囲の広いフルスタック気味エンジニアが転職で思ったことであり、どこでも入れるくらいのスーパー技術者ではないのは理解しています。それでも、余裕で即戦力になれるところや、現時点で即戦力ではなくても通用すると思ったところでも結構簡単に落とされたりして、ちょっと書きたいなと思いました。ちなみに、アメリカで違う人種とチームを組んで課題に取り組んだり、プレゼントかディスカッションも多く経験してるので、コミュニケーション能力に壊滅的な問題があるとも思ってません。ここでは本音で語ってるのでちょっと厳し目かも知れませんが…。

という感じで、また思い出したら追記していくかも知れませんが、すごく良い会社に転職できたので、次の転職の際は、既に業界に名が知れて、そろそろ転職しようかな、と発言したらスカウトが来るくらいの人間になりたいと思います。転職活動で意味不明な理由、特に余裕と感じての技術力を否定されて落とされたりすると心がすり減っていくので、活動ほとんどなしで転職するくらい前面に出て行きたいと思います。Qiitaとかで技術的なことも書いていこうと思うので、ここは今後も月1,2回程度の更新になると思いますが、非技術者の人でも業界の中の雰囲気がわかるように、業界の人も楽しみながら読めるように書いていこうと思うので、気が向いたら、たまに覗いて下さい。

子供にプログラミング教室は必要か

お久しぶりです。転職活動がやっと終わって、久しぶりに正社員になります。
フリーランスはお金はいいのですが、やはり、所詮は傭兵です。表舞台で活躍するとなると、大企業にフリーランスで入って一人で大きなプロダクト作っちゃうくらいのレベルにならないと、というか、基本的にそこまで責任のある仕事はさせてもらえません。せめて大きめの追加機能を無茶振り気味に一人で担当するくらいです。会社を代表して登壇させるには企業にもリスクがありますし、フリーランスで表舞台で活躍するとしたら、逆に大きな仕事で業界に名前が轟く状態でフリーランスとして動くしかないでしょう。正社員のいいところは会社から色んな補助が出る。カンファレンスに参加したり、登壇したりするのも仕事の一環です。自分を磨く時間は会社に返ってくるので会社からサポートが出る。フリーランスの場合実費で、仕事休んだ分の稼働時間は給料から引かれます。なので、フリーランスをしながら成長するとなると、勉強会やコミュニティに参加する時間が取れない場合、技術書読んだり実装したり、で、これもまたプライベートを侵食したりします。

あと、正社員になったほうが、当事者意識が高まるので、よりユーザーのために社会のために何をできるか考えるのでビジネス的な目線とか違う能力も磨かれると思います。起業やCTOの選択肢も、会社のサポートの元、業界で名の知れた一廉の技術者になってからの方がいいです。でないと簡単にパクられたり、ビジネス的な視点が足りなかったり、というようなことが起きます。

最近すごく思うのはエンジニアになりたい人は「お金持ちになりたい」でなく、「開発を通じて多くの人のためになることをしたい」という気持ちを持ち続けて欲しいと思います。ここに来てくれる人は現役エンジニアだけでなく将来的にITの仕事に就きたい人も多いと思います。プログラミングできれば儲かる、仕事に困らない、という感覚だけだとおそらく将来的に行き詰まったり、精神がやられるかも知れません。苦しいことから目を背けて楽しいことができるということは殆どありません。スポーツもそうだけど、楽しいと思えるまでに何個もハードルがある。勉強の時間は退屈で眠かったり、理解できなくて苦悩したりするかも知れない。だいたい最高に楽しめる状態までは苦しい道を何度か通るものです。でも、理系の理論というのは理解できた瞬間に霧が晴れたように頭がスッキリする。何万里も先まで景色が見えるようになったような気がする。そんな世界です。学ぶこと、できることが増える感覚は楽しいですし、それを多く感じられる職種です。人のためになることができるように努力することは、実際のところ、自分のできることが増えることだったりしますが、結局、お金になることって人のためになることです。日々の生活を豊かにしたり、楽にしたり楽しくしたり。そういうことに人はお金を使います。こういうのがあったら便利だよな、みんなこれやりたいよな、と思うものを日々ワクワクしながら作ること、お金はその結果として、ユーザーの喜びが換金されて入って来るような感覚を持てるとこの仕事は最高に楽しいと思います。

真逆なのがネットビジネスですね…。Y氏とか、誰一人幸せにしてない気がします。直接的な意味で。グレーゾーン詐欺を教わって稼いで逃げ切れた弟子は感謝してるかも知れませんが、楽な、法の隙間の稼ぎ方をするとまともな、人のために働くことができなくなります。社会の歯車になるなんてかっこ悪い、とかそういう業界の人は言いがちですが、実際は歯車にすらなれてない。人の生きるサイクルに全く貢献していない。別に歯車でなくても潤滑油でもモーターでもなんでもいい。社会の一部として、人の暮らしに関わることはかっこ悪いことでも何でもなくて、そういう積み重ねが多くの人の幸せを作っているのが現実です。結果、Y君は今は投資で稼いでるっぽいけど、自分のために金のためだけです。金を目的に働くとどこまで行っても金しかないので満たされないと思います。彼は基本的にグレーな情報を売ることと、その金を還流させて膨らますことしかしていないので、彼のおかげで幸せになった人より不幸になった人(商材購入者の9割は不幸でしょう)の方が圧倒的に多いと思う。アフィリエイトとかネットビジネスのコンサルとかその辺も一緒です。情弱を鴨にプロから見たら100円にもならない技術や知識を高値でばらまいてるだけです。多くの人の喜びに貢献できない寂しい人生です。

前置き長くなりましたが、今回は子供向けの教室の話。

転職話は次回します。ものすごく人事と現場の意識のズレやエンジニアとして、技術側のキャリアパスが多くの会社でできてきてるのに10年後が想像できてない書類選考や面接であったり、それじゃない感じのエンジニア天国の主張など、違和感感じまくりでしたので次回まとめます。

親の教育への無責任

現在、麻布に住んでいますが、麻布はおそらく日本でも教育水準と言うか、親の教育への意識が日本でトップクラスに高いと思っています。にも関わらず、結構子供の素行が悪いです。夜中に叫んだり(そもそも子供の成長に睡眠は大事なので、22時とかに子供が叫んでる自体異常)傘をすれ違うときに傾ける子も殆どおらず、電車では空席に走ってゲームしたり居眠りしたり。実際のところ、速筋と遅筋が分かれてない子供は肉体的に疲れないので、疲れた、と座りたがるのは飽きてるだけで精神的に耐久性がないだけです。本来、教育は家庭からすべきで、由緒ある名家とかだと、親は厳しく当たり前のことは自分で当たり前にできるように育てられますが、なんとなく稼いじゃった家庭は子供を愛することと甘やかすことの区別がついていない気がします。先日4人組の母親の内一人が横断歩道を渡ってすぐのところに自転車を停め(渡って左に曲がる時に回り込まなきゃいけない位置)、他の3人がコンビニの入り口前に自転車を停めて(これも出て右に曲がると回り込まないと行けない位置)、だめだこりゃ、親から躾しないと駄目だなぁ、と思いました。我が家はなんだかんだ祖父が勲章をもらったりする家系で結構厳しかったので、当たり前のことができない人が多くて、街を歩くと目を覆いたくなることが多いです。
最近の親を見ていると、家庭での躾を全くせずに塾や習い事にとりあえず入れてみたりという勘違い教育が多いように思います。塾でマナーや日頃の振る舞いは身につきません。スポーツでは比較的礼儀が身につきはしますが、儀式的にルーチンになるだけの可能性は高いです。その結果東大に入ったとしても、勉強のできるバカになるだけです。育ちの良さは学力とは別です。麻布で育って育ちが悪いと思われるってどうなんでしょうね。昔は地域で教育をしたので、住んでる場所が育ちの良さにつながっていたかも知れませんが、今は地域の人が叱ると親がキレたりして、どこで育てても差は少ないのかも知れません。田舎は地域で育てる気はしますが、都会的なマナーは身につかない気がします。必要ないので。知らんけど。
また、問題が表面化しだしてるスマホ子守子供にスマホタブレットを渡しても、技術者としての素質は全く伸びません。中毒化して集中力がなくなるだけです。毎日テレビ見てる子供がテレビを作れるようになるわけじゃないし、サッカーを見てたりサッカーゲームが好きな子供が練習もせずにプロサッカー選手になれるわけでもない。おそらく、僕は子供にスマホタブレットも触らせないし、PCも高校くらいまで触らせないと思います。Jobsも自分の子供にはデバイスを渡さなかったり、コンピュータを触る時間に制限を与えたとか。まぁ、プログラミング教育始まって宿題で必要とかなら仕方ないですが。

子供向けプログラミング教室

それで、最近流行りだしてる子供向けのプログラミング教室やプログラミング教育に関してです。
子供向けだとスクラッチを使ったり、楽しく学ぶ、みたいな遊びの延長のものが多いと思いますが、正直、あまり良い技術者になるための教育としては価値がないと思います。子供向けのプログラミング教室は楽しくプログラミングに触れることを大事にしているところが多いので、興味を持ってもらう、という意味ではいいかも知れません。子供は我慢のできない性質があるので、プログラミングがある程度書けるようになってから理論、となると理論はつまらないから嫌だ、と苦手意識を持ったり、知識を軽視する可能性はあるので、この辺のバランスは気を付けないといけないと思います。基本的には動くだけのプログラムを書けるようになる教室と同じ状態なのが現状だと思います。例えば、電子機器の修理の仕事で、トラブルシューティングを見ながら、こういう時はこうする、というマニュアルだけ見て作業するのと、回路図を読み取って症状から原因に当たりを付けて確認しながら直すのでは全く技術の質が違います。よくあるプログラミング教室は前者で、「どうすればいい」だけを教えます。対処法だけ分かる感じです。この方法だと時には根本原因を直さない応急処置になる場合もあり、継ぎ接ぎで将来的に悪化する可能性もあります。「どうなってるか」(何が起きてるか)を教えるのが後者で教室では少なく、大学で教えているのはこちらです。どうなってるかがわかるというのは原理がわかるということで、通常の動作のフローからどこで外れたか原因が特定できる、もしくは大体の当たりが付くという状態なので、そこからテストをすれば特定できるでしょう。僕が教室でこだわっていたのは、どうすればいい、ではなくて、どうなってるかを理解してどうすればいいを考えられる力を付けることです。これがないと想定外の事態に対応できない。

では、子供にどうなってるか、を教えるべきか、というと、結論から言って無理でしょう。裏で起きていることの理解は数式であったり数学的な知識や感覚を要求することが多いです。また、子供に数学的な基礎を飛ばして応用を教えても意味不明で理解できないだけでつまらなくて辞めてしまうと思います。変数の概念も代数学だったりするので、中学位からならある程度理解が早くなる気はします。小学校時代にに5時間かけて理解できる概念が中学生なら30分で理解できるなら、どの段階で始めるべきか、という問題になるかと。計算量だと対数が必須なので高校まで理解が難しいかも知れません。個人的には対数位まで理解できてから一気にやって、それまでは2進数の概念だとか、紙で理解できるコンピュータの仕組みを後述の数学パズルを使ったりして楽しく学んで身につけ、理論的な部分を理解しやすい下地を作るといいのではないかと。

自分の経験上、プログラミングができる状態でコンピューターサイエンス(CS)の授業を受けたら理解は早くてプログラミング課題は簡単にできたので、理論の重要性をちゃんと教えながら基礎構文に慣れさせるのは悪くはないと思います。システム業界の自称凄腕プログラマにありがちな、ただ動くだけのプログラミングを早く書ける、ということに満足しないようにちゃんと導けるならいいと思います。

子供向けプログラミング教室の弊害

自分も独学である程度できたので、情報系の学科に行かず遠回りした経験がありますが、子供向けの簡単なプログラムやゲームをとりあえず動く形で書いて満足して、自分はプログラミングができる、と思ってしまうのは道を間違える原因になります。CSの全体図が見えていないので、プログラミングと言う領域で、理論や品質を考慮せずに書ける、という初心者向けの段階で満足してしまい、そこでプログラミングを繰り返す可能性があります。そんな低いところで足踏みして、数学という基礎を疎かにすると結局量産型の動くだけのプログラムを書くエンジニアになってしまいます。子供の頃から時間とお金をかけてそんなところに着地したらたまらないですね…。子供向けプログラミング教室の問題点としては年代別に段階的に学んでいくカリキュラムが整備されていないことでしょう。実装と理論は両天秤の関係にあって、バランスを取る必要がある。でも、子供は理論を理解する前提を持っていない。それは学年が上がるに連れて学んでいくところで、ただし、基礎構文は結構理論なしでも書けちゃう(たいていプロが見るとクソみたいなコードだけど)ので、バランスが崩れた状態になってしまうわけで。学問の体系として、CSの位置を文科省で明確にした方が良さそうな気がします。高校数学のどこかの先な気がします。高校の情報の授業とかは実は結構質が良くて、大学のCS概論より下手すると踏み込んだ内容かも知れません。時代ですね。ただ、どれくらいの割合の高校生に理解できるのかは疑問ではありますが。

どうなってるかを理解させるために

じゃあ、子供からプログラミングの素養を身に着けさせるにはどうしたらいいのさ、ということですが、数学です。まずは数学パズルから始めましょう。数学パズルは頭の回転も良くなるし、実際世の中は2進数的な事象も多くて、そういうクイズのようなところから遊ばせて、数学オリンピックを目指してみましょう。
ちなみに数学パズルとして有名なのだと、両方に火のつけられる1時間で消えるロウソクを使って15分を測る、というものとか2進数的な問題だと、1000個のまんじゅうの内1つに毒が入ってる、最少で何匹のモルモットを使えばどのまんじゅうに毒が入ってるかを特定できるか、とか。
こういうのはアルゴリズムであったり、数学的な考え方の練習になるし、親も楽しめて面白い。子供が乗ってきたら少しずつ難しく学問的な問題に移っていって数学オリンピックまで行ってしまうと最高です。数学オリンピックレベルの数学力があるとプログラミングコンテストでも世界レベルで戦えたりすることが多いですし、数学が土台になってるプログラミングも天才と呼ばれるレベルでできることが多いです。

結論

子供向けプログラミング教室はプログラミングができるようになるために通わせるのでなく、プログラミングに興味を持ってもらうため、エラーが出たりしても怖くない、と恐怖心を持たないようにするためにはいいですが、まずはしっかり土台となる算数・数学に興味を持たせて楽しく学ばせるのが優秀なエンジニアになるための種を撒くためには重要だと思います。日本人は目先のことに囚われがちな気がしますが、10年20年先のその子の未来を考えて、しっかり土台から、倒れない技術を持ったエンジニアになるような、しっかりとした根を張れるようプログラマの種を植えてあげましょう。
プログラマにならなくてもコンピュータを使えたほうがいい、と思っている親御さんは学校の授業をちゃんと受けさせれば十分です。もしくは、社会人経験あればそのレベルのスキルは自分で教えられると思うので、

DIVE INTO CODEのレビュー(2018年版)

このレビューはDIVE INTO CODEに通った体験ではなく、もし卒業生が面接に来た場合にどういう評価を現場の人間がするか、という観点で書いています。
通った時にどういうサービスを受けられるか確認したい場合、教室の公式ページと他のレビュー(大半がアフィリエイトですが)をご確認下さい。

ちなみに実際通って検証するというのは知識ゼロから転職が成功するまでを実証して初めて意味があるので、通った人間のレビューだから価値があるというものかと言うと微妙なところだと思います。通っただけでわかるのは教室の中の様子だけで、いちばん重要な結果何を得られたかがない場合もあります。体験談を論文に例えると、論文の検証で「書いてある通りに実験はできました」だけでは意味はありません。同じ結果を再現できないと意味がないです。人というイレギュラーな存在が中心なので常に再現するとは限らないのは仕方ないとはいえ・・・いや、それ以前として失敗した論文、もしくは実験だけして結果を求めない論文を発表するような行為がそこらじゅうで起きている。数十万を払うコースの体験談で、即戦力コースであれば、開始時に想定されるレベルの生徒が「即戦力」として、未経験以上の「即戦力採用」の給与を得られる報告ができて初めて意味があります。受講生の体験談はそれが最低限です。「誰でも成功する商材」の体験談で、非常に作り込まれてよくできています、と言われても、え、結局成功したの?書いてよ!となりますよね。

未経験採用で未経験としての給与で入れたであれば、教室行かなくても結果は同じです。行かなかったら採用されなかったかも知れませんが、それは即戦力ではありません。通って書いたら信憑性があるかは別の話で、卒業した人間を判断するのは人事であり採用に関わる現場の人間です。そこで即戦力と判断されないと即戦力コースに数十万払う価値はないと思います。

というわけで、DIVE INTO CODEのページにアクセスが多いので古いレビューのままだとまずいと思い2018年版も書きます。DIVE INTO CODEの中の人も見ているのか、最初の指摘点は結構取り入れられてるし、プログラミングを教える人間としてまずい感じのCEOの発言のインタビューもリンクが死んでいたり(失言と思って公開停止したかはわかりませんが)、結構良くする意志はありそうな印象を受けます。もし、ここを見てたとしたら、カリキュラムにキツめのツッコミがある可能性があってもカリキュラムを公開してるのは印象がいいです。ちなみに、事前にカリキュラムわからないところは絶対行かないほうがいいです。内容に自信がないか内容が軽いかの可能性が高い。公開するとパクられる可能性と言っても、どうせどこも大学の授業とかを参考に立ててるか未経験者研修の経験から作ってる(こっちの可能性が高い)ので、ベースラインに差はほとんどありません。検討するのであれば、何度も書きますが、カリキュラムを知り合いのエンジニアに見せて、これやった人が応募してきたらどう判断する?と聞いてみるのがいいと思います。もしくは、希望する会社の人事に書類上の応募資格として「ここの教室を出たら中途採用で即戦力と評価されるか」と問い合わせのメールを投げるといいと思います。結構返事くれるものです。もし、未経験者採用と経験者採用がある会社なら、「この教室を出た後、どちらで応募できるか」と聞くといいと思います。結構人事の方はきちんと返事をくれるものです。その際、200万台〜600万台位まで3社くらい別の給与帯で送ってみるといいと思います。おそらく、200万未経験の扱いになる可能性が高いと思います。

プログラミング教室で人生が変わるとしたら、0からwebアプリのプロトタイプを作れる能力を身に着けて、斬新なサービスのプロトタイプを持ってビジネスコンテストでプレゼンして優勝して融資を取り付けて即戦力エンジニアを雇う、みたいなコースくらいです。
ただし、スタートアップは融資が盛んなアメリカですら大半が失敗しています。
jp.techcrunch.com
日本でスタートアップで伸びてきてるのは大半が専門知識を基にサービスを考えて始まっています。専門知識がないのであれば博打に近く、下手すると大金を得るより借金が残ります。自分一人でやればコストかからないし、少しの収入でも大金だ、と思うかも知れませんが、相手は専門家でタッグを組んできます。ビジネスを舐めないほうがいい。特許とか実用新案の知識がなかったら簡単にパクられて負けます。まず目指すなら融資を受けて専門家と組むことです。

何度も書くけど、卒業生を評価するのは、人事と現場のエンジニアです。中途採用面接では必ずこの2つのセクションの人間があなたの経歴に目を通します。

DIVE社を厳しめにレビューしていますが、基準は同じです。TECH::社はカリキュラムを出していないのでほぼ博打に近いし(EXPERTがエンジニアを目指す人向けなので、それ以外は趣味の入り口がいいところだと思います。じゃんけんアプリとか、僕が最初に見た、独学で基礎構文は身についていた生徒だと1日目でできる内容です)、カリキュラムが見えてた頃は遊びにしか思えなかったです。CodeC社もアルゴリズムやデータ構造といった最低限知っておくべき知識もリストになく、独学と変わらない、チュートリアルレベルの内容に見られ、アフィリエイトとかで露出の多い中ではDIVE社が一番まともです。結論で書きますが、対象がちょっとずれてる気がしますが…。
他社をもう少し言うとTECH::社は、〇〇商法とかで有りがちな説明を聞いた日割引的な手法を使っており、非常にやり方に危険な香りがします。有識者の友人にアドバイスをもらえない状況を作るというのは悪徳商法の典型です。手法がそうだ、というだけで、実態はわかりませんが、クリーンな教室ならば、すぐにそういうやり方はやめるべきです。点検商法とか、宗教の手口にしか見えない。まぁ、自分から行ってるけど。
悪質商法とトラブル防止法
説明会行かないと詳細わからない場合、必ずIT関係で勤務している友人と一緒に行ったほうが良いです。悪徳商法同様、自分の知らない業界の話をさも魅力的にされて割引を出されたら押し切られかねません。やりかた汚いなぁ…。まぁ、料金見たらめちゃくちゃ安いけど、書いてある内容的には4000円の本の1冊に満たない感じですね…。AIもチュートリアルっぽい。T社はブログ見てもレベルの低さがよくわかるし、素人の学生に毛が生えたメンターだらけという体験談聞いてるので、チュートリアルレベルに落として正解ですが・・・意味あんのかね。人生変わるのフレーズは変えないみたいですが、入門書の序盤レベルの内容ですよ。卒業生もエンジニアほとんどおらんですね…カスタマーサポートとか社長が知識つけるためとか。まぁ、この額なら・・・と思わせるのが危険かも知れないけど。就職できなきゃ返金で就職サポートが就職できるまでになっていて、昔アメリカであった、就職するまで卒業できないから就職率100%を思い出しました。
あと、どうでもいいんだけど、フリーランスエンジニアの画像のaltがモンテネグロでプレーしてるプロサッカー選手のものになってるけど、この教室大丈夫だろうかwwwwwコメントアウトもところどころ見えてますね…。迂闊すぎる。メンターがコピペでもしたのか?
女子高生起業家のその後もまたちょこっと作って自分で記事書いて放り投げたように見える。会社概要押してもトップにリンク貼られてたりかなり責任感のなさが丸見え…。

で、今回はDIVE INTO CODE即戦力コースです。AIコースはまた今度。

あ、どうでもいいんですが、即戦力コースのURLがfull_stackでpdfもfull_stack.pdfになってますが、全くフルスタックエンジニアではないですね。フルスタックエンジニアはインフラやネットワークも含め、全てを一人で担当できるエンジニアのことです。少なくともクライアントサイドのネイティブ開発や負荷分散やスケーリング、適切なログやアラート出力、CIのジョブ設定、DBの設計やチューニングとか、まぁ、教えない部分で倍以上の知識と経験が必要です。フルスタックエンジニアだと、業務経験で言えば早くても3〜5年、2社位経験必要な気がする。

受講スタイル

6ヶ月間のコースで隔週の週末に授業が2時間で授業と言ってもディスカッションで学びは基本的に自習ベースのようですね。自習はよくある自習用会員サイトですね。講義が昔あった気がしますが、座学評判悪いんですかね?実際人がちゃんと教える機会は必要だと思いますが。課題ができてても実際わかってるのか、ググっただけなのかは話さないとわかりません。生徒と面と向かって質問するのは大事です。また、重要な点をなぜ重要か、コードを動かすだけじゃわからない裏側の部分とか講義で話したり、読んでも理解できなかったところを確認する意味も講義にはあるんですが、自習サイトに絶対的な自信でもあるのでしょうか?大学の課題では、その課題から何を学んだかを書かせる先生もいて、本質的な理解を確認したりして、講義でフィードバックしたりしていました。コードだけでなく、過程や考え方も書かせることが多いです。アルゴリズムの授業とか、コードは擬似コードでその証明が中心でしたし。
ちなみに大学だと週3で50分ずつの授業か週2で90分の授業があり、毎週か隔週で課題の提出があるのが普通です。厳しいクラスではそれプラスでwriting(論文読んでまとめるとか、readingの教科書の問題を解いたり)が週1であったりします。機械学習とか数学的な部分で付いてこれない生徒が多いクラスは補講が数週間週1でもしくは毎週あったり、実践的なクラスはラボの時間があったりします。6ヶ月取っているものの尻を叩くのが隔週だと片手間になるので定着するかあやしいです。自分で教室をやった時は週1で2時間か週2で1時間やっていました。基本的に2日1時間のほうが定着が良いです。ホントは週3回1時間やりたかった。塾と同じくらいのペースで。毎回授業の最初は前回の項目の理解を確認する質問を…毎回できていませんでしたがなるべくしていました。結構1週間前に習ったことでも、課題に出していても重要な箇所も細部は忘れているものです。週2,3回講義で細かくリーディング→講義→課題を繰り返す大学スタイルはやはり理にかなっています。日本でも予習させますが、授業が予習を丸々なぞるだけで眠かって経験もあると思いますが、海外では予習を基に書いていないことを補足しながらが基本でした。また、生徒が積極的に質問して、教科書より発展的な内容になることも多々ありました。大学院ではリーディングは理解してきてる前提で最初から授業は応用だけのことが多かったです。ちょっとオンライン学習サービスを過信しすぎですね。チーム開発とかオリジナルアプリ開発まで質問できる独学みたいに感じます。うーん、このペースで知識定着するんですかね。あと、ペースのバランスが…最初の1ヶ月余裕すぎで最後が鬼。応用は日にちないし、終わらないでもいい想定ですかね。

それではここのトピックを見ていきます。DAY一つが授業1個分なんでしょうか?単位がよくわからない…昔の詰め詰めだった頃の名残なんでしょうか。
…書いてから思ったけど、一つ一つコメントする必要あっただろうか。

PHASE1

DAY1

HTML・CSS入門

知っておいたほうが良いですが、大雑把で十分です。デザインに関しては基本的にwebデザイナと呼ばれる人が担当します。そこに動的にデータ、例えば会員サイトならログインしてユーザー名をhtmlのタグの中に埋め込んだり、場合によっては一部の文字列を動的に赤字にしたりします。前者でHTMLを後者でCSSを使います。HTMLやCSSを0から書ける必要性というより、必要に応じて出し分けるために必要です。web制作なら基本は知っていたほうが良いです。が、0から書ける必要はありません。僕は独学でwebサイトを高校時代に作っていたので、この辺はその時に憶えました。CSSはあまり使われない時代でしたが。独学でも理解しやすい(静的なので)部分です。独学でここでつまずく人はちょっと違う仕事見つけたほうが良いです(jsとCSSがガチガチに絡んだようなものは別物)。この辺はプログラミング言語じゃなくてマークアップ言語で、表示を制御する処理の書き方ですね。ブラウザとの会話です。

DAY2

javascript入門シリーズ

jsは結構他の言語、Javaとかできたら自動的にできたりする言語です。非常に曖昧な言語。たまにタイポあっても普通に動いちゃったりします。jQuery使ってるけど、現場ではajaxで通信した結果で動的に画面切り替える場面が多い気がする。あとはタイマーとか。DOMもまぁ、動的に通信結果で更新かけるならDOMか。なんとなくスクレイピングの理解のためにやってる気がしますが。この2つは2週間かける必要あるんだろうか。ブラウザで確認できるので、課題より自分で色々いじりながら試すのがこの辺の一番の学習法な気がします。この辺までは独学でも脱落者少ないとこですね。・・・って、これだけで1ヶ月終わってんのか…。

DAY3, 4

Ruby入門

Rubyはまぁ、良いとして、コマンドは環境構築と言うか、サーバーでの処理のために知っておいたほうが良いですね。スクレイピングは要りません。現場で使うのはかなり特殊な現場のみだと思います。新人にいきなりスクレイピングやらせるところあるのかな…。スタートアップとかはグレーゾーンでやってそうだけど、クリーンなところはあんまりやらないと思います。色々リスクが高いです。自動化しても、相手がスクレイピングされるのを望んでない場合、構造が変えられる場合があります。そうすると、自動化していたのを修正しなくてはならない。難読化とかされたら終わりそう。あと、アルゴリズム入門ってなんだろう。big-O記法とか教えてる風ではない。ちなみにオンラインプログラミングテストを採用に導入してる中には計算量やメモリ使用量を指定してくるところもあります。計算量の考え方は知っておいたほうがいい。システム業界だと知らない人の方が多かったりしますが。

DAY5

イデアブレスト

これは卒業課題のためなんだろうか…何度もいいますが、プログラマが0から企画をすることはほとんど無いです。改善提案とか、エコシステムでの提案はあるけど。これで2週間分飛ぶのはかなりきつい。卒業課題あるCSの授業だと、他の課題のレポートに併せてテーマと方針を記載して先生からフィードバックがきます。基本的にテーマは先生の提供するリスト(論文とセットなのが多い)から選びます。プログラマ向けとしてでなく、ビジネスサイドの人間がプログラミングをかじるなら有用。

PHASE 2

DAY6

Rubyアルゴリズム・データ構造シリーズ

この辺はここを参考にされたのでしょうか。2017年版のレビューで指摘してた辺り。ただね、データ構造は配列と連結リストの考え方が一番大事です。次にMapのHashingかな。計算量だいぶ減らせるし。いや、最初に抽象データ型の概念を教えたほうがいいけど、なさそう。抽象データ型分かれば言語間でのデータ構造の知識的な互換性が理解できます。
抽象データ型 - Wikipedia
データ構造教えるならこれは必須。

木構造とか辞書(dictionary/map)はこの2つを使って実装されるのが基本です。連結リストの考え方は必須です。連結リストRubyにはないようですが、それなら作る課題出したら良いのに。アルゴリズムに関しては大学2年レベルでも再帰、分割統治法、貪欲法、動的計画法辺りは最低限学んでいます。その中で分割統治法の例としてmerge sortが使われるのが多いですね。merge sortは再帰も使うので良い教材です。ソートがO(n log n)になる仕組みも理解できます。アルゴリズムだけとして2週間でできることといえば再帰と分割統治法くらいでしょうか。あとは計算量の考え方か。データ構造だけとして2週間で理解できるなら配列と連結リストですかね。連結リストは3種類実装方法あるので、そこそこの課題が作れると思いますが。

ちゃんとやるとここだけで1ヶ月はかかりますね。この辺から徐々に内容が詰まり出してます。

この辺しっかりやると、企業の未経験者研修との差がつくとは思いますが。大抵の教室は触れすらしませんが、CSの学生だとかなり重要な項目です。即戦力というか、CSの技術を全体見れる人はプログラミングの基本はデータ構造とアルゴリズムと言う人が多いと思います。

Sinatraシリーズ

Sinatraって公式サイトはDomain-Specific Languageを主張してるけど、web/appサーバの集合体みたいな感じですね。サーバ起動してパラメータも取れるような。まぁ、Javaで言えばapache/tomcatを起動してjsp書くイメージでしょうか。まぁ、Railsの前に挟んだほうがいいとは思います。

DAY7

Think Like an Engineerシリーズその他諸々

これ、最初にやった方がいい気がする…。エンジニアとしての考え方をベースに課題をやって習慣づけた方がいいし、デバッグのやり方わかってれば質問し放題ってほど聞かなくても済むし、ログをちゃんと読めば大抵理由がわかる。コードの書き方とかも最初に学ばないと変な癖つくし。変数名にローマ字とか絶対やる人います。この辺の内容は、現場でOJTのところが多いかもですね。システム開発だとバージョン管理ツールは現場によって違う印象。今はgit系が多いと思いますが。僕はバージョン管理ツール系はググって自分で憶えた気がします。githubに関しては、チームで使わないと現場で勝手にmasterにpushとかしそうで怖いな。権限切ってなかったら死にます。チーム開発はオプションとのレビューもあるので、単体だとあまり意味ないです。転職活動で企業にコード見せる手段くらいにしかならない。

DAY8

大課題Railsでアプリ

この辺、画像とかも自分で用意するんだろうか。この画像を使ってショッピングサイト、とかの方がプログラミングに集中できそうですが。プログラマ向けとしてでなく、ビジネスサイドの人間がプログラミングをかじるなら有用。

PHASE 3

DAY8

Bootstrap入門

前項RailsとオーバーラップしながらなのでRails動かしながら、なんでしょうが。スタートアップとか以外だと、webデザイナとかUIチームが動き考えるので、それに沿って利用するくらいだと思います。

DAY9, 10

実務的な部分ですかね。大抵の現場だとジョインした時点で実装されてて、画像とかもコピペかモジュール化されてそうだけど、知ってるのはいいこと、という感じ。DAY8のは静的に近い、DAY10で動的なアプリになるんですかね。ここの課題でネットビジネス系の人達のサイトくらいなら普通に作れそうですね。ブログで記事管理して、フォームで問い合わせきたらメールで通知すればいい。

卒業課題

デモデイで発表するやつですかね。実務考えるならチームで、3人以上でやった方がいいと思う。githubでの共有仕方を学ぶ意味でも。

Rails応用シリーズ

DAY10までなので最後の1ヶ月は卒業課題やりながらこれなんですかね。この辺学ぶのであれば、運営側で何かしらのwebアプリの土台作ってそこに機能追加する形でアサインしてやらせたりした方がいい気がする。Twiiterになってますが、twitterログインとかその辺は新人にはやらせないので現場で求められる頃には忘れてるかもですね。この辺って中級者以上はドキュメントちゃんと読めればできるので、そこまで初心者でやる必要のない部分です。現場で経験積んでいけば任せられる時には理解してると思いますが、即戦力目指して無理に突っ込んでるのかな。パフォーマンスで正規化…うーむ、パフォーマンス考えるなら、スロークエリ見てインデックス考えるとか、そもそも、スタンドアローンでパフォーマンス・チューニングってどうなんだろ。analyzeでインデックス効いてるかとか見るのかな。正規化ってパフォーマンス目的というより、使い勝手の問題でシステムによっては正規化しすぎるとむしろパフォーマンス落ちるケースもある気がするけど。

ないけどあった方がいいトピック

連結リストとか途中で書いたのは置いといて項目自体

スケーリング

スケールには悪魔が潜んでいて、特にRubyはユーザー数の影響をもろに受けると思います。即戦力というなら、負荷試験の方法を教えて、何が起こるか、どう対処するかを教えた方がいいです。DBのパフォーマンスチューニングもスタンドアローンと違った形になると思います。ロードバランサでの振り分けとかも概念として知っておいたほうが。

セキュリティ

ログインの辺りで教えてるか見えませんが、パスワードの暗号化とか。後はSSHとかの仕組み。web技術入門で教えてるかな。もし、0から作るならセキュリティはちゃんと知ってたほうがいい。証明書周りのこととか。Rubyサニタイズとか自動でしてくれるのかな?

大規模システムの機能追加

運営で大規模システム作っておいて、実務に近いファイル数のあるシステムで改修を行ってプルリクエスト出して、とか。チーム開発をオプションで付けるとあるんですかね。多分、この辺が会社の研修やプログラミング教室と現場の大きな違いです。

総評

検索でよくかかるプログラミング教室の中ではかなり良い方。ただ、「即戦力コース」という名前は止めたほうがいいアフィリエイトをガッツリ出してるし、創業者の中にネットビジネス界隈の人間がいたのか、最初は誇大広告気味でも流入に必要という話だったのかも知れませんが、中の説明見てても卒業がスタートラインと言っていて、半年片手間で即戦力が無理なことは理解してる気はします。スタートラインなのに即戦力ってどういうことだ、という話で。流入考えてのジレンマはありそうな気はしますが、止めたほうがいい
即戦力の人って大半が努力を続けてきた人達です。現場を経験して勉強し続けてる、だいたい3〜5年で即戦力と言える(CS卒でセンスあるなら1年で十分かも)として、それだけの期間を平日毎日8〜10時間とか実務して、家とか電車で勉強してる人を相手に6ヶ月隔月のディスカッションしながら自習して太刀打ちできると思いますか?
ボクシングで例えると即戦力はA級ボクサーです。ボクシングはC級(4回戦)から始まって、4勝するとB級(6回戦)に、そこで2勝するとA級に上がります。最短でも6試合必要です。では、A級からスタートする方法がないか、と言うとあります。現在世界王者の村田諒太は金メダルの実績でA級プロテストでA級スタートです。他に井上尚弥はB級テストですが、A級ライセンスが交付されています。この辺のプロテストの相手はだいたい日本ランカーか日本チャンピオンだったりします。何が言いたいか、というと、即戦力でスタートするということはいきなりそういうところに飛び込もうとしているということです。人事としては即戦力応募できた実務経験ない人間だと、カリキュラムにない必要なことができるか、という観点で質問されると思います。自信ありますかね?

そのままプログラマ向けで行くなら「未経験スタートコース」とかにしてしまった方がいいと思います。最初から「一人でwebアプリを作る」を求められるのは社員3人のスタートアップとかだけですね。また、技術スタックが少しでも違ったら、その部分は未経験者と変わらない、という判断がされるので、研修も最初からになる可能性も高いです。未経験者で応募したら、カリキュラムの内容を、やったことを理解してるか聞かれるので、ちゃんとやってれば合格の可能性は高くなると思います。学歴とか資質ありそうな人は下手すると受けないほうが質問が簡単で未経験扱いだと入りやすいかも…。

もう一つ思うのは、現在、実務でやらないビジネス寄りの課題が結構含まれているので、現行の即戦力コースを「ビジネスコース」として最初に書いたようにスタートアップで自分で起業してプロトタイプを作ってビジネスコンテストで融資を得て、を目指すとか、既に企業で働いてる、プログラミング経験のない企画や役員がより業務をスムーズに価値あるものにするために受けるコースにしてしまえばいいと思います。その観点だとすごく良いコースだと思います。
それをするなら、「未経験スタートコース」はビジネスコースと組んで最終課題をやれば実装に集中できるし、大規模システムを触る時間も作れると思います。

CEOがプログラミングをかじったビジネス寄りの人だから、いいとこ取りをしようとして、結果としてビジネスに寄ってしまっている気がします。

更に言うとwebデザインコースも作って、htmlとかcssはそちらがメインで担当して、プログラマが利用する箇所では受渡しとかするとより実務に近づくとは思います。

個人的に向かうといいと思う方向

新人向け研修

前回書いたように、未経験者歓迎のシステム会社では新人研修でほぼ同じ内容をやります。プログラミング教室に通うならプラスアルファの何かがないとプログラマを目指す人間が通う意味がないと思います。前述の通り、ビジネスに振り切って、現状をビジネスコースにしたり、色んな会社と組んでビジネス部分を少し実務に寄せて新人研修として売り込むなら価値の高いコースだと思います。研修の場合、毎日時間を使えるので3ヶ月でいいかと。現状、自分がJavaで受けたのとの差分はあまり感じというか、差分の部分は3ヶ月になると詰め込み過ぎな感じですね。しっかり身につけるなら1日8時間4ヶ月でちょうどくらいだけど、4ヶ月研修させるのはきついから、新人に任されない部分は削って良いかも。ちなみに、助成金が使えるはずなので、内容がいいなら企業と組むのはいいと思います。TECH社は昔この方向でやってた気がします(今は知らない)が、正直TECH社の研修の内容で現場に出て来られるのは辛い。DIVE社のカリキュラムは技術スタックが合うのであれば良いと思います。

20代30代の転職でいきなり高給を得られると思わないほうがいい

ネットビジネス界隈の人を見ると特に思いますが、20代30代で楽して金持ちになりたい、的な人がすごく多いですよね…。それできる仕事は大抵がグレーゾーンです。真っ当な方法であれば、結局優秀な人間がそこに流れ込んで、楽して稼ぎたい志向の人間は結局あぶれます。優秀な人間が入ってこないところは天国ではなく、地獄の入り口なので、優秀な判断力ある人間は敬遠する、ということです。今だけを考えてる人間との思考の違いですね。グレーゾーンは大半が自分の幸せ、金稼ぎを重視してる人が多くて、顧客が幸せになる可能性が低い、社会貢献度の低い仕事が中心です。お客さんに騙された、畜生!と思われたり、無駄な金と時間を使った、と思われるような仕事をしたいですか?また、そういう仕事は消費者センター等に苦情として上がり、法規制で稼げなくなる可能性も高いです。「消費者センター 情報商材」「消費者センター アフィリエイト コンサル」とかで調べると事例がいっぱい上がります。
アフィリエイトやドロップシッピングに関する相談が増加!−「簡単に儲かる!」? インターネットを利用した“手軽な副業”に要注意−(発表情報)_国民生活センター
2009年で問題になってたんだから、いい加減動けよ感。
20代に増えている!アフィリエイトやドロップシッピング内職の相談−友人を紹介すると儲かる!?借金をさせてまで支払わせる事例も−(発表情報)_国民生活センター
2015年にマルチ化してる…
アフィリエイト・ドロップシッピング内職(各種相談の件数や傾向)_国民生活センター
今年はこれか。

20代30代は自分の人生の、人としての形を作る時間です。努力しましょう。努力して作った芯は簡単に折れません。40歳くらいになると積み上がった経験や知識は財産となり、かなりの確率で高給になります。楽して稼げる業界でホントに稼げても、法規制で稼げなくなったら無職だった人と同じ扱いを受けます。むしろ、詐欺まがいの商売してた人、という扱いですね。逆に言うと、20〜30代で努力しなかった人は50代以降とかで本当にひもじい生活になると覚悟しておいた方がいいです。

もし、会社員として一発逆転でIT業界に転職したいのであれば、アメリカの大学からIT企業への就職をお薦めします。アメリカの大学高いので費用準備することになりますが、コミュカレ2年安く通って3年に編入できればそこまでかからないです。また、優秀な人なら返済不要の奨学金をもらいながら学べます。で、アメリカのIT企業は新卒はないのでいきなり中途ですが、年収10万ドルは普通です。4年で年収10万ドルの会社員になるなら、日本でコツコツ努力するより早くないですか?また、海外では年齢を聞かれないので(resumeに年齢があると落とした時差別と訴えられかねないから止めてくれと言われる)30代からITに移るならこれがベストだったりします。

とはいえ、英語がネックになるので、大抵の人は入りやすいシステム会社に未経験で入って、経験を積んでより難しい高給の業界に移ってを繰り返すのがいいと思います。

最後に

いい加減アフィリエイトとか、一部のセンスいい上手く言った人間の声だけ取り上げたインタビュー止めませんか?
正直、プログラミング教室としては優良な部類です。幹部にネットビジネスどっぷりの人間がいるのか手法がマイナスになるやり方多すぎます。真っ当な人間が胡散臭いと思う手法です。流入はあっても、ネットビジネス系とか一発逆転志向の人が中心になって、本気で転職の人が避ける状態になりかねないです。まともな人、センスあってリテラシーある人は褒めてる記事にだらけでほぼアフィリエイトついてる、というのがわかったらそこは避けるでしょう。金を握らされてるジャッジは採用しない、という基準です。自発的に感想をもらってもいい評価中心になると判断したなら、ASPを通したアフィリエイトは打ち切って、雑誌広告とかTVCMに踏み切ったほうが良いです。現状、真実の体験談がアフィリエイトに埋もれてしまっている。アフィリエイターはモラルのない人間が多く(楽して稼ぎたい、自由になりたいなどと、社会のためより自分を重視する人が多いのも一つの要因か)、仕組みをわかってる人間からするとマイナスの印象を持たれるような宣伝の仕方をします。検索で絶賛が並んで、一時期、プログラミングわからないの丸出しでプログラミング以上に何故かCEOを絶賛してたし。ちょっとその頃宗教観ありました。
コストはかかってもちゃんとした広告や、例えば、なにか有名人とか企業とタイアップして宣伝した方がいいです。何度も書いてるけど、アフィリエイトと相性が悪い(目的も違うし、受講生の目的を評価できない人が大抵書くことになる)ので、プロからすると、なんでこの人達が評価してるの?卒業生全然わかってないなぁ、となり、人事周りの人間から逆に悪い印象を持たれてマイナスになる可能性もあります。

そろそろ健全化進めても良い教室なようには感じます。

社会人にプログラミング教室は本当に必要か

ネットビジネスってなんだかなぁ、再燃中。ここでも取り上げている通り、ネットビジネス(インターネット上でサービスを提供しているという定義だとほぼすべての会社になるので、ここではアフィリエイトとかブロガーとかYouTuberのような、非エンジニアのネット個人業種)という際どい領域(違法性が高く制限が掛かる可能性が高い)を仕事に選ぶ方はクリーンな人もいますが、大半が人を正しい方向に幸せにしていない、社会の歯車として価値を生み出していない人達です。広告表示のない報酬目的の記事であったり、情報のなにもないトレンドブログであったり、極めつけは情報量ゼロか現実には成功してないノウハウを売る情報商材やコンサルですね。嘘をついている人のほうが多い業界です。

コンサルとかをしてる人には実際稼いでる人もいるでしょうが、何故か自分が成功していなくても、年数生き残ると新人ネットビジネスのコンサルという形で稼ぎ出すという情弱が新人の情弱を食い物にして稼ぐ状態ができてるように見えます。プロから見て到底大金を取れる水準にないのですが、個人として安い額で作っているのでネットビジネスを個人でやる人間が連鎖して売上が発生している感じに見えます。情弱連鎖です。この業界ではコンサルも情報商材とあまり変わりません。本来コンサルとは企業や自身に蓄えられた成功の経験や知識を元に成功に導く方法を、いかに儲けるかを助言する立場ですが、実際その方向で成功していない人が蓄積した失敗だけを基に成功するためのコンサルをしてるわけで。プロの水準をわかっていない人にプロの水準にない人が売っているし、金額も個人だと高収入だけど、企業としてはやる価値のない安い仕事なのでニーズはマッチしているのかも知れません。どうせ相手にしてるのは簡単に稼げるを信じて参入する価値判断ができない人中心です。稼げるという言葉に釣られて鴨が入ってきてくれないとお金を落とす人がいないので、嘘まみれです。しかも、簡単に稼ぎたいという人はそこまで金を持っていないので、生贄は日替わりで必要です。本当に簡単に月100万とか稼げたら高額所得者はネットビジネスの人間ばかりだし、それだけの金がその人達に流れ込んでることになりますが、まぁ、実態があればとっくにTVとかで特集になってしょっちゅう取り上げられますね。本人達稼げる稼げる言ってるわけだし。

2018年フリーランス白書によると、約1000万人のフリーランスの内、5.9%が年収1000万円超えらしい。59万人か。そこそこいてもおかしくないけど、下記だと2017年度の10万円以上が2.3%。
www.japan-affiliate.org
ただし、母数が少なすぎる。真っ当なアフィリエイトはこれで、稼いでるのはほとんど情報商材やコンサルの実態無価値勢でしょうね。

blogos.com
こういったアフィリエイトより公式が先にきて正しい情報を得られる流れも今後は加速するでしょう。公式の検索してるのにアフィリエイトだらけとかホントに彼らのアカウントを消してくれるゴルゴはいないか探したくなります。掲示板にRGBって書いたらネットハンターがサイトを抹殺してくれないものか。

基本的に稼げるアピールするのは、そこに人の流入が欲しい、それが金を産む場合です。ネットワークビジネスMLMとかみたいにね。子ねずみが自分に金を運んできてくれる。搾取のための勧誘です。金を使ってくれる人がいないと稼げないから。じゃなきゃ、アフィリエイトで稼げるアピールするわけがないじゃないですか。どう考えても、アフィリエイターが少ないほど稼ぎが多くなるんだから。プログラミング教室で検索してもどれだけアフィリエイトが多いことか。これが1件だけならみんなそこから飛んでボロ儲けですよね。ランキングで上位にボーナス出たりとかもあるし、競合が少ない方が可能性は高い。稼げると書いてるところの9割は情報商材へのリンクかコンサルのリンクがあるのが大半で、稼げる詐欺から信じた情弱を相手に実際稼げるようになる黒魔法だろう。成功してない人に成功の手伝いをしてもらう奇っ怪な世界だからなぁ。競合が増えて喜ぶなんてまともな業界ではない。人手不足で同じ仕事に対して人材が必要な場合とは違うからね。横展開で一緒に働く仲間が欲しいのでなく、縦展開で自分より弱い金を運んでくる人間を増やす図式です。そして、稼げるアピールして情弱に参入させる→やり方が悪いと情報商材を買わせたりコンサルにつく→その方法でも成功せず→何故か成功しないまま商材を売ったりコンサルに回る、という謎の成功者不在で金だけ回る仕組みです。

ただ、情弱のネットビジネス参入者は無限にいるわけではないですし、ネット上での情報の劣化が激しい昨今、いつ規制が入るかわかりません。Googleさんがクソ記事認定したのを上げようとするイタチごっこもAIが解決する可能性は高いSEO対策が無駄になる時代の到来です。ネット広告も見直すべきだと世間が気づき始めているので、今後、この層の人達は本物以外は淘汰されていくでしょう。この業界のコンサルは何度も書くけど、成功してない人間がその経験でコンサルをして新人相手に稼ぐ→コンサルで成功者になるという摩訶不思議なねずみ講のような世界です。成功してない人のノウハウを買う人がいるのは冗談みたいな話で、最初成功しようとしたネットビジネスでなく、失敗してるのにノウハウを売ることで成功する、錬金術ですね。構図はやはりネズミ講と一緒で嘘を付いてるうちにそれが連鎖して事実になる。結局、誰一人正しく成功していないのに金だけが流れているというのがネットビジネスの世界で、食い物にする情弱がいなくなった途端に餓死する世界です。現状、ブログの過去記事が検索に引っかかったりして金になってるでしょうが、遠くない将来検索エンジンは情報の賞味期限も判断するようになるでしょう。僕は基本的に期間検索で古い情報はカットしてますし。また、規制が入ると同時に積み上げたものが全て崩壊して、社会復帰は難しくなりますよね。人脈も同じネットビジネス界ばかりでしょうし、人脈を頼ろうとしても総倒れになりかねません。就職しようとしても、ああ、あの規制入った仕事してたのね、と倫理観が問題視されて落とされる可能性が高いです。まぁ、基本的に読者の利益より自分の利益優先ですし、良いサービスだから薦めようと思っても目的が違って、そもそもの観点が違うというのもよくある話です。良いサービスじゃなくて、大金出すなら、結果につながるべきですからね。自分も、もう娯楽系の仕事はしないで、社会貢献というか、人の日々の生活を豊かにする、健康に寄与するような仕事を優先しようと思ってます。AIはそういうところに親和性が高かったりするのもいいところ。実際のところ、9割の人がアフィリエイトの記事見たくないでしょ。購入後にアフィリエイトだとわかったらものすごい後悔ですよね。利害関係のために薦めてた、と知ったら、せっかく勝った試合で実はレフェリー買収されてた的な感覚ですよね。Googleの機嫌で売上ぶっ飛ぶというのは、大多数が見たくないということです。何度もいうけど、専門特化型アフィリエイトは優良です。正しい知識と経験で、大抵が広告と明示しても購入されます。この人が言うなら、という状態です。そこ目指さない人はネット上にゴミをばらまいているに等しいです。

特化型じゃない皆様…

常々言ってるけど、君らは職業をIT関係とか言わんで欲しいです。

そもそもね、個人で働くというのは雇用を生み出さないという面で社会的にプラスにならないんですよ。フリーランスブームとはいえ、自由に働きたいからフリーランスとかっていうのは自己中な話で、自分も成り行き上フリーランスになって高収入を得られるようになりましたが、健康や将来の蓄積を考えると、実力を評価してくれる高給の会社員になるか、自分の会社を持って社員を雇ったほうがいい。個人で働いてる人は自由な反面、社会の歯車の中でおまけに過ぎない存在です。結局、中心にはなれないのが現実です。自由な半面組織という力を失っているので、大きな仕事の中心に置かれることはないということです。

今回はプログラミング教室そもそも論


誰がプログラミング教室を評価すべきか

アフィリエイトの影響もあり、プログラミング教室の評価レビューが乱立しています。前の記事に書いた通り、プログラミング教室はアフィリエイトに向いていません。何故かと言うと、受講中の生徒や卒業生、下手するとメンターや講師もプログラミング教室の謳い文句の常套句「即戦力」を判断できません
ちょっと考えてほしいのですが、下記の誰に教室の価値を評価して欲しいでしょうか?
・受講生
・卒業生
・現場の人間
・人事
・アフィリエイター

僕は現場の人間、もしくは人事の現場担当者の立場で即戦力として受け入れられるレベルと判断できるか、という観点でプログラミング教室をレビューしています。特に誇大広告寄りな「即戦力」とか卒業後フリーランスで独立というような謳い文句の場所を中心にカリキュラムレビューをしています。実際通ってはいないので、中の状況を知りたい方は受講生か卒業生の体験談を読んで見て下さい。ただし、アフィリエイトリンクが貼ってあるものの中には偽の体験談もあります。アフィリエイトである以上、そこに誘導して報酬を得たいという気持ちが少なからずあるので、情報が偏るのは理解して下さい。

ちなみに、皆さん、何を目的にプログラミング教室に通うのでしょうか?
…おそらく次のキャリアに繋げるためだと思います。趣味に数十万払える人はなかなかいないでしょう。そこまで財力がある人間は真っ当な働き方なら頭の切れる人が多いと思うので趣味なら独学で十分です。・・・というわけで、目的ごとに評価者の考え方も変わると思います。

目的ごとの評価者

結果にこだわらず楽しみながら学びたい

→ 受講生、卒業生(、アフィリエイター)

実際に教室に通った人なら、肌感として学びやすい教室かがわかります。学びやすいところ親切なところで楽しくプログラミングに触れたいならこのカテゴリになります。このカテゴリの記事の特徴としては、2分割されて、アフィリエイト付きとなしがあります。後者はアフィリエイトに埋もれてほとんど見つからないので、-af.moshimo とか -a8.net を付けて検索すると良いです。-を付けるとその後の一連の文字列を含むページが検索から除外されます(アルゴリズムが変わったのかたまに混ざりますが)。ただし、この体験談で効果の測定、即戦力になれたかはわかりません。

アフィリエイターの書く受講体験

当然、報酬を少なからず期待していますから大半がべた褒めです。場合によっては他社との比較もあります(場合によっては優良誤認表示に繋がる)。ここで注意したいのはその人のその後です。逆に差別化で謳い文句ほどの上達はない、という事実を書き、とはいえリンクを見たら結局アフィリエイトのこともあります。効果は得られなかったのに限定的に薦めてるという。もし、あなたがキャリアとしてプログラマ、ソフトウェアエンジニアになりたいなら、その体験談の作者がその同一線上の進めているかをちゃんと見て下さい。卒業後の転職してからの実務のこともちゃんと書いてあるか、この辺は重要です。アフィリエイトのために受講するというのは、ちょっと体験しに行く、という遊び感覚なので、言わばプロボクサー養成ジムにダイエット目的に行った人の体験談です。楽しそうでもプロになりたい人の参考にはならないでしょう。目的が「その後のキャリアに繋げること」でなく、「良い教室かどうかを確認すること」なので、教室自体の評価は豊富でも、それが結果としてどうなったかは大抵書いてません。即戦力を謳う教室でも、即戦力に関する記述は抜け落ちてることも多いです。・・・まぁ、判断できないでしょうし。また、教室の評価が中心なので、技術面での記事も少ないように思えます。個人的にはわかってない人間の書く技術情報(プログラミング教室のメンターがよく書いているやつ)はノイズでしかないので、書かないで欲しいですが、学んでできるようになってくると多少は書きたくなるのが人間です。あと、アフィリエイトを付けて紹介している人と議論になった際に、良いと思ったから紹介している、とのことで、それなら、利害関係があるのを誤解しないようアフィリエイトであることを明示するかアフィリエイトリンクを外して欲しいとお願いしたところ、明示を選択されました。悲しい話で、本当に良いと思ったなら後者を選ぶかな、と思ったのですが報酬は捨てられないようで。一方から報酬を受けて捌いてるジャッジが公正な目で見てます、と主張するのと無報酬のジャッジでは心証が全く違います。

アフィリエイトなしの体験談

大半が挫折してます。そもそもが、上手く就職できた人は実務で忙しくなって体験談とか書く暇もモチベーションもないのが現実かも知れません。何度も書いていますが、プログラミングは誰でもできるものではなく、芸術系職種と同じでセンスが求められます。量産型コーダーなら特に求められませんが、低賃金で高稼働なのでお薦めしません。センスがなくてITで生きていきたいならプログラマ以外のキャリアを目指した方が良いです。センスの面で言うと、経験上、できるエンジニアは頭の中でコードを実行できます。ソースを読んで、実行する前にこう動くがイメージできないと、バグを事前に察知したり、リバースエンジニアリング(コードから仕様や動作を理解すること)が上手くできなかったり時間がかかります。この頭の中での実行はコードの裏の動き、機械レベルでイメージできるとより鮮明に理解でき、精度が上がります。精度が悪いうちはこう動くはずなのに、で実は裏のアーキテクチャが影響してた、とかあり得ます。年数経験しても、頭の中で実行できない人も結構いるので、この辺できない人はマネージャ職やインフラ等経験重視の職種を目指した方がいいです。

※転職後の記載がある場合

転職後の記載がある場合でも、教室によっては斡旋でお金を取っているところもあるので、フリーランスや転職エージェントに繋がっているところでは、転職後に続いているかも確認が必要です。転職を成功させるとエージェントやフリーランスの紹介手数料で年収の3割がエージェント会社に入ったりします。なので、転職成功をゴールに、その先は知らない、という悪質なところもあり、試用期間で打ち切られる可能性もあります。

次のキャリアに繋げたい

→ 人事や現場の人間、1年以上経っている卒業生

こちらの目的の人が中心でしょう。
まず、考えてみて下さい。受講生や卒業間もない素人に毛が生えた状態で即戦力とは何か、自分が即戦力に相応しい実力が付いたかわかるでしょうか?プログラミングの世界は広大な森、もしくは海のようなもので、コンピューターサイエンス(以下CS)の学生はクラス自体が一種の地図になっているので、少しずつ地図を埋められますが、プログラミング教室や独学は地図なしでとりあえず動き回るようなものです。上手くゴールできてみ、どれだけの範囲を理解して、自分がどの位置にいるのかわからないと思います。自分は即戦力に相応しいと思う、と思い込むことは転職に取って自信を持つというより過信することになるだけです。

では、即戦力を判断するのは誰か。

それは人事であり、採用面接を担当するエンジニアです。一番最高なのは卒業生がその立場に成長することです。センスのいい卒業生なら1年もすればある程度、自分のいる業界が俯瞰で見れるでしょう。その時にそれなりの立場に就けていれば即戦力になれる一番の証明です。ただ、即戦力コースを謳うなら、大半がそうならないといけません。新人がプログラムを学んでいる時は前述の通り、いわゆる五里霧中状態で、自分がどこを歩いて何を目指してるかわかりません。例え、教室を体験したとしても、本来の未経験の人間が自分が即戦力に相応しいか判断できるとは思えません。即戦力を判断できるのは即戦力を判定する立場の人間です。なんで、通ったこともないのにカリキュラムから教室を評価できるかわからない、とアフィリエイターの方に聞かれましたが、
「では、あなたは人事に評価するために教室に通えというのか?」というのが回答です。教室に通った、とアピールした場合、人事が見るのはカリキュラム程度です。下手をすると何も見ずに「未経験者と変わらない」という判断になります。転職活動をしてて、渡した情報をちゃんと見てる人が本当に少ないのは実感しています。結構トンチンカンなレスポンスがきます。特に教室上がりだと技術スタックがぴったり合わないと評価するのは難しいRailsSaaSを使っている環境、ということになるでしょう。ほとんどの教室は時間短縮にSaaSを使ったり、フレームワークを使わない場合を教えずにいきなりフレームワークを使います。なので、フレームワークを何故使うのか、中で何が起こってるか、SaaSに載せない場合にどういうコマンドが必要かということがわかりません。その部分をやってからフレームワークSaaSがこんなに便利なんだよ、中の動きももう分かるよね、というのが正しい学習です。CSの課題ではライブラリで実装されていることを自分で実装する課題がよく出ますフレームワークの中の動きがわかればフレームワークを拡張したり、パフォーマンスを正しく発揮できます。場合によっては新しいフレームワークを作る側になります。世の中には仕組みを作る側と使う側がいて、当然作る側の方が評価が高く高給です。使う側でいる以上、この壁は超えられません。少なくとも、その種は植えたほうが良い。

それで、僕の判断としては人事にこの人教室通ったみたい、と言われて評価するのはカリキュラムを見るくらいです。卒業生が既にいれば、その人も判断材料になるかも知れません。ただ、もし即戦力採用で面接をするのであれば、カリキュラムを見て足りないと思う部分を中心に質問します。webだと、例えば、「ユーザーからのアクセスにやけに時間がかかるという問い合わせがあった。あなたならどういう手順で原因を見つけるか」とか、もしくは「一部のユーザーがどうしても特定の処理でエラーが出るとの問題が発生した。どう原因を見つけるか」「ユーザーが50万いるゲームでランキングを表示したい。どういうシステムを組むか」とか。即戦力ならこの辺は答えて欲しい。まぁ、その面接の前に、自分の場合、最初にオンラインのコーディングテストを設けると思います。アルゴリズム寄りのやつを。文字列操作とか問題解決系ですね。教室であろうと業務であろうと最低水準の技術力と素養があればいいので、オンラインで実装を求めます。

ちなみに僕は直近の会社ではフリーランスだったので、採用面接には立ち会っていませんが、現場で働き出した新人の派遣とフリーランスの査定には関わっています。フリーランスや派遣の技術力を数日働いた段階でクライアントから聞かれて、「ちょっと厳しい」と答えて、その人が翌月にいなかったことが何度かあります。その基準として、ソースコードやテーブル構成から仕様を理解出来ない人、つまり、わからなかったらすぐ聞く、というプログラミング教室の方針を地で行く人でした。本来見ればわかるのに見てもわからない人、というのは実務能力が低いということになります。聞けば聞くほど、他のエンジニアの時間を奪うので、なるべくコードから理解できたほうが良いです。キャッチアップの速さは確実に評価に繋がります。実際のところ、現場で大事なのはリバースエンジニアリングであり、コードから当たりをつけてのデバッグです。コードを頭で実行できず、テーブル構成とコードからテーブルの意図がわからないとなると、スペシャリストとして外部から来る意味がないということです。見た感じリバースエンジニアリングをちゃんと教えてるところは殆ど無いように思えます。ちゃんとデバッグの仕方が理解できれば、メンターと呼ばれるTAに何度も聞く必要はありませんフリーランスは社員以上に求められる技術水準が高いです。給料が良い分、スペシャリストとして現場に来ているので。そして、技術力が足りないなら翌日発注しないだけです。卒業後フリーランスに、という教室はすんなり決まっても翌月無職になる可能性があるので注意して下さい。経験上、1年以上現場にいたのは使っている技術スタック全体を理解できる人です。

エンジニア職でなくてもプログラミングの知識が欲しい

→受講生、卒業生(、アフィリエイト)
こちらは教室自体が目的、もしくはビジネスに寄っている必要があるので、DIVE INTO CODEとかは向いていると思います。報酬目当てとはいえ、アフィリエイト記事を数十個とカリキュラムを読んで思ったのは、プログラマを目指す人以外には良いかも知れないということです。正直、内容的にはビジネス寄りです。CEOの経歴的にも。スタートアップとして少人数で起業したい、とか企画職を目指すけど、表面的なプログラミングの知識を持っておこうという人にはぴったりです。即戦力は過大広告なので信じないほうがいいです。そんなに甘い業界な訳がない。そもそも、技術スタックを全て自分で選べる会社の方が少ないので、0からwebアプリを作れる必要なんてありません。新人にそんな仕事させるのは数人規模のスタートアップだけです。ほとんどが新人は即戦力であっても機能追加とか保守案件に配属されます。新規開発でもCBT前で人が必要になったタイミングとかが普通でしょう。また、エンジニアが自分で企画することはほとんどないです。それは企画職の話。当然、企画にGOが出て、チームで動き出すキックオフから口出ししたりはしますが。CSの課題でも大抵が工数的にも実現可能なテーマを先生が提供してくれるのがほとんどで、そのリスト外から選ぶのは数%、通常一人くらいです。実務に近い形でやってプレゼンというのはCSの最終課題でもよくある形式(1学期の3個授業取って2個は最終課題のプレゼンがあるとかは大学院では普通)なのでいいと思いますが、企画を0から作る必要はありません。また、通常デザインとか素材は別のチーム(UIチームとかデザインチームと呼ばれるグループの人達)が提供してくれるので自分で画像を準備したり加工したりする必要もありません。餅は餅屋なので、エンジニアが下手くそなデザインするなら素直にデザイナーに任すべき。大半は美大卒でセンスあります。まぁ、一部のCSSとかフレームワークだと、エンジニアでもそれなりのデザインはできますが、ありきたりで、ああ、あれね、と言われるようなデザインが限界です。僕は高校時代独学でperlcgiの背景やらタイトルを変更したりしてましたが、フレームワークcssのベースラインで画像とデータを変えるだけだと、そのレベルに感じちゃうんですよね。DIVEさんはここのページ見てるかも知れませんが(指摘したことがカリキュラムに反映されてたりするので)、即戦力って過大広告止めて非エンジニア向け、を中心にした方がいいと思いますよ。プログラマ向けもやるなら、プログラマ志望に無理に企画もさせないでビジネス寄りの企画・スタートアップ運営コースを作ってデモデイは企画とプログラマで組んでやるか企画は教室運営陣が設定して、かつ、そのプロジェクトを少しずつ拡張していく形にしたら実務に近い形の非常に良い教室になりそうですが、こだわりか詰め込みすぎて、実務に必要なことを削って本来実務に必要ないことを詰め込んでると感じるのが現場の人間の感覚です。

実際、社会人にプログラミング教室は必要なの?

未経験者向けであれば、個人的にはNOです。教室通っても、web開発だと技術がない勢い中心のスタートアップに低賃金かシステム業界になる可能性が高いです。そもそもAmazonとか大手は応募条件がCS卒もしくは同等の経験で、ポジションによってはCS院卒、博士も珍しくないです。そのレベル、高額ポジションになると、プログラミングに限定した教室や経験云々でなく、知識体系としてちゃんと習ってるかが問われます現場エンジニアの人事的観点からでも、教室出たという人は未経験者研修は省略してもいいか、研修の前半スキップしてもいいかな、程度の評価です。技術スタックが完全に同じでないと全スキップも無理です。SaaS使ってるところ少ないから少なくともサーバー周りの知識は必要になるでしょう。自社サービスならCIの知識も必要になってくる。結局、未経験入社が中心になりますし、未経験者を受け入れているところは基本的に新人研修があるので、プログラミング教室と同等の研修を給料をもらいながらできます。なら、最初から未経験可のシステム会社に入社した方がいい
ちなみに、自分が未経験者研修で習ったことは
・プログラミング基礎構文
・オブジェクティブ指向プログラミング
MySQL
Java EE(Servlet, jsp)
・web/appサーバ構築(apache, tomcat &連携)
・ショッピングサイト作成
とかそんな感じだった気がします。3ヶ月の研修を2ヶ月半で終わらせました。

プログラミング教室を出ると即戦力で高給で転職できる、なんて都市伝説があるかも知れませんが、未経験入社だと下手すると新卒と変わらない、手取り20万前後が多いです。ただ、僕の経験として、いきなり未経験入社で1年後の給料が600万なんてこともあり得るので、会社選びを真剣にして、入社後に努力しましょう。一緒に学ぶ仲間も卒業後どこに行くかわからない人でなく同僚なので仲良くなるし、研修中でも会社の飲み会とかで実務についている先輩の話が聞けます。
プログラマは一発逆転の成功への近道ではありません。地道に経験と知識を蓄積するエンジニアリングの仕事です。仕事としてプログラマを目指すなら、準備に慎重になるより、未経験でも熱量を持って飛び込んで行ったほうがいい。ちなみに最初の会社の同期ではプログラミングは向いていなかったけど、インフラに面白さを見出して、そちらの方面で戦力になったやつもいます。IT業界=プログラマではないので、中に入ったら違う向いてる道があるかも知れません。最初給料安いけど、プログラミングを楽しいと思って、学び続ければ基本的には報われる業界だと思います。ちなみに、プライベートで勉強しなくてもシステムでは通用するかも知れませんが、給料上がらないし、勉強してる同僚には絶対勝てないし、プログラミングの勉強を楽しいと思えなければ、経験中心のインフラ辺りに進んだほうがいいです。

また、未経験を通りやすくするなら、githubにアカウントを作って、入門書を片っ端から写して実行して公開するといいです。入門書そのままでも書いて動かした経験があるとプログラミング教室卒と同等くらいには見てくれる可能性は高いです。少なくとも書類が通る確率は上がりますgithubの公開がない卒業生より下手したら通りやすいかも。

社会人に限定しない場合

非CS系学部の学生ならプログラミング教室は良いかも知れません。CS卒以外ほとんどが経験ないので、プログラミング教室→インターンとか経験しておくと結構有利かと思います。ぶっちゃけ新卒なんて、ほとんどみんな同じように見えるので少しでも差別化できたほうが強いです。一日20人と会って何人覚えてるでしょうか。と言っても、新卒で技術職を理系以外から取るところはもう少なくなってきてる気はしますが。結果としてエンジニアから別チームに移される人はすごく多い印象で、最初から絞り出した印象があります。

社会人に必要なプログラミング教室とは

未経験が対象ばかりで即戦力の手前の人間が受けるレベルのプログラミング教室がない。一定レベルがあるプログラマに即戦力まで引き上げるならともかく、未経験から即戦力に引き上げるとか何を言ってるの?という話です。自分はかなりセンスのある方だと思っています。国家資格のデータベーススペシャリストを3ヶ月で取っています。それでも、即戦力レベルになれたと感じるのは1年が経った位ですし、システムで即戦力と言っても、OSS貢献していたり、競技プログラミングで上位に入るエンジニアが多数在籍する会社では新人レベルでした。webやゲーム業界で即戦力と言えるようになったのは米大学院に留学してからです。CSの知識のない人間は大抵壁にぶつかります。そういう時に上のステージに進むための教室こそ必要です。データ構造やアルゴリズム基礎の理解は中堅エンジニアの最低条件です。でないと、スケーリングしないでアルゴリズムで解けるような問題をサーバーを増やしたり、無駄なコストを発生させることになります。日本ではこのレベルで中堅より上級寄りになるかも知れません。知らない人が多すぎるので…。ボリュームゾーンが初心者から中級者に上がる壁の辺りなんですよね。とりあえず動くものはググりながら作れるという量産型のレベルです。

また、現在ある表面を一通りなぞるだけのプログラミング教室は会社の未経験者研修としての位置で提供されるのがいいと思います。上述の通り、未経験者研修と大差ないです。SaaSの使い方とか、基本的に簡単に使えるようにするクラウドサービスなので、元となる知識があればドキュメント読めればできるでしょう。

ついで

最初に取り上げてから1年以上経つ今でもプログラミング教室でスクレイピング人気だけど、実務で使ったことないんですが、使ってるところってどれくらいあるんだろう。法的に分析目的ならいいみたいだけど、目的次第では著作権に触れかねないし、情報守りたいところはjsで見えないようにajaxで動的にDOM組んだりするから、その辺から抜けないと実用的じゃないし、そもそも、勝手に抜くんじゃなくて協力関係でAPI提供してもらったりデータ提供してもらった方がよくない?という印象。