未経験からエンジニアになるための学習ロードマップ
完全に未経験から、エンジニアになりたい人向けの記事です。
自分がRailsで就職したので、このロードマップ自体はRailsエンジニア(バックエンドエンジニア)になることに特化していますが、Ruby以外の言語や、フロントエンドへの転職を希望している場合も、Rubyの部分がPHPやJavaになったり、JavaScriptへの勉強量が変わるぐらいで、そこまで大きな違いはないと思います。
また、あくまでも自分がこういう風に学習してよかった、というたぐいのものですので、当たり前にサンプル数n=1ですし、そこはご了承ください。
ロードマップ
勉強期間は1ヶ月240時間以上、それを半年間続ける、という流れで考えています。ちょっと長めに見えるかもしれませんが、このぐらいの勉強期間をとって、就職後にいち早くチームの一員として認められる道を、自分としてはオススメします。
大まかな技術範囲については、以下記事がとても参考になるので、確認しておきましょう。
ここに乗っている技術範囲を、どういう風に勉強していくか、というのが、目下の目標になります。
まずは大雑把に書いてます。詳しい教材内容については、最後に一気にまとめるので、参考にしてください。
1ヶ月目
HTML・CSSを知る
- Progate
- Udemy
- ドットインストール
などで、基礎講座を受けましょう。
プログラミング言語(Ruby)に触れる
まずは、プログラミング言語(今回の場合はRuby)を知りましょう。プログラミング言語は、それ自体で完結している上に、最初から最後まで最も重要です。
- 作者: 五十嵐邦明,松岡浩平
- 出版社/メーカー: 技術評論社
- 発売日: 2018/11/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Ruby勉強の最初の1冊として、上の本がおすすめです。チェリー本は初学者には難しいので、いきなり手を出してはいけません。
フレームワーク(Rails)に触れる
最初の1ヶ月目に触れておきましょう。もちろんこの時点では何がなんだかわからないと思いますので、「これをしたらこう動くんだ、へえ」ぐらいの理解で大丈夫です。
ネットワーク基礎を知る
ネットワークについては、学習の初期から当たり前にずっと触れていく部分になるので、早めに学んでおきましょう。
2ヶ月目
HTML・CSSを使う
デプロイしなくてもいいので、ローカルで学習継続。
Rubyを知る
- paiza
- Codewar
などのサイトで、Rubyの問題を解きましょう。また、「たのしいRuby」で、Rubyの基礎について学びましょう。(IOクラス、Fileクラス、Dirクラス、Encodingクラスの章については、現時点では飛ばして大丈夫です。)
Railsに触り続ける
ハンズオン形式の動画や、初心者本などで学びながら、Railsの挙動を覚えていきましょう。ただ、Viewの機能(クライアント層)については、今はRailsで担保せず、別でサーバーを立ててすることも多くなっているので、そこだけは薄めに勉強しても大丈夫かもしれません。
SQLに触る
バックエンドエンジニアを目指す場合は、SQLの理解は不可欠です。Railsの「ActiveRecord」が、SQL文の発行を代行してくれるとはいえ、自分も知っておく必要があるので、基礎文法は早めに学びましょう。
Gitに触る
Progateで学んでいるとは思いますが、チームで使う上に、ミスが起こるとチームメンバーに迷惑をかかることが多いので、早めに、深く学んでおきましょう。「仕組み」自体の理解はそこまで深堀りしなくてもいいですが、「挙動」と「コマンド」については、絶対的な自信を持つぐらいにやっておくことをオススメします。
HTTPについて学ぶ
バックエンドはHTTPリクエストを受け取り、処理を行うことが主な仕事の一つです。HTTPリクエストについて、学んでおきましょう。
Webを支える技術に触れる
抽象的な概念が多いので、気合を入れて取り組みましょう。「なんかよくわからん…」と思った場合は、立ち止まってググりましょう。または、知り合いのエンジニアや、メンターの方に質問してもいいかもしれません。
3ヶ月目
Rubyを使う
問題を解きつつ、チェリー本といった、少しレベルの上がった実践的な本にチャレンジしてみましょう。「こんなことが出来るんだ」、「やってて楽しいな」というレベル感を持ててるのであれば、よいペースです。
Railsを知る
たぶん、まだRailsはブラックボックスだと思います。触り続けましょう。また、今まで学んだRailsアプリを自己流に改造したりして、挙動を試してみましょう。
JavaScriptに触る
このあたりで、JSについて触っておきましょう。Rubyを学ぶ方法と同じで大丈夫です。
Linuxについて知る
Shellの仕組みやコマンドについて学んでおきましょう。
セキュリティ・暗号技術について知る
基本的なセキュリティ対策や、暗号技術について勉強しましょう。実務上、すぐに必須というわけではないですが、とても大事な分野ですし、未経験のうちに頭に概観とインデックスを作っておくのは大切です。
アルゴリズムを知る
基本的なアルゴリズムを知っておきましょう。
復習する
1,2ヶ月目の内容を復習して起きましょう。
4ヶ月目
Ruby、Rails、JSを学び続ける
学習を続けましょう。かんたんでもいいので、1つ目のポートフォリオも、そろそろ作っておくとよいです。また、開発でよく使うGemについて、ドキュメントなどを読む練習をしておきましょう。
Dockerについて知る
開発環境を素早く安定的に構築したり、ミドルウェアの依存関係を管理しておく上で、Dockerの技術は必須で、現場でもよく使います。コマンドだけでなく、Dockerが保証している内容や、Dockerの仕組みついても学びましょう。
AWS(or GCP)、Herokuに触る
ポートフォリオをデプロイするときに触ると思いますので、やっておきましょう。また、NginxやUnicorn、Rackについても、調べておきましょう。
設計について知る
「オブジェクト指向設計実践ガイド」で、どうして設計が重要か、機能の追加・変更が容易なアプリケーションを作るためにはどうすればいいか、について学びましょう。
Rubyをもっと知る
JavaScriptのフレームワークに触る(React、Vue等)
バックエンド志望の場合でもちゃんと触って、ある程度の挙動(クライアント層で解決したい課題とは何か)について知っておきましょう。フロントエンド志望の方は、この時点で、こちら側に勉強をシフトしましょう。(もっと早く移動してもいいかも。)
Githubについて知る
プルリクエストの作り方だったりのGithub Flowを勉強しておきましょう。チーム開発で必要になります。
5ヶ月目
ポートフォリオを作る
学習と並行して、ちゃんと作っておきましょう。
DB設計について知る
DB構造の基本的なアンチパターンについて学んで起きましょう。
テストについて知る
どうしてテストが必要なのか、またRSpecのテストとはどのようなものか、について学びましょう。
どのようなエンジニアになりたいか考える
たぶんもっと前から考えていると思いますが、決まっていない場合は、考えておきましょう。
6ヶ月目
ポートフォリオを完成させる
基本機能については、実装を完了させデプロイしておきましょう。
就活を行う
インターンでもいいです。
技術を学び続ける
入社したい企業が使ってる技術について、学んでおきましょう。(例: CircleCI、OpenAPI、Swagger、Firebase、Lambda、Kubernetesなど)
また、余裕があれば低レイヤーの知識(CPU、OSなど)も、学んでおきましょう。
以上のことを学べば、「未経験なのによく勉強しているね」という水準には確実に達しています。
もちろん、勉強期間を3ヶ月にして、「インターンとして働きながら勉強する」といった戦略に切り替えたりするのもよいと思いますので、そこは柔軟に行動してください。
心構え
上に挙げた学習ロードマップは、あくまでも「順調に学習をこなせた場合」です。かなり量がありますし、ぶっちゃけ、結構お腹いっぱいになって、「とても終わらねえよ」、「つらみが深い」という状況になることも予想されます。
ただ、出来る限り、以下のような心構えで、頑張って欲しいと思います。(これはぼくが考えていたことなので、心構えについては、各々で設定していいと思います。)
勉強時間にこだわる
「プログラミングに投資した時間」を、いかに伸ばしていくか。質も大事ですが、前提として量は必要不可欠です。
習慣を作る
おそらく、最低でも一日に8時間勉強が必要になると思いますが、この時間数を実際に達成するのは実はかなり難しいです。意思の力に頼っていては無理で、かつ、がむしゃらに気合でクリアできるというものでもありません。人によってクリアの仕方は異なるとは思いますが、「モチベーション」に頼って勉強時間を増やそうとすると挫折しやすいので、習慣化して達成を目指すといいと思います。
ちなみに、習慣化したあとに「プログラミングが辛すぎる」と思った場合、無理をしていることが多いので、一度休んだほうがいいです。自分のキャパシティを超えたり、背伸びをしすぎた学習を行っている場合があります。(掛け算を知らないのに、因数分解を解いているような状況)。そういう心の声を無視すると、あとで歪みが出るし、そもそもの効率が悪くなります。
僕の場合は幸いにも「プログラミングが辛い」と思うことはほとんどなかったですが、エラーに襲われているスクールの同期の方などは、わりとつらみマシマシな状況に見えたので、そういう場合は、出来る限り自分を客観視して、「なぜ辛いのか」を探るのがいいと思います。
だましだましでもいいので、「学習って楽しいなあ」レベルを維持しましょう。自分のペースで勉強出来る、という状況で、「辛い」と思ってしまっているのは、もったいないです。
学習素材を知る
世の中にはたくさん媒体があります。本を読むのが辛いときは動画で、動画が辛いときはネット記事で、ネット記事が辛いときは、誰かと話して、誰とも話したくないときは、Twitterで情報収集して、それが嫌ならPodCastでラジオ聞いて…。
選択肢をたくさん持ちましょう。少ないとすぐに飽きます。
教材に出し惜しみをしない
本や動画は、欲しくなったら惜しまずバンバン買いましょう。2000~3000円の出費を躊躇していてはいけません。もちろん、買うだけでやらないのは無駄なので、買ったら出来る限り早く消化しましょう。
理解できないとき、悪いのは「教材」(と思おう。)
「あなたが相対性理論を理解できないとき、悪いのはあなたではなく、相対性理論を説明している教材です。」
この意見は議論を呼ぶかもしれませんが、とにかく自分が伝えたいことはひとつ。学習初期の段階で、自分の才能を疑うことはしてはいけないということです。
どんなに頑張っても理解できないとき、悪いのは自分ではない、と思い込んで、教材レベルを落とすなどして対応しましょう。
掛け算の意味を全く理解していない状況で、九九を理解しようとしても、それは力になりません。まして、何も理解のないまま暗記などしても、結局、大事なところで使うことができません。
おわりに
とても長くなってしまいましたが、自分も独学を続けていたとき、「いったい何をやればいいんだ」と悩んでいた経験があったので、そういう方に向けて、役に立つ記事になっていればと思います。
たのしみましょう!
自分が主にお世話になった文献・記事・動画など
Ruby
書籍
- ゼロからわかる Ruby 超入門 はじめてのIT技術講座
- たのしいRuby
- プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで
- メタプログラミングRuby
- パーフェクトRuby
サイト
Rails
書籍
- Ruby on Rails5 アプリケーションプログラミング
- 現場で使える Ruby on Rails 5速習実践ガイド
動画
サイト
JavaScript
書籍
- 開眼!JavaScript 言語仕様から学ぶJavaSctiptの本質
- JavaScript本格入門
サイト
SQL・DB
ネットワーク系
- 3分間ネットワーク基礎講座
- プロになるためにWeb技術入門
- Webを支える技術
- Real World HTTP
- Web API The Good Parts
以下、箇条書き
- 新しいLinuxの教科書
- アルゴリズムの基本
- TCP/IPの絵本
- プログラムはなぜ動くのか
- Effective Testing with RSpec3
- オブジェクト指向設計実践ガイド
- 暗号技術入門
- AWSをはじめよう
- 基礎から学ぶVue.js
とりあえず、Kindleに入ってるのを書き出しました。
良い本・動画ばかりなので、ぜひやってみてください!