駆け出しエンジニアの皆様へ

はじめに

概要

本記事では、駆け出しエンジニアの皆様に向けて、エンジニアという職種についての説明、初めて収入を得るまでの道筋の提案、エンジニアとしての価値の高め方、独学で技術力を向上するためのロードマップ案等について記述する。

定義

本記事における「エンジニア」というワードは「ソフトウェア開発を業務とする者」という意味で扱う。ソフトウェアエンジニア以外のエンジニアもあるだとか、IEAの認定が必要だとか、そういうことは一旦忘れて読み進めてほしい。多少 web の分野に偏った記事になるが、そこは文脈で判断してほしい。

前記事

1年ほど前に本ブログで web系エンジニアのキャリアチェンジについて という記事を書いた。この記事は、私のキャリアパスの紹介と、web系エンジニアを目指す方への道筋の提案を行ったもので、今も多くの駆け出しエンジニアの方々に読まれているようだ。恐ろしく長文ではあるが、斜め読みで良いので是非一度読んできてほしい。本記事では、度々「前記事に書いた通り」のような前記事を読んだ前提で語ることが多いためだ。

本記事の執筆背景

前記事では、これからweb系エンジニアを目指す人々への戦略提案を行い、実際にその通りに実践して就職に成功した人からの声を多く頂いたが、これからのキャリアチェンジ戦略として実践するにはもう古くなってしまった。大雑把に分けると、とりあえずまず就職する戦略と、メンターを雇う戦略と、Rails チュートリアルに取り組んでから就職する戦略の3種を提案したが、メンターを雇う戦略以外はもう勧めない。教育界隈の汚染によって良いメンターを見極め辛くなっていることを踏まえると、メンターを雇う戦略すらも勧められないかもしれない。本記事では、これからエンジニアを目指すにあたって何を鍛え、どんな技術選択をし、どんな仕事の獲得の仕方をすれば良いのかについて提案していく。

また、前記事の執筆前から兆候はあったが、駆け出しエンジニアを狙う悪質なインフルエンサーなる人々が急増した。エンジニアをこれから楽に稼げる職業だとして多くの甘い言葉を浴びせて情報商材を買わせたり広告付き動画に誘導したり等している人々だ。また、昨今ではこれらに反発する声もインフルエンサーなる人々と同じぐらい煩くなってしまっている。駆け出しエンジニアを全員インフルエンサーなる人々に騙されている人々かのように叩いたり、労基法違反を誇らしげに語ったり、駆け出しエンジニアが選択した言語や誤って発信してしまった情報に寄ってたかって殴りかかっているような人々だ。これらが多く発生したことにより、駆け出しエンジニアの皆様においては現実的な情報の取捨選択が難しくなっていると思う。前記事とイントロダクションの時点でここまで長文になった本記事を読み進めてくれた私の狂信者である皆様に向けて、私からも現実的なキャリア戦略の提案をさせてほしい。

観測範囲

情報の取捨選択をするにあたって重要なことがある。発信者は、発信者の観測範囲で発信しているということだ。稼げない人は稼げないと発信するし、稼げる人は稼げると発信する。まあ多くの悪質なインフルエンサーなる人々は観測していないものを発信しているが、それは例外としよう。IT業界は広く、個人で全てを観測することは難しい。本記事は私の観測範囲で発信している。本記事の内容も、あくまでも私の偏った観測範囲で語っていることを断っておきたい。

エンジニアって実際どうなの?

まずはこれらに回答しよう。答えは yes だ。ただし、あなたが優秀であるならばだ。

エンジニアには誰でもなれる?

なれない。駆け出しエンジニアを食い物にしている人々は「誰でも」という言葉をよく使う。誰でもなれるとか、誰でも稼げるとか、そういった口説き文句は大嘘だと思ってほしい。求職者よりも求人数の方が少ない以上、当然誰でもなれるような職業ではない。前記事にも書いた通り、エンジニアになって、エンジニアで稼ぐためには何か秀でている必要がある。

「社会の厳しさの9割は『社会は厳しくなくてはならない』と考えている人々の絶え間ない努力によって作られている」とはよく言ったもので、「エンジニアは数ヶ月でなれるほど甘くない」とか「月80万は夢見すぎ」とか「フルリモートなんて無理」とか「フリーランスは稼げない」とか、様々な “エンジニアは甘くない論” を目にすることが多い。これは仕方のないことで「誰でも未経験で即フリーランスでフルリモート月収100万♪」みたいな広告や書籍が増えてきたことに対して抵抗する声が増えているのだ。ちなみに私も「誰でも」の部分だけは明確に否定しておく。現実問題、エンジニアに求められる要素には地頭や要領の良さ、コンピューターサイエンスへの興味、学生時代の専攻、単純なセンス、両親の職種、余暇の確保可能量、貯蓄、人脈、勉学量等、自分でコントロールできる要素からできない要素まで様々であって、何か秀でていなければ茨の道である。

