■伊藤さんの略歴
2020年東京大学大学院 情報理工学研究科を卒業。院試対策として大学4年生のときに競技プログラミングをはじめる。新卒で現職の株式会社リブセンスに入社し、同社転職サイトのエンジニアとして活躍中。フロントエンド・バックエンド・インフラなど、ジャンルに囚われないオールラウンダーを目指して日々の業務に従事している。
■院試が競技プログラミングをはじめるきっかけに
ーー競技プログラミングとはどのような競技なのでしょうか?
簡単に説明すると、プログラムを書くスピードと正確性を競う競技です。難易度ごとに並べられた問題を制限時間内に解いていき、誰がもっとも速く、正確に問題を解けたかを競い合います。「[AtCoder](https://atcoder.jp/?lang=ja)」などの団体が競技プログラミングのコンテストを主催しています。
ーーなぜ競技プログラミングをはじめたのでしょうか?
大学4年生のときに、院試の対策としてはじめたのがきっかけです。同じ専攻を受験した人のブログに競技プログラミングが試験に役立つと書かれていて、試しに自分もやってみることにしました。
ーー実際に競技プログラミングをやってみて、どのような部分が楽しいと感じましたか?
勉強の成果が分かりやすいというか、できなかったことができるようになるプロセスが楽しかったですね。「AtCoder」の場合はユーザーのレベルが8段階で色分けされていて、空手や柔道の帯のように自分のレベルを把握できるのも良い点です。自分の現在地と次に目指すべき目標がはっきりしているので、一歩一歩着実にレベルアップできます。
ーー伊藤さんはどのくらいのレベルまで進んだのでしょうか?
現在は競技プログラミングから離れているのですが、当時のレベルは緑色くらいだったと思います。緑色は8段階の下から3番目ですが上位3割に入る難易度で、個人的にはそこそこのレベルになれたかなと感じています。
ーー競技プログラミングをやめてしまったのはなぜでしょうか?
緑色以上を目指すとなると急激に難易度が上がり、スコアが頭打ちしてしまったように感じたからです。さらにレベルを上げるにはかなりの時間と手間が必要だと感じたので、一度区切りを付けることにしました。
ーーなるほど。ちなみに、競技プログラミングをする大変さや難しさではどのような点がありますか?
一定のレベルを超えると実務に必要なプログラミングのレベルと乖離(かいり)してしまいがちな点ですね。私のように院試のために競技プログラミングをはじめると、「なぜ競技プログラミングを続けるのか?」という意義付けが難しくなってしまいます。私の場合は続けるモチベーションを保つことができませんでしたが、もちろん、そこから純粋にレベル上げに喜びを感じる人も多くおられます。
■競技プログラミングは就活・実務にも役立つ?
ーー定のレベルになると実務に活かすのは難しいとのことですが、競技プログラミングが就活や実務に役立った点もあるのでしょうか?
就活でコーディングテストを受けた際にとても役立ちました。たまたまかもしれませんが、テストのレベルが競技プログラミングで学んだ問題に近くて、スムーズに解くことができました。試験官の方から「こんなに無駄のないコードを書いた人はあまりいない」と言っていただけて、競技プログラミングをやっていてよかったと思いましたね。他にもコーディングテストを何回か受けましたが、テストでは一度も落ちませんでした。
ーー現在エンジニアとして活動されていますが、今の実務に競技プログラミングが活かされたシーンはありましたか?
もちろんあります。入社した企業が Ruby on Rails を中心に扱う企業だったので、入社時には Ruby の勉強から取り掛かる必要がありましたが、Ruby の文法を手になじませるために、Ruby を題材にして競技プログラミングに取り組んでみたことがありました。エンジニアとしての基礎力を身につけるという点では、競技プログラミングがとても役に立ったと思います。
ーーそれでは、競技プログラミングはどんな人におすすめと言えるでしょうか?
まずは「プログラミングの基礎を身に付けたい方」や「新しい言語を学びたい方」ですかね。いろいろな言語を学べますし、先ほどご紹介した「AtCoder」などのサイトにはたくさんの例題が掲載されています。簡単な問題から順番に解いていけば、確実にレベルアップできると思います。また、大量のデータを効率的に処理する能力も身につくと思いますよ。
ーーその他はどうでしょう? どんな方におすすめできますか?
「ライブラリやプログラミング言語の開発を目指している、携わっている方」や「Googleなどの外資系IT企業への就職・転職を目指している方」、「研究でプログラミングを使用する方」にも良いと思います。このような方々であれば、緑色以上の知識や技術が活かせると思うので、競技プログラミングで得たスキルをより活かせるかなと感じます。エンジニアといってもその種類やキャリアは多岐にわたります。高度なアルゴリズムの知識を必要とするような職種では、実力をつけるのに競技プログラミングはうってつけですね。
ーー競技プログラミングをはじめたいという方は何からはじめるのが良いでしょうか? おすすめはありますか?
「AtCoder」などの競技プログラミングのサイトで例題を解いてみるのも良いですし、「[AIZU ONLINE JUDGE](https://judge.u-aizu.ac.jp/onlinejudge/)」など、競技プログラミングを勉強できるサイトもあります。まずは、このあたりからはじめてみるのが良いと思います。また、今まで競技プログラミングで出題された問題をまとめたサイトなどもあるので、そのサイトで簡単なものから順番に解いてみる方法もありますね。教材はオンライン上に溢れているので、誰でも簡単にチャレンジできると思いますよ。YouTubeで勉強したり、市販の教本を購入するのももちろんありです。
ーーこれから競技プログラミングを始める人が知っておいた方が良いことはありますでしょうか。
特に競技プログラミングは、プレイヤー有志によって競技プログラミングのためのツールが盛んに開発されています。学習の記録をブログにまとめるのはもちろん、過去に出題された問題を難易度順に並べたサイトや、コンテスト中に自分が実装したコードを自動で提出してくれるコマンドなども開発がされています。1分1秒を争うコンテストでは、このようなツール類に手を馴染ませることも大事な戦術のひとつになってきますので、色々調べて自分ならではの競技環境を構築すると良いでしょう。
また、競技プログラミングは、プログラミング力というより数学力に近い技能が求められることもあります。問題の状況を図に起こして整理し、エレガントな解法を目指すことも重要になってくると思います。ぜひ少しでも興味を持たれたら、調べてみてもらえていただけたら嬉しいです。