大学時代に立てた仮説と検証

大学の卒業が無事確定して大学の方でやることが大体無くなったので実家でぬくぬくしているyapattaです。

今日は大学時代に立てた仮説と検証についてのお話。


まず自分は大学入学時に学生時代をモラトリアムとして捉えることがあまりできなかった。大学時代にしかできないことをやろうとは思えなかった。というよりは、東京で食べていくために何か武器となるものを身に着けたかった。当時は東京で一旗揚げたくて何とか帰らなくて良い道を模索していた。

そんな風に考えていたから高校時代に少し齧って挫折したプログラミングを再び始めたのは自然な流れだった。 強いプログラマにでもなれば職にも困らないし、都心で働ける。年収も高そうだし、漠然と格好良くも見えた。

そこで取り敢えず大学時代でそれが自分の特技になるぐらい強いプログラマになろう、という目標を持って大学生活を開始した。 サークル選びに失敗?*1したせいもあって、一人で黙々とRails Tutorialってやつを進めていた。取り敢えずウェブ開発ができるようになったら強くなれるのかぐらいの感覚。 一人で続けるのは辛い。皆がサークル活動を楽しんでいる中、家に籠もってコードを書き続けるんだ、浪人生活とそんなにやっていることが変わらない。

ただノンサーである自分に同情してくれたのか、予備校時代の友人が競技プログラミングの活動を毎週大学でやっていることを教えてくれてそれに参加することになった。 流れで6月にICPC国内予選*2というのに出た。始めたてで2完できたことに変な自信を持ってしまい、またICPC Asiaに出場した先輩が魅力的であったため競プロを続けることになった。 アジア大会出場って実績でめちゃくちゃイキりたいなとも思っていた。 このときはAtCoderすらまだ知らなかった。


夏休みまでに曲りなりに自作のウェブアプリ(Twitterクローンみたいな単純なCRUDアプリ)を作れるようになったのと、高校時代の友達がインターン(アルバイト)してみたらって言っていたので、Wantedlyインターン先を探すことになった。幸いにも中小企業の新規ヘルスケア部門みたいなところに拾ってもらい、そこで働くことになった。最低賃金の時給が出るところで取り敢えず安心した*3。 因みにこのとき、AtCoder灰色、Railsの個人制作物が一つという能力値にも関わらず採用してもらった。今思うとよく採ってくれたなと思う。そこで一年ぐらい開発をしていた。来客へのお茶汲みとか名刺読み込みとか、開発以外の雑用も色々やった(?)。雑用をやりたくなさすぎて、力付けたいとずっと思っていた。一緒に働いていた学生、社員の方々は本当にいい人たちで彼らが居なかったら今の自分が居ないと言っても過言ではない。 医学部の学生だけど自分よりもプログラム書けてめちゃくちゃ頭良いなと思う先輩がいて、彼に食らいつきたくて必死だった。 社員に勧められてブログを書き始めたりもした。説明能力が乏しいのを指摘されて、文章を書いて頭を整理する訓練をするように言われたからだ。気づいたらブログを書くこと自体が楽しくなってしまったし四年も続いていて感慨深い。

しんどかった開発業務が段々できるようになって会社での居心地も良くなったけれど、エンジニアの方々が結構辞めていたのと(当時メインでコードを書く社員が居なくてフリーランスの方がインターン生に仕事を教えていた!)、事業が成長しなさそうという実感と、技術力の向上に限界を感じていたのもあって大学2年の7月頃に自分も辞めてしまった。 僕の将来を考えて背中を押してくれた社員の方本当にありがたい。お世話になりっぱなしである*4。 辞める口実として、新しいインターン先が決まったというのがある。運良くICPC Asiaに出場できたこともあり、その実績+一年の開発経験を引っ提げてインターンに応募したのだ。結果を示せば今いる環境を変えられる、常に新しい環境に飛び込めるぐらいの選択肢を残しておくと精神的にも安定するという実感を強く持った。 社員数が10人も居ない中小企業からの2000人超えの大企業へのジョブチェンジである、大出世だ。


ICPC Asiaに出場したいなって話はチームメイトの友人と大学2年の4月ぐらいから話していた。当時のチームがAtCoderでいう緑緑水というレベルでとてもまともに戦っても国内予選を勝てるとは思えなかったから、過去のコンテスト結果からアジアに出場できるボーダーラインを定めて、それを超えられるように過去問を反復練習していた。具体的にはABCという簡単な問題たちを早解きして逃げ切るというものだ。同じ問題数を完答した場合は合計解答時間が短いチームが上位になる。空きコマと土日、友人と時間を測って一緒に練習していた。目標に向かって熱中していて本当に楽しかった。本番でもその練習が功を奏してギリギリ逃げ切ることができた。アジア出場が決まったときは本当に喜んだ、大学生活で一番喜んだ瞬間かもしれない。