誰でもはなれない。また、なれたところで誰でもは稼げない。なれるかなれないか、高給か薄給か、ホワイトかブラックか、将来性があるかないか、これらは全てあなたが優秀かどうかで話は変わってくることを覚えておいてほしい。どのようにして優秀なエンジニアを目指すかについては記事の後半にて別途提案する。

エンジニアは稼げる?

稼げる。あなたが優秀であるならば。30代になっても年収300万程度で働いている人は山のようにいる。稼げている人は稼げているし、稼げていない人は稼げていない。少なくともあなたが年収400万以上稼ぎたいのであれば、30代になっても年収300万程度で働いているエンジニア歴10年以上の人々よりも優秀にならなければならないし、転職や給与交渉や副業といった自主的に稼ぐ手段を選択する必要も出てくるだろう。私は本業で年収500万以上、副業で500万以上を稼いでいる。年収250万でエンジニアになってからの収入推移は前記事に書いた通りだ。

エンジニアはホワイト?

ホワイトだ。あなたが優秀であるならば。ホワイト企業もブラック企業も両方とも山のように存在している。当たり前のことだがホワイト企業は皆が求めるので倍率が高い。優秀でなければ余り物のブラック企業に勤めることになるし、優秀であればホワイト企業に受かることができる。私はブラック企業からキャリアをスタートしたが、現在は本業と副業を合わせても一般的な労働者よりも圧倒的に少ない労働時間で生活しているし、5年ほど在宅勤務を続けている。前記事に書いた通り、私は転職を繰り返したり、所属企業でリモートワークの解禁に動いたり等のように能動的に良質な労働環境を手に入れてきた。

エンジニアに将来性がある?

ある。あなたが優秀であるならば。前記事に以下のように書いたが、これは今も変わっていない。誰もが「いい人がいればねぇ…」と言っている。

エンジニアが余るとか仕事が減るとか、様々な話を目にするかもしれないが、実際には現状多くの企業が人手不足だ。会う人会う人皆「いい人がいればねぇ…」と言っている。私も言っている。

優秀であれば食いっぱぐれない。これはエンジニアの1つの強みでもある。いつ仕事を失っても自分から取りに行けるし、在職中でも副業で新たな稼ぎ口を探すことができる。私は「仕事に困ったら Facebook で募集したら当面は食える」と盲信しているので将来性の不安を感じることはない。

未経験からフリーランスになれる?

なれる。あなたが優秀であるならば。何故か年収1,000万とフリーランスは同時に目指すことを前提に語られやすい傾向にあるが、そもそもフリーランスとは特定の組織に属さずに仕事をする働き方のことであり、初年度から1,000万円売り上げる必要があるわけではない。例えばマークアップや LP 制作の仕事で月5万円のお小遣いを稼いでいる主婦層の方々もフリーランスと呼んで差し支えないのではないだろうか。未経験者が個人事業を開業して小さな仕事から積み上げていくのは、むしろ私は有効な戦略だと考えている。この件については後ほど詳しく記述する。

エンジニアとして収入を得るまでの道筋

前記事では3つの道を提案した。1つ目は未経験受け入れ企業を探してとにかくまず就職を目指す道、2つ目はメンターを雇って急成長を狙う道、3つ目は独学である程度の知識を付けてから就職活動を始める道だ。

とりあえず就職する道

私のキャリアパスと同じパターンだ。未経験でも受け入れている企業を Indeed 等の求人サイトで探してみて、希望の就業場所で良さそうな企業があれば就職する。

この道はオススメできなくなった。現在はちょっとした就職氷河期を迎えていると思って良い。転職市場は大変盛り上がっていて、多くのエンジニアが転職している様子が沢山流れてくるが、これはあくまでも優秀なエンジニアの移り変わりが増えているだけだ。これは、新型コロナウィルスの影響等で業界全体の勢力図に大きな変化が生じているため、優秀なエンジニアの移り変わりが激しくなっているだけで、未経験エンジニアの採用企業は残念ながら明らかに大幅に減っている。

また、プログラミングスクール等の流行により、良くも悪くもみっちりと勉強をしてから就職活動に励む人が増えた。つまり未経験就職志望者全体のレベルが上がっているので単純にライバルが強くなっている。少し前まではポートフォリオやチュートリアル実績等を見るよりも、まともにコミュニケーションが取れそうな人材や社風に合いそうな人材を採用するのが良しとされてきたと思うが、今は未経験でも多少の技術的心得があって当たり前のような市場になっているので、git の使い方やシェルの使い方から教えなければならないような人材は足切りされる可能性が高まっている。

