学生/社会人エンジニアインターンの心構え

# はじめに
この記事は、IT企業で長期インターンをすることを勧めるとともにインターンをするにあたって使えるtipsをまとめてあります。

僕がABEJAで長期インターンを始めることにしたのは、[元インターン生の佐藤さんの記事](https://qiita.com/TodayInsane/items/5a04b5b1cf846a6d11d8)を読んで、技術に情熱的な人たちが集まる環境に身をおきたいと思ったからです。実際ABEJAは本当に刺激的で、好奇心旺盛で優秀な方々とたくさん交流ができ、社会人としてどこを目指していけば良いのかが分からなかった時も、社員さん各々が目指す方向性を垣間見て参考にすることができました。海外で就職を考えていたことを伝えると、メンターをインド人の凄腕エンジニアにしてくださり、至る所で配慮していただけました。
また、就職活動でもABEJAで長期インターンをしていたことが評価され、GAFAMの一社から内定をいただくことができました。

ABEJAで長期インターンしていたことは、ポジティブなことしかなかったのでこの経験をシェアしたいと思い今回書くことにしました。

構成はこんなです。

- 僕がインターンを始めるまで
- インターンを始めるメリット
- インターンを始める時の注意点
- 機械学習に関するおすすめの参考書・サイト
- インターン中のTips
- インターンの見つけ方

# 僕がインターンを始めるまで
本編と関係ないので、読み飛ばしてもらって大丈夫です。

私は、現在東京の大学院の修士2年生で、学部は京都でコンピュータサイエンスを学んでいました。長期インターンを始めようと思ったのは、大学３年生に行ったアメリカでの交換留学がきっかけです。

アメリカの大学の勉強はとても大変で、大学の図書館は24時間空いていて、みんな平然と夜の2時まで勉強をする生活を送っていました。留学前まで部活や飲み会一色の人生を送っていたので、衝撃的でした。僕もなんとか付いていこうと部活以外の時間を図書館での勉強に費やしましたが、テストでは平均点しか取れませんでした。世の中にはすごい人がたくさんいるんだと初めて知り挫折しました。そんな中で、エンジニアとしてアメリカで働く日本人とたくさん交流することができました。みなさん活き活きとしていて、超競争社会で海外のエンジニアと闘っている姿に憧れを覚えました。そんなきっかけから海外で働くことを視野に計画を立て出しました。調べていくと、海外のIT企業は新卒でも即戦力を求めているらしく、目を見張る実績がない限り、インターンシップをこなした個数や期間が指標の一つとして使われていることが分かりました。帰国後、京都で自分が楽しそうなインターンシップを探したものの見つからず、東京にはたくさんインターンシップがあることがわかったので、東京の大学院に進学することにしました。

そして、ABEJAに至る感じです。


# インターンを始めるメリット
言うまでもなく、たくさんメリットがあります。

* お金がもらえる
* スキルが身に付く
* 就職活動が有利に進められる


エンジニア系のインターンシップであれば、普通のアルバイトと比べてフレックスな企業が多いと思うので、遊びや部活等と両立しやすいです。
将来像を描きやすくなるメリットもあります。僕は漠然とエンジニアとして働くことは決めていたのですが、どの分野に特化したエンジニアになるかは決めていなくて、インターンで色々経験することで最終的には機械学習に特化していくことを決めることができました。また、社会人の生活を垣間見できたことは、どのような学生生活にしたいのかを決める上での判断材料となりました。
就職活動では、インターンで色々経験してきていることがロールに採用する一つの要因となったと内定をいただいた企業の上司がおっしゃっていました。


# インターンを始める前の注意点
インターンは学びの場ではあるものの、全くITのことを知らない状態では業務に携わることができないので、ある程度の知識を持って置く必要はあると思います。
Web系であれば、Git、docker、1つ以上のプログラミング言語、HTTPの仕組みなどです。[元インターン生の佐藤さんの記事](https://qiita.com/TodayInsane/items/5a04b5b1cf846a6d11d8)も参考になると思います。
ある程度知識が必要とは言いつつも、実は僕も修士1年生の4月時点ではcdやlsが分からないレベルでした。そこから、インターンをしながら業務外ではひたすら勉強するのを今まで続けてやっと半人前に今なれた感じです。僕のように知識がほとんどない状態から始める場合は、まとまった時間や覚悟が必要だと思います。
インターンに力を入れすぎると単位を余裕で落としますし、院生の場合、研究ができなくなったりします。自分の中で、優先順位をしっかり決めておくことが必要だと思います。僕は、未だにタイムマネージメントで苦労してます。

# 機械学習に関するおすすめの参考書・サイト
巷に同様の記事がたくさんあるのであまり知られていなそうなものを紹介したいと思います。
## [Yannic Kilcher](https://www.youtube.com/c/YannicKilcher)
Youtuberです。最先端の論文紹介や業界の動向を話してくれるML Newsがあります。
## [Stanford MLSys Seminars](https://www.youtube.com/channel/UCzz6ructab1U44QPI3HpZEQ)
同じくYoutubeです。Stanford大学で毎週開催されているMLOpsの講演を聞くことができます。有名な研究者が多くでているので面白いです。Stanfordの授業は基本的に何でも良いです。自然言語処理や画像認識やメタ学習の講義もあったりするので調べてみてください!
## [Interpretable Machine Learning](https://christophm.github.io/interpretable-ml-book/)
説明可能なAIの入門書です。無料で読めるので一度拝見されると良いと思います。
[和訳](https://hacarus.github.io/interpretable-ml-book-ja/)もあるみたいです。
## [Approaching (Almost) Any Machine Learning Problem](https://github.com/abhishekkrthakur/approachingalmost)
4xKaggle GrandmasterのAbhishek Thakurが書かれたデータサイエンスの実践本です。英語版であれば無料で読めて、[和訳](https://www.amazon.co.jp/dp/8269211508)もされているみたいです。


# インターン中のTips
僕が2年間を通して学んだTipsをここに書いておきます。僕は、まだ半人前なので、もし何か改善点や取り組んでいることがあれば、コメントで教えていただけると嬉しいです。

- 必要以上の知識をインプットしない（目的を常に明確に意識する）

インターンを始めた当初はタスクに関係のないドキュメンテーションでもひたすら読むことをしていたのですが、次の日に働いた日でさえ、読んだ大部分を忘れていました。
なので、タスクをこなすための最短ルートを考え、それに必要な知識のみを調べるようになりました。僕のメンターのインド人の凄腕エンジニアは、豊富な知識を持っていて、思いもつかない最短ルートを見出すので毎回はっとさせられます。ちなみに、これを「遅延評価学習法」というらしいです。

https://techkondo.com/2020/03/23/%E5%8A%B9%E7%8E%87%E3%82%88%E3%81%8F%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%92%E5%AD%A6%E7%BF%92%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E9%81%85%E5%BB%B6%E8%A9%95/

- 聞くことを恐れない
インターンを始めた当初は、Gitを使ったことはあったものの集団開発をしたことがなかったので社内のブランチモデルが全く分からず、何時間も調べて結局諦めて前のインターン先のメンターさんに聞いた経験があります。すると、瞬時に答えが返ってきました。その時、些細なことで邪魔をするのがとても申し訳なかったのですが、メンターさんは快く教えてくれました。なので、質問で邪魔をしていると考える必要はないです。むしろ、質問しない方がメンターさんと進捗を共有できないのでよくないと思います。Slack等のコミュニケーションツールを使っている場合は時間が空いた時に答えてくれます。
対面の場合でもし気を使うのなら、確かにゾーンに入っていて邪魔をしない方が良い時があるので、例えば、ぬいぐるみを出している時は邪魔しないなどメンターさんとルールを定めても良いかもしれません。

- 色々手を出さない(やることを1つに絞る)
「必要以上の知識をインプットしない」と関係していますが、いろんな知識をもとめて学ぼうとしない方が良いです。僕はインターン当初は、機械学習全般の理論、React、深層学習ベースの画像認識モデル、Web周りと一気に全部を学ぼうとしたのですが、半年後には大体忘れていました。なので、最近は1つの分野に絞って深く勉強するようにしています。(しかし、これは就職活動が終わった今だからできることかもしれません。一般的にIT企業の就職活動では、CSの幅広い知識が求められるので、就職活動が上手くいったのはこの勉強スタイルにあるのかもしれません。)

- 自分のバイオリズムを把握する
自分が一番捗る時間や作業効率が悪い時間を把握することで、どのタスクをどの時間にやるかを決めると良いです。僕の場合、昼食後眠くなって作業効率が落ちるので、勤怠管理システム上で退勤したことにしてパワーナップしたり部屋の掃除をしたりしてます。

- 常にコードを書いている必要はない
大学生の頃飲食店で働いていたこともあって、インターンをし出した当初は6時間ぶっ通しでコードを書いたりしていましたが、ポモドーロ方式などのスタイルを用いて、5分間意図的に休憩時間を作った方が作業量としては多くなったり、休憩時間中に目的が整理されて新しい最短ルートが思い付いたりします。チョコを食べたり、アウトプットがより大きくなるようなことであれば何でもやってもいいと思います。
休憩時間に一時期興味がある論文を読んだりしていたのですが、論文を読むことは集中力が必要なことなので休憩の意味がなくなります。休憩時間はトイレに行ったり、コンビニに行ったり作業しない時間にした方がいいと思います。

# インターンの調べ方
日本でインターンするのであれば、夏、冬インターンの情報を有志でまとめてくださっている[魔法のスプレッドシート](https://docs.google.com/spreadsheets/d/1O4LqD6tfVisshD4YngjEKwpU1FQCGuD8vZ1qlVX0sBY/edit?usp=sharing)や外資就活、Wantedly、Infraインターンをチェックすると良いと思います。
海外でインターンするのであれば、勇気を出してTwitterでそこで働く日本人の方に連絡してみたり、その企業に直接メールを送ってみると良いと思います。

見ての通り、たくさんの企業がインターンを募集しています。社会見学ができて楽しいです。僕は2社でしかインターンできませんでしたが、たくさん参加してみてください！


# 最後に
僕は、海外で就活する上でのインターンの重要性に大学3年の頃に気付き、修士1年生からインターンに参加し出しましたが、特にスキルがあるわけではなかったので、準備が足りず新卒から海外で働くことは諦めざるを得ず、日本の外資系企業から海外を目指すことにしました。もし過去の自分に何かを教えられるとしたら、インターンの重要性を真っ先に伝えると思います。この記事でこの重要性を初めて知った方がいれば幸いです。大学1年生でもとりあえずインターンに応募してみても良いと思います。楽しいインターンライフを送ってください！