話をインターンに戻そう。2週間の短いサマーインターンであっても労働自体は辛かった(週5で毎日8時間労働は長すぎる!!)。 しかし社員の方々が毎日ランチを奢ってくれたり、飲み会に行ったり*5してそれをモチベに働いていた。コロナ前の良い文化だったりする。

インターンが終了した後も他のインターン生とアルバイトの方とちょくちょく関係が続いて、一緒にハッカソンやコンテストに参加したり、輪講をやったり、はたまたキャンプやスキーに行ったりでお世話になりっぱなしである。 常に本気でかつ雰囲気良く一緒に開発できるの本当にありがたいんだよな。また一緒に何か作りたい。


サマーインターンが終わり秋になって11月のアジア大会に向けて競プロを再び頑張り始めたわけだが、精進を続けてもコンテストに毎週出てもAtCoderのレートが上がらなく(何なら下がったかもしれない)自暴自棄になっていた。競プロを頑張ることがしんどくなっていたが、大会に向けて頑張らなければならないと身構えてしまいで八方塞がりになっていた。JAGの合宿だったりで強い人達を見すぎて自分を見失ったり(とはいえ優しい人たちが多かった、未だにお世話になる人もいる)、本当に自分はアジア大会に参加して良いのか?って疑ったりもしていた。とは言え11月の横浜大会、12月のマニラ大会共にチームメイトのおかげもあって何とか乗り切れた。マニラではそこそこ良い結果を残せて自分たち結構やるんだなあと感心していた。現地の大学を観光したり現地の大学生スタッフと英語で交流したりで、漠然と日本以外に住んでみたくなった。同時に英語力の無さを痛感したわけで、これから英語がボトルネックになるであろうことを実感し始めた。


アジア大会終了後、競技プログラミングを2ヶ月ほど休止していた。ただTwitterを見ていると毎週のコンテストが気になってしまい、気持ちを抑えられなくてコンテストに参加したら過去最高スコアが出てしまった。嬉しくなって再び精進を再開した。憑き物が落ちたかのように気が楽になって、競プロが楽しくなった。みるみるレートが上がった。この経験のおかげか、しんどい状態を一過性のものであると少しはメタ的に捉えられるようになったのかもしれない。


大学2年生の3月頃に新しいスタートアップでのアルバイトを始めた。今回はシリーズC企業。シード期でもなく上場企業でもないということで新しい経験を積みたかった。 他のエンジニアと要件を話し合ってアプリの新機能追加を実装したりで、自分ができる仕事の粒度が大分大きくなった気がする。 仕事自体ほぼリモートであって寂しさを感じることも多かった。8ヶ月ほど働いたが物理出社が最初の1週間ほどだった。僕の性格からなのか、リアルで会わないで心を通じ合わせたと感じられるようになるのは難しい。 このとき流行り風邪が蔓延しており外出活動が制限されたこともあり、この時期につよつよエンジニアになるぞぐらいの気持ちで意気込んでいた。 大学の授業がリモートになったこともあり、前述したインターンで知り合った友人たちとハッカソンに参加しまくった。知らない人達とオンライン飲み会できるビデオ通話アプリ、スマートウォッチから取得した生活情報をもとに友人と健康スコアを競い合うアプリなどの本格派から、ハッカソンの主催趣旨が謎すぎて主催者を皮肉ったアプリなど色々作った。このメンバーで学生順位ギリギリでISUCON予選突破できた。以降サーバチューニングコンテストの楽しさに目覚めた。ISUCONというのは8時間の制限時間内でウェブアプリケーションが高トラフィックのアクセスを問題なく捌けるようにチューニングするコンテストだ。総合格闘技のような感じがする。今まで経験した色んなコンピュータ関連の知識が生きるし、競プロよりも全然ブルーオーシャンということもありそっちを頑張る方が勝ちやすい気がした。


大学三年生になるタイミングで大学の友人からオンプレサーバ管理のアルバイトを紹介された。大学関係の仕事で学生たちで自治的に活動できると聞いて、興味を持って一緒に働き始めた。 自分のネットワーク、インフラ経験が本当に不足していたから、勉強してひいひい食らいついた。未だにネットワークは良くわからないし友人に迷惑をかけ続けている。クラスタ内のGPUモニタリングツールを開発したり、障害対応したり、最新のExploitが来ていないかログ解析したり、ウェブエンジニアとしては経験できないよりディープなことを学ばせてもらった。これらの知識がISUCONだったりに役立った気がする。


