7日でJAVAを習得する方法

今日はTwitterであるものを見つけました

「
未経験からフリーランスエンジニアを目指すなら
最低1年は勉強しないと<font color="red">**ダメ**</font>ですよね？
**いいえ、違います！**
プログラミング習得は
<font color="red">**7日**</font>あれば<font color="red">**誰でも可能**</font>です
」

よくあるプログラミングスクールの売り文句ですね

7日で本当にプログラミングを習得できるのか、僕がやってきたJavaの勉強方法を元に検証してみようと思います。


#前提
if文、for文くらいは学校で聞いたことあるけどいまいち覚えておらず、オブジェクト指向プログラミング(OOP)は知らないものとします
メンターのような人はおらず、すべて一人で勉強するものとします
インターネットを使え、必要な本は事前に入手しているものとします(ただし、Twitterで人に聞く、などはできないものとします)
Javaを勉強する7日間は仕事や用事などはないものとします
自分用のメモは取らないものとします(メモを取る時間のほうが長くなってしまうため)

#検証
では早速はじめていこうと思います
僕が最初に取り掛かったもの、それは…

##Progate

インターネットでちょっと調べると真っ先に出てきますね！
途中まで無料で受講できる上に、Javaの実行環境が用意されている状態でスタートできるためかなりのスピードでこなすことができます
今回は月額費用約1000円を払い、有料のコースも受講します
[Progateはこちらから](https://prog-8.com/)

先に言っておきますが、ステマ的なものではないですw
最も早く勉強を進める方法として、初期段階ではProgateはかなり有効だと思っています

JavaのコースはI～Vまでありますが、8時間もやれば終わるでしょう
途中で道場？みたいなのがありますがそれは無視していきましょう
何せ時間がないですから！

**Progateで理解できること**
変数、if文、for文などの基本的な構文
クラス、メソッド、インスタンス、カプセル化、継承、ジェネリックスなどのオブジェクト指向プログラミングに関する部分


##スラスラわかるJava 第2版
Progateでおおよその部分は最速で流していけますが、Progateでは出てこない部分があります
例外処理、インターフェース、関数型インターフェース、ラムダ式、ストリーム、リフレクションなどなど…
Progateは最速で勉強するための優れたツールだとは思いますが、内容量がめっちゃ少ないです
正直、Progateの内容を完璧に習得したとしても何かが作れるレベルではありません

Progateでは出てこなかった部分をスラスラわかるJava 第2版でささっと勉強してしまいましょう！
[スラスラわかるJava 第2版はこちらから](https://www.shoeisha.co.jp/book/detail/9784798156736)

ここで注意をしておくと、スラスラわかるJava 第2版は若干分かりづらい部分があります
何故かというと、Progateでは説明、コーディング、実行という過程があったのですが、スラスラわかるJava 第2版は説明、問題で終わりです
サンプルコードは出てくるのですが、実行結果がイメージしづらく若干分かりづらいです
しかし、この本の説明はかなり丁寧なためしっかり読めば理解できます

**スラスラわかるJava 第2版で理解できること**
例外処理、インターフェース、関数型インターフェース、ラムダ式、ストリーム、リフレクション、マルチスレッド、アノテーション、コレクションなどなど…

ただし、これら全てをはじめから完璧に覚える必要はありません
例外処理、インターフェース、関数型インターフェース、ラムダ式、ストリームあたりがなんとなく理解できればそれでOKです
何故かというと、この後死ぬほど出てくるのでここで必死になっても…って感じだからです

知っているところは飛ばしてしまって良いです
それであれば大体10時間くらいで読破&理解までいけると思います

##Java SE 8 Silver 問題集
俗に言う黒本です
[Java SE 8 Silver 問題集はこちらから](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5Java-SE-8-Silver%E5%95%8F%E9%A1%8C%E9%9B%86%EF%BC%BB1Z0-808%EF%BC%BD%E5%AF%BE%E5%BF%9C-%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-ebook/dp/B01ASGJYIE/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5+Java+SE+8+Silver+%E5%95%8F%E9%A1%8C%E9%9B%86%5B1Z0-808%5D%E5%AF%BE%E5%BF%9C&qid=1563609042&s=digital-text&sr=1-1)

今まではなんとなくだった理解が、この本を読むとしっかり脳みそに刻み付けられます
この本は何回か読めば簡単にJava Silverを取ることができるようになります

と、言う意味ではかなり価値があると思うのですが、今回は時間がありません
staticメソッドとインスタンスメソッドの違いが理解できていればここは飛ばしてもう次に行ってしまいましょう(別に資格が目的ではないので！)

##Java プログラマ Gold SE 8
俗に言う紫本です
[Java プログラマ Gold SE 8はこちらから](https://www.amazon.co.jp/dp/B01J1LPKJY/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)

資格取得が目的であればJava Goldの黒本も読むべきですが、今回は紫本だけで良いでしょう

Java GoldはSilverでは出てこなかったもう少し詳細な情報が載っています
ここらへんからようやくJavaっぽさが出てきますw

今までは理解したとこで何が作れるの？？ってレベルでしたが、流石にJava Goldレベルになるともうちょっとマシになり、ファイルへの読み書き、データベースアクセス、マルチスレッドらへんが実装できるようになります


**Java プログラマ Gold SE 8で理解できること**
JDKに同梱されているライブラリーの使い方
関数型インターフェース、ラムダ式、ストリームなどなど

この本は結構内容も重いので、48時間くらい取りましょうか

##デザインパターン(TECHSCORE)
次の本は…と言いたいところですが、ちょっと一休み、GoFのデザインパターンを学びましょう
デザインパターンに関する本はいろいろあるのですが、どれも実装例を書いてあるだけであまり意義を感じなかったので無料で見れるWebサイトで済ましてしまいましょう

TECHSCOREがかなりわかりやすく解説してくれてます
[デザインパターン(TECHSCORE)はこちらから](https://www.techscore.com/tech/DesignPattern/index.html/)

ここで重要なのは、実装方法に囚われないことです
今理解したいのは実装方法ではなく**<font color="red">デザインパターン**</font>です

ここは3時間くらいでささっと終わらせちゃってください

##Effective Java 第3版
この本はJavaの生みの親であるJoshua Blochさんの著書を翻訳したものです
初版から3版まで出ていますが、それぞれで内容が違います
3版ではJava SE 8の内容も記載してくれているため、まさにそのまま使える手法が載っています

この本を読む前提として、Javaの基本とデザインパターンがなんとなくでもわかってないといけません
逆に言えば、この本を読んで意味がわかるレベルであればもはや初心者は抜け出したと思っても良いでしょう
[Effective Java 第3版はこちらから](https://www.amazon.co.jp/dp/B07RHX1K53/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)

**Effective Java 第3版で理解できること**
Javaの設計、実装で気を付けなければならない点
不変オブジェクトの有用性

この本でびっくりするのは、Java Goldで一生懸命勉強した内容が「そんなもん使うな」と一蹴されているところですw
コーディング規約とかもこの本を元に作られてるのかな？っていうのをよく見かけるので、これが理解できればなんとなくの設計、実装はできちゃいます

この本もかなり重いので、60時間くらいとっておきますか

##Spring Boot 2 プログラミング入門
さて、Javaという言語についてはここまでである程度理解できたと思います
ここからは、実際に仕事で使う領域を触っていきましょう(ごめんなさい、ここまでのは理解してても仕事になるかは微妙なんです…)

Javaのフレームワークと言えばSpring Framework！！！
その新顔でSpring Bootというのがいます
めっちゃかんたんにいうと、Javaを使ってWebサーバーが作れるようになります
[Spring Boot 2 プログラミング入門はこちらから](https://www.amazon.co.jp/dp/B07KF4R1HT/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)

この本はかなり丁寧に解説してくれており、インターネットで適当なWebサイトを見るよりはるかに質が良いです
ただし、中身がちょっと古いんですよね…

環境構築はSTSを～みたいなこと言っているんですが、今は[Spring initializr](https://start.spring.io/)を使ってしまえば一発で環境構築終わりますw

いやー、めっちゃ便利ですよね
僕はこの本読み始めてからSpring initializrの存在を知ったので読み始めでめっちゃ躓いた思い出がありますw

この本では最初のほうでGroovyという言語を用いてコードを書いているのですが、ここまで来た人であれば勘でJavaに直せます
ちなみに、ビルダーはMavenを使ったパターン、Gradleを使ったパターンで解説がされているのですが、<font color="red">**絶対にGradleを使ってください**</font>

今はインターネットでいろいろ調べるとしっかりMavenでのパターンの解説もされているのですが、Spring Frameworkとそれに付随するライブラリー各種は脱XMLを目指しています
MavenだとXMLで書かないといけないのですが、GradleはJavaっぽい感じで書けます
Javaっぽいというか、実際にはGroobyなんですけどね

**Spring Boot 2 プログラミング入門で理解できること**
MVCの基本
環境構築
Thymeleaf(テンプレートエンジン)の使い方
データベースアクセス

この本はWebサービスを作る、というのがひとつの目標になっているため、Thymeleafを使った画面周りの解説が結構多いです
SpringよりもThymeleafの解説のほうが多いような気がするくらい多いですw

言い忘れていたのですが、データベースアクセスはMybatisを使ってしまうのでデータベースアクセス部分は飛ばしてしまって結構です
その代わり、Mybatisのドキュメントを読んでおいてください
[Mybatisの公式ドキュメントはこちらから](https://mybatis.org/mybatis-3/ja/index.html)
[Mybatis-Springの公式ドキュメントはこちらから](https://mybatis.org/spring/ja/index.html)

Mybatisのドキュメントってなぜかバラバラになってるんですよね…w
Mybatisをちょっと検索してみると、日本語化が不安、みたいなことが書いてあったりするんですが、全くそんなことないです
かなりわかりやすく、無駄な部分が少ないためちょっと空いた時間でスラスラ読めてしまいます

Mybatisの他にもHibernateというのも人気らしいのでそっちも勉強しといたほうが良いかもですね

Spring Boot 2 プログラミング入門とMybatisの公式ドキュメントを合わせて15時間くらいとしましょうか
Spring Boot 2 プログラミング入門は分厚いですがすっ飛ばせる場所が多くて良いですね

##Spring 徹底入門
とうとうこれで最後です
これが読めれば、かなりイケイケな感じ？になれると思います

ちょっと古いのですが、Springの重要な部分が網羅されています
説明もかなり丁寧でわかりやすく、Spring Boot 2 プログラミング入門で触れなれなかった部分もしっかり解説されています
[Spring 徹底入門はこちらから](https://www.amazon.co.jp/dp/B01IEWNLBU/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)

ただ動けば良い、ではなく、Springの機能を使っていかに良いシステムを作るか、いかに開発工数を減らすか、みたいな部分が書いてあります

僕もまだこの本読破した訳ではないので知らない部分もあるのですが、ほぼすべてがここに詰まっていると言っても良いレベルだと思いますw

ただ、バージョンアップに伴って追加された書き方や、非推奨となった書き方があったりするのでそこらへんはこの本を読んだ後に追っかけていきましょう
下記の記事が簡潔に説明してくれているので是非見てみてください
[令和時代に「Spring入門」「Spring徹底入門」を読むとき気をつけるべきN個のこと](https://qiita.com/suke_masa/items/392976749fce94a8ef1f)

この本はほぼ丸暗記なので、24時間くらいでささっと読破しちゃってください
わからない部分は後で見返せばいいんです

#検証結果
7日でJavaを習得することができるのか、結果発表です

まずは必要な時間を計算してみましょう

Progate
8時間

スラスラわかるJava 第2版
10時間

Java プログラマ Gold SE 8
48時間

Effective Java 第3版
60時間

デザインパターン(TECHSCORE)
3時間

Spring Boot 2 プログラミング入門 + Mybatis公式ドキュメント
15時間

Spring 徹底入門
24時間

**合計168時間！**

7日*24時間は168時間なので…

**結論！**

<font color="red">**7日でJAVAを習得することはできます！！！！**</font>


いやー、7日でJAVAを習得することってできたんですね
寝ずに7日集中力が続けばですけど…w

#まとめ
プログラミングスクールは嘘つきではない、ということが証明できました
独学はどうしても嫌だ、という人はプログラミングスクールという手もありなんじゃないでしょうか
本だったら全て合わせても3万円あれば足りるくらいなので、メンターに相当価値がないと費用対効果は良いとは言えないですが

でも、あえて7日でプログラミングを習得しようとするなんてなんて無謀なことか…
7日でプログラミングを習得しようとしている人たちは頑張ってください