- MLエンジニア
- 採用人事・人事責任者
- Backend
- Other occupations (2)
- Development
- Business
国内でその肩書をもつ人が少ない「アルゴリズムエンジニア」。
仕事内容に興味を持ちつつも、実際に必要なスキルや特徴がわからないというエンジニアも多いのではないでしょうか。
キャディにはアルゴリズムエンジニアのチームがあり、キャディが類を見ないサービスであり続けるためのコアな部分を担っています。
なかでも製造原価計算のアルゴリズム開発や、数値解析を活用した製造工程シミュレーションを行うのが、「QCDアルゴリズムエンジニア」。
学生時代からキャディに参画している木村佳祐が、QCDアルゴリズムエンジニアの仕事内容を語ります。
コスト計算に特化したアルゴリズムをつくる。愚直な作業の先に得られる「最高!」な瞬間
――アルゴリズムエンジニアとは、どんな仕事なのですか?
キャディが提供するサービス『CADDi』は、お客様がWEB上にアップロードした金属加工部品の図面から自動で見積もり出しQCD(品質・価格・納期)において最適な町工場とつなぐプラットフォームです。相見積もりをとったり価格交渉をしたりしなくても、最適な町工場を割り出し、適正価格での発注ができます。
そのような中でアルゴリズムエンジニアは、部品発注に関わるコストを算出するための高精度な計算システムを作っています。部品の形状データを画面上で読み込み「どの部品をどこに発注するとコストや納期がどうなるのか」という情報を知る上で活用されています。
一般的にWEBで入力するフロントエンド、それを受け取ってシステムを作っていくバックエンドと分かれていますが、キャディではバックエンドエンジニアの中でもアルゴリズムを専門とするメンバーが複数人いるんです。
――バックエンドエンジニアを、さらに分類したと。
はい。アルゴリズム部隊は、さらに2つに分かれています。
ひとつは「CADアルゴリズム」で、2次元や3次元で描かれたCAD図面の細かい形状をプログラムで解析しています。もうひとつは「QCDアルゴリズム」で、部品の形状データをもとに最終的に「どう発注するのが最適か」を導き出す仕組みを作っています。僕は、QCD担当です。
――発注の仕方を計算するって、どういうことでしょうか?
どの部品をどこに何個ずつ送るか、どこで作ったものをどの地域にどうやって移動させるか、という組み合わせの最適解を弾き出すイメージですね。「どういうルートで輸送するのが最適か」「パートナー企業さんに作業して頂いたときの品質や納期」「どういう加工ができるか」というようなデータを探し出します。
――かなり複雑ですね。仕様はどのように決めるのでしょうか?
パートナーである町工場や、発注をくださる企業のご担当者さまと対面しているビジネスサイドと打ち合わせをし、その内容をこちらで汲み取り、改良方法を探っていきます。エンジニアとはいえ、事業について理解をした上でさまざまな要望を聞き入れ、仕様を調整していく能力が必要ですね。
カスタマーサポート側の「なるべく安い金額で加工品を提供したい」という想いと、町工場をサポートする側の「黒字を保証したい」という想いの間に立って、最適解を追いながらも現実的な実装としてプログラムに落としていきます。すべてのステークホルダーに対して誠実であることと、現場と乖離した「理想のプログラム」で終わらせないことを特に気をつけていますね。
本来であればPMが間に入るのかもしれませんが、立ち上げまもないサービスということもあり、各エンジニアがプロダクトにがっつり入ってビジネス側とやり取りすることも多いです。
――キャディにおけるアルゴリズムエンジニアの面白みって、どんなところだと思いますか?
パズルのように解が絡み合っており、最適解を突き詰める作業そのものが最高に面白いです。「ここのロジックを変更するとあの図面のときはこういう風に価格が変動するのか……どう実装しようかな、こう変えたらこっちで影響が出てしまうし……悩ましい!たまらん!」とテンションが上がります。
仕組みから設計していくだけでなく、ひたすら手を動かして実装するときもあり、創造性とガッツの両方が必要です。ビジネスへの理解とアルゴリズムによる最適化という軸から理想を追って現実に落としていくのが好きな方にバッチリハマるお仕事ではないでしょうか。
高校生時代、ネットに繋がってないPCで勉強したのはゲームを作るためのC言語
――必要な知識はどこで学ばれたんですか?
独学ですね。
高校生のときにパソコンを買ってもらったことをきっかけに、「せっかくならなにかこの機械でクリエイティブなことをしてみたい」と思い、プログラミングに詳しい同級生に相談したらC言語を薦められたんです。
家庭の教育方針で家ではインターネットが繋がっていなかったので、情報はすべて借りてきた本から得ていました。ひたすら読んで、理解してみた気になってまずは書いてみる、そこからまた学びを深め、読み返して定着させて先へ進む……という繰り返しです。
――ネットを繋がないままプログラミングの勉強をするって、すごいですね。実際に何か作ったりはしたのですか?
ゲームがない家庭だったので、「自分でゲーム作ってみようかな」というぼんやりした目標はもちつつ、でも何をしたらいいかよくわからず、とりあえず手を動かしたい!と高校の情報科の恩師に相談したら「コンテストがあるよ」とチラシを持ってきてくれて。二つ返事で出場を決めたのが「SuperComputing Contest 2013, 2014」です。
スーパーコンと略されるコンテストですが、1995年からの歴史ある舞台で毎年1,000組以上が応募します。数日間かけて課題を解くプログラムを作成し、完成度を競うというものです。C言語を薦めてくれた友人とペアで出場して、結果本選までいくことができました。
――高校生の頃から頭角を表していたんですね。大学ではどんなことをやっていたんですか?
既存のゲームエンジンに頼らず自分の手でゲームを作りあげることに強い興味を持っており、会津大学のコンピューター理工学部に進学しました。
コンビニで働いたお金でインターネットを引いて本を買い漁り、高校時代に封印していたゲーム制作という夢に向かってひたすら手を動かしていました。
生まれつき「なぜそうなるのか?」という根本を突き詰める性分で、数学や物理、回路設計やOSの仕組み、ウィンドウアプリケーション制作など手当たりしだいに勉強していました。回り道もたくさんしましたが今の仕事で図面を3D表示するためのコードを書いたりと、思わぬところで役に立っています。
CTO直下でシステム設計を学び、キャディのエンジニア集団の中核を担う存在に
――木村さんは、在学中からキャディで働いていますよね。入社のきっかけを教えてください。
大学3年の3月ごろに、一旦休学して学費を貯めようと思っていたのですが、そのころにかねてより運用していたTwitterで、「C++の仕事ないかな」とつぶやいたことがきっかけです。(笑)
そしたらすぐに知り合いから連絡がきて、CTOの小橋と会う機会をもらいました。するとすぐに業務受託で仕事を始めることが決まって。休学期間を使ってがっつり関わらせてもらいました。その流れで去年9月から正社員として働いています!
――そのまま正社員になられたんですね。復学しなかったのはなぜですか?
キャディでめちゃくちゃ成長実感を得られたことが一番の理由ですね。あえて大学に戻って学ぶよりも、業界に入って経験を積んでいくほうがいいと思ったんです。
働き始めた頃はCTO小橋のすぐ隣の席で、CADのアルゴリズムエンジニアとして既存のコードの修正や拡張など、比較的「やりやすい」作業を任せてもらっていました。
――自分の中で「一皮剥けたな」と感じた出来事があれば教えてください。
自分の中で大きく成長を実感した時期は昨年9月ごろから年明けにかけてですね。
「今後どうなりたい?」という問いに対して、「C++という武器を活かしつつ、ビジネス側ともコミュニケートしてシステムを作っていきたい」と伝えたところ、QCDアルゴリズムという新たなシステムの立ち上げとそのコア設計という巨大な仕事を任せてもらいました。
最初は浮かれていましたが、システムの規模があまりに大きく、ゲームを趣味で書いていた程度の経験はほとんど通用しないことに気づきすぐ顔が青ざめました。いきなりプログラムを書くわけにはいかないので設計から考えなければなりません。「とはいえどうやって思考したらいいのか?」という段階でいきなりぬかるみに足を突っ込んだ感じで。
UMLという記法でシステムのデザインを書いていくわけですが、頭の中になんとなくあるものをいざ画面に表現してみると何かが足りない。何が足りないかわからないままCTOに見せると「エラー処理はどうしますか?」「ここにはどういうデータが受け渡されますか?」「この設計だと今後増える加工方法に対応できないのでは?」と、リテイクの毎日。この頃にはすっかり沼に足が沈み込んでいました。
「考えきること」ができない自分が情けなく、自分もCTOも納得してゴーサインを出せるような堅牢なシステムに至らない状況が悔しくて。時間だけが刻々と過ぎる焦りから、当時は毎日遅くまで作業していましたね。
――出口が見えない中で進まないといけない状況はプレッシャーですね。。どうやって打開したのですか?
それを見かねた代表の加藤をはじめ、他部署のマネージャーにメンタリングしていただけたおかげで、前向きな気持ちを保てたことは大きかったです。「仕事への不満はないが、成果が出せていない、仕事のやり方がどんどんわからなくなっていく、だけど時間は過ぎてお給料は振り込まれる」というモヤモヤを「きむDの頑張りはちゃんと見てるよ」と受け止めてもらえたことには感謝しかありません。「ならもっと頑張る」しかないよな、と。
とはいえ業務であるシステム設計そのものへの解は自分で掴み取るしかなく、繰り返されるリテイクの中で、同じような指摘を受けないことを道しるべに格闘していました。
そんな暗闇の中を2ヶ月くらい歩み続け、「これでいけそう」なシステムがようやく見えてきました。何が正しくて何が間違っているのかがわからなければ、せっかく導き出した答えにも自信を持てないのは当然ですが、それがあるタイミングでふと噛み合ってきて、そうすると一気に進むようになりました。
――向き合い続けたからこそ、突破口を見出せたんですね。振り返ってみて、変化は感じますか?
1年の実務を経てC++の書き方も変わりましたね。とにかく「型を大事にすること」。型というのは、プログラミング言語でのデータがどのような性質のもので、どのように取り扱うべきかを定めたものです。これをうまく取り扱うことで誤ったコードを検知し、望ましくないプログラムにならないように制約をかけることができます。
1年前に書いたプログラムを目にすると、全部捨てて書き直したい衝動に駆られます(笑)。それほど拙く感じるということは自分の成長の証だとも思います。
――ビジネスとしてプログラムを書く上での”覚悟”が芽生えた感じがしますね。
そうですね。
仕事でプログラムを書くのなら自分のプロダクトに責任を持たなければなりません。趣味と違って「本番でバグっちゃいました」を可能な限り排除するためにどうしたらいいか。前述の「型」に加え、テストプログラムを書いたり、それを自動で毎回チェックするサービスを使ったり、あるいはバグを見つけたときのPDCAの回し方を考えたり、バグにつながりやすいアンチパターンを検知してそれを回避したり、などなど。プロとしての書き方へのこだわりがどんどん醸成されていくのを感じます。
また、システム設計や仕事そのものの進め方など一段上の視点を持つこともできるようになったと思いますね。
仕事がそのまま成長に繋がっている実感があるので日々がとても面白い。余暇時間も仕事に絡んだ勉強に費やしているので在学中以上の学びを得ることができていると感じます。先日社内で「大胆」賞としてMVP表彰もいただき、モチベーションもさらに上がっています!
――今後の成長でキャリアの選択肢も広がってくると思いますが、描いている方向性はありますか?
今後キャディには僕よりできる方もたくさん入ってくると思います。いま僕は、QCDアルゴリズムを実質任せてもらっていますが、このまま食らいついて名実ともに技術の中核を担い続けたい。いつでもVPoE(※)になれるような圧倒的マネジメント力と技術力を兼ね備えたエンジニアを目指し、巨大なプロジェクトをばしばしと成し遂げる、頼れる存在になりたいです。
また、自分自身のスキルを高めたいのはもちろんですが、メンバーのケアにも引き続き積極的に取り組んでいきたいです。人になにかを教えたり、導いたり……ということが好きで。
それぞれに強みや個性があるメンバーと同じゴールに向かっていくことって、めちゃめちゃワクワクします。一人では達成不可能な目標をぶち抜いていく舵取り役となりたいです。欲張りですかね(笑)
この環境で働けることが心底ラッキーだと思っているので、これからもより圧倒的な成長を目指してガリガリやっていきます!
(※)VPoE:ヴァイスプレジデント オブ エンジニア CTOが会社の事業側からあらゆる技術的課題に取り組む役割であるのに対し、VPoEは現場エンジニアのマネジメントに長けたチームビルダー。当然広く深い技術力も要求される。