【Java】未経験者が2週間でpaizaBランクになる方法

##概要
弊社の新人研修は「自己学習をしつつ、分からない所を先輩エンジニアに質問する」
というスタイルなのですが、一応の中間目標としてPaizaのスキルチェックでBランクを取る事が設定されていました。
今回未経験でほぼ知識なし状態から、約2週間程度でBランクに達したので、学習した内容をまとめます。
![キャプチャ254.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526290/e16fb3b5-9d95-94ff-16d0-e452fc9e0e09.png)
##前提
ただ、paizaのBランクは特に凄くありません。Bランク問題に一度でも正解すればランクが上がるので、私のような未経験者でも取れてしまいます。
ランクがBだからと言って、他の問題も余裕で解けるとは言い難く、今の実力通りのランクが反映されているとは正直思いません。
そもそも研修は業務で必要な基礎的な知識と技術をしっかり身につけるためのものなので、Paizaのランクはあくまで目安に過ぎません。

とはいえ、Cランク問題をそこそこ解いてBランクに到達できたなら、何も分からない状態よりは遥かに良いでしょう。
実際、何かの目標を決めて学習する事で、私自身は成長を感じる事が出来ました。

少なくとも
・if文、for文、while文を複数組み合わせて適切に使える
・演算子の動きを理解してコードが書ける
・配列の作成、操作を問題なく行える
・int型、String型の変換が行える
・equalsと==を使い分けられる
・substringやsplitなど簡単なメソッドが使える
・標準入力を使って、狙い通りの値や文字列を読み込める

といったjavaの基礎中の基礎は無理なく身についているかと思います。

##学習内容
本格的なプログラミングが初めての場合、やれるかどうか不安な方もいると思います。実際、私も研修の期間内でBランクを取れるかどうか不安でした。
ただどんなに飲み込みが悪くとも、一歩ずつ学んでいけば到達可能です。

####1日目~2日目 Progateかドットインストールで概要を掴む
仕事でもないのに自己学習するような方は、既にやっている可能性が高いですが、まずはProgateなどで言語の概要を掴みましょう。
プログラミングとはどういうものか？というレベルならザックリ理解しておきましょう。

注意すべきなのは、ここで時間をかけすぎない事です。多くのエンジニアが言っていますが、Progateを何週もするなどは、スキルチェックを挑戦する場合でも無意味なのでやめましょう。

Progateならjavaコース1~3だけで十分です。概要を掴むのが大事なので、実践編はやらなくて良いです。

####2日目 標準入力を学び、Dランク問題に挑戦する
ある程度学んだら早速Dランクに挑戦するべきですが、Paizaの問題は<b>「標準入力を使って値を読み込む」</b>という動作が必要で、これを理解しないとDすら解く事ができません。
まずは標準入力を使えるようになりましょう。
[Java標準入力解説](https://www.youtube.com/watch?v=nxd4CLklcfY)
[paizaラーニング](https://paiza.jp/works/java/primer)
[【Java】標準入力を使いこなせないとpaizaのスキルチェックはDで詰む](https://qiita.com/takuya_prog/items/c7338d4f56f8b40e7ebb)

半日もあれば理解できると思います。終わったら早速Dランクに挑戦してみましょう。

スキルチェックでは得点率が高い順でソートされているので、どの問題に挑戦するか迷ったら、とりあえず上から選べば間違いないです（下の方を選ぶと高難易度になります）

そこまで難しいものはないので、Dランクはクリアできると思います。
####3日目～5日目 paizaラーニングでインプットしつつ、D、Cランクに挑戦する

次はCランクですが、さすがにProgateを多少こなした程度では知識面に不安が残るので、[paizaラーニング](https://paiza.jp/works/java/primer)を行いましょう。全部で10コースありますが、1~6だけでも十分だと思います。前日の段階でDランクがクリアできなかった場合でも、ここで知識を補えばまず正解できるはずです。
終わったらCランクに挑戦します。完全な初心者だと、知識面は十分でもプログラムで上手く表現できずにタイムアップになってしまうかもしれませんが、めげずに挑戦しましょう。この辺は慣れだと思います。

私はDランク問題を40問ほど解いてから、Cランクに挑戦しましたがそこまでやる必要はないです。さっさとCランク問題に行きましょう。
####6日目～10日目 Cランク問題とBランクレベルアップセットを解く
paizaのコンテンツ内にはDとCで構成された、[Bランクレベルアップセット](https://paiza.jp/works/mondai/prob60/problem_index?language_uid=java)というものがあります。Cランク問題で苦戦するようならこちらを挑戦しても良いです。
私は全問解きましたが、どうしても分からないものは解答のコードを見ました。
![キャプチャ255.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526290/4d45d914-60b5-7627-c2be-cb83a1c5e422.png)


Cランク問題を10問程度、時間内に正答できたなら次の段階に進みましょう。
####それ以降〜 Bランク問題に挑戦する
ここまでこなすと、簡単なBランク問題なら知識面では不足しないと思います。
ロジックを考える必要がありますが、一部の問題を除いて、基本的にはif文とfor文を組み合わせて解く事が出来ます。5問くらい挑戦して一つも分からなかったらCに戻りましょう。
無事正解できれば、後はAランク、Sランクを目指すのもいいですし、Atcoderに行ってさらにレベルの高い場所で鍛えてもよしです。

##挫折しそうな時のtips
####成長のスピードは人それぞれなので焦らない
実務未経験でも元々高校、大学でプログラミングをしていた人や、適正のある方は2週間どころか1日2日でBランクに到達するかもしれません。しかし、成長のスピードは人それぞれなので決して焦らないようにしましょう。地道にやっていけば遅くとも確実に身につきます。疲れた時はちょっと休憩しても大丈夫です。
####自分で考えて書く事を大事にする
paizaの問題は基本的に「〇〇という動作をするプログラムを作る」というものがほとんどです。ここの条件分岐はif文でこの条件で分岐しようとか、考えて実際に書く必要があります。それを繰り返す事で頭の中の引き出しが増えて、色々な問題に対応できるようになります。
当たり前ですが「考えて実際に書いてない時間」は勉強になってないので、漫然とやるのはやめましょう（例えばノートのメモ取りとかは無意味です）
####綺麗に書こうとせず、自分の期待通りの動作をするかを優先する
練習問題の模範解答や、ネットで検索して出てくるコードはこなれていて綺麗です。しかし、初心者の頃はまず「自分の期待通りの動作を知っている知識で書けるか」を優先しましょう。
ここはメソッドを使うと短く記述できるとかはとりあえず後です。
コードが滅茶苦茶でも、if文とfor文を使ってなんとか解答できたなら今は良しとします。
ただ可能なら先輩や上長にレビューしてもらうとベストです。
####聞ける環境があるなら活用する
私の場合は会社の研修の一環だったので、先輩エンジニアに質問できるという環境だったのですが、遠慮してあまり質問しなかった事を少し後悔しています。聞ける環境があるなら利用しましょう。
とはいえ、自分で調べる事で九割くらい解決できたので、ほぼ独学でも支障はないと思います。
##まとめ
自分もさらに上を目指すべく現在学習中ですが、本当にスキルを適切に伸ばしていけるのか、学習中は何度も不安になっていました。
粘り強く取り組んでいけば乗り越えられると思うので、同じように学習中の初心者の方の何かの参考や励みになれば嬉しいです。