未経験文系大学生が1年半で技育展優秀賞を受賞するまで

初めまして！とある文系大学に在籍するエンジニアです。
**私はこの度技育展2022の「開発/スキル支援」部門で優秀賞を受賞しました🎉**
今回は私がプログラミングを始めてから如何にして1年半で技育展優秀賞を受賞できるまでに成長したかを紹介したいと思います。そして、少しでもこの記事が誰かの励みになり、可能性を広げるものとなることを願っています。

参考
https://talent.supporterz.jp/geekten/2022/

#### 想定する読者
- 文系大学在籍
- プログラミング始めたて
- エンジニアを目指しているがいまいち成長を実感できていない
- どのように学習していいかわからない

## 1年半で行ったアクション
まず初めに私が1年半で取り組んだアクションを時系列的に紹介します。
- 2021/4: 42Tokyo入学

https://42tokyo.jp/

- 2021/7 ~ 2022/1: 毎月ハッカソンに出場

https://talent.supporterz.jp/geekcamp/

- 2022/1 ~ 2022/3: 毎日技術ブログを書く & 朝活で技術書を読む
- 2022/1 ~ 2022/7: フロントエンドのインターンで業務経験を積む
- 2022/6 ~ 2022/9: 技育展の作品を作成

### 42Tokyo入学 (在籍期間1年)
#### 学び: エンジニアとしての基礎体力がついた
私がプログラミングを始めたきっかけは42Tokyoというエンジニアの養成機関に入学をしたことです！42Tokyoの特徴として「学費完全無料・経歴不問・教師不在」があります。
つまり事前知識や経験は一切必要なく、やる気と時間を費やしてひたすら課題を解き進めるといった学校です。
確かにここでの課題は辛かったです。特に教えてくれる人がいない分、正解にたどり着くまでの道のりが他のプログラミングスクールなどと比較をしても倍以上はあるでしょう。
しかし、
- 詰まったらまずはググる
- 15分考えてわからなかったら友人に質問する
- レビューは厳しく丁寧に礼儀をもって行う
- 課題の意図を正確に理解して要件を洗い出す

このようなことは、エンジニアとして仕事をする上で普遍的に必要な内容だと思います！その意味でも42Tokyoでの学びの環境は非常に筋が通っており、自分自身のエンジニアの基礎を作ってくれた教育機関だったといえます。

#### ここで感じていた課題
42Tokyoで学んでいた自分が感じた課題として、「**アプリを1から作ったことがない不安**」がありました。42Tokyoでは主にコンピュータ・サイエンスを学ぶため、言語もC言語でモダンな技術に触れる機会がなかなかありませんでした。そこで次のステップとして、モダンな技術に挑戦してアプリを一から作り上げたいという気持ちが湧いてきました。そこで取ったアクションが「毎月ハッカソンに出場する」です。

### 毎月ハッカソンに出場する
#### 学び: アプリを作りきる力がついた
私は2021/7 ~ 2022/1まで毎月ハッカソンに出場しました。
さらに分解してそれぞれのハッカソンで如何に成長したかをまとめます。
- 7 ~ 8月: **野良で参加をして1行もコードを書くことができなかった**
	- 次は少しでもコードを書きたい！！！ -> Reactを勉強する
- 9月 ~ 10月: **Reactでなんとかアプリを作り切ることができた**
	- 次は入賞するレベルになりたい！！！ -> さらにReactを勉強する
- 11 ~ 12月: **バックエンドに挑戦して始めて入賞🎉**
	- しかし、この時はチームメンバーが強かった -> 自分の仲間を集めてもう一度挑戦
- 2022年1月: **チームを引っ張る立場で入賞！！！** -> 実力で結果を残せた

このように私は毎回のハッカソンに参加するたびに悔しい思いをしては努力をしてリベンジするという繰り返しをしていました。「悔しさ」は大きな原動力になると思っています。
また、私たちは恵まれており自分の好きなタイミングでハッカソンに出れる環境が整っています。
(サポーターズ主催の技育キャンプはほぼ毎月開かれています！)
こんな素晴らしい環境使わない手はありません！
初めは怖いと思います。正直私も初めて参加した時は怖すぎて前日にドタキャンしようか迷ったほどでしたwそして結果1行もコードを書けませんでした。悔しかったです、本当に。でもその悔しい！という経験ができることそのものが貴重だと思っています。積極的にチャレンジしましょう！そしてボコボコにされてまたやり返しましょう！その繰り返しです！

#### ここで感じていた課題
2022年1月、ハッカソンで入賞して一つ目標を達成できた私でしたが、大きな課題を感じていました。それは「自分の知識って薄っぺらいなぁ」というものです。Reactでアプリを作れるようになった。でも、Javascriptのことはよく理解していないし、どのような仕組みでブラウザがレンダリングされているのかも知らない。ましてや、ネットワークのことなんてまっさら。そこで取ったアクションが「毎日技術ブログを書く & 朝活で技術書を読む」です。

