


前職では主に、研究機関やSI企業向けの数値解析に関する業務を担当。ナビタイムジャパン入社後は、乗換案内サービスに使用される「乗換エンジン」の開発に携わり、プログラムの最適化やアルゴリズムの改善を行うことで経路探索を日々高速化していくことを目指している。
ナビタイムジャパンで、NAVITIMEの乗換案内サービスの中核となる「乗換エンジン」の開発に携わるK. I氏に話を聞いた。仕事を通して、グラフ理論、プログラミングの面白さに目覚めた。理論と実装の両立、コードの美しさと速さの両立が課題だ。

- ──ご経歴を教えてください。
- 専攻は数学です。大学院の修士まで進みました。それも、紙とペンで解く純粋数学の世界でした。しかし、現実世界の問題を解くにはプログラムを走らせないといけないと考え、研究所からの受託開発をしているソフトウェア開発会社に就職しました。そこでは建築の振動のシミュレーションプログラムをC++で書くなどの仕事をしていました。
- ──前職で思い出に残る出来事は?
- 学生時代は数学ばかりやっていて、社会人になりたての頃は全然プログラムが書けませんでした。悩んだり、叱られたりで、プログラマとしてやっていけるのか不安に思っていました。そんなとき、出向先でお世話になった上司が、プログラムに関して手厚く教えてくれました。対面レビューでたくさんのことを教えてもらい、プログラムを書くのが面白いと気付くきっかけになりました。それに、自分も後輩の面倒をよく見るようにしよう、と思うきっかけにもなりました。
- ──ナビタイムジャパンに入社しようと考えたのはなぜですか。
- 理由の一つとして、私たちの会社では経路探索のアルゴリズムの研究開発をしていますが、そのような企業は非常に少なかったことがあります。もう一つの理由は少数精鋭の企業で働きたかったからです。技術に対して保守的な大企業よりも、少数精鋭企業ならではの、新しい技術を積極的に取り入れる姿勢に魅力を感じました。
- ──入社してみて気がついたことはありますか。
- 経路探索のアルゴリズムを開発する上で基礎になるのはグラフ理論ですが、実は私は学生時代はグラフ理論は不得意科目で「もう二度とやりたくない」と思っていました。前職で活用していた数学は微分方程式の解法など、グラフ理論とは異なる分野でした。
- ところが、入社後に必要に迫られてグラフ理論を勉強してみると、数学的な考え方の根本では自分がやってきたことと共通する部分が意外と多いことに気がつきました。例えば、微分方程式をプログラムで扱うためのデータ表現と、グラフのデータ表現は同じなんです。今はグラフ理論が好きになりました(笑)。

- ──数学とプログラミングの両方が好きな人が向いている仕事なのですね。
- 入社から3年目ですが、一貫してNAVITIMEの乗換案内サービスのコア部分に相当する「乗換エンジン」の開発に従事しています。アルゴリズム、数学の知識が必要な仕事です。それと同時に、複雑なアルゴリズムをきれいにプログラムに落とし込めるセンスも求められます。
- 私の印象では、数学が好きな人にはプログラミングが好きではない人が多いのですが、私たちの仕事は最終的にはプログラムに落とし込まないといけません。それとは逆に情報系出身の人の場合、プログラムは得意だけど数学出身の人ほどアルゴリズムに詳しくない人が多い。アルゴリズムや数学と、プログラミングと、両方ができる人材はなかなかいません。
- ──ご自分で手がけてきた仕事で印象深いものは何でしょうか。
- 乗換エンジンのパフォーマンス改善の試作を任されたことです。自分のアイデアで、一部のリクエストに対してある種の前処理を施してそれをデータベース化しておき、そのデータベースを使用して経路探索処理のパフォーマンス改善を図ることを考えました。データベース管理をシンプルな構造に変更して20%近い性能改善が得られました。ここまで高速化できたのは初めてで、うれしい思い出です。新技術を積極的に取り入れられる環境で良かったと思います。

- ──最近はどんなお仕事を?
- 乗換エンジンの設計を根本的に見直そうとしています。そこでどんなアルゴリズムが良いのか論文を読みあさったりしています。経路探索では、パフォーマンスと経路品質がトレードオフの関係にあります。パフォーマンスを良くしながら、いかに経路品質を担保するかが課題です。
- 経路品質は、ユーザーの価値観で「良い」「悪い」の基準が変わります。そこでユーザーによって最適解が変わることを前提として、経路品質を評価するモデルを作ろうとしています。
- ──今、関心を持っている分野は何ですか?
- プログラムの高速化手法です。プログラムをきれいに書こうとするとパフォーマンスが下がるし、プログラムを速くしようとするとコードが汚くなる。でも、私は完璧主義者なので両方実現したい(笑)。例えばC++のオブジェクト指向機能のうち、仮想関数は呼び出しコストがかかりパフォーマンスに影響を与えるので安易に使わないようにして、その代わりにテンプレートで多態性を実現するやり方にしています。ただ、テンプレートも使いすぎるとコードの保守性が悪くなる弱点があります。
- そこで、別の言語も検討しています。興味を持っているのは「D言語」です。最近、FacebookがD言語を使い始めているという情報もあります。まず、社内ツールに使うところから始めていければと思っています。
- ──新言語を試せるのはいいですね。最後に「開発チームに求めているもの」を教えてください。
- こだわっているのは、何をするにしても「疑問を持つ」ことです。チームのメンバーには、常に疑っていてほしいと思っています。メンバーが私の指示に素直に従ってくれるのはもちろんうれしいのですが、それだけでなく疑問も持ってもらいたい──ちょっとアマノジャクですが(笑)。疑問、違和感を口に出さずに見過ごすことで、後々良くない事態になることは避けたいですね。
- 先ほどプログラミングと数学の両方の知識が必要、というお話をしましたが、もう一つ、英語も必要です。最新技術を知ろうとするとどうしても英語を読む機会が増えます。英語の文法は日本語よりも分かりやすいので、食わず嫌いにならずに読んでほしいと思っています。
- 若手のスキルを上げていくことも課題です。先輩が後輩を教えて、後輩が次の後輩を教える、そんなサイクルを作りたいと思っています。例えば、新卒入社の人たちが入ってきたら、グラフ理論の勉強会をやります。次の年は、その人たちが次の新卒に向けて勉強会をやる。こうしたサイクルを作っていけば、その分、私の方は好きなことができます(笑)。
- ここ数年の新卒入社の人たちのスキルは上がっています。私も追い抜かれないようにしないといけません。

「ギークアカデミー」バックナンバーはこちら
今回のギークが活躍する現場は「株式会社ナビタイムジャパン」
エンジニア求人一覧は以下よりご確認いただけます。

ご登録後、すぐにご紹介できる求人がない場合は、インテリジェンス DODAカスタマーセンターよりその旨をご連絡の上、求人発生時まで求人紹介・カウンセリングをお待ちいただいております。あらかじめご了承ください。