サマーインターンの振り返り

## はじめに
　エンジニアを目指す26卒大学院生です。Web系言語の学習開始して1年弱経ち、振り返ってみればいろいろな経験をしました。経験したは良いのですが、の振り返りが足りないと感じたため、ここに記そうと思います。今回は2024年夏に参加したサマーインターンの振り返りを行います。長くなってしまいましたが、最後まで読んでいただけると幸いです。

## 選考
　インターン探しは6月頃に始めました。院の1年生ということもあって研究が忙しく、今年の夏は韓国での国際学会と国内学会が控えていたため、参加できるインターンが限られていました。そんな中で、空いているスケジュールを全て埋めることを目標に、就活軸に合致する企業さんのインターンに手当たり次第応募しました。選考は書類→コーディングテスト→面接の3段階が多かったです。本選考前に面接を経験できたことは大きかったです。
　結果としては、7社の短期インターン(1〜5日)に合格することができました。予想以上に受かったため、この夏はありえないくらい忙しかったです...長期のインターンも何社か応募していたのですが、経験が足りないためなのかさすがに落ちました。

## 学び
　インターンでは様々なことが経験でき、エンジニアとしての視野が広がったことは間違いないです。行って良かったこと(学んだこと)を**6つ**記したいと思います。

### 1. プロのコーディングを体験できた。
　私が普段行っているコーディングとプロのコーディングは全く違うということをインターンで痛感しました。"趣味としてのプログラミング"と"仕事としてのプログラミング"では、考え方が全く違いました。

#### 可読性を意識したコーディング
　チーム開発が主流の現場では、**コードの可読性**が重視されていました。可読性の高いコードとは、単に正しく動くことだけではなく、他人が理解しやすいことを意識して書かれたコードです。プロは、コードを書く際に自分だけでなく他人のために書くことを意識しています。具体的には以下の要素が重要です。

> チームで開発する際、コードの書き方やフォーマットに統一性を持たせる。バラバラな書き方では、他人がコードを読む際に混乱を招く。開発前にチーム内でルールをきちんと定める。コードを読む人は書く人の何倍もの労力を要するため、書く人は時間を掛けてでも可読性を意識してコーディングするべきである。短期的に見ればコストがかかるように思えるが、長期的に見ると結果的に工数を削減ができ、プロジェクト全体の生産性を高めることができる。

> 命名は、コードの理解に大きな影響を与える。例えば、`price`ではなく、`price_yen_without_tax`のように、読む人にあらゆる可能性を考えさせない命名を心がけることで、他の開発者がコードを読んだ際にすぐに処理内容を理解できる。複数の解釈ができる命名や、抽象的な変数名は混乱を招き、コードの理解を遅らせる原因となる。コメントに依存せず、命名だけで処理内容が伝わることが理想である。正しい命名はコード全体の可読性を高め、膨大な工数を削減する。工数の削減は会社の利益にもつながる。

自分の今後の開発スタイルに大きな影響を与える経験となりました。
 
 #### パフォーマンスを意識したコーディング
 　あるインターンは、既存システムの**パフォーマンスチューニング**という、より実務的な内容でした。高負荷に耐えられるように、データベースのパラメータを調整したり、AWSのリソースを変更したりと、システムの安定性と効率を向上させる作業が中心でした。個人開発ではパフォーマンスにまで配慮することがほとんどなかったため、このような観点での開発は新鮮であり、多くの学びがありました。特に、大規模なシステムでの最適化作業がどれほど重要か、そして小さな変更が大きな影響を与えることを実感しました。

 #### 上流工程
　何社かのインターンでは、企画→設計→開発を一気通貫で行いました。単なる技術的な実装ではなく、"ユーザー視点"を意識することが重要でした。また、限られた時間の中でどの機能を優先して実装するかという判断も求められました。実務では、ユーザーに価値を提供し、その対価としてお金をいただくという点で、学生の開発とは大きく異なります。**ユーザーが何を求めているかを理解し、それに応えるプロダクトを限られた時間で作ることが、社会人のエンジニアには求められると思います。**

