Shu's Blog

物理学とフォルクローレと競技プログラミング

サマーインターン体験記 その 1

今年 (M1) の夏は 3 週間のインターンに 2 つ参加しました. どちらも守秘義務があって内容はほとんど書けないのですが, どういう様子だったかを自分用のメモも兼ねてここに書いておこうと思います.

インターン全体の選考についての話はこちらをご覧ください. shu-ile12x.hateblo.jp

この記事では 8 月 19 日 〜 9 月 6 日の 3 週間で参加したひとつ目のインターン (SIer, N 社 ≠ NTT データ) について書こうと思います.

応募

ビズリーチキャンパスで社員交流会 & インターン特別選考会というものの招待をいただいたのがきっかけでした. SIer という業種をあまり真剣に考えていませんでしたが, 一度話を聞いてみるのも面白そうだと思い行ってみることにしました.

今回参加したのは研究開発職のインターンで, SIer の典型的な業務とは違うかもしれませんが, 現場との距離が近そうなこと, また "未経験でもぜんぜん大丈夫だよ〜" と社員の方に言っていただいた (騙されたともいう) のもあって参加することにしました.

その日のうちに 1 次面接, 1 か月後くらいにまた 1 次面接 (なんで ?), 8 月に入ってから Skype でグループリーダーの方と 2 次面接をして, 無事に参加ということになりました. すでに 9 月 9 日からフィックスターズさんのインターンが決まっていたので日程が厳しかったですが, なんとかお盆明けの 3 週間に設定していただくことができました.

準備

決まったのが直前だったこと, お盆休みに入ってしまったこともあって特に事前課題などはありませんでした.

一応 Java を使いそうな雰囲気だったので AtCoder Beginner Selection の問題をいくつか Java で解いてみたりしました.

1 週目

お盆明けから業務が始まりました. 初日はガイダンスと社内システムの研修を受けた後, 午後から研究テーマについての説明がありました.

この時点ではあまり具体的なテーマは与えられず, "サービスを高速化したい" という目標が与えられて, まずは高速化できそうなポイントをいくつか上げてみてね, ということでした.

最初の 2-3 日くらいをかけてゆっくりソースコードを見たりしていましたが, コードが巨大すぎる & 言語が謎すぎる (Java ではないです) ということであまりコードの細部はいじらず, OSS を呼び出している部分のオプションを最適化したり, 全体を並列化したりという方向性で進むことになりました.

この週の後半はオプション最適化の部分をある程度進めました.

2 週目

メンターの方が 2 人いらっしゃたのですが, この週は 1 人夏休みを取られていました. 私もあまり相談するタイプではないので (よくないですね), 並列化の部分を頑張って進めていました.

Java を書くつもりでいましたが, 今回取り組んでいるテーマの部分は特に Java である必要はなく, 結局は Python を使っていました. 並列化自体のところはあまり複雑な操作は必要なかったので, シンプルなフレームワークということで SCOOP というものを用いました. Qiita に解説を書いたのでよろしければご覧ください.

なんとか並列化を実現してあとはネットワークを繋いで台数を増やすだけ, というところまで持って行きました. ここで目標タイムを達成できそうな見通しは立ったのでだいぶ気が楽になったように思います.

3 週目

前半はネットワークを繋いで台数を増やし, 実際に目標タイムを達成できることを確認しました.

最終日に成果発表会がありスライドを用意しなければいけなかったので, この段階ですこしスライドを作り始めました. 幸いスライドの構成にあまり悩むところはなく, 結果もタイムを表示すればいいのでわかりやすいですが, 研究背景などの説明の部分に苦労しました.

一方でオプション最適化の細かい部分がさらに高速化できることがわかったり, 並列処理している部分もいくつかボトルネックがあることがわかってきました. 後半は発表練習をしたり, 出来るだけ高速化できるように細かいところを調整したりしていました.

最終的に目標タイムの半分程度まで高速化することができ, 発表もうまい感じにできたかなと思います.

環境

あまり会社を特定できるように書いていないので書く意味が薄いですが, 待遇はそこそこよかったと思います.

オフィスが横浜にあるのですが (本社ではない), インターンにも一人一人パーティション付きの広い机が与えられて, しっかりしたスペックのデスクトップにディスプレイ 2 枚, さらに計算機 2 台もほぼ占有させてもらいました.

会社自体はいわゆる大企業で面倒なこともあるのかなと思っていましたが, 研究開発部門だけかわかりませんが Slack や GitHub をしっかり使ってフラットな立場で開発ができているなと感じました. むしろメールは推奨しないという点はすこし意外でした.

お給料はそんなに高くなかったのですが, 1 日単位で設定されていて, ゼミのために午前だけで帰った日などもしっかり 1 日分支給されていたのはよかったです (逆に残業代が出ないような感じもしますが, そもそも残業が発生しないように時間になったらちゃんと帰るようにという指示がありました).

メンターさんも "結果が出れば別になんでもいい" という立場で, 実際に突然午前休をとったりしていたので, そのあたりは柔軟に働ける環境なのかなと思いました.

(もちろんインターンなので結果が出なくても何にどのように取り組んだかが大事, というポイントも強調されていました)

反省点

私は人に相談するのが苦手だと思っていたのですが, 今回のインターンではメンターさんがあまりいなかったのもあってそれが悪い方向に出てしまいました.

一応目標タイム自体は達成して, さらに半分程度まで縮めたのですが, 実装の部分を独力でやり過ぎてしまった感があります. メンターさんも最近 Python を触り始めたところという事情はありましたが, もう少しチーム開発をして綺麗な実装ができればよかったなと思っています.

最終週に会社に渡す用のコードをまとめましたが, 最初からチーム開発していたらそのステップも必要なかったので.

今後

今後もフィードバック面談やキャリア相談 () などいろいろサポートしていただけるようでありがたいです.

今回参加したのは研究開発職でいわゆる SIer の業務というものではない気がしているので, 今後機会があれば通常の業務も体験してみたいと思っています. SIer 業界に就職するかはわかりませんが, 目指すのであればこの会社という選択肢はかなりいいものだと感じました.

ただ, 研究開発部門はあまりそういう雰囲気はありませんでしたが, やはり大企業なので総合職で入社するといろいろ面倒なこともあるのかなと思っています. この次に行くフィックスターズさんは会社規模としてはだいぶ小さくなりますし, そのあたりの違いというところも見極めていきたいと思っています.

ちなみに引っ越しでお金が必要なのですが, お給料はいつごろ振り込まれるのでしょうか. やっぱり 10 月末かな...