未経験からwebエンジニアになった話(2023年)

## はじめに
私はソフトウェアエンジニアを目指し本格的にプログラミングの勉強を開始して、約一年弱経った頃、自社兼受託開発web系企業で働かせていただくことに決まりました。
その会社の技術スタックとしてはGolang, Next.js, GCP, AWS etc.です。
勉強のペースに関しては差が激しく、全く手をつけられなかった時期もありましたが、最終的には自分のペースでコツコツ毎日学習できるような継続力、自走力がつきました。
なぜこのような力がついてきたのか。
これは単純で、勉強していくうちにだんだん言語そのもののロジックが分かるようになったからです。
他の言語に移行しても考え方の土台ができ、自分で考えてコードを書くことが楽しい、面白いと感じることができた経験が大きいです。
## 自己紹介
私は現在２５歳の社会人です。
社会人３年目のサラリーマンをしており、接客、事務の分野となります。
日々いろんなお客様の対応をし、理不尽なお客さんだと心が折れかける時もありますが、３年目ともなればスルーする能力、慣れも出てきて精神的に強くなったなと感じます。
オフラインでの仕事で私よりもひとまわりふたまわり上の上司と毎日コミュニケーションをしているおかげか、コミュニケーション力は確実に上がったと言えます。
報告、連絡、相談の大事さを痛感し、些細なことでも発言していくスキルを得ました。
社会人一年目の冬にプログラミングの勉強を始めて[Happiness Chain](https://happiness-chain.com/)というプログラミングスクールに通いました。
およそ一年弱経ち、卒業に至ります。
時間でいうと約800時間ほどプログラミングの勉強をしていることになります。
それでは私が今までに学んだことを簡単に紹介していきます！
## 学んだこと
### Markdown
githubで今後日報を書いていくために学びました。
ちなみにこのQiitaもmdで書かれております。

### ブラインドタッチ
寿司打をやり込みました。


### web技術の基本
基本的なweb技術(ネットワーク系)について学びました。(ステートフル、ステートレス、リクエスト、レスポンス、クッキー、プロトコル、ポート番号etc...)

### vim
サーバーの構築の際などでvimしか使えない環境がある。
またなるべくマウスを使わずに開発することで、作業効率のアップが見込めます。


### Linux
エンジニアになるには必須です。
最初はマウスを使わずにフォルダ、ファイルを作れることにとても感動したのを覚えています。


### Git, GitHub
これもエンジニアになるためには必須のものです。
チームでの開発経験ができなかったため、コンフリクト解消経験に関しては乏しいものがありますが、自力でキャッチアップできるものはがんばりました。


### progate etc.
フロント、バックエンドの言語をとりあえず広く浅く学んでみて全体を見れるような努力をしました。
### Docker
Dockerを用いて、Rails 6系とMySQL8 で開発環境を作ることに挑戦しました。
この課題はなかなか難しかったですが、Dockerの基本的な環境構築を自分で作れる様になったとかなりの自信になりました。
この課題のアウトプットを過去にしておりますのでよかったら読んでみてください → [【Docker】Rails 6系 x Docker x MySQL 8で環境構築してみた](https://qiita.com/bloom__fu/items/560008fa5e8e69243fce)
### Ruby
チェリー本を読んでまずrubyの全体像を掴みました。
全て覚えることは難しいと思うので、自分の頭の中でインデックスを作り、つまづいた時に確かあそこに書いてあったよなと見返せるようにしました。
あとはスクールでの課題でどんどんアウトプットしました。かなり難しい課題もありましたがなんとか乗り越えました。
自分で考えてコードを書き、実際の動作を確認するという作業が初めてで、うまく動いた時とても嬉しかったのを今でも覚えています。
エラーが出て、解決するまでの工程でなかなか大変だったなと感じたこともありましたが、解決し、うまく動いた時の嬉しさの方が勝りました。
### SQL
スッキリわかるSQL入門 を読みひたすらにドリルをこなしていきました。
後のRails学習で作成したTwitterクローンアプリで実際にdockerコンテナに入り、データベース抽出等を経験しました。
### REST
シンプルなWebアプリケーションから大規模なwebアプリケーションまで主にRESTでの設計が使われています。
 Webアプリケーション開発の基礎になると思います。
### Ruby on Rails
udemyや参考書を活用してかなりのボリュームの量をインプットしました。
そしてTwtitterクローンの作成に取り掛かりました。
こちらはDocker環境で行いました。
作り上げた機能としてはざっくりと以下の通りです。
1. ログイン周り機能
1. ユーザー詳細ページの作成
1. ツイート作成機能
1. コメント作成機能
1. 画像アップロード機能
1. omniauth(Git Hubログイン)
1. いいね機能
1. ユーザーフォロー機能

こちらが今までの学習において1番の難関でした。
ざっと3ヶ月ほどこの課題に取り組んでいました。
とても私にとって成長できたと感じる課題であるとともに、自走できる力が身についたと実感しております。
### JavaScript, TypeScript
JavaScript Primer等でインプットした後スクールでの課題に挑戦しました。
生javascriptでアウトプットすることはコードが冗長になり難しいですが勉強になりました。個人的にはRubyよりもこちらの方がロジックじみていて好きだなと感じました。
加えてTypescriptを勉強しました。
型をつけることによってコンパイルエラーが出てくれることは非常にありがたいですね。
Rubyを学んだあとだったため、新しい言語でインプットする際、基盤があり習得しやすかった点がメリットでした。
### React
javascriptで書いたコードをReactで書き直しました。
冗長性がなくなり、とてもありがたみを感じられました。
最初はどこが便利になっているのか、そもそも覚えるロジックが増えたのでは？と思っていましたが、JavaSciptの基礎が疎かになってしまっていたことが原因にあり、再度JavaSciptをしっかり勉強しました。
Railsのフレームワークの概念(MVC)とは全く異なり、コンポーネントベースであるため自身で機能ごとにファイルを分けたり、ディレクトリ構成を考えていくというところは一朝一夕には身に付かない部分ではありますがSSG, SSRの理解などとても興味深い分野でした。
### Golang
こちらも今まで同様インプット、アウトプットです。
JSONログをGoの構造体に変換してデータベースにINSERTしたりしました。
さらにはGolang×MySQL×GinでのDocker環境構築をしたりしました。
## 終わりに
Happiness Chainというスクールは自走力がつく反面、勉強を始めた頃は結構きつかったです。
なんでもそうですがやはり最初はわからないことが一面に広がっている状態でしたが、コツコツ勉強しているうちに少しずつ点と点が繋がっていき、見えるものが変わって行きます。
私はこのスクールに通い日々コツコツ勉強してとても良かったと思います。
初めは独学で勉強しておりました。
ローカルでの環境構築で詰まっており、今スクールの経営をされている[ゆうだいさん](https://twitter.com/yudai_on_rails?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor)に出会い解決してもらいました。
独学で勉強するのにはやはり限界がありました。
スクールに通いだして、王道のロードマップが見れる点、わからないところを質問できる点、現場で働くプロにコードレビューをしていただけるという点がとても良かったです。
素直に最初からプロの意見を聞くことが1番の近道です。
これを継続できたことでweb系企業さんで働くというスタート地点に立てました。
自分のやりたいことで仕事ができるというチャンスをいただけたのでこれからも愚直にコツコツ勉強し、プログラミングの面白さも忘れず頑張っていきたいと思います。
最後までお読みいただきありがとうございました。