はじめに
はじめまして、くまごろーと申します。いきなりですが、私のプログラミング学習における略歴はこんな感じです。
- 30歳公務員、ITとは全く関わりのない職歴
- 2020年7月からプログラミング学習を独学で開始
- 学習言語はJava/SpringBoot
- 自社開発企業から内定をいただき、2021年5月からサーバーサイドエンジニアに
プログラミングスクールには通わず、独学でJavaを学習、ポートフォリオアプリはJavaのフレームワークであるSpringBootを使用して作成しました。
独学&Java、Web系エンジニアを目指す未経験者の中では中々珍しいんじゃないかな?
というわけで、知識ゼロでJava独学→内定獲得までの学習法をまとめようと思います。あくまで一個人の経験なので、あまり信用なさらないでください・・・少しでも参考になれば幸いです。
大原則
これはどの言語でもいえることだと思いますが・・・
- 参考書は絶対に読むだけにしない、実際に手を動かしてコードを書く
- ブログ・Qiita等に定期的にアウトプットする(転職活動のアピールにもなります)
- ある程度学習が進むたびに、アプリを実際に作成する
- 言語自体だけでなく、Linux,サーバー,ネットワーク等の周辺知識も積極的に身に着ける
※ ブログ投稿の頻度ですが、私は「4日に1記事」というノルマを課してやっていました。学習内容全てをアウトプットする必要はないと思います。私は4日間で一番苦戦したところ、重要だと感じたところにフォーカスして記事を作成していました。
記事が蓄積してくると、自分専用のレファレンスとして非常に有用な存在になりました。
学習の流れ
まとめるのが下手なので、私が実際に学習した流れで紹介していきます。
途中、Java以外の学習にも触れていますが、ゴールに到達するには必要な学習だと思ったので、あえて除外していません。
この流れが正解ではありませんし、もっと最短ルートはあると思います。一選択肢として捉えていただければ幸いです。
すごい大まかな流れとしてはこんな感じです。
2 サーブレット学習・アプリ作成&デプロイ
3 応用書でJavaの理解を深める(+Java Silver学習)
4 SpringBoot学習・アプリ作成&AWSにデプロイ
以降で細かく説明していきます。
1 入門書で基本文法を学習
最初は本当に知識ゼロだったんですが、レビュー等参照して下記の書籍を購入しました。
使用書籍:『スッキリわかるJava入門』
- この本は章ごとに練習問題が付いていて、実際に考えながら手を動かすようになっている。この問題を真剣にやることで知識が定着する。
- 問題をやるだけでなく、オリジナルアプリを作成することをおすすめします。序盤から「自分でアイデアを出して、アプリを作る」習慣をつけた方がいいです。
1つ目:オブジェクト指向に入る前に作成
Mainクラスのみで作成できる簡単なものを作りました。
kumagoro-95.hatenablog.com
2つ目:本書を一周終わらせて作成(電卓アプリ)
kumagoro-95.hatenablog.com
2 コンピュータの基礎知識を学習
Javaの入門書をやっていて、基礎知識のなさを痛感しました。今後学習が進んだら、知識不足が響いてきそうだと感じたので、下記の書籍を購入、通勤時間等活用して読みました。
参考書:『コンピュータはなぜ動くのか』
ちなみに、この本がきっかけでマイコンにはまり、一時期学習時間のほとんどをマイコンにそそぐ羽目になりました笑
3 サーブレット学習
サーブレットとは、簡単にいうとWebサーバ上で動作するJavaプログラムのことです。Javaで(フレームワークを使用せずに)Webアプリを作成するには、サーブレットについて勉強する必要があります。
使用書籍:『スッキリわかるサーブレット&JSP入門』
サーブレットについて勉強せず、直接SpringBootに入る方もいらっしゃるとは思いますが、よっぽど時間がない方以外はサーブレットに触れてみた方がいいんじゃないかなと思います。
理由は以下の通りです。
- Webアプリの仕組みを理解できる
- SpringBootの学習コストが下がる(SpringBootが裏でどのような働きをしているかがわかる)
フレームワークは非常に便利なのですが、便利ゆえに「実際に何がどうなっているのか」が初学者にはわかりづらいという特徴があります。
私自身、SpringBootに手を付けた時は「サーブレットやっといてよかった...」と感じました。サーブレットやってなかったら、手も足も出なかったかも(-"-)
4 サーブレットでアプリ作成&デプロイ※
〇 アプリ作成
私はここで、学習内容のおさらいを兼ねてシンプルなツイートアプリを作成しました。
参考URL: https://github.com/kumaGoro95/ScratchPaper#readme
〇 アプリをデプロイ(サーバー環境構築)
Javaアプリは、一般的なレンタルサーバーでは動きません。VPS, AWS等に自分で環境構築する必要があります。勿論herokuでもいいのですが、私的にはこの段階で自力でのサーバー環境構築に挑戦することをおすすめします。(サーバー代は有料ですが...)
理由は以下の通り。
私は「さくらのVPS」を使用しました。
vps.sakura.ad.jp
※ ここで参考にした書籍一覧
『新しいLinuxの教科書』
『イラスト図解式 この一冊で全部わかるサーバーの基本』
『ゼロからはじめるLinuxサーバー構築・運用ガイド 動かしながら学ぶWebサーバーの作り方』
※ サーブレットでアプリを作成することの是非
私はまだエンジニアではないのでよくわかってないのですが、Twitter等検索していると「現場でサーブレットを使用しているところはもうほとんどない」というツイートも散見されます。
しかし、個人的には「時間に余裕があるのなら」サーブレットでアプリを作成してみることをおすすめします。理由としては以下のとおりです。
- Webアプリの裏で実際にどのような処理が行われているのか、肌で理解できる
- 上記の理由から)フレームワークを学習する際の理解が早くなる
- 転職活動で学習の質を評価してもらえる(ことがある)
5 プログラミング・Javaへの理解を深める
入門書の知識だけでもアプリ自体は作成できると思いますが、それなりのWebアプリを作成するなら、もう少しJava・アルゴリズムの知識を付けておいた方が結果的に楽になります。
〇 Java
私は↓の書籍にお世話になりました。
ただし、全部はやってません。9章までやってあとは手付かずのままです。
個人的には、1~5章&9章あたりをやっておけば、アプリ作成には十分なのではないかなと思っています。
『スッキリわかる Java入門 実践編』
〇 アルゴリズム
アプリを作成していて、アルゴリズムへの理解も足りてないなと思ったので、↓の本で軽く学習しました。
『アルゴリズムを、はじめよう』
番外編1:Java Silver取得
これはやらなくてもいいとは思います。ただ、私としては試験勉強で得た知識が、ポートフォリオ作成の際に役立ちました。
〇 Java Silverを学習する理由
- 入門書レベルではできなかった複雑な処理を組み込めるようになる
- Java自体で何ができて、何ができないのか理解できる
- 転職活動で評価してもらえる(可能性が高い)
〇 学習方法
Java Silver取得については下記の記事にまとめてあります。
qiita.com
使用書籍:『徹底攻略Java SE 11 Silver問題集[1Z0-815]対応』
6 SpringBootの基礎を学ぶ
満を持してSpringBootの登場です。SpringBootは初学者向けの教材が非常に少なく、私も教材探しに苦戦しました。
色々迷走した結果、結局下記の3つの教材を使用しました。
(1)【Javaプログラマー必須】最強のフレームワーク、Spring。環境構築、Thymeleaf画面作成、依存性の注入まで。
www.udemy.com
<この教材の特徴>
- ハンズオン形式でわかりやすく、内容も初歩的
- SpringBootてどんなん?をつかむのに最適
- DIについての説明が非常にわかりやすい
(2)『Spring Boot 2 入門: 基礎から実演まで』
ポートフォリオ作成時は、こちらの教材をベースに作成しました。
<この教材の特徴>
(3)『Spring Boot 2 プログラミング入門』
こちらの書籍は、(2)の書籍を参照してもわからない時、辞書的に使用しました。
<この教材の特徴>
7 SpringBootでアプリ作成
今までの知識を総動員してアプリを作成します。
私は、チャット相談機能付き家計簿アプリを作成しました。
アプリ説明・使用技術等については下記の記事にまとめてあります。
qiita.com
〇 どうやって作った?
まず前提として、SpringBootの初学者向け教材・記事は他言語のフレームワーク(Rails, Laravel等)と比べるとかなり少ない(ように思います)。
なので、独学&SpringBootでアプリを作成するには、自力で調べる
私はこんな感じで作り上げていきました。
- とりあえず(2)の書籍をベースに基本機能を実装
- 書籍、公式ドキュメント、Qiita等を調べながら、追加機能を実装していく
- うまくいかない時はエラーコードを元に調べて調べて調べまくる。トライ&エラーの繰り返し
- どうしてもわからなかったらteratailで質問してみる、若しくはメンターサービスを利用
全然参考になりませんが...
〇 英語記事について
他のフレームワークをよく知らないのでなんとも言えませんが、SpringBootに限って言うと、英語記事から逃げない方が早く答えにたどり着けます。
私自身最初は日本語記事ばかり参照していましたが、日本語でいくら探しても見つからなかった情報が、思い切って英語ページ読んでみたらすぐ見つかる、なんてことが何度もありました。最近はGoogle翻訳の精度も上がっています。是非英語記事にも挑戦してみてください。
〇 SQLについて
家計簿アプリなので、SQLをかなり使用します。SQLについては、私は下記の書籍で学習しました。
『スッキリわかるSQL入門 第2版』
〇 AWSへのデプロイ
AWSに関しては、下記の教材しか使用していません。サーブレットアプリを作成した時にLinux,サーバーについてはある程度学習したので、デプロイするだけなら難易度はそこまで高くありませんでした。
番外編2:基本情報技術者試験(FE)取得
これも必須ではないです。ただ、ここまで学習出来たのなら、取っておいて損はないです。
私が使用した教材はこの1冊のみです。
『キタミ式イラストIT塾 基本情報技術者』
ポートフォリオアプリ作成の片手間、1か月弱で取得できました。
実際受けてわかったんですが、今まで私が紹介した学習法に沿っていれば、基本情報合格に必要な知識の何割かは自然に身に着いてます。
なので、ここまで勉強したのに基本情報受検しないのはもったいない!笑
ただし、序盤の2進数・ハードウェア&ソフトウェアあたりと終盤の関係法規・経営戦略はキタミ式でしっかり勉強しました。
※ 基本情報の学習方法詳細については、こちらにまとめました。
kumagoro-95.hatenablog.com
さいごに
プログラミング学習を始めてみてもう何か月も経ちますが、Web系志望の未経験者でJavaを選んでいる人ってすごい少ないんだとびっくりしました。
「Javaは時代遅れ」とか「難しい」とか言われますが、プログラミングの基礎をしっかり学べることができる言語ですし、転職活動でも他の志望者との差別化を図ることができます。実際、数か月間Java/SpringBootに打ち込み、転職活動に臨んでみると、複数の企業から「本来未経験者は採用していないんだけれど...」とお声掛けをいただくことができました。
何が言いたいのかというと、Java仲間がもっと増えてほしい!🤣
タイトルの通り、Java/SpringBootは一つの選択肢でしかありません。ただ、「Javaやろうか迷ってる」「Javaやってるけど勉強方法がわからない」この記事がそういった方の役に少しでも立てたら嬉しいです(=゚ω゚)ノ
なお、このブログの記事を最初から読んでいただくと、ほぼ本記事で紹介した学習の流れになっています。その時々で詰まった所、苦戦した部分についてまとめているので、必要に応じて参照していただければと思います(役に立つかはわかりませんが...)