### 毎日技術ブログを書く & 朝活で技術書を読む
#### 学び: 体系的にエンジニアリングの知識を得る
私は3ヶ月間毎朝8時に起床しては、友人と朝活をして技術書を読みその日に学んだことをTIL(Today's I Learned)としてまとめることをしました。その時の内容が以下のリンクです。
https://taisei-13046.github.io/TIL_pages/posts
朝活で読んだ技術書は
- マスタリングTCP/IP
- オブジェクト指向でなぜつくるか
- りあクト！
- ドメイン駆動設計入門
- リーダブルコード

マスタリングTCP/IPやリーダブルコードはエンジニアなら誰でも知っておくべき知識が詰まっていて読みながら感動していました！
また、TILではReactの公式ドキュメントを解読したり、HTML, CSS, JSについてMDNを読んで理解したり、今でもやっていてよかったなと思う内容ばかりでした。
私はこの取り組みを通じて一つ大きな学習のコツを掴みました。
それは「**アウトプットすることで知識の定着を図る**」というものです。
一見当たり前に聞こえますが、みなさん実践できていますでしょうか？
コードを書いてアウトプットすることは日常的に行っているかもしれません。しかし、体系的に学んだ内容こそアウトプットして人に説明をして定着させるべきです。また、文字にして記録することにより自分自身の学びを振り返ることができるようになり、理論立てて学びを得ることができるようになります！

#### ここで感じていた課題
ここまでの取り組みで私はある程度の技術力がついたと自負していました。しかし、それはあくまで個人開発でのレベルです。一生個人開発をする訳ではなくエンジニアとして業務にあたる必要があります。そこで私は次のステップはインターンで業務経験を積むことだと考えました。

### フロントエンドのインターンで業務経験を積む
#### 学び: 実務レベルのエンジニアリング力
私は2022/1 ~ 2022/7までの7ヶ月間フロントエンドのエンジニアとしてインターンを行いました。
ここでの学びは多すぎて挙げ切れないのでいくつか抜粋します。
- 保守性を考えた設計とコード品質
- 仕様書やデザインカンプを忠実に守りながらサービスを作っていく
- レビュワーのことを考えたレビュイーとしての振る舞い

一つずつ説明します。

###### 保守性を考えた設計とコード品質
これは初め目から鱗でした。個人開発では作ったら終わり、その後なんて知らない！という感覚でコードを書いていましたwしかしサービスを作るということは当然ユーザが存在して、ユーザが求める価値が変われば機能は変わりコードは容易に変更されます。そのため私たちは**いついかなる変更が来ても対応できるようなコードを書く必要**があります。

###### 仕様書やデザインカンプを忠実に守りながらサービスを作っていく
業務を始めてすぐの頃デザインカンプを見てCSSを書いていた時、「1pxくらいずれててもいいだろ〜」と少し思っていました。昔の自分に説教をしたいです。仕様書は絶対です。デザインもデザイナーの方が指定した位置から1pxでもずれてはいけません。サービスを作る上で大事なことを学びました。

###### レビュワーのことを考えたレビュイーとしての振る舞い
これもめちゃくちゃ大事だと思います！業務となれば当然レビューのフローが発生します。特にエンジニアのレビューはテキストベースが多い分、相手に意図を伝えるのが難しかったり、曲がった捉えられ方をしてしまう時があります。そのため、丁寧なコミュニケーションはもちろんのこと、レビュワーのことを考えた配慮が必要です。
私が普段レビューしてもらうときに心がけていること
- PRの概要、修正内容、デモ動画、テスト結果を記載
- 1つのPRで複数の実装をしない
- 注意が必要なポイントはセルフコメントをして伝える
- 言葉は丁寧すぎるくらい丁寧にする

このように、業務経験を経てエンジニアとして働く上で必要な知識、心構えが身につきました。
正直、業務経験が一番早く確実な力がつくと思います。長くエンジニアとして活躍してきた先輩から貴重なレビューをもらえるだけでなく、実装の相談もできます。当然責任が伴うため辛いことも多かったです。しかし、それ以上に得た経験は一生大切にしたいと思うものでした！

### 技育展の作品を作成
そしてやっと技育展の準備を開始します!私は以上のアクションの集大成として技育展を位置付けていました。
サクッと作ったサービスの紹介をします！

#### アプリ概要
コミュニティ(会社、サークル)のなかでペアプロをしたい人同士がマッチングをし、学び合いを促進するサービス

- マッチング → チャット → ビデオ通話まで全て一気通貫して行える
- マッチングポイントを導入して、ドライバーとナビゲータの数のバランスを調整
- 過去のペアプロ履歴からコミュニティ内でランキング化

#### チーム構成
4人 (フロント/バック/デザイン)

#### 使用技術
フロントエンド: React, Typescript
- Apollo Client (+ GraphQL)
- React Router
- Twilio SDK
- React Hook Form
- Vite

バックエンド: Typescript
- Apollo Server
- Docker
- Postgresql
- Heroku


#### 発表動画
https://drive.google.com/file/d/1XDK-DhQJ8NA0vw0oksu-XEL9zboQu_Fi/view?usp=sharing

#### githubレポジトリ
https://github.com/42supporters-hackason/pair-pro

正直、優勝賞を受賞した瞬間は飛び跳ねました！1年前2021年の技育展を見てエンジニアに憧れを持ち、「来年は出てやる！」という思いで努力してきました。もちろん優秀賞を受賞したことも嬉しかったですが、自分の努力が間違ってなかったと実感できた瞬間だったので報われた思いです。

## まとめ
以上私が1年半の期間で取り組んできたことを全て紹介しました。
冒頭でも述べた通り、この記事が一人でも多くの読者の参考になればと願っています。
私自身まだまだ未熟です。これからも精一杯努力します！
そして今後ともにエンジニアとして日本で活躍される皆さんと一緒に素晴らしいサービスを作っていけることを楽しみにしています。

https://twitter.com/pairpro2022

https://github.com/taisei-13046