メンターを雇う道

これは言うまでもなく最強のパターンで、有識者とのマンツーマンで技術相談、キャリア相談ができるのだから、ほとんどの悩みが解決するだろう。勉学中に躓くたびに有識者に質問ができ、勉学そのものを一緒に進めていくこともできるかもしれない。キャリアについての相談は勿論、センスや努力を認められればそのまま企業を紹介してくれたり自社にスカウトしてくれたりするかもしれない。

前記事に書いた通り、良いメンターを見極める必要があるものの、噛み合えば最強のパターンであることは変わりがない。また、この道については選択する財力や人脈のある人が少ないと思うので多くは触れない。ただ、メンターとのマッチングサービス等を利用してメンターガチャに励むのはオススメしない。

独学から始める道

多くの方は独学で技術に慣れて、自信がついてから就職活動を始める選択肢を取るだろう。わかるぞ、いきなり就職するのは怖すぎるし、メンター雇うにも金払ってハズレ引いたら最悪だ。無理にリスクを背負って近道しなくても、時間的に余裕があればじっくり勉強しながらゆっくりと途中の景色を楽しみながら経験を積んでいくのも悪くない。個人で勉学に励むことそのものが喜びだと感じる人もいるだろう。ただし、独学は基本的に茨の道であることを覚悟する必要がある。独学で誰もが簡単にエンジニアになれるのであれば高給を取れる職種であるはずがない。Stack Overflow や Twitter で質問しながらであっても、言葉では言い表しにくい壁や障害にぶつかるものだ。「そもそも今の自分は何を勉強すればいいのか」みたいな漠然とした悩みの回答を得ることはマンツーマンでじっくり話し合わなければ難しいだろう。

変わらず一般的な道であり続けるが、多様すぎる道になってしまった。前記事では、HTTP, HTML, git, OAuth, インフラ, 自動テストといった普遍的な技術をまとめて学べる Ruby on Rails チュートリアルを勧めたが、今はそれだけでは弱い。相変わらず完走するだけでも一定の技能が必要であり、多くの普遍的な技術を学べる良質な教材だが、多くの求職者の中から一歩抜きん出るには、更なる価値が求められると思う。新たな独学の道筋の提案は記事の後半にて記述する。そして、前記事では独学後に就職活動をすることを前提にしていたが、前述した通り未経験者の就職難易度は高まり続けている。そこで、第4の道を提案する。

個人事業から小さく始める道

私が今駆け出しエンジニアの皆様にオススメしたいのは、俗に言う「未経験からフリーランス」だ。ただし前述した通り、初年度売り上げ1,000万を狙うような話ではない。個人事業主として開業して、bosyu や SNS 等を利用して数千円から数万円程度の小さな仕事から始めて、業務実績を積みながら人脈を広げて収入を少しずつ上げていく道だ。現在は未経験就職の間口は狭くなってライバルも増えている状況で、これがいつまで続くかは分からない。就職できてもその会社が倒産ラッシュに巻き込まれる可能性もあるだろう。そんな時代だからこそ、個人の市場価値や仕事を獲得する能力を高めることが将来に繋がる。今は、個人事業主として開業するのに良い機会だ。企業がエンジニアを抱えられなくなっている分個人向けの仕事が増えている感触もある。

「フリーランス」とか「個人事業主」とか言われると、複雑な手続きを要する選ばれし者だけに許された裏技かのように感じる方もいるだろう。実は個人事業主として開業するだけなら簡単だ。税務署に行って開業届を10分程度で記述して提出して帰るだけだ。ちなみに私は freee の無料プランで開業届を印刷して税務署に提出した。仕事の内容次第では開業は後からでも良いかもしれない。私は税制面は完全に素人なので、その辺りは各々調べてみてほしい。基本的なことなら税務署で相談に乗ってもらえる。税理士に無料相談できるように取り計らってくれるかもしれない。お小遣い程度から始めるのであれば、それほど複雑な話にはならないはずだ。新型コロナウィルスの関係で内定を取り消された人々が個人事業主に流れているので、同じような悩みを持っている同期は沢山見つかるだろう。

とにかく、bosyu 等を使って小さな仕事の求人を探したり、「未経験ですがマークアップやロゴ作成の仕事を5000円でやらせてください」のような求職をしたり等で、小さく実績を積み上げる道を視野に入れてみてほしい。少なくとも、求人に応募する経験や求職する経験は今後就職するにも個人事業を続けるにも役に立つはずだ。

どのように力を付けていくか

