tozangezan's diary

勝手にソースコードをコピペして利用しないでください。

非情報系レッドコーダーの就活体験

レッドコーダー(銅冠です)が就活を(2019年に)体験しました。

留意事項

文章書くのが苦手なので、頑張って解読してください。あとはてなの仕様もよくわからないので謎の文字でスペース調整してますが、許してください。

書くモチベ

  • 巷の就活体験記などでは「レッドコーダーのような強い方々に関してはわかりませんが」などといったフレーズによって無視され続けている存在であるレッドコーダーの話もしたいです
  • 界隈の就活を巡る正しい話正しくない話によそから唐突に変化球を投げる
  • 文章書く持久力の練習

背景

  • 東大農学部 → 東大農学生命科学研究科 修士(2020年修了) (生態学やってました)
  • 🐺
  • 競プロ参加は2009年(中3)から
  • 海外オンサイト(ICPC World Finals 銀, IOI 銀, Facebook Hacker Cup Finalist, Distributed Code Jam Finalist 2回)
  • AtCoder銅冠、Codeforces 赤、TopCoder
  • オンラインジャッジの方が好きなので各種サイトで問題埋めがち、POJ Top50, AOJ Solved 1位, AtCoder Problems Solved 2位には過去になったことがある
  • 競プロ人生で6000問は確実に解いてる
  • クエリ処理、最適化は競プロの中でもかなり嫌いなジャンルなので、「労働で競技プログラミングみたいなことができて楽しい!」ってのに期待してません。「労働でEnumerative Combinatoricsみたいなことができて楽しい!」ってのに期待してます。
  • 🐺
  • 非情報系で開発にも興味がなかったので、パソコン何もわからない(基本情報者?みたいな試験の過去問やったら落ちるレベル)
  • 数学、好きだけど数学科の論理思考と比べると明らかにふわふわとした議論をしており、"証明=AC"思想の競技プログラマーの典型的なそれ
  • 典型的な 「ゲーム>数学>>>>>パソコン」タイプの競技プログラマー (@evima0 ツイート参照)
  • 🐺
  • 英語、日本の競技プログラマー(赤以上)の中ではかなりできる方だと思う(マジで競プロしかしてないような集団なので...)
  • 就活時:TOEFL iBT 107 (Listening 30, Reading 28, Writing 26, Speaking 23)
  • 今年:IELTS General Training 8.0 (Listening 9.0, Reading 9.0, Writing 6.5 *1, Speaking 7.0)
  • フランス語(CEFR B2)、韓国語、タタール語もできますが、仕事で使う機会があるかと言われると無いと思う。唯一ある違いはモントリオールが職場チョイスの選択肢から消えないくらいだと思う。
  • 英語は語彙量*2とリスニング力で殴っているので上の通りですが、そもそも日本語(というか本質的な)読解力や表現力がひどいし、日本語でformalな会話がまずできないので、大学時代からかなり各教授にダメ出しされてます。
  • 🐺

進路関連の当時の思考

  • 日本社会でやっていけないので、日本人がこうするであろうみたいな想定の元働かないといけない場所は全部候補から消しました。
  • 最優先なのは海外で直接就職、次に優先したのが海外のPhD(アルゴリズムの理論研究)に進学、その次に優先したのが一瞬で海外transferができたり実質日本企業要素0の企業、その次に優先したのがAtCoderバイトとかYoutubeとかで食いつなぎ
  • 事前にアメリカ・カナダ・EU・オーストラリア・シンガポールの労働ビザシステム・永住権・帰化の発動条件を相当考察の上で動いていました *3

インターン

2015年(以下、🐱社とする)と2017年(以下、🐻社とする)に行きました。どちらも本社に行きたかったのに日本しか選考に通らなかったので、仕方なく日本に行きました。いずれのインターンでも共通して思ったこととして埼玉(大宮以北)から恵比寿や六本木まで毎日通うのは遠すぎると実感したので、今は東京に住んでいます。

🐱社

当時の🐱社は競技プログラマーの獲得にかなり熱を入れていたので、本社にインターンに行くみたいな大きいイベントがあったので応募しましたが、なぜか日本でしか受け入れてくれないということになり、Recruit関連の面倒な制約(学業がある期間にインターンかぶせちゃいけないらしいです)があって強制的に短くなったりしました。

(本当にありとあらゆる開発経験がないため)斬新なものに手を出せたという気分はありました。それより開発とは何をするものなのか(コードレビューをするとか、Githubみたいなツールが世の中に存在するとか)が知れたというのは大きいです。

🐻社

これも東京でインターンなんですが、実はこの前にDistributed Code Jam 2016の決勝でニューヨークでインターンの面接を受けていました*4。働く先のチームがない(そもそも、Codejam決勝が夏なので夏にインターンしたい人にとっては変な時期に面接をやることになります)のでオファーがもらえなかったんですが、翌年東京で適当に申し込んでみたらあっさり通ったので参加しました。

この時大学4年で残ってる授業もなかったので、研究室を1ヶ月開けてその間毎日通勤中に論文を読むことにして、2ヶ月働いていました。本当はもうちょっと早く参加開始したかったのですが、Distributed Code Jam 2017の決勝にも残ってしまい🐻社の社員とかだとCodejamには参加できないとルールに書いてあるので、DCJ終了直後に参加開始しました。

