渡るネットは嘘ばかり

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

バズった後はつらいやつ2

F5

後半です。主にバズった記事のフィードバックやら言い忘れたり後で気付いた話です。

前回まえがき長くなり、分割しました。

masa-lab.hateblo.jp

  • 前回の振り返り
    • 本来怒るべきだった人
      • 仕事を依頼したクライアント
      • 真面目にやってるフリーランスエンジニア
    • 読書や勉強会、努力の話
    • 技術マウント
    • WordPressについて
  • エンジニアとして稼ぎたいなら
  • あとがき
続きを読む

バズった後はつらいやつ

256の人
読者数が256人になったのでいい加減更新します。256で「やるなら今か」、とか感じるようになると、そろそろあれですね。

バズったら早めに更新した方が良いのかも知れませんが、自然言語を書くのはつらいです…。いっそ、プログラミング言語で記事を書いてしまおうか(無理ゲー)。

今回は元々、バズった振り返りとITエンジニアとしてのキャリア的な話を書こうと思ったのですが、長くなって、まず振り返りとインフルエンサーについてとキャリアに分けて、まだ分割足りない感じだったので、まえがきと振り返りとインフルエンサーとキャリアの4つに分けました。キャリア周りは来週くらいになるかも知れません。また、振り返りはフィードバックを少し拾うのと、後で気付いた言い忘れくらいなので飛ばしてもらっても。

インフルエンサーもあまり詳しくない(専門家でない人達の情報発信に価値を感じない)ので、どれだけの価値を届けられるか。基本的に、自分の学びや感じたことのまとめと同時に、読んだ人に何かしらの学びや気づきを得てもらえれば、と思いながら書いてはいますが、専門的立場から書けるのはテクノロジーに関わるあれこれくらいです。

続きを読む

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

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

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

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

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

ちなみに勝又さんは元々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からググって学び直すのと、既に中腹まで土台があって細部を整えるだけの人で、どれだけ差ができるかなんて言うまでもないです。

金の話ばかり

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

note.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年先のその子の未来を考えて、しっかり土台から、倒れない技術を持ったエンジニアになるような、しっかりとした根を張れるようプログラマの種を植えてあげましょう。
プログラマにならなくてもコンピュータを使えたほうがいい、と思っている親御さんは学校の授業をちゃんと受けさせれば十分です。もしくは、社会人経験あればそのレベルのスキルは自分で教えられると思うので、