はじめに
この記事を書いた目的は、最近エンジニアになるために勉強をはじめた方に対して、勉強の優先順位を伝えるためです。
エンジニアになるための勉強は多岐に渡ります。
最近勉強をはじめた方は「なにがわからないのかわからない」状況だと思うので、優先順位をつけて勉強することが難しいと思います。
そんな方が多少なりとも効率的に勉強できるように、この記事を書きました。
私は実務経験5ヶ月目で、これまで3つの0→1案件と1つの保守案件に携わりました。
そろそろ「勉強はしたけど就職する際や実務で使わなかった知識」というのがでてきました。
当たり前ですが使わない知識というのは忘れていきます。
どうせ忘れてしまう知識なら、就職前にそれほど熱心に勉強する必要はないと思いました。
「いやいや、これから使う可能性あるでしょ。」と思うかもしれません。
確かに今後勉強したものを使う機会がある可能性はあります。しかしその時には勉強した内容は忘れており、結局学び直すことになると思います。半年前に勉強したメソッドを半年後に急に思い出して使える人はほとんどいないでしょう。
今のタイミングこそ初学者の人が集中して学ぶべきことがわかると思いこの記事を書きました。
賛否両論ありそうなので、スクールなどに入っている方はメンターの方に聞くのが一番良いと思います。
本題の前に
まず現状スクールに入っていなければ入ることをおすすめします。
一番大切なことではないですが、入れば効率が全く違います。
最初につまづくポイントはスクール入れば大体解決します。
例えば「Webサービスをつくるにはサーバーが必要です」とか「コーディングにはプログラミング言語を学ぶ必要があります」とか言われたとして、「じゃあサーバーはどう用意すればいいの?」とか「じゃあどの言語学べばいいの?」とか全くわからないはずです。
自分はそこでわけもわからず某レンタルサーバーに契約しましたが、サーバーがwebサービスにどう必要なのか、どうしたらwebサービスが作れるのかわからず時間を浪費しました。
ここら辺はスクール入ったらプロが「実務でそこそこ使われているサーバーと言語」を使うように導いてくれるので入った方がいいと思います。
自分は下記のスクールに入っていました。
サブスク制なので合わなければ抜ければいいですし、とりあえず入っておいたほうがいいと思います。
有名なスクールより値段が安い上に、カリキュラムが終われば確定で就職できるのでとてもおすすめです。興味のある方は是非見てください。
本題
重要だと感じた順番から書いていきます。
まずはサービスを動かせることを目標にする
初学者にとってはなによりもサービスが動かせることが大切だと思います。
なぜなら自作サービスを作成して、それをもとに就活をしていく必要があるからです。
その際に「きれいなコードを書いているか」より「ちゃんと動いているか」のほうがよく見られると思います。
webサービスの基本はCRUD(作成、読み出し、更新、削除)です。
ほぼ全てのwebサービスでCRUDはつかわれます。しかも何回も登場します。
CRUDができればwebサービスの根幹はできます。
フロントの言語が全くわからなくても、CRUDができればとりあえずサービスとして成立します。
言語についてですが、正直JAVAでもRubyでもPHPでもバックエンドで使う言語ならなんでもいいと思っています。
細かいことを言えば言語間の差はありますが「データを操作するためにつかう」という点においては同じだからです。
自分はスクールでRailsを勉強した後、実務では全く関係ないLaravelを使うことになりました。
しかし基礎的な構造は同じなのでそれほど苦戦しませんでした。
勉強していくとメンテナンス性とかセキュリティ面を考慮してコーディングする必要があります。
それはレビューなどで指摘されて学んでいくことが多いと思います。
技術書を隅々まで読みこまない
技術書を隅々まで読み込む必要はないです。
または流し読みして「こんなメソッドがあるんだ」くらいに思っておけばいいと思います。わざわざ書いたり暗記したりする必要ないです。
理由は技術書の中でもすべてのコードが頻出するわけではないからです。
目安としては、ある項目を学んだ時にそれがどのように使えるか想像ができなければ、一旦飛ばしていいと思います。
前項のことに関連するのですが、プログラミングには「webサービスを動かすためのコード」の他に「管理コストを下げるためのコード」「読みやすくするためのコード」「パフォーマンスを向上させるためのコード」などさまざまな役割があります。
それらをいきなりすべて使いこなすのは不可能です。
その中で優先順位をつけるなら「webサービスを動かすためのコード」が最も重要でしょう。
その他のコードは実際にコーディングをしていて、必要だと思ったら勉強すればいいと思います。
実務に入ったら歴戦のつよつよエンジニアが必要なときに洗練されたメソッドなどを教えてくれます。
たとえばLaravelにはtraitという考え方があります。
画像を保存する処理、メッセージを送る処理など、同じサービスでも同じような処理が頻出しているのであれば、それらの処理をtraitというものでまとめることができます。
自分は実務のレビューのときに「traitでまとめたほうがいい」という指示を受けてtraitを知り、それ以降とても便利なのでよく使っていますが、プログラムを勉強しはじめた人が熱心に学ぶべきことではないと思います。
そもそもプログラミングの原則的に「同じような処理をしているコードはまとめる」というのがあると思うので、モダンな言語ならだいたい似たような便利機能はあります。
したがって個別の言語の個別のメソッドなどをわざわざ暗記する必要はないと思います。
DockerとGitは真剣にやる
理由は2つあります
- 実務に入ったら使えるのが当たり前
- エラーの対応が難しい
DockerとGit(実務ではGitHubの可能性が高い)は実務では使えるのが当然として扱われます。
Dockerは自分のPCに開発環境をもってくるために必要で、使えるようにならないとまずスタートラインにたてません。
またGitをきちんと勉強していないと、他のメンバーに迷惑をかける可能性が高くなり、実務の時に苦労します。
またこの2つはエラーの対応が難しいです。
docker関連のエラーでよく「依存関係のライブラリがインストールされていません」のような出てきます。
それらはエラーを読んでDockerfileやdocker-compose.ymlを修正する必要があるのですが、特定の行を指定してくれるわけではないので慣れてないと難しく感じます。
自分がエンジニアになるまでに一番ハマったdockerのエラーは、解決までに1日半かかりました。
したがって早めにハマっておいて、エラーの対応に慣れておくといいでしょう。
CSSははやめにflexとgridの勉強をする
理由は実際サービスをつくると、レスポンシブの対応がほぼ必須になるからです。
今のサービスでPCだけ、スマホだけのレイアウトしかないwebサービスってほとんどないと思います。レスポンシブにするならflexかgridは必須だと思います。
自作サービスをつくるにしても結局flexとgridを使うことになると思います。
なぜこれを強調するのかというと、自分がprogateを勉強していた時にはflexboxはおまけみたいな扱いで、gridはそもそも出てこなかったので、それほど重要じゃないのかと思っていたからです。
さいごに
とにかく勉強している人にとって大切なのは「自作のwebサービスを作成して優良な企業に就職すること」だと思います。真面目に勉強されている方が効率よく勉強できるように、この記事が参考になれば幸いです。
補足
自分は現職についてから「比較的小規模」「ほぼ自分1人で開発」「0→1で開発」の案件がほとんどだったので、技術選択がしやすい状況でした。就職したい企業があれば、それによって勉強する内容を変える必要はあるかもしれません。