ここからは、未経験から個人事業主や就職を目指すにあたって力を付けていく方法を提案する。

普遍的な能力

投資の対象として、普遍的な能力を優先的に鍛えよう。例えば Ruby のシンタックスの勉強は普遍的に役立つものではない。Ruby 以外の仕事をする時に使えないからだ。それよりも HTTP のプロトコルの勉強や RDBMS の扱い方を優先的に勉強した方が効果は高い。ある程度はシンタックスの勉強もしないと HTTP や RDBMS 等の利用イメージが浮かばないと思うので多少は必要だが、HTML の要素を全て覚えるとか、Ruby の組み込みメソッドの引数の順番を全て覚えるとか、そういったことに時間を費やしすぎないようにしよう。

また、普遍的な能力として代表的なものはマーケティングやコミュニケーション能力だ。「俺は技術をやりたいんだよ!」という気持ちはわかる。極稀にコミュニケーション能力が皆無にも関わらず圧倒的な技術力を誇るエンジニアもいる。ただ、あれはフィクションだと思った方が良い。技術に集中するためには技術に集中させてもらえるだけの交渉術が必要になる。技術に集中できている人々の多くは「何故その無駄な会議を欠席するか」「何故この技術選定が正しいか」といった様々な日常的な説得を正確かつ論理的に行う能力に長けている。あなたが将来性のあるエンジニアを安全に目指したいのであれば、プログラミング以外の能力も磨いた方が良いだろう。

コミュニケーション能力

私が最も必要だと感じているのがコミュニケーション能力だ。特にリモートワークが当たり前となった現在においてはチャットによるテキストコミュニケーション能力の重要性が上がっている。普段から技術者として望ましいコミュニケーション方法について意識しよう。

相談と言語化

あなたが駆け出しエンジニアなら、当面の間は指示を受ける側だ。自分で仕事を作り出して判断して人に仕事を振るようになるまでは多少の時間を要するだろう。指示を受ける側において重要なのは相談する能力だ。相談において必要なのは言語化する能力だ。「今何が起きていて、どのような助言を求めていて、何が問題で、どうならなければならなくて、何を試してもダメで、自分の見解はこうで…」といった情報を適切に短く漏れなく相手に伝えることが日課になる。できて当たり前の能力のように思えるかもしれないが、多くの人はこの能力を有していない。

言語化能力を訓練するには普段から「今の問題」を言語化する習慣を付けておくことだ。勉強メモでも Twitter でも TIL でも何でも良い。今日のプログラミング勉強がエラーを解決できずに終わったとしたら、「このようなエラーが出ていて、本来はこういう動きを期待していて、これを試したがこういう問題に発展して…」といった内容をテキストに起こすのだ。相談相手がいなくても、言語化することは思考の整理になり記録も残るので良いことだらけだ。やってみると案外難しいことに気付くだろう。問題解決に向けて何かを試す度に新たな謎が増えるのはよくあることだ。根本の本質的な問題を見失わずに試した結果と見解をテキストに起こして別の事象として分かりやすく説明することは経験がいる。普段から訓練しておこう。

テキストコミュニケーション特有の能力

相談したことに対して、質問で返ってくる場合がある。例えばあなたがエラーについて質問した時に「これは試してみた?」と聞かれるとする。答えは「はい。」か「試してみます。」の2択だ。「はい。」の場合はその後に試した結果どうであったかを説明する。「はい。」を送信する前に試した結果について説明をすると相手に「試したかどうか」が伝わるのが遅くなる。相手がまず最初に欲しいのは「そもそも試したかどうか」であり「試した結果」が欲しいのは「そもそも試したかどうか」の次だ。相手がまず何が欲しいのかを考える能力がテキストコミュニケーションにおいては必要になってくる。回答が「試してみます。」の場合も同様だ。「そもそも試したかどうか」を回答してから試すのだ。「試してみた?」の回答を無視した状態で相手を放置して裏で試すようなことは避けよう。テキストコミュニケーションにおいては、「自分が何を回答してほしいか」と「相手が何を回答してほしがっているか」を適切に判断することが重要な能力になる。

かと言って普段から相談や回答をするような機会がなく訓練できない人もいるだろう。そんな人は Slack のコミュニティに所属すると良い。初学者でも気軽に入れて技術的な質問をし合えるようなコミュニティは沢山ある。コミュニティに参加すると、業界の人脈を広げることができ、他の初学者がどのような勉強に励んでいるかが分かる。質問の場が用意されているコミュニティであれば問題の言語化の訓練をすることができる。ちなみに私も1つ it-newbie という技術的質問用の初学者向け slack コミュニティを開設している。現在300人以上が参加しており、質問や勉強宣言や雑談等、自由に発信できる無料のコミュニティなので興味があれば以下のリンクから参加してみてほしい。
https://join.slack.com/t/it-newbie/shared_invite/zt-at5pxyht-JvxoM768Z4Dj6t2qpVdPrQ

