エンジニア長期インターンのメリット・デメリット

インターンと聞けば就活のためのイベントをイメージしますが、最近のエンジニア向けの長期インターンには就活のためだけでなく、単にアルバイトとしての側面も持っています。
就活真っ最中の学部3年や修士1年以外も対象としているインターンも増えているので、そんなインターンに参加することのメリットとデメリットを挙げます。

**インターンに参加するか迷っている人の参考になれば嬉しいです。**

# メリット
インターンのメリットは調べればいっぱい出てくるので、他にも調べてみてください！

## シンプルに楽しい
開発や研究、分析などの自分の好きなことを仕事にできるのはとても楽しいです。

今まで勉強してきたことが実際に活かせることの喜びがあります。

開発で自分の普段使っているあのアプリに反映されたり、リアルな大量のデータをもとに機械学習やデータ分析を回すことができるのは会社ならではだと思います。
課題やバグは現場には無限にありますし、自分で課題とその解決策を見つけて実際に開発して解決することもできます。

お賃金を貰って働いているのでもちろん大変なことややらなければならないこともありますが、自分の好きなことでお金を稼げることほど幸せなことはありません。

## 現場で技術を吸収できる
既にあるサービスやアプリケーションのコードを読んだり、運用方法を見ることができるのはその会社と雇用契約を結んでいることの特権です。

当然、開発に参加すれば新しい知識や技術、経験が身につきます。学校の講義や技術書を読むだけでは得られない成長があります。

また、個人開発とは以下の点で大きく異なります。
- チーム開発
    - ドキュメンテーション
        - 自分の書いたコードは自分だけ理解できればいいわけではありません
    - チケット管理
        - 誰がどの機能を担当していつまでに終わらせるのか
    - コミュニケーション
        - 自分の意見を正確かつわかりやすく、リスペクトを持って伝える
- 大規模開発
    - 技術選定
        - 自分の好きな技術が使えればいいわけではない
    - パフォーマンスチューニング
        - 1%の大きさが個人開発よりもでかい
    - スケーラビリティ
        - アプリケーションが大きくなってもそのまま使えますか？

個人開発は自分の好きな言語やフレームワークで好きな機能を実装できますが、チーム開発ではやらなければいけないことがあって、それに対してどう設計するのか、なんの技術を使うかを考えなくてはなりません。個人開発とはまた違うスキルを身につけることができます。

## 大人と話す機会が増える
大半の学生はそんなに大人と話す機会は多くないんじゃないでしょうか。
学生の言うコミュニケーションスキルと社会人のとってのコミュニケーションスキルは異なることを肌で実感できます。

特に目上の人に対して **ネガティブなことを伝える技術** は大事です。「そのアルゴリズムは間違っている」だとか「私はあなたとは異なる意見を持っている」だとか、ちょっと言いづらいけど言わなければいけないことをどう伝えるかは社会人でも難しいと思います。

他にも、時間の限られたミーティングで自分の意見を短い時間にまとめてわかりやすく伝えるだとか、ランチの時間に仕事とプライベートの話をどう聞くのだとか、人世代上の大人と適切なコミュケーションをとる機会をインターンは提供してくれます。

## 基礎を学ぶことの重要性を体感できる
大学の講義では基礎的なことを勉強すること多いでしょう。

「CPUとかメモリなんて知らん！かっこいいAIが作りたいんだ！」という気持ちは十二分にわかります。ですが実際に機械学習のシステムを開発してみれば基礎がいかに大事かわかります。

メモリの制約によって作れるモデルも変わります。CPUの挙動がわからなければ学習の際に並列化して高速にすることが理解できません。数学を学ばなければなぜそのモデルで最適化できるのかわかりません。

インターンで先に応用を学ぶことでいかに基礎が大事かということを実感します。これは大学の講義へのモチベーションにもつながりますし、基礎的なことに対して理解もしやすくなるかと思います。

## いろいろな会社を知れる
インターンで何個も会社を転々とすることは学生にしかできないことです。短期間に多くの企業を知ることができます。

インターンに参加する前は、「会社の文化」とか言われても、何を言っているのかわかりませんでしたが、実際に複数の企業でエンジニアと仕事をすると、仕事の進め方だったり、好きなことだったり、キャリアビジョンだったりが面白いくらい会社によって違うことがわかりました。

社会人になっても転職はできますが、短期間で複数の会社を転々とできるのは学生の間だけだと思います。

## ついでに就活にも効果的
「学生時代に何をしたか」と聞かれたら、インターンでしたことを話せます。特にインターンのような一定の責任を伴うことの方が、自分も注意深く考えて行動しているのではないでしょうか。話を深堀されたとしても、どんな課題に対してどういう仮説をたて、どんな方法でアプローチして、どう言う結果が出たのか、ということを割と簡単に話せると思います。

正直、就活のためだけにインターンに参加することはお勧めしませんが、副次的なものとして就活も有利になるでしょう。

# デメリット
意外とインターンのデメリットは調べても出てこなかったですが、私はそれなりにデメリットはあると思っています。

## 学業が疎かになる
夏休み期間中だけサマーインターンに行くくらいなら問題ないと思いますが、普段の大学がある時期に週3日で1日6時間 (週18時間以上) のようにアルバイト代わりにインターンをしていると学業に割く時間が少なくなります。

- 仕事なんて大学卒業したらいくらでもできる
- 大学生の本分は勉強することだ

こういった意見は妥当だと思います。

楽しくてインターンばかりしていたら留年しました、なんて話はよく聞きます。あなたが稼いだお金は学費に消えていきます。

実際にインターンに稼働している時間以外にも、わからなかった技術を調べたり簡単なコードを書いて練習してみたりと、想像以上に時間を持っていかれます。

また、インターンで学べることは具体性や現実性が高い一方で、大学で学ぶような抽象的で基礎的なことを学ぶことは少ないです。長いエンジニア人生の中で、小手先だけの技術やプログラミングを学ぶよりも、学生のうちは応用が効いて土台となる基礎を学ぶことに時間割いた方が良いという意見も妥当です。

## 一般的な大学生のバイトと比べて同世代の友達ができづらい
これはどんなインターンかにもよるかとは思いますが、大抵は正社員のエンジニアと一緒に働くことが多いと思います。

大学生にとってアルバイトは友達を作る貴重の場所です。居酒屋やカフェでアルバイトをすることと比べれば、同世代の友人を作るのは難しいでしょう(そもそも同世代の人がいないので)。

## 直接役に立たないことを勉強したくなくなる
上のメリット **「基礎を学ぶことの重要性を体感できる」** と矛盾したことを言います。

例えばウェブアプリケーションのフロントエンド開発では、Cを使って0から開発することよりもモダンなフレームを使って開発することが多いです。

就活用のインターンだと、人事の方が他のインターン生と繋いでくれたりもします。が、あまり多くないと個人的には思います。

そうなれば、「そのフレームワークに対する理解を深めたい」「より多くのフレームワークやライブラリを使いたい」というモチベーションは自然です。いまさら通信プロトコルだったりポートの解放だったり、細かいことは全部フレームワークがやってくれるんだから勉強する必要ないじゃん！と思ってしまいます。

大学の講義の必要性を感じなくなる人も一定数いると思います。これが良いか悪いかは置いておいて、この思想のもとで、大学で勉強するのことはストレスになります。

# まとめ
インターンにはメリットとデメリットが両方あります。
みんなやっているから自分もやるのではなく、自分の思想や興味のあること、今後のエンジニア人生も考えた上で参加するかどうかを決めるのが良いと思います。