駆け出しエンジニアがまず学んで200%損しない学習について

<h2>はじめに</h2>

私は、理系大学を卒業したものの、
プログラミングにほぼほぼ触れず2020年の４月にインテックに入社した2年目のエンジニアです。

入社して一番衝撃的だったことは、
エンジニアは特定の知識だけでなく、様々な知識を兼ね備える必要があったことです。

Java,JavaScript,SQL,HTML,CSS,CommandLine,Github,AWS,,.....
理解必須な技術項目を簡単に列挙しただけでもこれだけ沢山出てきます。

上記にある1つ1つの内容を業務時間内だけでは
理解することが出来なかったため業務外での学習は必要だと考えていました。

ただ、基本的知識がないのにも関わらず、背伸びをして中級者以上の技術書を読んでも
理解ができず辛い思いから途中リタイアしてしまった書籍もありました。

そんな反省もあり、まずは基礎固めをするために
この１年間でどんな学習したのかを以下の３構成でまとめてみました。

・エンジニアとしての心得
・プログラミング学習
・AWS

IT業界を志望している方や駆け出しのエンジニアの方に見て頂き、少しでも学習貢献になれば幸いです。



##エンジニアとしての心得
<details><summary>
</summary><div>

####■リーダブルコード
<details><summary>
</summary><div>
[リーダブルコード](https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Boswell/dp/4873115655)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/788536/6fcb43b0-a2df-ce9f-8deb-10cfece0c098.png)

知る人ぞ知る良本です。
私が1年目の時に、育成担当の先輩からこちらの本を貸して頂きました。

ソースコードを書き始めた当初は、実装依頼されたものに対して、その通りの動きが満たせれば良いと考えていました。

ただ、それだけでは足りないと先輩の方から教えていただきました。
何が足りなかったかと言うと、　**「配慮」**　です。

違う方が私のコードを読んだ際に、分かりやすいかつ、解釈齟齬が起きないソースが「良いソースコード」です。
勘違いされやすい点として、「分かりやすい」とは**簡潔に書く**とはまた意味合いが異なります。

難しいロジック、文法を使って簡潔に書いても分かりやすくはないですよね。
だからと言ってダラダラと冗長的なソースを書くのも違います。

当初は実装することでいっぱいいっぱいで配慮まで意識を向けることができずにいました。

そんな中、こちらの本を読んで考え方が変えることが出来たと思います。
私の中でいつも意識して書いている項目を2つ紹介します。

**1.変数は何を目的とした変数なのかが分かる名称を付けること。**

「メールを送った件数を数える変数」を付ける際にどのような変数名称をつけますか？
`count`と言った変数名称では何をcountするかが分からないですよね。
`SendMailCount`のような名称ではどうですか？
おおよそ何を目的とするかの変数か分かると思います。

**2.コメントを記入する。**

```
int result , hour
hour = 3;
Minutes = hour * 60 
System.out.println(Minutes);
```
このような、プログラミングを実装したとします。
処理内容としては、`Minutes`という名の変数に`hour * 60　`の結果を代入し、計算結果を表示させています。

上のようなプログラムであれば何の処理をしているかが検討つくとは思いますが、
実際のソースはより処理内容は複雑です。
実際には、違うメソッドを呼び出し、そのメソッドを用いて処理を行い、その結果を再度違う形に整形して使用したりします。

一見、処理内容を見てもイメージが湧かない人のために日本語でコメントを入れておくことで
先述した**解釈齟齬**が起きないようになります。

その際の注意点として、**ソースコードの内容をそのまま日本語訳**するのは間違いです。

```
//今後の処理は分で処理を実装するため、時から分に変換する。
int result , hour
hour = 3;
Minutes = hour * 60 
System.out.println(Minutes);
```
コメントでは、その処理をする**目的**を書きます。
何故、その処理が必要なのか、その背景について記載するのが好ましいです。

コメントを書くことで実装時に、自分が何のためにその処理を書くのか整理することが出来るので一石二鳥です。

このような、ソースを書くうえでの配慮について、詳しく書籍には記載されているので
是非読んだことがない方には読んで頂きたいオススメの１冊です。

</div></details>

####■図解コレ１枚でわかる最新ITトレンド
<details><summary>
</summary><div>