前記事に書いた通り、人の質問に回答することを好む人は幸いにして多いので、感謝やリスペクトの姿勢を示すことさえ忘れなければ、質問の場所として提供されている以上どんどん質問してみてほしい。

他の理由は業界の文化として努力している人を好む傾向にあることだ。基本的に成果主義の世界ではあるが、未経験で勉学に励んでいて定期的に発信している初学者は必ず多くの人に好まれる。そしてもう1つの界隈の傾向は、教え好きが多いということだ。何かエラーで詰まったら適切なハッシュタグでも付けて助けを求めてみると良い(困っている内容を詳細かつ簡潔に説明できてスクリーンショット等があると尚良いだろう)。結構な確率で答えが返ってくるはずだ。教え好きが多い理由は沢山あって、単に人助けが好きな親切な人が多いこと、公の場で質問に答えることでアピールを狙えること、エンジニア全体の知識レベルが上がると業界が潤って間接的に自分の業務が楽になること、教えること自体が勉強になること、単純に技術自慢が気持ち良いこと等がある。ちなみに私は全て当てはまる。直接的な収益にならないのに Qiita に技術情報を投稿したり、Stack Overflow 等の質問サイトで回答をする人がこれほどにも沢山いるのは、こういった理由が少なからず作用している。

営業力

他に普遍的に役に立つ能力で重要なのは営業力だ。「営業力」と聞くと訪問販売して何かの商品を売り付けるような想像をする人もいるかもしれないが、ここでいう「営業力」とは自分を売り込む能力だ。商品は自分だ。その商品価値を適切に説明する能力があれば、個人事業主として仕事を獲得することも、転職することも容易になる。技術力といった商品の価値が高くても、営業力がなくて転職できない人は大勢いる。逆に技術力はそんなに高くなくても営業力によって仕事を沢山獲得しているフリーランサーも大勢いる。

かと言って、今から本を読んでアウトバウンド営業術を仕込んだり、Twitter や Facebook を活用したインバウンド営業術を仕込んだりすることを勧めるわけではない。勧めるのは、自分の価値を常に自分で把握することと、それをいつでも人に伝えられる準備をしておくことだ。今自分はどんな技術を有しているかを把握し、チャンスがあればすぐに提示できるようにしておく。2つオススメの方法がある。GitHub のアカウントを育てておくことだ。これについては後述する。もう1つは RESUME というサービスを使って自分の所有技術や経歴を web に置いておくことだ。30分程度で書き上げられると思うので、是非試してみてほしい。履歴書や職務経歴書を出すほどではない「どんな技術持ってます?」といったカジュアルな場面で気軽に提出できて大変便利だ。参考までに、これが私の RESUME ページだ。
https://www.resume.id/ogihara_ryo

独学で技術力を向上するための提案

コミュニケーション能力や営業力の重要性は多少理解して頂けたと思うが、駆け出しエンジニアの皆様が本当に知りたいのは「どんな技術を習得すれば良いのか」であるのが現実だと思う。本記事でも、独学から就職や個人事業主を目指す方に向けた学習の道筋を提案する。この提案は web の道に進むことを前提とする。単純に求人が多く、リモートワークしやすく、私が現在 web 分野のエンジニアであるためだ。前記事に書いた通り、この提案があなたに適しているとは限らないし、他の有識者が同じことを勧めるとも限らないことは理解してほしい。

ただし、独学の方向性は個人の適正によって決まるべきなので、提案する独学方法は全ての人にマッチする訳ではない。むしろ難易度が少し高いため選別のように見える可能性すらある。更に保険をかけておくと、仮にこの記事が多くの有識者の目に止まったらこの提案は間違いなく大量の批判を受けるだろう。そのことを理解した上で、ここまで読んで私を信じるに値すると感じた人や、もう本当に何をすれば分からないという人はチャレンジしてみてほしい。

狭く深くか、広く浅くか

1つの技術に絞って極めるか、いろんな技術をつまみ食いするか、という問題は賛否の分かれるところだろう。私が勧めるのは「広く浅く」だ。理由はいくつかある。1つは独学で極められる範囲等たかが知れているためだ。実務を通さなければ深くまで理解することは難しい。もう1つはデファクトの web アプリケーション開発フレームワーク(WAF)が定まっていないためだ。技術を絞れば探す求人の候補も限られてくる。それよりも上述の RESUME に「入門」で載せられる技術を増やしていき、仕事が決まってから深く学習を始めた方が良い。

基本方針

