[初学者向け]プログラミング学習開始〜4ヶ月間の振り返り＋α

#概要
この記事はプログラミング学習開始から現在までの4ヶ月間で読んだ記事や本,利用したサービス等をまとめたものになります。また実務に伴い、必要になった技術スタックも段階ごとに記していきます。
ここでいう技術スタックとは「**プログラミング言語・フレームワーク・ツール・ソフト**」等々幅広いものを指します。

#はじめに
現在、プログラミング学習を始めてから4ヶ月・Webエンジニアとしてインターンを始めてから3ヶ月。
「何がわからないのかわからない」という完全な初心者状態から、先輩エンジニアに聞きながらもなんとかタスクをこなせるようになりました。
この数ヶ月間何をしてきたのか振り返りたいと思い、備忘録もかねてQiitaに書き残します。

「未経験からWebエンジニアになりたい！」という方や、「Webエンジニアの実際の業務内容を知りたい！」という方の参考に少しでもなれば幸いです。


#0~1ヶ月目

##Progate
みなさんおなじみの[Progate](https://prog-8.com/)。プログラミングを始めたばかりの方には馴染み深いのではないでしょうか。
とりあえず一週間でHTML、CSS、JavaScript、jQuery、Ruby、Ruby on Rails（以下Railsと表記）、Command Line、Git、SQL、Sass辺りを終わらせました。
個人的には「プログラミング楽しい！」と感じるきっかけとして始めるのには最適だったな、と思います。

まだプログラミング未経験でProgateなんか知らない！という方は以下の記事をご覧ください。
[【学習】プログラミング初心者向け・Progate活用法](https://qiita.com/solare_tech/items/8833e641be178be8703c)

##改訂4版 基礎 Ruby on Rails

![41i-C0HXywL._SX390_BO1,204,203,200_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416075/bd9c3827-1bbc-c58a-bfbf-b07306bb6992.jpeg)
[改訂4版 基礎 Ruby on Rails](https://www.amazon.co.jp/%E6%94%B9%E8%A8%824%E7%89%88-Ruby-Rails-IMPRESS-KISO/dp/429500460X/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=1580379680&sr=8-1)

一通りProgateをやった後はこの参考書を読みながらブログスタイルのサイトを作成しました。

Rubyの言語についてやRailsのフレームワークについてまるっと学べるので、**Railsをコード書きながら学びたい人にはおすすめ**かなと思います。

2周するのに約2週間かかりました。

##Ruby on Rails チュートリアル
プログラミング未経験からRailsを勉強していくと、たいていの人がたどり着くであろう[Railsチュートリアル](https://railstutorial.jp/)。

知らない人向けに簡単に説明すると、**公式サイトを見ながらTwitterクローンのサイトを作ろう！**というチュートリアルです。
多くの人が使っているチュートリアルなので、**ハマりポイントもググれば解説がたくさん出てきます**

ただ、途中でインターンに行き始めた会社がPHPでLaravelを利用していたため、途中で中断。
**Railsを使ってポートフォリオを作り転職したい！**という人が自分のポートフォリオを作る前にやっているのが多い印象です。


#1~2ヶ月目

##Twitterクローン作成
この時期から、自社開発と受託開発をしている会社でWebエンジニアとしてインターンを開始しました。

開発ど素人の状態でインターンを開始したため、課題としてまずはTwitterクローンを作ってくださいと言われましたが、いきなり**「Dockerで環境構築してSequelでデータベースみながらやってみて！」**と先輩エンジニアに言われた時は、~~この人何言ってんだろうと思いました~~（嘘です。すみません）

言われるがままに、環境構築の手順書といくつかのQiitaの記事を渡されTwitterクローンの作成を開始しました。

新しく触れた技術？はこんな感じ


- PHP
- Laravel
- MySQL
- Docker
- Sequel Pro
- GitHub
- (Vue.js)

**PHP＆Laravel**の基本に関してはUdemyというサービスの[【2日でできる】はじめての PHP 7 x Laravel 6 入門](https://www.udemy.com/course/php7study/)で学習しました。初学者にも分かりやすくてオススメです！

**Docker**に関してはこの記事を参考にしました。
[いまさらだけどDockerに入門したので分かりやすくまとめてみた](https://qiita.com/gold-kou/items/44860fbda1a34a001fc1#docker-registry)
ただ、いきなり理解するのはとても難しい内容だと思うので、Dockerを使いながら、随時調べるのがベターな学習方法かと思います。

そしてチーム開発には欠かせない**GitHub**。
これに関しては、ここら辺を読んでおけば大丈夫かと。

---
[GitHub 入門](https://qiita.com/ay3/items/8d758ebde41d256a32dc)
[Gitのブランチモデルについて](https://qiita.com/okuderap/items/0b57830d2f56d1d51692)
[Gitを使ってPull Requestを投げるまで](https://qiita.com/takamii228/items/80c0996a0b5fa39337bd)
[git初学者の初めてのチーム開発で気をつける事の備忘録](https://qiita.com/shh-nkmr/items/fde133cbdfa5f0092be1)

---


**MySQL**の基本的な使い方はこの記事を参考にしました。
[【MySQL超初心者向け】これを覚えれば初心者になれる基本コマンドとその意味](https://qiita.com/FumiyaShibusawa/items/2e3b30ceedeafff0bce2)

プログラミング全般に言えることだと思いますが、**勉強してから実際に手を動かすより
手を動かしながら必要な知識を身につけていくのがベスト**だと思います。

実際にLaravelを使ってTwitterクローンを作る時は以下のQiitaを参考にしました。（~~ほぼ写経しただけ~~）
[【全6回】Laravel5.8でTwitterっぽいSNSツールを作る](https://qiita.com/namizatop/items/d79017aa474966244073)

簡単に作成過程と機能を紹介しておきます。

---
第1回　DB設計とMigration
第2回　Seeder->ログイン/新規登録
第3回　ユーザ関連とフォロー機能
第4回　ツイートのCRUD機能
第5回　ツイートのCRUD機能 編集と削除
第6回　コメントといいね機能

---


最終的に完成したコードはここです
[https://github.com/gattyan27/twitter-clone](https://github.com/gattyan27/twitter-clone)

Vueを使ってTwitterクローンを作成してみたりと色々試行錯誤していたため、Twitterクローンに1ヶ月費やしました。。。

#2~3ヶ月目

##自社サービスの開発
プログラミングを始めてから2ヶ月して、自社サービスの管理画面の機能追加やバグ対応を行うようになりました。
ここら辺から実務としてプログラミングを行うようになり、今までとは明らかな違いを感じながら開発を行っていました。

大きく感じた違いは主にこんな感じ

---

- **複数人で開発するので機能ごとにブランチを切って開発する必要がある**
- **とりあえず動くコードではダメ。他の人でも読みやすいように書く意識が必要（コーディング規約やコメントの残し方、メソッドの共通化etc...）**
- **なんのためにその機能を実装するのかを常に考える（目的を意識して開発をする）**

---


プログラミングを始めてから早い段階で実務に入り、この違いを体感できたのは本当に良かったと思います。


#3~4ヶ月目

##受託開発
現在も従事している受託案件に、この頃から携わっていました。
フレームワークがCakePHPだったので少し勉強する必要はあったのですが、割とすんなり開発し始められたと思います。

また環境構築は環境構築はVagrantで行いました。（個人的にはDockerで環境構築するほうが好きです）

#最後に
自分でも何を書きたいのかよくわからない記事になってしまいましたが、振り返ってみると学びの多い4ヶ月間だったと思います。
プログラミングを始めたばかりの頃は「何が分からないのか分からない」状態だったのですが、ようやく「このことについて分からない」状態になれたため、自分で調べながら解決できるようになりました。

プログラミングは始めた時が一番難しくて大変かと思いますが、続けていくとどんどん楽しくなってくるので、初学者の方は、ぜひがんばって継続して欲しいです！