文系大学生からインターンのすゝめ

## 目的
1.プログラミングの勉強を始めた学生にインターンの良さを知ってもらう
2.具体的なインターンの内容を知ってもらう
3.インターンに積極的に参加してもらう

## 自己紹介
簡単に自己紹介しておきます。

高校2年の秋の偏差値は28でした。そこから猛勉強の末、早稲田大学に入学。今年度からゼミで計量経済学を学びます。
大学に入学当初は大手に就職を考え、公認会計士などの資格を取ろうと思っていました。しかし、もっとやりたいことをやりたいと思いプログラミングをはじめ、卒業後は旅をしながら働こうと思っています。

これまでVue、Firebase、PHP、Laravel、Wordpress、Shopifyなどをやってきました。
現在のインターンでやっていることは下記で述べます。

## なぜインターン

僕もそうでしたが、Twitterを見ていると多くの初学者がプロゲートやドットインストールを繰り返し行っています。それらはプログラミングってどんな感じかを掴むものとしてはいいかもしれませんが、実際に業務を行えるレベルにもっていくことはできません。あるいはスクールに行くことを考えている・行っている人も多いかもしれません。

しかし、スクールや独学だけではバイトもする必要があったり、プログラミングの時間が減るあるいは間延びしてしまうということがあると思います。結果的にプログラミングを仕事としてできている人は少ないという印象です。

僕たち学生は**「長期インターン」**という**最高のスクール**で、**給料**を頂いて、**実践できる**チャンスがあります。
思いきってバイトを辞め、夏休みの１ヶ月間をプログラミングに注ぎ、インターンに応募した方が結果的には早い成長速度で実務を積むというやり方もいいんじゃないかなと思います。

具体的には長期インターンにはどのようなメリットがあるのか？
長期インターンの具体的なメリットを下記に挙げました。もちろんこれだけではないと思います。

- 成長プロセスを知ることができる
- コードのレビューをしてもらえる
- コピペでポートフォリオを作っている人と差をつける
- 実績が積める
- 自分のつくったものに対してのユーザーからの意見を聞ける
- 技術以外のことも学べる
- 給料をもらえる
- (会社によっては)リモートで働ける

## 現在のインターンの業務内容

実際にどんな業務を行っているのか気になる方もいると思うので、実際の業務内容をいくつか紹介します。
現在はReact × React Native × AmplifyでWeb・ネイティブの開発を行っています。基本的にチーム全員でバックエンドとフロントエンドの実装を行っています。僕は比重的にはバックエンドを多めに作業しています。

### 具体的に行った実装

#### Googleカレンダー連携

タスク管理機能の一つとしてGoogleカレンダー連携を行いました。下記は大まかな実装の流れです。

①スキーマ作成 - GraphQLを利用
②Google認証 - [OAuth](oAuth:https://developers.google.com/my-business/content/implement-oauth?hl=ja)で実装
③予定を取得 - [ReactでGoogle Calendar連携を超簡単に実装する方法](https://qiita.com/k8m/items/ebf0b7a8b3c83260c842)を書いているのでよければ試してみてください
④データベースへ保存 - DynamoDB、GraphQLを利用
⑤申請 - 本番環境で利用するためにGoogleに申請を行いました。英語でやりとりだったので、大変でした...

#### インフィニティスクロール
Twitterやインスタなど膨大なコンテンツがスクロールで永遠に出てくるのがインフィニティスクロールです。
ページネーションとは違い、インフィニティスクロールはスクロールだけですべてのコンテンツを閲覧できます。また、データベースから全件取得する通常のスクロールとは違い、指定の件数ごとに取得するため初期動作が早くなります。
こちらは機能改善であったため、現状のキャッチアップ→実装という流れで行いました。
インフィニティスクロールの実装方法も記事として書く予定です。

#### 調査
Googleカレンダー連携やインフィニティスクロールも調査は行っています。ところがそれらとは違い、Amplify×Lambda×SESの実装ではググっても実装例がありませんでした。そのため、ドキュメントを読みながら下記のような手順で実装しました。

①SES単体でのテスト - まず仕様を掴む
②Lambda×SESでテスト - ここまではググっても出てきますが、応用するにはドキュメントを読む必要があると思います。
③Amplify×Lambda×SESのテスト - ここまでで得た知見を応用

このように、ドキュメントを基に段階を追って調査・実装を行うこともあります。

## 求められる力
必要な力や求められる力は会社によって異なります。その中でも共通して大切だと思ったことを下記に挙げました。
特に質問力やコミュニケーション力は今日にでも高められる能力だと思うので、意識してみてください。

#### 自走力
- はじめはある程度サポートは必要かもしれません。しかし、基本的には自分で調べて、トライアンドエラーを繰り返して、実装する。すぐに人やネットに頼らないということは自己成長のために重要であり、会社から求められることでもあると思います。

#### 読解力
- TwitterやQiitaではググる能力が一番重要とよく言われます。それは半分正解で半分不正解だと思います。
ネットには間違っている情報や古い情報が多く存在します。大学のレポートと同じように、まずはもっとも正しく正確な一次リソースであるドキュメントを読めることが大切です。
- 特に英語のドキュメントを読めるようになると最新の技術にも挑戦できるようになります。Google翻訳も活用すれば英語が苦手な方でもある程度は読めると思います。

#### 質問力
- もちろんドキュメントを読んだり、検索して、すべてを１人で実装することが難しいときもあります。そういった時には質問することも大切です。
質問する時には目標、現状、問題点を整理が必要です。聞きたいことを正確に聞けるだけでなく、回答者の時間をできるだけとらない、自分の思考を整理するという意味でも重要です。

<details><summary>インターン先の質問テンプレート</summary>
<div>
#### 概要

#### 環境

##### App Branch

##### amplify cli version

##### expo cli version

#### エラー表示、コンソールログの内容

##### エラーメッセージ

```
コンソールのエラーログ
```

#### 関連するissue
issue: #番号

#### 解決策

#### その他にあれば
</div>
</details>

#### コミュニケーション能力
- 自分のタスクの状況を伝えることができ、報連相ができること。
- リモートワークだけでなく、出社する場合でも基本的にはチャットでやりとりするという会社もあります。そのような場合はチャットでのコミュニケーション能力が非常に重要になってきます。
- また、会話に関するリンクも一緒に送るなど細かい気づかいも大切です。

## 最後に

全てのインターンが良くて、独学・スクールが悪いということではありません。ただ、学生にはインターンという機会があり、僕自身はその中で大きく成長できました。
なのでぜひ積極的に応募してもらえたらいいなと思います。そして、自分自身も技術以外の面も含めてまだまだ成長が必要なことは多く、情報共有しながら高め合っていけたらいいなと思っています。

また、友人が１ヶ月でインターンに参加できるようになりました🎉
１ヶ月で何をやったのかなどインターンにつながる情報共有ができると思うので、よかったらコメントorTwitterのDMにご連絡ください💌

<br>
- Miyata Koki -
O:inc.でAmplify×React×React Nativeを使用して開発しています。大学のゼミでは統計学をPythonで行っています。
インターンやゼミで学んだ情報を発信していくので、フォロバもしますのでぜひこちらのアカウントのフォローお願いします！