こんにちは、キャディインターン生の山口です。今回は【特別編】インターン生が聞く!キャディインターン生インタビューです。今回インタビューさせていただいたのは、エンジニアの松下祐介さんです。
松下さんは私立灘中学校・灘高等学校に通われ、在学中の中学2年生から高校2年生まで、JOI(日本情報オリンピック)に出場し、高校1年、2年で日本代表選抜合宿に進出。現在東京大学大学院にて、プログラミング言語である “Rust” について主に研究されている傍ら、キャディにてフロントエンジニアとしてご活躍されています。
今回は競技プログラミングを通して学んだことや、Rustの研究について、さらにはキャディでの仕事までをお伺いしました。
競プロを通じて体得したエンジニアとしての「考える力」
ーー本日はよろしくお願いします。キャディで現在フロントエンドのエンジニアとして活躍されている松下さんですが、まずプログラミングとの出会いは何だったのでしょう?
もともと小学生の頃から家のパソコンを触って簡単なゲームを作ったりしていて、小学5年の頃にはExcelを用いてちょっとした確率のシミュレーションを書いたりもしていました。中学に入学すると周りでゲームやアプリ、Webサイトを作っている先輩や同期がたくさんいたため、本格的にプログラミングを勉強したいと思い手当り次第に学んでいたんです。そんな中、先輩でIOI(国際情報オリンピック)に挑戦している方と出会い、私自身も中学2年生で国内予選に初出場しました。
JOI(日本情報オリンピック) / IOIは年に1回行われる競技プログラミング (以下:競プロ) コンテストで、最大規模の大会の一つです。インターネット上で行われる予選、東京会場で行われる本選、日本代表選抜合宿、そして毎年異なる国で行われる国際大会があります。予選には約1000人が参加し、そこから本選へは(当時)約60人、日本代表選抜合宿は約20人、そして最終的に国際大会には4人が出場できます。私は出場した4年間のうち、高校1年生、2年生で日本代表選抜合宿に進出しました。
ーー代表選抜合宿まで 20/1000!狭き門なのですね。その大会に挑戦することでプログラミングの力を磨いていかれたんですか。
そうですね。競プロには問題に対するアルゴリズムを思いつくことと、速く正確に実装すること、という2つの難しさがあるんです。中学生の時にはひたすらに演習して、解法を蓄積し、コーディングの経験を積んでいくことで対策していたのですが、これでは応用力が求められる問題になると解法が思いつかず、歯が立たないこともありました。
高校進学後、私は Haskell などの関数型プログラミング言語や、微積分学・数学基礎論のようなより高度な数学を勉強し、物事を抽象化し概念的に思考する力を培っていきました。それにより競プロでも、アルゴリズムを抽象的な形でストックして初めて見るような問題でも筋の良い方法を見つけ出せるようになりました。またロジックを高い解像度でシンプルにまとめ上げる底力もつき、速く正確に実装することができるようにもなったんです。
こうした頭の使い方は、競プロだけに必要な能力ではなく、エンジニアとして仕事をしたり、情報系の研究をしたりする上でも基礎的なスキルであるため、今でも大切にしています。
使用実例の少ない、アカデミアの世界で注目の“Rust”。研究者として、実社会でそれがどう活きているかを確かめたかった
ーーなるほど。競プロによってエンジニアとしての基礎となるセンスを培われたのですね。現在は大学でRustの研究をされていると伺ったのですが、まずRustはどのような言語なのか教えてください!
Rust は2015年にリリースされた若いプログラミング言語で、オペレーティングシステム(OS) やネットワークサーバーのような基盤システムの開発において特に使われ始めています。データの処理能力の高さ、安全性の高さ、開発のしやすさを兼ね備えた言語です。Firefox という Google Chrome に次ぐシェアを誇るブラウザの一部で既に使われていて、Microsoft や Amazon、Dropbox といった有名企業でも導入されつつありますが、世界でもまだまだ使用実例の少ない言語です。
ーー今注目の言語なのですね。そのRustについてどのような研究をされているのでしょうか?
研究の大枠としては「Rustは本質的にどのような仕組みを持つのか、それを踏まえてRustをより柔軟かつ、安全な言語とするためにはどうしたらよいか」を探求しています。
特徴的なRustの仕組みのひとつが「所有権」によるアクセス制御です。まず従来のコンピューターの計算は基本的に一時的なデータを書き換えながら進んでいくのですが、歴史上、プログラムが大きく複雑になるに従って、データの書き換え(専門的には「破壊的更新」)がバグや、コードの読みにくさを誘発するようになりました。そこで完全にデータの書き換えをコードから無くそうという動きが起きたのですが、それだと実行時の効率が悪くなりがちだったんです。そこで折衷案として「所有権」によって破壊的更新を制限しながら利用していこうという動きが生まれました。
「所有権」はデータを読み書きする主体それぞれに付与されるアクセス権限のことで、それらを上手く管理することで「ある者が特定のデータを見られる状態にあるときは、他の者はそのデータを更新したり削除したりしない」という性質がシステム全体で保証されます。Rust では事前に返却期限(ライフタイム)を決めた上でアクセス権限を借りる(借用)という仕組みをベースに所有権を管理しています。元の持ち主はその返却期限が過ぎてアクセス権限が確実に返された状況になってからデータの読み書きや削除を再開するので、返却時に元の持ち主と借りた側が権限に関するコミュニケーションを取らなくて済む、というのが面白いポイントです。
こうした Rust の仕組みはアカデミアの世界にとってもすごく新しいもので、まだ知られていないことも多いんです。私は Rust のこうした仕組みをより柔軟にし、ソフトウェア検証(バグの検出やコードの正しさの証明)などに応用しより安全な言語にできないか、といった内容の研究をしています。
ーーその研究をしている中、キャディでのインターンを始められましたが、きっかけはなんだったのでしょう?
きっかけは私と中高時代の同期で、一緒にプログラミングの大会にも出場していた小倉くんですね。彼のキャディでのインタビュー記事を読んだことで、キャディで彼がインターンしていることを知りました。私は大学で研究を行う中で、「この学問は実社会でどう活かせるのだろうか」と感じる機会があって、自分の将来を考えるにあたって実社会での経験が必要だと思い、インターンに興味を抱いていました。
小倉くんから直接話を聞いたり自分で調べたりして、キャディが製造業界という巨大市場に挑んでいて、単なる自動化に留まらず人間と情報システムが臨機応変に協調する高度な仕組みの創出に挑もうとしていることを知りました。またエンジニアチームが C++17 を駆使して設計図から製造コストを見積もるアルゴリズムを書いたり、Rustをバックエンド開発に早速導入したりしているのにも驚きました。そこで様々な技術が実社会でどのように活きているのか自分の目で確かめるには最適な環境だと感じ、ぜひジョインしたいと CADDi に連絡、めでたくインターン生として採用していただきました。
経験豊富なエンジニアとオープンに議論して得た学びと自信
ーー実際ジョインしてからはどんな業務を担当されているのですか?
Rustだけではなく、様々なプログラミングに関わってみたいと思っていたため、Web のフロントエンド・BFF (Backends for Frontends)の開発を担当しています。フロントエンド・BFF関連の新たなツールを探し、開発に活かせないか技術検証を行って新たな知見を取り入れつつ、TypeScript・GraphQL・React を用いた社内向けプロダクトの開発チームの一員として働いています。
ーー働く中で松下さんから見て、キャディのエンジニアチームはどんなチームだと感じますか?
実務の開発経験が全然無いまま飛び込ませてもらいましたが、若手のエンジニアの意見にオープンで仕事に大きい裁量権を与えてくださっています。周りのエンジニアの方は、CTOの小橋さんを含め様々なプロダクト開発に携わった経験豊富な方が多く、フィードバックをいただけるので学びが多いですね。
例えば、以前バックエンドの開発が難航していた時に、フロントエンド・BFF の視点からバックエンドの設計方針の大幅な単純化を恐る恐る提案したことがありました。するとバックエンド・BFF・フロントエンド全員でのミーティングがその場で開催され、議論のすえその日のうちに私の案をもとにして生まれた新しい方針が採用されたんです。
エンジニアの一員として意見を聞いていただき、議論に参加できたことはとても嬉しかったですし、自信につながりました。
また日常の業務の中での学びとともにキャディ主催で行われるC++に関する勉強会もあり、知識のインプット・アウトプットどちらもサポートいただけていますね。
ーーキャリアに関係なく意見を尊重してくれる環境、ということですね。最後にお話にも上がったC++勉強会を宣伝いただけないでしょうか…!
わかりました(笑) キャディのC++勉強会は、C++の入門書や「本の虫」というC++に関するブログで有名な江添亮さんが来てくださる、とても貴重な勉強会です。内容としてはC++の新しい機能の使い方や、ちょっとマニアックだけれど実は現場の開発に活かせるような豆知識などをお話しいただいています。
ライブコーディングしながら受講者の方と対話しつつ説明していただけるので、納得感が高くとても良質な勉強会だと感じています。キャディのエンジニア以外の方も気軽に参加できる勉強会かと思うので、ぜひ一度足を運んでいただきたいですね。
Photo by Yu Ueki
ーー本日はありがとうございました!
キャディC++勉強会はこちらから!