これから無料で学べる公式 web 教材の組み合わせで広く浅く学習して、RESUME の入門技術を増やしつつ、bosyu で数千円程度の求人に応募したり、求職したりできる程度の経験を積むことを目的とした学習ロードマップの提案を行う。その前に、まずは以下を基本方針としていることを理解して読み進めてほしい。

普遍的な技術を優先する

Ruby on Rails に取り組むかどうかは別にして、前記事で提案した以下の内容は基本方針としては変わっていない。始めのうちは流行り始めの最新技術よりも、ググった時に多くヒットするような、ある程度流行った技術を優先的に学んでいくということだ。

まず、最初に覚える技術は Ruby on Rails だ(ここで早くも多くのバッシングを浴びる)。オワコンだろうが飛び級すぎだろうが知ったことか、黙って従うのだ。ただ、オワコンであることは間違いない。それだけはハッキリ言っておく。近年の開発トレンドに合わなくなってきていて、このままでは廃れていくだろう。しかし、今現在の話をすれば Ruby on Rails の仕事はまだ山ほど存在する。対して、他のwebアプリケーション開発フレームワークは未だにデファクトとして言い切れるものが定まっていない。定まってきたら定まってきたで、既存の Ruby on Rails アプリケーションをその技術で置き換えて同じものを作る通称 “replace 案件” が山のように市場に流れてくるので、そっちの技術も覚えて replace 案件で食えばいい。

あなたが勉強するのは「今すぐに」web系エンジニアとしてデビューするためだ。将来のためではない。将来のための勉強は優秀なエンジニアになってからすればいい。優秀なエンジニアは新しい技術を覚えるのに何週間もかかったりしないから気にしなくていい。それよりも、「今」ググった時に日本語の情報が大量に出てくることが重要だ。独学力はググり力だ。どんなにマイナーなエラーが出ても、ググれば誰かが同じエラーにぶち当たっている可能性が高い技術、それが Ruby on Rails だ。流行り始めの技術で独学を始めて壁にぶち当たると、ググっても情報が出てこなかったり、英語のドキュメントやフォーラムを読み込む必要が出てきたりする。日本人エンジニアの母数が多い(多かった)ということは、インターネット上であなたが使える資産が多いということだ。

特に普遍的な技術から手を出そう。どんな企業やプログラミング言語であっても役に立つような技術だ。そういった技術は当然ググったときの情報も多い。例えばシェルの操作は基本的にどこでも役に立つだろう。バージョン管理システムが使えなければ多くの企業では業務にならない上に教育に時間を要するので Git や GitHub の基本的な使い方は必修と言えるはずだ。web の分野で働くのであれば、HTTP や HTML の基礎は避けて通れない。

完全に理解するよりも走破速度を重視する

広く浅く大量に取り組んでもらうが、完全に理解しようと努めるのは諦めよう。完璧主義の人には辛い方針だとは思うが、とにかく雑に走破することを考えてほしい。前記事の Ruby on Rails チュートリアルに取り組む方針と同様、習得するよりも記憶の断片を増やすことを優先しよう。Ruby on Rails チュートリアルでなくても基本的な学習方針は同様であることを意識しておいてほしい。

チュートリアルが始まったら、とにかく読み飛ばせ。お気に入りの小説を読み直すかのように、スラスラと目を動かすのだ。よほど気になることはググったりしながら進めても良いが、出来るだけ気にするな。何も理解できなくて良いから、とりあえず文字を目に入れて、サンプルアプリケーションを完成させることだけを考えるのだ。コードもコピペで良い。本当は手打ちで写経した方が良いのだが、(中略) 仕事終わりに一日1時間だけ勉強するような人は、迷うことなくコピペから始めよう。

理解を深めたかったら周回すれば良い。ただ、今回においては広く浅くをある程度学び終えてから気になる技術の周回を始めてほしい。様々なチュートリアルに触れる過程で同教材周回と似たような気付きを得られることもある。

2周目をクリアすると、今度は少しだけ理解が深まった気分を味わえるだろう。気のせいだ。3周目を始めよう。これで最後だ。3周目は2周目よりも更に文章を理解しようとして読んでほしい。それでも理解できないことばかりだろう。そんなものだ。ただ、3周目ともなると「次の工程で何をするか」ぐらいは思い出せるようになってくる。文章の読み始めで、次に書かされるコードがどんなものだったか何となく想像できるようになる。これが重要なのだ。見出しで「有効性を検証する」と言われたら「ここは validates とか言うのを書かされた覚えがあるな…」と何となく思い出すようなレベルで大丈夫だ。この知識の断片だけを掻き集めていけば、知識の引き出しが増え、ググる時の語彙力が上がり、基礎的なアプリケーションがゼロから作れるようになってくる。

