私からあなたへ 一人前のJavaエンジニアになるためのロードマップを送ろう

内容

以下記載のURLを参考にロードマップをJavaバージョンにしてみた。
初心者から立派なJava エンジニアになる方への学習の道しるべになれば。

https://github.com/kamranahmedse/developer-roadmap

また自分自身すべてできるわけではないので、できるようにするためのメモ書きとして。
(ただ以下をなんとなく理解するだけで2,3年以上かかった。。。)

ロードマップ

New Wireframe 2 (16).png

学習方法

1.Hello World

どのプログラミング言語でもそうですが、まずは動かし方を学びましょう。
ゲシュタルト崩壊するくらいHello Worldは書きましょう。
最初のうちはstatic void mainの意味も分からなくて大丈夫です。徐々に理解できるはずです。

2.基本を学ぶ

以下のサイトや書籍を使用してプログラミングの基礎を知りましょう。
文法の書き方やメソッドの使い方、アクセス修飾子など覚えることはいっぱいあります。
会社の研修でも以下の部分は習うと思いますが、聞いただけでは忘れるので手を動かして覚えましょう。十分にマスターできたらJava Silverを受けるのもよいでしょう。

▼ Webサイト
ドットインストール Java入門(有料):https://dotinstall.com/lessons/basic_java_v2
Paiza Java入門(一部無料):https://paiza.jp/works/java/primer
▼ 書籍
スッキリわかるjava入門などの入門書
Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

IDEを使いこなす

エンジニアはいかにスピーディに効率よくプログラマを書くかは重要になってきます。
そのためにIDE(開発ツール)を活用しましょう。予測変換機能やショットカートキーを覚えたり、
便利なプラグインを入れたりしてどうやれば効率よく作業できるか考えてみましょう。
先輩や周りの人におすすめのIDEやショットカートキーを教えてくれと聞くのもよいでしょう。
その人のこだわりが見えてくるはずです。そこから自分にあったものを選びましょう。
またJavaは他の言語と比べて比較的に簡単にデバックができます。System.out.printからの確認は早々に捨てましょう。

3.プロジェクト管理を学ぶ

Javaのライブラリを効率よく管理できビルドを簡単にしてくれるプロジェクト管理ツールについてマスターしましょう。
有名どころはMavenとGradleです。はやりを行くのならGradleがよいでしょう。

▼ Webサイト
Qiitaの記事:https://qiita.com/tarosa0001/items/e5667cfa857529900216
▼ 書籍
Javaビルドツール入門 Maven/Gradle/SBT/Bazel対応

4.標準&ベストプラクティスを学ぶ

いままで書いたソースを改めて見直しましょう。他人に見られてもよいコードを書くために、まずはコーディング規約を読みましょう。
全部覚える必要はないですが有名どころは押さえておきましょう。業界の掟になっておりコードレビュー時に突っ込まれます。またデザインパターンはいろいろあり全部覚える必要はないのですが、GoFの基本的な考え方については理解しておくとよいでしょう。

▼ Webサイト
GoogleのJavaコーディング規約:https://google.github.io/styleguide/javaguide.html
GoogleのJavaコーディング規約日本語訳:https://kazurof.github.io/GoogleJavaStyle-ja/
サルでもわかる 逆引きデザインパターン :http://www.nulab.co.jp/designPatterns/designPatterns1/designPatterns1-1.html
Githubのトレンド: https://github.com/iluwatar/java-design-patterns
▼ 書籍
実践Javaコーディング作法
増補改訂版Java言語で学ぶデザインパターン入門
EFFECTIVE JAVA 第2版

5.他人のソースを読む&ライブラリを学ぶ

GitHubには様々なJavaのライブラリのソースコードが公開されています。他人が書いたコードを読み自分の知識にしていくとよいでしょう。
また今流行している技術について知ることができるでしょう。それに併せてGitの使い方(チェックアウトやブランチ)について学ぶとよいでしょう。
既存のプロジェクトにプルリクエストをだしライブラリに変更を加えられると尚よいでしょう。
▼ Webサイト
Github: https://github.com/trending/java
Qiitaの記事:https://qiita.com/haruto167/items/162551100449ea5c7e6d
Git入門:https://backlog.com/ja/git-tutorial/

6.テストコードを学ぶ

より品質のよいコードを書くためにJunitやMockでテストコードをかけるようにしましょう。
また開発手法としてTDDを押さえておきましょう。red→green→refactorを繰り返せば質のよいコードが書けるはずです。

▼ Webサイト
Junitを使ったjavaのテスト入門:https://www.slideshare.net/SatoshiKubo1/junitjava
▼ 書籍
JUnit実践入門 ~体系的に学ぶユニットテストの技法

7.テストを書きステップ数を学ぶ