開発とは何をするものなのかが前回のインターンでわかったので(といいつつ実際は完全に忘却していた)、もうちょっと何かした気分になれました。

就活

2社受けたので、以下🐧社および🐻社とします。

🐧社

流行りのAtCoder Jobsからボタン押したんですが、中途と新卒の違いがわからなかったので中途半端な人間であるという理由で(あと海外オフィスの分布はちゃんと調べて)中途採用にボタン押しました。面接は全部英語でした。最初の方の面接はアルゴリズムの話しかなかったので余裕でしたが、質問してみた感じ海外transferするのにはかなり何年もかかりそうな雰囲気を感じたのでうーんという気分になり、その後アルゴリズム要素がない面接が登場してしまい、「今までやってきたプロジェクトについて教えてください」「競技プログラミングのコンテストのtesterをしました。testerというのはテストデータを検証し、想定解を含むいろいろな解を書いてデータの正当性をチェックし、...」「開発経験はありますか」「ないです」みたいなやりとりをしたら落ちました。

あとで聞いたところによると中途採用っていうのはかつて他の会社で働いたことがある人用のものらしいです。AtCoder Jobsに書いて。

🐻社

この会社はコンテストを開いている企業で、とある新宿四丁目のベンチャー企業の社長をしているTさんが「競技プログラマーはコンテストを開いている企業に就職しろ!」ってブログ記事を出していたので、受けました。いきなりオンサイトで面接をすると言われたので行き、日本語で2回と英語で2回、アルゴリズム要素の面接をしました。アルゴリズムは得意なのでちゃんと脳のリソースの9割を英語に使い、片手間で面接の問題を解くというレッドコーダー特有スキルを生かして乗り切りました。その後、通りました。

PhDの奨学金

海外大学院留学でもらえる奨学金で、科学オリンピックの代表限定みたいなのがあったので応募しました。そもそも科学オリンピックの代表で海外大学院留学したいと思ってる人って大抵学部から海外に行ってるのでは?という感じがしてたんですが、やっぱり応募者が全然いなかったからなのか、通りました。

すごい豪華な待合室が付いているような上流階級的空間で面接をしてくれ、非常にいい経験になりました。日本のtraditionalな大企業って、すげー

就職するか進学するか

かなり悩みました。悩んだ上🐻社の社員とも個別に話をさせてもらい、奨学金の主宰の人とも話をさせてもらい、結局奨学金を辞退して就職することにしました。理由としては

  • 🐻社ならtransferできる可能性を割と感じる(あくまで個人の感想です)
  • 🐻社でインターンしたことがあり、そこまで合わないということはなさそう
  • CSの学位がない状態でPhDを目指すとなると、PhDの最初の2年でカバーされる以前の知識が抜けている気がする
  • アメリカのビザに関する不信感
  • 書く文章がめちゃくちゃ(研究者として致命的)

などがあります。*5

後日談

上記のプロセスをやっている間はPhDに受かったら2020年中にアメリカに行くものだと思っていたし、パンデミック下でPhDに行くことになってたらどうなったのか、気になるところです。実家に引きこもってリモート授業を受けていたのでしょうか。

「〜色以上になるとこれ以上レートを上げても就活に役に立たない」論に対する反論

多くの競技プログラマーの間では、黄、橙コーダーくらいになるともうレートが上がっても就活に関して有利になることはないというのが見解となっていますが、これは嘘だと思います。

とりあえず僕に関してはこんな感じでした。

  • 海外オンサイトに行くことで、非情報系で開発経験がなくとも自動的にオンサイト面接を生成できた
  • 面接の問題を見た瞬間各計算量の解法とだいたいここら辺が計算量改善の限度だろうなという区切りもわかるので、落ち着いて日本語/英語で説明することに脳のリソースをさくことができる。

競技プログラマーとエンジニア労働の関連性に関して、僕の仮説

以下は仮説であって何の主張でもないので、あんまり真に受けないで「ふーん」とでも受け流してください

  • 大学で研究ができる人は計画的に労働ができたり、論理的に文章を読み書きしたりできるので、労働一般に向いている。
  • 変わり種コンテスト(お誕生日、マラソン、OIのcommunication task、Surprise Language Contest...)が強い人は適応力が高いので、パソコン知識の習得にも希望がある。
  • 日頃 int a,b;scanf("%d%d",&a,&b); みたいな暴力的一文字変数コードを書いている競技プログラマーでも労働ではちゃんとしたコードを書ける。逆に労働コードが競プロに反映されるかどうかは人による(僕の競プロコーディングスタイルは全く揺るぎません)

*1:助けて...

*2:PhD受けるつもりだったのでGRE Verbalの勉強もしたし、GRE Verbalの中では読解が苦手で単語クイズが得意でした

*3:実は、ケベックのことだけ考えるのを忘れていました。というのもフランス語のexpression orale力が要求水準(NCLC 7)に到達しそうにないと思って候補から外していましたが、あとであっさり取れてしまいオイオイという感じになりました

*4:希望すると滞在時間が1日前に伸びて、その日に面接が受けられるというものでした。なのでニューヨークの自由時間もちょっと伸びました

*5:あとで分かりましたが、大学の数学科とかで数学の基本的なトレーニングを受けていないと穴のない数学的な議論がまともにできません。Enumerative CombinatoricsのExerciseを解いていてそれをひしひしと感じております