3周目が終わっても全体の半分も理解できていないはずだが、安心してほしい。2,3年生の現役エンジニアでも、rails チュートリアルの全てを理解できている人は意外と少ないのだ。テストが全く書けないエンジニアもいるし、ログイン認証を書けないエンジニアも沢山いる。それでも、彼らは知識の断片からググるための語彙を引き出し、毎日何度もググりながら業務をこなしている。私もそうだ。rails チュートリアルに書いてある内容はほとんど理解しているが、それでも一日に100回以上ググることはある。メソッドに渡すパラメーターの順番や型、そもそものメソッド名といった小さなことから、「こういうときの正しい設計」のような漠然とした情報を探しにインターネットの海を漂流することもある。もう何百回と書いたであろう form ビルダーの select のパラメーター順もほとんど毎回ググっている。ググれば一瞬で済むことに貴重な脳内リソースを使うことはない。重要なのはググるための語彙力と、ググった上での問題解決能力だ。現役のエンジニアも毎日調べ物を繰り返しながら開発をしているので、完全に理解できていないことに焦りを感じる必要はない。

ロードマップ

Progate

まずは広く浅く無料でできる範囲で基礎を固める。目的は web アプリケーション開発の感覚を掴むことだ。副次効果として Progate の不思議な魔力で開発の喜びを感じてもらえると嬉しい。前述の通り読み飛ばしながらで構わない。以下の順で取り組んでほしい。

まずは上述したように特に普遍的な技術から入る。自分のマシンをある程度コマンドラインから扱えるようになるための慣らしだと思ってほしい。

次に web ページがどのようにして表示されているのかを学ぶ。中級編以降は途中から有料会員限定になるが、あくまで目的は感覚を掴むだけなので初級編だけで充分だ。

次にプログラミング言語のシンタックスを学ぶ。どれも1章の学習コースだけで良い。順次分岐反復の基礎的な制御構造を学びつつ、「各プログラミング言語で書き方が違うんだなぁ…」ぐらいの感想を持ってもらえれば充分だ。文法を勉強したところで「で、結局これが何に使えるの?」と感じるかもしれないが、目的は後々のアプリケーション開発チュートリアルの理解を高めることなので、今は深く考えなくても良い。

最後に、難易度が跳ね上がるが SQL と Node.js の基礎を学んでおいてほしい。この後は各種公式チュートリアルに取り組んでもらうが、SQL や Node.js の基礎的な部分には触れられないからだ。触りだけでも学習しておくと、各チュートリアルの理解度が大きく変わってくるはずだ。ここまでで5〜15時間ほどかかるはずだ。

GitHub

実践的なチュートリアルに入る前に GitHub のアカウントを作成しておこう。これ以降、作成した成果物や勉強成果は全て GitHub に上げるのだ。RESUME に加えてあなたの営業用のプロフィールになる。GitHub にはあなたのエンジニアとしての実績が詰まっている。取引先や志望先の企業から見て、普段からどのぐらいコードを書いているか、どんなソフトウェアを作ってきたかを判断する材料になる。最初の営業や就職活動を始めるまでの間に、RESUME と共にこの GitHub アカウントを育てていこう。当面の目標は、通称「草」と呼ばれているプロフィールページの緑色を増やしていくことだ。この緑が多いほど「普段からコードを書く習慣があるんだな」という印象を少なからず与えることができる (ただし、GitHub 以外で活動している人も沢山いるので草の量の少なさで他人を評価しないこと)。よかったら私の GitHub アカウントをフォローしてくれると嬉しい。
https://github.com/ogihara-ryo

GitHub の基本的な使い方は以下の公式チュートリアルを参照してほしい。自信がなければ適当なリポジトリを作って push する練習をしてみると良いだろう。Progate で学んだ git の知識が少なからず役に立つはずだ。恐らく ssh 認証あたりで詰まると思うので、ググって解決できなければ質問コミュニティを活用しよう。万人が詰まる部分なので誰かしら解決策を示してくれるはずだ。
https://guides.github.com/activities/hello-world/

チュートリアル

ここからは、公式あるいは企業がビジネスとして運営している無料のチュートリアル教材を羅列していく。ちなみに私はこの中の半分はやっていない。ただ、公式が提供する鉄板の教材であれば、有識者の人々が経験している可能性も高く、質問の回答を得られやすいはずだ。ここから詰むことが非常に多くなってくるはずなので、前述の it-newbie 等の質問の場があるコミュニティを利用して人を巻き込みながら進めていってほしい。