テストをかけるようになったらカバレッジ(網羅率)を学習して、品質を数値化してみましょう。

8.RDBを学ぶ

好きなDBを選びダウンロード&操作しましょう。
繰り返し繰り返しSQLを書き、DDL&DMLの書き方をマスターしましょう。
またORMを学べばJavaからDBを簡単に操作することができるでしょう。
▼ Webサイト
ドットインストール PostgreSQL入門(無料):https://dotinstall.com/lessons/basic_postgresql
ドットインストール MySQL入門(有料):https://dotinstall.com/lessons/basic_mysql_v3
Java O/Rマッパー特集:http://d.hatena.ne.jp/torutk/20170726/p1
▼ 書籍
スッキリわかる SQL 入門 ドリル215問付き! (スッキリシリーズ)

9.フレームワークを学ぶ

フレームワークを学びより効率的にソースコードをかけるよう学習しましょう。
私自身はSpringをおすすめし、以下の書籍は非常によりフレームワークの入門書です。
フレームワークは1つ1つの特性が色濃く出ます。Strutsを覚えたからといってSpringが使えるようになりません。
なので自分にあったものを選びましょう。
またフレームワークは廃り流行りが早いです。一昔前まではStruts→Seasarと人気でしたが今では脆弱性が問題視されたり、EOL(End of Life)になっているので常に最新の動向をチェックするとよいでしょう。

▼ 書籍
はじめてのSpring Boot―スプリング・フレームワークで簡単Javaアプリ開発

10.よく使う機能を作ってみる

Javaのフレームワークを学べばWebページが簡単に作れるはずです。
ブログのようなサイト、「CRUD」(作成・参照・更新・削除機能)やログイン機能を実装してみましょう。またそれに合わせてテンプレートエンジンを学習すればより効率的に開発できるはずです。

11.Webテストを学ぶ

Webサイトが作れたらテストをしますが、その作業は自動化すれば効率的に終わる場合があります。
ブラウザの自動化ツールについて知っておきましょう。また高負荷がかかった場合、どの程度サイトが持つのか検証が必要です。
高負荷をかけるツールを試してみましょう。

▼ 書籍
Selenium実践入門 ―― 自動化による継続的なブラウザテスト

12.NoSQLを学ぶ

名前の通りSQLで操作しないDBについて学びましょう。
RDBと比べて何が便利になって何が不便になるか比較しながら操作するとよいでしょう。
▼ Webサイト
ドットインストール Mongo入門(無料):https://dotinstall.com/lessons/basic_mongodb_v3

13.キャッシュを学ぶ

学習中

14.RestFulAPIを学ぶ

RestFulAPIとは何か、JavaでRestFulAPIを実装するにはどうするかを学びましょう。
今まで学んできたフロント(静的なページ)とバック(動的なページ)の役割について、新しい気づきをあたえてくれるでしょう。またRestFulAPIはRDBのようにデータについて定義されていないため、自由に定義を変更することができますが、Swaggerを利用しデータについて定義すればより使いやすくなります。

▼ 書籍
はじめてのSpring Boot―スプリング・フレームワークで簡単Javaアプリ開発 (実装方法のみ)

15.認証を学ぶ

サイトにアクセスする際、セキュリティチェックを行う必要があります。
そのための仕組み(Basic、トークン等)を理解し、それぞれのメリット・デメリットを理解した上で認証機能を実装してみましょう。

16.メッセージングを学ぶ

学習中

17.検索エンジンを学ぶ

RDBやNOSQLより複雑な検索を高速に行うのが検索エンジン(全文検索)です。GoogleやYahooも独自の検索エンジンの仕組みがあります。
ここではOSSであるElasticsearch(エラスティックサーチ)を活用してサジェスト機能(予測変換)を実現してみてはどうでしょう。
▼ Webサイト
Qiita:https://qiita.com/nskydiving/items/1c2dc4e0b9c98d164329

18.Dockerを学ぶ

Javaは「Write once, run anywhere」です。Windows、Mac、LinuxどんなOSでも動きます。
あなた自身で作成した環境が他の環境でも動かせるようDockerのImageを作り自動セットアップ&起動できるようにしましょう。
また今まで学んだDBも併せてDocker Composeの設定に入れ、自動的にアプリが動かせるようにしましょう。

さらに、JenkinsやCircleCI使えばより楽に環境構築できるはずです。

▼ Webサイト
ドットインストール Docker(無料):https://dotinstall.com/lessons/basic_docker
▼ 書籍
[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術

19.Webサーバーを学ぶ

学習中

20.Webソケットを学ぶ

学習中

21.GraphQLを学ぶ

学習中

22.Graph Databaseを学ぶ

学習中

23.BigQueryや機械学習にチャレンジ

学習中

※ 学習中について随時更新して記載予定