「天才じゃなかったら精進するだけ」国際情報オリンピック銀メダリストが語る、競プロで結果を出すエンジニアの共通点

こんにちは、キャディ広報の浅野です。
今回、キャディでエンジニアとしてインターン中の現役東大生、小倉拳さん(22)にインタビューしました!

小倉拳(22)東大工学部計数工学。4月から東京大学大学院へ進学予定。

ー今日はよろしくお願いします!小倉さんは競技プログラミングのプロだと伺いました・・!

プロ(笑)かはわからないですが、灘の中・高在籍中にパソコン部というのに入ってまして、当時関西に居た自分は「本戦に出れたら東京にタダで行けるチャンス!」と思って、毎年情報オリンピックに参加してたんです。

中3で本戦に出ることができ、高1では代表選抜合宿まで進み、高2の時に初めて日本代表に。2014年に台湾で開催された国際情報オリンピック(IOI)に出場し、銀メダルをいただきました。

ー世界大会で銀メダル!そもそもどんなコンテストで、メダルをとるのはどれくらいの狭き門なんですか?

(IOI 2018 JAPAN公式サイトより引用)

説明難しいんですが、まずオンラインで受けられる情報オリンピックの予選があり、その時点で数百人から60人程度まで絞られ、このメンバーが東京に行ける権利を得ます。

そして本戦を行い、そこからまた20名まで絞られ、5時間の競技プログラミングを4日間続ける代表選抜合宿(通称:春合宿)へ行ける権利を得ます。今週末まさにその春合宿が開催されるのですが、自分も過去の春合宿参加者ということで、運営をお手伝いする予定です。

そしてその春合宿から最終上位4名が国際情報オリンピック(IOI)へ出場できます。IOIには80ヶ国以上から300人以上の選抜選手が集まります。毎年違う国で開催されますが、自分が銀メダルを獲得した時は台湾での開催でした。去年は初めて開催国が日本だったんですよ。

ーなるほど〜。。国際情報オリンピックやその他競技プログラミングで高みを目指す人はたくさんいると思うんですが、どうやったら好成績を残せるんでしょう?

2つあると思っていて、まず一つは、この分野がそもそも好きがどうか。自分もそうですけど、問題を解くことが楽しくて、昔はついつい徹夜でやっちゃったり、時には夢の中でも問題解いてたり。ゲームとかと同じですね。夢中になれるものだと強いです。

もう一つは、もしあなたが天才だったらぶっちゃけやることは何もない(笑)んですが、もし天才じゃない場合は、やっぱり努力は必要です。界隈では「精進」って言葉をよく使うんですけど、地道だけど過去問を全部解くとか、量に触れるのも大切ですね。

ー情熱と努力。確かにこれはどんな分野でも言えそうですね。そんな小倉さんは、去年の12月にキャディが開催したAtCoderプログラミングコンテスト「CADDiコン2018」に参加してくれました。しかも橙コーダー!どうしてエントリーしようと?

AtCoderの競技プログラミング自体は今までもちょくちょく参加してまして、その時もちょうど飲み会の帰りか何かでCADDiコンが開催されることを知り、若干酔っ払いながら(笑)、参加してみたら賞金をいただけて。

そして後日CTOからメッセージをいただきました。
参加に対するお礼と、「もし興味あればキャディでインターンしてみませんか?」と。

当時院進することを決めていた自分は、もともと研究や勉強が好きだから、できればなるべく労働したくないなと思っていたんです。でも学問も学問でやってみると上下関係とか業務上の手続きとか、めんどくさいことは等しくあるなと感じるようになり、今後ずっと研究するにしても、一度も労働経験を積まないのはダサいなと感じたので、インターンできる先を探してたところでもありました。

キャディ以外にも候補はいくつかあったんですが、キャディはC言語(C++)を使ってるところが魅力でした。PythonやPHPを使ってるところは多いですが、業務でC++の17を使ってるところは珍しいと思います。

オフィスに遊びに行かせてもらった時、在籍してるエンジニアさんが実際に書いたコードを見せてもらったんですよ。そのコードの素晴らしさに感動したことも決め手の一つですね。言語仕様を端から端まで知ってる人じゃないと書けないような、そんなコードでした。テンプレートメタプログラムという黒魔術のようなもの(笑)を使いこなしていましたね。

ーなるほど〜キャディで働くエンジニアの木村くんもC++書ける仕事ないかTwitterで探しててキャディみつけたと言っていました!実際にキャディのインターンではどんなことをしてますか?

そもそもキャディはどんな会社かというと、独自開発の原価計算アルゴリズムに則った自動見積もりシステムによって、品質・納期・価格が最も適合する会社とのマッチングを可能にする製造業の受発注プラットフォーム「CADDi」を提供してます。設計図の3D CADデータをアップロードし、数量や材質、塗装などのパラメータを指定すると、それに基づいて価格と納期が約7秒で算出・表示されるというもの。

僕は、そのシステムを構築する上で必要な基礎的な知識を測る数学の試験問題を、エンジニアメンバー向けに作成しています。エンジニアと一言で言っても、専門領域が違えば持っている知識も全く違うので、メンバーの知識レベルの把握と標準化のためのテストになります。

また、基礎レベルを揃えるということに加えて、各々が持っている専門性をあぶり出すことも目的としています。各々の強みを把握することで、それを戦略的に他メンバーへの教育などに展開できます。

自分は、難解なものを複数の工程に分解して、他の人に段階的に理解させるのが得意な方なので、この仕事は楽しいです。また、今後はC++の形状解析のライブラリー開発に関わる予定で、それはCADDiのコアテクノロジーの部分により関連してくる領域なのでとても楽しみです。

ー今までの競技プログラミングで得たスキルはいきてるなと思いますか?

はい、思います。
CADDiのシステムには設計図を展開図に分解し、製造工程まで落として解析するということを自動でできるようにするアルゴリズムが必要なんですが、それには幾何学とグラフ理論(あともちろん高校数学)が必要です。競技プログラミングでは幾何学が扱われることは少ないですが、最適化とマッチングがテーマになることが多いので、その考え方は基礎になります。例えば、ある立体のデータがあって、それを作る時に一番コストが少なくなる作り方は何か?その方法を考える、などです。

ー実は来たる3/22(土)、キャディでは「CADDiコン2019」を開催する予定なんです!なのでおすすめしてください(←)

はい(笑)。今回は前回と違って8時間のマラソンなんですよね?2時間くらいのコンテストは最適な一つの解を何パターンかの解法を使って答えを出すという内容ですが、マラソンの場合、解はそもそも存在していなくて、どうやればいいかわからないという中でそのやり方を模索するので、その点においてより実務に近いと言えると思います。数理的で本質的な問題解決力が試されるので、ぜひ挑戦してみてほしいです。

ー小倉さん、ありがとうございました!

「CADDiコン2019」のページはこちら!
https://atcoder.jp/contests/caddi2019

キャディ株式会社's job postings
4 Likes
4 Likes

Weekly ranking

Show other rankings
If this story triggered your interest, go ahead and visit them to learn more