### 2. 触れたことのない技術に挑戦できた。
　これまでJavaScript、Pythonを中心に使用してきたのですが、インターンでは全く触ったことがなかったPHP(Laravel)、Go、Ruby(Rails)に挑戦しました。短期だったため、基礎的な部分しか触れていないのですが、それでも難しかったです。それぞれの言語やフレームワークには独自の考え方や書き方があり、特にフロントとバックの連携やデータベースの操作などの慣れない部分で苦労しました。普段使用しているNext.jsやFirebase、Supabaseのような、フロントとバックがスムーズに連携できる環境のありがたみを改めて実感しました。

### 3. チーム開発を経験できた。
　チーム開発で一番苦労したのは、**認識の違いをなくすこと**でした。メンバーそれぞれの技術力や開発の進め方が異なるため、分担していたつもりでも、どこかで齟齬が生じ、一社目のインターンでは効率的に開発を進めることができませんでした。そのため、二社目以降のインターンでは、チームメンバーと積極的にコミュニケーションを取り、定期的に進捗を確認するようにしました。互いの作業内容や目的を共有しながら進めることを意識した結果、認識のズレを最小限に抑え、プロジェクトをスムーズに進行させることができました。このインターンを通して、チーム開発におけるコミュニケーションの大切さを強く実感しました。技術力だけでなく、言語化能力・課題解決能力も磨いていこう思いました。
　また、私にとってGitHubは単にソースコードを保存するためのツールとなっていましたが、インターンではGitHubを活用したチーム開発を経験しました。ブランチの切り方やプルリクエスト、コミットメッセージ、イシューの書き方などを実践的に学ぶことができました。

### 4. 会社の雰囲気を感じることができた。
　現場のエンジニアの方々と交流することが多かったため、会社の雰囲気を感じることができました。言語化するのは難しいのですが、7社とも異なる雰囲気でした。会社の雰囲気は対面だからこそ感じることができたので、オフライン開催のインターンに積極的に応募して良かったなと思います。

### 5. エンジニアを目指す仲間と出会えた。
　どのインターンで出会った人も技術・知識面で圧倒的に格上でした。インターンは、そんな「つよつよエンジニア」と1日中一緒に作業し、質問もできる最高の成長環境でした。技術面でリードするのは難しかったですが、私は積極的にコミュニケーションを取ったり、議事録を取ったり、企画を考えたり、プレゼンを考えたりすることで、自分なりにチームをリードすることを意識しました。

### 6. 東京での生活をイメージできた。
　満員電車すぎる満員電車、複雑な乗り換え、どこも行列な飲食店、スシローが1皿150円...東京にあまり行ったことがなかったため非常に良い体験でした。特に満員電車がストレスでした。リモート・フレックスが魅力的に映る理由がよくわかりました。(もちろん、東京は良いところもたくさんあります！)

## おわりに
　サマーインターンに行って一番感じたことは、**「私には技術力が不足しすぎている」** ということです。Web系の学習を始め1年弱が経過し、どこか慢心していた部分がありました。しかし、インターンで出会ったエンジニアたちの技術力や知識の深さを目の当たりにし、まさに「井の中の蛙、大海を知らず」と痛感しました。自分にはまだ見えていなかった世界を知り、学ぶべきことが無限にあると気づかされました。サマーインターンでは、今後の自分のキャリアや目標を見直す大きなきっかけとなりました。自分をさらに成長させる一番の近道は長期インターンだと考えています。そのため、現在は技術力を磨きながら長期インターンに応募しまくっています。
　最後に、インターンの内容をここに記してよいかわからなかったため具体的な社名は伏せますが、7社の企業さん、本当にありがとうございました！！

<br>
 
 <img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3561867/3688a332-e396-db9f-12e0-4a3d59fabfba.jpeg">