そういえば大学三年の後期にはセキュリティキャンプというものに参加していた。年齢制限でちょうど最後の申し込み時期だからダメ元で参加申し込みした。正規表現の仕組みに強く興味を持って学んで実装していたことが功を奏した。 論文の成果を社会実装してOSSに組み込むという経験が本当に楽しくて、研究というものに憧れを抱いていた。今になって研究自体が楽しいというよりは社会実装が楽しいだけだったのだけれども。 三ヶ月間ほどその道のプロに指導を受けながらチーム開発をすることが楽しかった。平日授業で土日ほぼそれに費やしたから相当ハードだったが、まだ世界に無いものを作るという実感が自分をワクワクさせた。確か最終成果発表の日にはやぶさ2のカプセルが地球に着地して、キャンプ終了も合わせてで感慨深くなっていた。 というかセキュリティキャンプ界隈の大人がギークで技術を本当に楽しんでいる人しか居なくて憧れを抱いた。


そして四年に近づいたこともありいよいよ研究室に配属された。ただ結構しんどかった。新人研修の輪講に時間が縛られて(週3~4×4時間で輪講があった!輪講準備の時間も追加でかかった)、個人開発だったりに思うように時間を割けなかった。論文輪講も自分が読みたい論文を選んでしまったがために先輩にも頼れずハードモードになった。結果研究室にうまく適応できなくて精神的にも身体的にも体調を崩してしまい、2~3ヶ月ほど研究室を休んだ。ただこれで大分元気になった。休んでいる間に友人が働いている会社の手伝いをした。インフラ、アプリケーションの構成を勝手に考えて構築するのが楽しかったし、中の人達が人間臭くて面白かった。当時研究室での活動には嫌気が差していたが開発自体は楽しかったのは救いだった。研究室に戻り先輩たちに助けられながら何とか卒論を乗り切ることができた。やはり偏屈な人間同士の会話は面白かった。先輩との会話で追従する必要もなく等身大で話せるのは本当にありがたかった。卒論のテーマは先生に言われたものというよりは、自分が提案したものを先生と相談し合いながら決定された。興味が湧くテーマを自分で決められたのは幸いだった。自分で決めたテーマなら責任持って実装しきろうと思うし、うまくいかなくても自己責任だから気が楽だ。誰か他人を責める必要もない。


マニラに行ったとき英語力の無さを痛感して、流行り風邪で自粛中に英語の勉強を開始した。 実践的な環境で足掻くのが一番力がつくという実感からか、コロナ後に留学しようと漠然と考えていた。その準備としてオンライン英会話とTOEFLの勉強をしていた。 長期で行ける大学の交換留学あたりを考えていたのだがどうやら自分のGPAが足りなくて申し込めず、代わりに半年ほど行ける海外インターンのプログラムに焦点を当てた。 TOEFLの勉強自体は辛かった。どうしても地道な反復作業というのが難しい。 ただTOEFLで何とか点数を取れて、現地の企業の社員と面接をしてコーディング試験を受けて無事現地に行けることになった。 日本以外で働くことができるという実感を湧かせたいし、社会に出る前の時間があるうちに経験できることは貪欲に経験したい。 4月末から楽しみである。 ビザだけはしっかり取っておこう(まじで事務作業が苦手)。



タイトルの仮説と検証に関して。強いプログラマになるというか実績を作らなくても別に都心で生活できるし(何なら都心への憧れも年々減少していっている)、強いプログラマになることが必ずしも年収に繋がらないけど、何かしら武器を持っていると自分の人生を自分で決定できる実感は持てるし(環境を変えるフットワークがめちゃくちゃ軽くなった気がする)、面白い人達と繋がることができる。 面白い人達で面白い案件みたいなのを持っていって面白い作品を皆で作るということはこれからもやっていきたいし、面白いことができるぐらいに自分の能力が錆びつかないように磨いていきたい。 何かと人に必要とされるのも悪い気がしない。


取り敢えず文章を供養したし、これからまたぼちぼち頑張ろうと思う。

続く。。。

*1:高校時代にラグビーをやっていた延長でレスリング部に入ろうと思っていて、4月中それの練習にずっと行っていたら他のサークルに入る機会を失った。レスリングとプログラミング両立が難しいと断念して結局入部しなかった

*2:コンテストの仕組みをざっくりと説明する。8問のアルゴリズムの問題が出題され、正解数と解答速度の速さでランキングを競う。問題を解くプログラムを書いてテストを実行し、テスト結果を提出して正しかった場合チームに得点が入る。

*3:会社によっては業務委託として学生と雇用契約を結ぶことで最低賃金以下で働かせるという採用ハックがある、自分の実力に自信が無い学生がうまく使われるみたいなことがザラにある

*4:一方で退社したいことを社長に伝えたら怒られてSlackから一度追い出されてしまうみたいなこともあった

*5: 酒カスのインターン生と同じペースで飲んだら泥酔してしまい電車を何往復もしてしまい家に帰れなかったのは良い思い出