[図解コレ１枚でわかる最新ITトレンド](https://www.amazon.co.jp/%E3%80%90%E5%9B%B3%E8%A7%A3%E3%80%91%E3%82%B3%E3%83%AC1%E6%9E%9A%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%80%E6%96%B0IT%E3%83%88%E3%83%AC%E3%83%B3%E3%83%89-%E6%96%B0%E8%A3%85%E6%94%B9%E8%A8%823%E7%89%88-%E6%96%8E%E8%97%A4-%E6%98%8C%E7%BE%A9/dp/4297111454)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/788536/f834cd36-a240-7627-8688-5f1a989dbc7b.png)

エンジニアとして必要なこととして、常に最新のITトレンドを取得しておく必要があります。
ITは常に日進月歩なので、アンテナを張って動向を見ておくことは必要です。

とは言えど、ITトレンドって意味も広義なので具体的にどこまでが範囲かが分からなかったため
**何がITトレンドとして挙げられるのかの着眼点**を知る必要がありました。

こちらの書籍では、一つ一つののトレンドについて簡単ではありますが解説もあるので
解説だけでは理解が及ばない、興味がある部分は自分で調べることで知識の幅を広げられます。

</div></details>

</div></details>


##プログラミング学習
<details><summary>
</summary><div>
先述した、Java,SQL,HTML,CSS,CommandLineは私は[Progate](https://prog-8.com/
)を利用して学習しました。
####Progateとは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/788536/092ebabf-59b5-7716-30eb-aaffe26bcfc5.png)
ユーザー数240万人以上が使用している、提供国数は100ヵ国を超えるグローバルなプログラミング学習サービスです。
学習対象は初学者がメインになります。
Progateは本とは異なり、自分で手を動かして学習をしていくので本よりも定着力はあると思いました。

######メリット

**1.受講できる対象の講座は16項目あり、環境構築の設定なしに学習ができる点です。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/788536/583e833c-6bd2-2185-03cb-b0ed203f1fd9.png)

本来、言語を学ぶ上ではそのプログラミング言語を使えるように環境構築し学習する言語を使えるように設定する必要があります。
環境構築するのも初学者であれば、一苦労です。
私もJavaを学習するにあたって環境構築をしたことがありますが、設定が上手く反映されず
学習環境を整えるのに多くの時間を要しました。

Progateでは学びたい講座を選択すれば、すぐに学びたい講座の学習ができるので
Progate側で全て環境整備してくれているのは大きなメリットだと思います。

**2.丁寧な解説と解説を基に演習問題が用意されているので学習の取り掛かりに向いている。**

初学者の方は、どのように学習を進めていけばプログラミング言語の理解に繋がるかが分かりにくいです。
Progateの学習では、学習ステップとして演習問題が用意されており、演習問題を誤ったとしても
何が原因で間違いと言われているのかが分かりやすいので、学習途中で躓くことでの挫折を防ぐことが出来ます。

######デメリット
**1.全ての講座を受講するにはお金が発生すること。**

Progateには無料版と有料版が用意されています。
この違いとしては、**受講できる講座数**が異なります。

例を挙げると、JavaScriptの講座数は全部で５講座で構成されているのですが
最初の２講座までが無料枠、残りの３講座は月額980円で加入することで受講が可能です。

良い使い方としては、１ヶ月で全ての講座を受講し、解約すればとてもコスパは高いのでまとまった時間で一気に学習するのもよいかもしれません。

**2.Progateだけでは業務レベルまでのレベルまでには達せられないこと。**

Progateの対象者は初学者であるため、各プログラミングの基本を解説してくれます。
裏を返すと学習できるのは、基本のみなのでProgateを全て学習したとしても、
先輩エンジニアの方のレベルと肩を並べるのは難しいです。
学習項目においては、「え、これだけで終わり？本当にこれで満たせているの？」と疑問になるところがあるのも事実です。


そのため、学んだ内容を足がかりにして次のステップにする必要があります。
私は、Progateで学んだJavaとSQLとGitの講座だけでは満足出来なかったので本を使って学習の補填をすることで、当初に比べて出来るようになった技術力の幅を広げることが出来ました。
補足情報として、紹介します。

