謎の会社フォルシアのインターン Rust検索エンジン開発コースに参加してきました
自分が知らないだけで謎の会社としました。
あれだけいい待遇なのに最終週が終わっても誰も書かないので僕が先陣を切って書いたはいいが、
増えてた
色々書いたら収集がつかなくなり、わりとまとまっていない文章になってしまった 気合を入れて読んでも良いし適宜飛ばして読むと良いです 本編は3.1からです
あと、ご飯の写真が無いのは食事中に携帯を出すのが失礼だと思ったとかではなく、アホなのですぐ食べちゃうからです。誰か補完してください
- 参加の流れ
- 夏-参加まで
- インターン期間
3.1 Rust検索エンジン開発コース
3.2. 他のコース
3.3. 環境
3.4. まとめ - 来年以降この記事を見てフォルシアのインターンに参加する人へ
参加の流れ
研究室の教授に、院試が終わったらインターンに参加してみても良いですかと尋ねたら、全然OKとのことだったので3社に応募をした。結果は1つ落ちた。
そもそも僕の偏ったインターンのイメージとして、イケイケの人達がwebの何かをするというイメージか、OSSの延長線上の何かをお金をもらいながらやるぐらいのイメージだったことと、
短期間のインターンで何がわかるねん、結局お遊びでしょという気持ちがあり、自分には関係ないように思っていた。
それなのに何故今年インターンに申し込んだかというと、
- 今年の頭に大学院に行くか就職するかをかなり迷ったので、結構たくさんの会社の下調べをしたが結局いろいろ行かないと何もわからないということにやっと気がついたから
- これは冬ぐらいから会社の説明会に行ったりしていて、夏もすこしやった
- 出会った学生に事情を聴くといろいろ情報を得ることができて良い
- だいたい何かしらのイベントにいる大人は超すごい人が多いので超すごい人以外の人が生きやすいとかを聞けると良い気がした
- 今年知り合った大学の情報系の友人達は適切な会社でバイトや長期インターンをしながら圧倒的成長💪をしているのに対し、僕はデータ構造楽しい!とか言いながら競技プログラミングをふわっとやっているだけなのでお家で競プロをするだけではなく、流石に就業体験ぐらいはしておいたほうが良いと思った
- AtCoderJobsにフォルシアという謎の会社の応募条件にAランク以上とあるインターンがあり、twitterでその会社の社員の方がオススメであろうというツイートをしていたのを見たから
- AtCoderJobsを介さなくても応募できるが、競プロをやっている人はこっちを通したほうが話が早いとのこと 実際話が早かった 理解のある人事さんがいる会社すごくないか
極秘情報(公開)特に競プロerはRustで検索エンジン作るコースとか検索高速化コース、Kagglerはデータ分析・データクレンジングコース、問題解決erはUI/UXコースとかAlexa skill開発コースを楽しめるかと思います。
— 目指せ黄色 (@matsu7874) July 11, 2018
僕は低機能なデータベースを自作したり、全然研究をしていないがデータベース研究室にいるので、フォルシアのインターンではデータベースの検索高速化コースに申し込んだ。Rustのコースも気になったので結構迷ったが、1つしか選択できなかった(はず)。
面接ではRustにも興味があってデータ構造が好きだったり競プロで一般的な文字列アルゴリズムなら理解していますと言ったらRustで検索エンジンのコースを勧められ、面接から1日でおいでおいでメールが来た。
大事なこととして、最初の締切が終わる前にOKメールが来たので以降特別な理由がない限りは早くインターンに申し込むべきだと思った。
夏-参加まで
院試が終わってから時間があったので、Rustのtutorialを見て競技プログラミングをしたりUnionFindや一般化SegmentTree等のよく使うデータ構造を書いてある程度はRustを使えるようにした。あと文字列について面接で聞かれていたので、Aho-CorasickとかはやいSuffixArrayとかは書いた。Rustを理解する上で少しは練習になった。
Rustが競技プログラミングに向いているかというとよく分からないが、C++,Java,Rustは十分な速度があると言っても問題はないと感じた。僕は特にエディタにこだわったりしないのですが、初心者がVSCodeで書くぐらいなら、ClionのRustプラグインを入れると最高に捗るのでオススメ。
残った時間はこれを解ける動的木を調べて、ふんふん言ってた。実装はできてない。
フォルシアのインターンに行くまでに、新聞社のデータ分析インターンなのに全日データに触らずフロント/バックエンドだけをやる虚無インターンをした。面接がなかった時点で若干ヤバいと思った。正直失敗だったけど、社外秘APIを得ることができたのでOK。
あと、IOI(国際情報オリンピック)の中高生のコンテスタントに対して、大学生と社会人の競プロerがトイレ案内をする面白いボランティア(注釈)1に参加して(他にもやることはたくさんあったが)、報酬として無限枚のアルゴリズムシャツとかを得た。欲しい人はあげます。
IOIの運営は破滅するほど人間がいなかったらしいし常に最悪の事態しか起こっていなかったらしいが、指揮している人から末端まで異常優秀者しかいなかったので成り立っている感じがした。僕の印象として特にインフラの人が最強だった。これもあって最近インフラエンジニアを無限に尊敬している。
インターン期間
1週間、10時から8時間いろいろした。結果的に趣味をしていただけで10万円貰えた。
昼ご飯代は領収書をとっておくとおそらくいくらでも出してもらえて、入社n年以内の社員の方が毎日一緒にご飯を食べに連れてってくれた。以下昼飯
- 初日 :CEO(社長?)とメンターの方達と1階の店でいろいろたべる おいしい あとCEOが財布をぐるぐるぶん回しながら歩いていて面白かった
- 2日目:最強においしいらしいトンカツ屋に行くがしまっているのでタイ料理屋にいく 満腹 かなりおいしい
- 3日目:諦めずトンカツチャレンジを再びする これおいしい!最強においしい 新宿に行くたび食べたい
- 4日目:ホテルのお店で食べる 会話も楽しいし食事もうまい
- 5日目:オフィスみんなで立って食べるみたいなことをする よくわからないがおいしい
夜ご飯は焼き肉に連れて行ってもらい、やはりおいしかった
それ以外の日は大学の先輩とか中学校の友達と夜ご飯を食べに行ったりした。銭湯やら温泉にも行った。
10時に会社についていればよかったので、いつも通り3日に1回朝ジムに行ったりもできた。
交通費も出してもらえたし、ホテルも会社の近くに予約してくれたので本当に出費が温泉代ぐらいしか無い。
Rust検索エンジン開発コース
Rustコースは倍率がすごかったということを聞いた。8コースあるけど1/4はこのコースらしい。Rustが人気すぎる。一方プレッシャーなのでやめてほしい…
- 1,2週の参加者は確かに超優秀で、僕が初日にやるべき課題が尽きていた。
メンターの方は本当に優しくて、なんでも認めてくれてやってみろ!という感じだった。少し(プログラミングで)介護もしてもらった。このメンターの方のおかげで、安心して色々できた。
Rust検索エンジン開発コースでは基本的には全文検索の改善を行った。インメモリDBでの検索に必要という感じだった。
検索速度は競技プログラミングをやっている人には割と簡単でいつもと違うのは、所謂$|S|$がクソでかいので、メモリ使用量をいい感じにしながら、かつ構築時間も現実的な時間内でできるように検討してプログラムを書く!という感じだった。実際にやってみて、$log$は定数ではないという気持ちになった。
メモリについては、しょラーさんが
ブログ
で紹介していた高速文字列検索本が会社にあったので参考にしてみたり、自分の知っているもので色々できないか検討した。BW変換すごい!と思った。
やったことをふんわり書くと、線形時間で文字列の座標圧縮的なことをしたり全文検索に使える文字列データ構造をいい感じに拡張したりした。
前の週の人とかは3日で機能追加したらしいし、その前の週もなんかすごかったらしく、僕が来たときには検索もメモリも構築もいい感じだったのでなんとしてでも改善しようと必死だった。
1日目は自明な改善をして、残りは僕が手をつけられる感じではなかったので、別の検索手法を試すことにした。僕の週では最終的に、検索やメモリは今までで一番良さそうだが構築に割と時間がかかる全文検索が完成した。(えぇ…) 2
あと1週間あったらかなり構築も速くできたはずなので不完全燃焼だった。精進したい。
いつもやっているので、二分探索やデータ構造をRustでもバグらせずサクサク書けたのは良かった。Rust最高の気持ちになった。あとなんかDerive最高だった。
最終日に発表もあって、スライド作りを頑張ったので結構反応が良かった。割と笑いも取れて後の人に繋げたので、そこは良し!
発表時には自明な改善を社内&インターン生の競プロer2人に指摘され、それが一瞬理解できなかった。頭が悪すぎる。指摘が入るのは良いことで、話が伝わっていて良さそう。2人からも指摘が入るのはレベル高い…👍
あと文字列アルゴリズムやデータ構造をたくさん調べることができたことからか、今まで避けていてけど結構好きになった。
数値列としてみるとかなり抵抗感が減った。避けてた人は数値列にしてやってみると良いかも。
他のコース
僕の参加した週はインターン生が計4人だったが、内AtCoderJobs経由で参加した人が3人だったので、↑のツイートから明らかに会社の青以上の競技プログラミング人口について、インターン生の方が多くなっていて面白かった。
とはいっても、別に競技プログラミングをやっている必要は無いとは思った。実際他の週はいたりいなかったりらしい。
GoogleHotelAdsの考察や、検索における自然言語処理や、DBにindexを貼る人がいて、みんなすごい感じだった。
特にGoogleHotelAdsは難しい内容をやっていたみたいだけど、平易に解説されていて本当に👏だった。
検索での自然言語処理は、前少しやってみたけど、偏りや曖昧さを解決する方法を知らずに適当にやってみたぐらいだったので、解決策にはこういうものがあるのかという感じではえーって言ってた。
DB高速化コースは、ISUCONだねという感じだった。(なんでもコンテストにするな)
環境
野菜ジュース、果物ジュース、牛乳、コーヒー等飲み物が充実していた。僕は水ばっかり飲むので水を大量にもらった。
アイスも大量にあった。
これは僕にとって非常に重要で、会社から徒歩5分以内の場所に風呂付きプール付きのジムがあった。社員の方に朝連れていってもらい、いつもの筋トレをしてからお風呂に入ることができて本当に最高だった。寝坊した!と言ってもわざわざ来てくれた社員の方もいた。
この施設の存在を知ることができただけでもインターンに行ってよかったと思った。(は?)
社員の方は多種多様で、本当にいろいろなバックグラウンドの人がいた。趣味も満喫していたり、多分論文を読んだり勉強ばかりしている人がいたり、これは会社にとても失礼なんですが何故この会社にいるのですか?という人も結構いた。(注釈)3僕みたいな学生がBtoBの会社をあまり知らないだけで、ググるといろいろでてくるしすごい会社なんだろうなと思いながら過ごしていた。
成果報告でも、簡潔データ構造に詳しかったり、高速文字列検索本を完全に理解している人や多分研究職あがりの人に質問をもらい、大人強い…と思った。多分ここにはヤバい大人がたくさんいる。
一緒に筋トレしに行こうぜ!とか言ってくれる人もいて、わーたのしーとも思った。
フォルシアでのインターン ざっくりとしたまとめ
- おいしいご飯を食べた。
- いい感じに全文検索をRustで実装した。
- Rust最高!
- 高速文字列検索本を読んで知見を得た。
- 社員の方と筋トレに行った。
- 僕は存在を知らなかったがフォルシアはすごい会社だと思った。
- 僕みたいなイケイケでない人間でもインターンはできる。
- 趣味が仕事になりうる(多分)
僕としては趣味をしていただけなので楽しかったし、インターンに参加できて僅かながら結果を出せてお金ももらえてよかった。面接時にこっちのコースを進めてくれた方にはとても感謝しています。ドンピシャでした。
「学生のうちにコードを書いてもお金がもらえなかったが、会社に入ってからは何もやることが変わっていないのにお金がもらえるようになった」みたいな発言はインターネットでは結構有名だが、レベルは違えど大体こんな感じのことを言うんだろうなあと思った。
結局インターンがお遊びなのかという問題は解決しなかったけど、趣味を挟んでしまうと遊びとも取れるのでこの問題は好きなことに関しては愚問ではという気持ちになった。
来年以降この記事を見てフォルシアのインターンに参加する人へ
最高の機会を提供してくださった社員さんがブログ書いて!と言っていたのと、僕は第1期のインターン生だったらしく来年以降の参加者の参考になればと思いこの記事を書きました。もし参加したときにはフォルシアの人事の人とかにこの記事をみた!と言ってくれると僕の株が上がって僕が就活するときに最高になれる確率が上がるので是非言ってください。あとトンカツの店は行くと良いです。まじうまい☺
追記(2018/09/19)
明日公開しよ!とか思っていたら先を越されてた 文体が違えどだいたい一緒なのがおもしろい 全員競プロやっているのもなんかウケる 競プロerは優秀!(品位のないダイマ)
1. NoiminのNoise FORCIA Summer Internship 2018 参加しました
一緒のタームの人 記事の構成とか思想が似すぎている 盗作してません本当です信じてください
2. てんぷらのぷらはC++のぷら FORCIA Summer Internship 2018 参加記
同じコースで前の週にいた人 ポテンシャル採用かっこいい… ブログのタイトルが†黄金†