求む!競プロ経験者!モノグサと競プロ経験者の相性の良さ
モノグサのエンジニアチームには、競技プログラミング(以下競プロ)が趣味のメンバーが多くいます。競プロ経験をきっかけにモノグサに入社した社員も少なくありません。社内では競技プログラミング部(通称競プロ部)も設立され、現在部員は20名ほど! 昨年には、競プロ部として大会出場も果たしました。
そこで、競プロ経験者であるエンジニアのお二人に、競プロ経験とモノグサの開発チームで働く環境との親和性について聞きました!
*内容は2022年7月時点の情報です。
大野さん(写真左)
大学でプログラミングを少しかじる。AtCoder Jobsをきっかけにモノグサに入社し、モノグサ一人目の Customer Reliability Engineer(CRE)として働く。
深谷さん(写真右)
大学でプログラミングに出会い、4年ほど前から競プロを始める。AtCoder Jobsをきっかけにモノグサに入社し、Software Engineer(SWE)として働く。主な担当領域は数学コンテンツ。
ー まず、お二人のプログラミング歴と競プロ歴について教えてください。
深谷さん:私がプログラミングを始めたのは大学生の頃。物理学科なので必修ではなかったのですが、ちょっと面白そうだと思ってC言語の授業を取ったのが最初だったと思います。競プロについては、4年くらい前にTwitterで目にすることが多くて、コーディング面接にも役立つと聞いたのでちょっと腕試しにやってみたのがきっかけです。
大野さん:私も最初にプログラミングを経験したのは、大学で受けた情報の授業になります。大学を卒業して最初に就職した会社では、あまりプログラミングをする業務ではなかったので、1年くらいプログラミングをしていない状態でした。そこで、「何か技術を身につけたいな」と思い競プロを始めました。
ー お二人が考える競技プログラミング競プロの面白さは、なんでしょうか?
深谷さん:そうですね。競プロは、大量のデータを高速で時間内に処理しなければならないので、そのためにどういうアルゴリズムを組み立てるかが分かっていないとなかなか難しい問題が解けないんです。高速でコードを書くことを大学の授業ではやらなかったので、それが新鮮だったというか、衝撃でしたね。さらに言うと、AtCoderのコンテストで、ランキングトップの人が自分より何十倍のスピードで解き終わっていて、それがとにかく衝撃でした。「世の中すごい人がいるんだな」というのが可視化されたのが、競プロの印象でした。競プロをしていると謙虚な気持ちになれるというか、「自分も頑張らなきゃ」という気持ちになれることが多いですね。
大野さん:競プロは、ある種の基礎的な体力、プログラミングの体力みたいなものかなという気がしています。例えば、野球では最初キャッチボールからスタートして、その後バッティング練習をする、みたいな。基礎的なところを少しずつ高度にやっていくことができて、結果的に競プロを通じて、実際の業務で使える技術が身につくのかなと思っています。
ー お二人とも、AtCoder Jobsをきっかけにモノグサに入社されたんですね。
深谷さん:はい。AtCoder Jobsは前職のときからたまに見ていたのですが、やはり一定以上の力を求めている企業の方が面白いアルゴリズムな仕事が多いのかなと思い、青色コーダー以上を求めていることを条件にフィルターをかけていました。その中でモノグサを見つけて、カジュアル面談をしました。
大野さん:前職で業務を進める中で、もう少し自分の技術力で勝負したいなと思っていました。AtCoderをある程度熱心に取り組んでいたので、その力を評価していただけるところを探そうと思い、AtCoder Jobsの求人の中から探し始めました。最初にモノグサを知ったとき、「未知のことをやろう」みたいな雰囲気が非常に伝わってきました。自分も、ある程度決まった業務をやるというよりは、全く何も決まってないところを自分で道を開いていくことを若いうちにやってみたいという思いがあり、カジュアル面談から応募しました。
ー エンジニアとしての開発環境を考えたときに、モノグサについて魅力に感じたポイントはありましたか?
深谷さん:やはりエンジニアとして思うのは、レベルが高い環境で働きたいということです。CTOの畔柳さんはGoogle出身で、私がコーディング面接で書いたプログラムのバグをあっという間に見つけたりとか、やはりすごい方だと思いました。今入社して話していても、ちょっと相談すると、技術的に細かいところまで非常に良いアドバイスをもらえたりするので、まさに求めていた環境でした。
大野さん:前職ではプログラミングをする環境ではなかったので具体的な理想像はなかったのですが、入社してからの印象として、技術力が非常に高い人がそれぞれの分野で第一線で働いている、と思いました。お互いに高め合えるような人たちがいる環境が揃っていると思います。あとは、会社全体として開発チームとビジネスチームとが近い距離で働いてプロダクトを常にアップデートし続けていて、「アップデートが速すぎてお客様が混乱してしまうこともある」という話を聞いたときに、決断する速さが、やはり働いてみても魅力的だなと感じています。
競プロ経験者との相性 ①競プロで学んだ思考プロセスが活かせる
ー 競プロに取り組んできた経験と業務でのプログラミングを考えたとき、競プロ経験が活かされていると感じることはありますか?
深谷さん:私は最近数学領域のコンテンツを作るための議論をしてるのですが、数学って意外と定理やテクニックを憶えなければならなくて、「記憶していないから数学が解けない」ということが結構あるということに気づいたんですね。競プロも、数学に似ているところがあると感じています。「ここを憶えていれば解けるはずだった」とか、憶えたテクニックを組み合わせてどう考えるかなど、記憶によって解けない問題が解けるようになるというプロセスを考える上で、競プロを参考にしているというところがありますね。
競プロ経験者との相性 ②競プロで学んだ知識・技術が活かせる
深谷さん:全てのプログラムを高速化しているわけではありませんが、パフォーマンス的にユーザー体験にクリティカルな部分は高速化をしています。今取り組もうとしている手書き数式認識機能(手書きの数式を認識することによって、ユーザーが数学の問題を回答できるようになる機能)の部分では、ビームサーチという高度なアルゴリズムで探索をしています。これは、黄色コーダーのインターン生がコードを書いています。アルゴリズマーだから書ける高度なロジックを書いていて、私自身も競プロを経験していたからこそ、「アルゴリズムがこうなったときには変な動きをするんじゃないか」という指摘がコードレビューの場面でできました。Monoxerは、アルゴリズムやデータ構造で勝負している部分が結構あります。「アルゴリズムによってユーザーの生活を良いものにしたい」という人には、相性が良いんじゃないかなと思いますね。
*インターン生による手書き数式認識機能についての記事はこちら!
大野さん:私自身は高度なアルゴリズムを使う開発には関わっていませんが、プロダクトの中で競プロで学ぶ技術が使われています。たとえばMonoxerの機能のひとつである漢字の手書き判定の部分でも、高速で判定をする部分で難しいアルゴリズムを使っています。競プロのために学んできた知識を活用する場面というのはもちろんありますし、これから領域が広がって新しく取り組みたいことをいかに解決するかという部分でも、競プロで学んだ知識が活かされると思います。
深谷さん:競プロは、高速で複雑なアルゴリズムをいくら書いてもバグがあったら意味がなくて。シンプルにコードを書いて、変数名をちゃんとつけるテクニックなど、そういった「バグらせない技術」というのは高速化が必要なコードではなくても役立ちます。実際のコードの95%くらいは競プロのコードよりもやはり簡単なロジックを書くことが多いのですが、その簡単なコードもバグらせずに早く丁寧に書くという技術というのは、競プロで学んだ技術に近いところがあるなと思います。
*深谷さんによる、数式を操作するアルゴリズムについての記事はこちら!
競プロ経験者との相性 ③競プロに取り組んできた姿勢が活かせる
ー 競プロで培った技術や経験が、実際の業務のなかでも活かされているんですね。モノグサの開発チームの雰囲気などで、競プロと通じる部分はありますか?
深谷さん:そうですね。モノグサのエンジニアには、競プロをやっている人もやってない人もいるんですが、Monoxer自体が「記憶する」ことにフォーカスしているので、勉強の大切さに共感してる人がエンジニアにも多くいると思います。アプリの価値観に共感することによって、プロジェクトが上手くいきやすいということはあると思います。勉強することの価値を知ってる人は、モノグサと相性が良いかなと思いますね。
大野さん:みなさん勉強熱心だというのは非常に常に感じています。常に自分の仕事をするにあたって必要なことを学んでアウトプットしていくことが、カルチャーとして根付いていると思います。また、自分が学んだことは共有して、自分だけのものというよりも会社全体でシェアしてより高め合っていこう、みたいなところは、エンジニアだけじゃなくて本当に他の職種の方も含めて非常に感じているところではありますね。
そもそも競プロをやろうというモチベーションがある方は、「学びというものを良くしたい」という思いを、おそらく持っている方が多いと思うので、そういうモチベーションやニーズと非常にマッチすると思います。
深谷さん:あと、シンプルにプログラミングが好きな人が多いですね。私や大野さんも大企業出身でしたが、必ずしもプログラミングの部署でみんなプログラミングが好きというわけではない、ということを経験してきました。モノグサはプログラミングが好きな人が多いので、結構話してて楽しいと感じる瞬間が多いです。競プロをやっている人はプログラミングが好きな人が多いと思うので、私たちとは結構話が合うんじゃないかなと思ってます。
モノグサの開発環境の魅力 ①「そもそも課題は何か」から考える
ー ありがとうございます。では、個人で取り組む競プロとチームで取り組む開発との違いはなんでしょうか?モノグサの開発環境ならではの面白さはありますか?
深谷さん:そうですね、競プロは役に立ちますが、業務ではやはり他にもいろいろ吸収していくことが必要です。例えば、自分が読みやすいコードだけじゃなくて、チームにとって良いコード、チーム全体にとって読みやすいコードを書いていくことが大切です。あと、どういう実装方針がいいかとか、そもそも「何を実装すべきか」というのを考えるのは、競プロにはないと思います。
ー 「何を実装すべきか」ですか?
深谷さん:モノグサではチケット駆動開発を行っていますが、チケット(開発したい機能や解決すべきプロダクトの問題点を起票したもの)は何千個とあります。
そのチケットが増えるペースと私たちエンジニアが開発して解決していくペースの差は、基本的に開く一方です。全部実装するわけにはいきません。
ちゃんと大事なものを見極めて実装していかなければ、スタートアップとして良いペースで成長できません。そのためにお客様の利用状況に詳しいセールスのメンバーやCSのメンバーと話してその課題を消化して、良いソリューション、「実はお客さまが必要なのはこういうものなのではないのか」を考えて実装していくというのが、競プロにはなかなか無いところ、違いなのかなと思います。
大野さん :やはり競プロだと、「解いてください」と明確に課題が設定されているのですが、業務を進めると、そもそも課題が何かがわからない。その課題の設定をどのようにするか、例えば大きな課題を設定したらそれをどのように細かく分けてやっていくのかを決めなければなりません。そのようなところは、ビジネスチームの人と話したり、エンジニア内で解決方針を考えたりします。
最終的には「全人類に届けたい」だとか、「記憶をより良くしていきたい」という思いと価値観にマッチしているのか、と考えたりとか。そういうところはある意味、競プロではできないところであってモノグサだからできる楽しいところ、やりがいを感じるところですね。
課題自体を設定して最終的にそれをプロダクトの中に落とし込んで、お客様に使ってもらって。それに対して例えばお客様から「非常にいい機能だ」と言っていただける体験は、おそらく競プロだけでは得られないような喜びや面白さがあると思います。
モノグサの開発環境の魅力 ②他職種との活発な議論
ー 他職種のメンバーとのコミュニケーションが活発なことは、モノグサらしさのひとつですね。
深谷さん:そうですね。いま取り組んでいる数学領域のコンテンツでも、多様な観点をプロダクト作りに取り入れていきたいと思っています。例えばスマホで数学の問題を解く際に、どのような画面であるべきか、結構難しいんですよね。スマホで数式を打たなければならないし、図が含まれる問題もあります。どのような配分で画面を作っていくのかなど、デザイナーのメンバーと真剣に議論する必要があります。あとは、どのようなコンテンツがあり得るのかという点では、教材出版社と折衝しているセールスのメンバーと密に連携を取って進めています。
ー 大野さんは、モノグサ一人目のCustomer Reliability Engineer(CRE)として、他職種のメンバーとのやり取りが特に多いそうですね。
大野さん: 普段からお客様とコミュニケーションをとっているCSのメンバーとのやり取りから、課題をエンジニアリングの力で解決できるのか、あるいはCSのメンバー側でまず対応してもらえばいいかとかなどを考えてやっています。お客様がプロダクトに対して不安に思うと、信頼できないプロダクトを使うよりはこれまで使ってきた紙と鉛筆での学びに戻ってしまう可能性もあると思っていて、そういう部分は非常に考えて業務をしていますね。
*モノグサのCRE職について詳しくはこちら!
モノグサの開発環境の魅力 ③インパクトある事業を自分の力で進められる
ー モノグサはいま、一緒に働くメンバーを募集しているタイミングです。
大野さん:前職の比較的大きな会社では、プロジェクトを一つ回すにも色々なところで確認作業が非常に多くて時間がかかってしまい、もどかしさを感じていたところがありました。そういう意味ではモノグサは、会社の規模的に成長中で、ほとんどよく知っているメンバーでワンフロアで業務を進めているので、意思決定が速やかです。「必要だよね」という意思が統一されていて、必要なことであればすぐそれが採用される環境です。
例えば、プロダクトへの反映や業務フローの改善など、自分がやりたいこと・やるべきだと思ったことを自分の力で進められるのが非常に魅力的だと思います。どんどん良いものを提案して作り上げていきたい、という気持ちがある人にとっては非常に良い環境だと思いますし、そのような人が入ってくれることを我々も望んでいます。
深谷さん:ソフトウェアエンジニアとして、自分が業務で携わるソフトウェアのインパクトを大きくしたいという思いがあります。そのインパクトを考える上で、領域とレベルの高さという要素があると思います。
「記憶」という領域は、自分自身でもインパクトの大きさを信じています。またレベルの高さでは、エンジニアリングのレベルとビジネスのレベルの高さ。結局エンジニアが良いものを作っても、それがお客様にリーチしないとインパクトが高まりません。モノグサでは、セールスやCSのメンバーのレベルの高さによっても、自分のソフトウェアのインパクトが大きくなっているということを、日々感じていますね。
モノグサ株式会社では一緒に働く仲間を募集しています。
少しでも興味を持っていただけた方は、ぜひお話しましょう!