紹介するチュートリアルは日本語対応されていないものもある。幸いにして web ページはワンクリックで翻訳できるので、英語に自信がなければ翻訳を繰り返しながら進めるか、それで著しくモチベーションや学習効率が下がるのであれば日本語対応されている教材に絞って学習しよう。それでも半分以上の教材を利用することができる。ちなみに個人がチュートリアルを和訳して Qiita 等に投稿している場合もあるが、個人の範囲ではメンテナンスの問題や誤翻訳の問題への対処に限界がある上、ライセンスの怪しい記事も蔓延っているため、もし利用する場合はそれらのリスクを把握した上で利用してほしい。

さて、まずはバックエンドを中心とした web アプリケーション開発を経験してみよう。Progate で勉強した SQL の知識が少なからず役に立つはずだ。Laravel に関しては実践的なサンプルアプリケーション開発に関するチュートリアルが5.2系までしか公式に用意されていないので注意してほしい。Laravel(PHP) と Firebase は比較的短く簡潔なチュートリアルで、日本語対応されている Ruby on Rails(Ruby) と Django(Python) はコピペであっても完走に数日かかる分量となっている。Ruby on Rails は10章まで、Django その4まで取り組めば簡単な CRUD と認証と自動テストについて学べるので充分だ。40〜100時間ほどは要すると思うが頑張ってほしい。これらに取り組むことで RESUME に HTML, CSS, JavaScript, Ruby, Ruby on Rails, PHP, Laravel, Python, Django, Firebase の入門バッジを付けることができる。なんと有望な初学者であろうか。

とはいえ、十中八九あなたは挫折するだろう。こんな分量の教材を読み進められる人は滅多にいない。質問コミュニティを利用しながらであっても何十回何百回と詰みを経験するだろう。どうしても心が折れた時は、一度これらをスキップして次のフロントエンド周りのチュートリアルに手を出してみよう。これらのチュートリアルはどれも比較的面白く感じるはずだ。コードを写経する度にブラウザーに大きな変化が見られるからだ。これらを完走するには20〜40時間を要するはずだ。

ここまでのチュートリアルを終えれば、GitHub のリポジトリや草の量も、RESUME の入門技術も見栄えするものになっているはずだ。テキストのほとんどを読み飛ばしてコピペで進めたとしても速い人で80時間、遅い人で200時間ほどを要するのではないかと思う。しかし、8つものアプリケーションを作った実績は必ずあなたの役に立つし、その努力は今後一生 GitHub と RESUME が証明してくれる。

求職

勉強中も求職は意識しておこう。勉強の記録は Twitter や Slack の初学者コミュニティで垂れ流しておくことを勧める。誰かに目を付けられて簡単な仕事を紹介してもらえる可能性もある。場合によってはチュートリアルを終えた技術の求人が流れてくる可能性もある。勉強は営業の一貫だと思って取り組んでほしい。「ここで有望な初学者が堅実に勉強を継続していますよ!」という営業だ。

一通りの勉強を終えたら本気で求職活動を行おう。bosyu で取り組んだ技術の名前で求人を探そう。自分からも bosyu を出してみよう。GitHub と RESUME の URL を載せて求職しよう。発信し続けていた Twitter や Slack コミュニティでも求職中であることをアピールしよう。もし上述のチュートリアル全てに取り組んで、GitHub に全ての勉強成果を上げていて、RESUME にも反映しているのにしばらく仕事が見つからなかったら相談してほしい。私の方でも求職の旨を拡散したり、仕事の紹介をしたりすることができるかもしれない。少なくとも多くのチュートリアルに取り組んで、立派な GitHub アカウントを持っている未経験者であれば私を含めて多くの人々が応援したくなるはずだ。

仕事を取ることに成功したら、改めてその仕事に関わる技術を学習し直そう。多くのチュートリアルに触れてきた経験は必ず役に立つはずだ。以上が、私からの提案となる。雑にまとめると、いろんな技術をつまみ食いして GitHub と RESUME を育てて自身の価値を可視化したら小さな仕事から始めて実績を積んでいこう、ということだ。

終わりに

前記事に続いて長文の記事となってしまったが、あなたの参考になっただろうか。前記事は「IT業界は甘い」という締め括りで記事を終えたが、今回の記事では「甘くない」という印象になってしまったのではないかと思う。実際に前ほど甘くない業界になってしまったのは間違いないだろう。それでも私は駆け出しエンジニアの皆様を本気で応援している。私をここまで育ててくれた業界に恩返しをしたいし、エンジニアを目指す多くの人々の願いが叶ってほしいと思っている。厳しい時代になってはきたが、エンジニアを目指していてこの長い記事を最後まで読んでくれるほど真剣にキャリアを考えているあなたの障壁が1つでも少ない社会になっていくことを祈る。