######(補足)Java
[スッキリわかるJava入門](https://www.amazon.co.jp/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BJava%E5%85%A5%E9%96%80-%E7%AC%AC3%E7%89%88-%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E4%B8%AD%E5%B1%B1%E6%B8%85%E5%96%AC/dp/4295007803/ref=asc_df_4295007803/?tag=jpgo-22&linkCode=df0&hvadid=342518373760&hvpos=&hvnetw=g&hvrand=1743068488808238514&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009314&hvtargid=pla-838775058853&psc=1&th=1&psc=1)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/788536/01854215-40b4-42a1-95df-16d74323ebf0.png)

######(補足)SQL
[スッキリわかるSQL入門](https://www.amazon.co.jp/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BSQL%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E3%83%89%E3%83%AA%E3%83%AB222%E5%95%8F%E4%BB%98%E3%81%8D-%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E4%B8%AD%E5%B1%B1%E6%B8%85%E5%96%AC/dp/4295005096)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/788536/7bbe43c3-4913-0a22-c7f3-5994fb44c48b.png)


######(補足)Git
[いちばんやさしいGit&GitHubの教本](https://www.amazon.co.jp/%E3%81%84%E3%81%A1%E3%81%B0%E3%82%93%E3%82%84%E3%81%95%E3%81%97%E3%81%84Git-GitHub%E3%81%AE%E6%95%99%E6%9C%AC-%E4%BA%BA%E6%B0%97%E8%AC%9B%E5%B8%AB%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86-%E5%85%B1%E6%9C%89%E5%85%A5%E9%96%80-%E3%80%8C%E3%81%84%E3%81%A1%E3%81%B0%E3%82%93%E3%82%84%E3%81%95%E3%81%97%E3%81%84%E6%95%99%E6%9C%AC%E3%80%8D%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/429500524X)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/788536/229524d8-52f0-ae96-0b36-6c032099462f.png)

</div></details>

##AWS
<details><summary>
</summary><div>
私が、参画しているプロジェクトではクラウドサービスとしてトレンドであるAWSを利用しています。
(詳細なプロジェクト概要については、インテック公式にも掲載されている[こちら](https://www.intec.co.jp/case/detail/46.html)を参照ください。)
そのため、社内でもAWSに関する単語が飛び交っており1年目の最初は一種の外来語を聞いているかのようでした。

学習しようと思ったきっかけとしても、一種の外来語である単語をすぐに翻訳したいためでした。

まずは、AWSは何か、何をするために使うのかを知るためにこちらの書籍を読みました。
この本を読むことでAWSとして基本的なサービスであるEC2やRDS,S3などを知ることが出来ました。
こちらを読む上で、インフラ的な知識の単語(オンプレ、サーバー、レイテンシー等)が理解してて当然のように記載されているのでAWSを学びつつインフラ知識も学ぶ上では効率がよかったです。


[図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書](https://www.amazon.co.jp/%E5%9B%B3%E8%A7%A3%E5%8D%B3%E6%88%A6%E5%8A%9B-Amazon-Web-Services%E3%81%AE%E3%81%97%E3%81%8F%E3%81%BF%E3%81%A8%E6%8A%80%E8%A1%93%E3%81%8C%E3%81%93%E3%82%8C1%E5%86%8A%E3%81%A7%E3%81%97%E3%81%A3%E3%81%8B%E3%82%8A%E3%82%8F%E3%81%8B%E3%82%8B%E6%95%99%E7%A7%91%E6%9B%B8-%E5%B0%8F%E7%AC%A0%E5%8E%9F/dp/4297108895/ref=asc_df_4297108895/?tag=jpgo-22&linkCode=df0&hvadid=342458612368&hvpos=&hvnetw=g&hvrand=1353455224866468744&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009314&hvtargid=pla-1031061044592&psc=1&th=1&psc=1)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/788536/f52084e3-e292-459d-8aef-99b12d4ed2ed.png)

</div></details>

##終わりに
本投稿は各項目を学習をする上で、私の中で有効だった学習媒体を紹介させていただきました。

現在は、Javaの言語ではなくJavaScriptを使うチームに異動したためJavaScriptの学習を進めつつ、
AWSにおいてもSolution　ArchitectというAWSの資格取得に向けて学習を進めています！

偉そうに色々書かせていただきましたが、まだまだ私も発展途上状態であるため学習を怠らず邁進していく所存です。
逆に、紹介した学習媒体以外にもオススメな学習方法があれば教えていただけると助かります。

ここまで記事をご覧になっていただきありがとうございました。