惹かれるものは美しい日本語と綺麗なコード/ビジネスとの調和が取れた環境で、エンジニアの負担を減らしていく

個性豊かなユニークビジョン社員の入社に至るまでの経歴や、どんな想いをもって日々の仕事に打ち込んでいるのかなどをご紹介する「ユニークビジョンではたらく仲間」。 今回は、日本に惹かれてアメリカから来日し、ユニークビジョンのエンジニアとして活躍しているミシャ・ソリテルマンに話を聞きました。

アメリカで惹かれた「日本語」から繋がった入社の縁

大学時代はカリフォルニア大学バークレー校でコンピュータサイエンスを学び、卒業後はシリコンバレーのベンチャー企業に入社して地図データの分析ツールを開発していました。自分を含めて3人のエンジニアと、数学者のCEOからなる小さな会社です。そこでは開発において誰もプロセスにこだわりがなく、良い開発工程を考える風土はありませんでした。大学で学んでいたコンピュータサイエンスは難しく感じていたものの自分には向いていると思っていたのですが、この環境の中では他のエンジニアとの関わりが難しく、それも含めてのエンジニア職なのであれば自分はエンジニアに向いていないのかもしれないと思い、一度エンジニアリングから少し離れていました。

そんな時にたまたま宇多田ヒカルさんの楽曲を耳にして、なんて綺麗な言語なんだろうと思ったんです。調べて日本語だと知り、すぐに本を買ったり学習アプリを入れたりして勉強を始めました。このままでは正しい日本語を学びきれないと感じ、日本に行こうと決めました。覚えるのは簡単なのですが、なかなか定着させるのは大変だったので、学校で新しいものを学んだらひたすら復習をしていましたね。そのためにエンジニアの経験を生かし、自動的にアクセントをつけて学習するものなど、自分用の日本語学習ツールをいくつか作っていました。

日本語学校を卒業した後も日本から離れたくないと思ったので日本で就職活動をし、ユニークビジョンに出会いました。いろんな場面での日本語がわかるようになりたかったので、日本語学校でビジネス日本語を半年くらい受けていたのですが、そこでは実際の履歴書と自己紹介を用いた模擬面接がありました。そこに面接官として本物の紹介エージェントが来ており、模擬面接の後に仕事を紹介するメールが来たのですが、まだそのタイミングでは就職について本格的には考えていませんでした。

ですが自分の日本語レベルを理解した上で紹介してくれているので、せっかくだからと半ば練習のつもりで紹介に乗ってみたんです。いくつかの会社に面接しに行くことになった中でユニークビジョンは最初の面接の場でしたが、実際に面接を受けてみたらユニークビジョンが魅力的だったので、他の面接には行かずにユニークビジョンに決めました。自分の日本語能力はまだまだ足りないと思っていたのでユニークビジョンは面接の練習のつもりで、実際の転職活動には何ヶ月もかかると思っていました。普段の面接は緊張するんですが、練習だと思っていたので全く緊張しなかったですし、日本語の練習のつもりで面接中に冗談を言うこともできました。(笑)

エンジニアの考えることを最小限にしつつ、堅くて柔らかいシステムを作る

エンジニアとして当たり前のように常に考えていることは、綺麗なコードを書くことです。一番綺麗なコードは"存在しない"コードだと思っています。少なく書くこと、複雑でないように書くことです。エンジニアが何か作ろうとする時には、いろんなことを考えないといけないので精神的に負担がかかるんです。なので、最も大事に考えているのはその負担を減らすことです。コードレビューでも、他のエンジニアには今後このコードについては一切考えたくないと伝えています。この実装における抽象がこの変更から出ないように、この実装についてまた他の人が考え直すことはないように、とよく言っています。

システムが大きければ大きいほどいろんな層が生まれ、その層の中にもAPIなどいろいろな機能が並んでいます。ですがエンジニアが新しい機能を追加したりバグを修正したりするとき、その全てをわかっている必要はない世界を作りたいんです。バグが出ている部分だけを見て理解し、直せばいい環境を作らなくてはいけないと思っています。エンジニアが考えなければいけないことを最小限にするということですね。

品質の高いシステムにはできるだけ堅い抽象が必要ですが、同時に柔軟なシステムでありたいと思っています。ただ、そういったシステムを作るのには明確なやり方がなく、経験に依るところが大きいのでとても難しいです。前職も含め自分はシステムを一から作ることが多かったですが、どうしたらこれから作るシステムが簡単に修正や機能追加できるものになるのか、いつも自分に問いかけています。

世の中には一発でリリースしてそれ以降は考えない、というスタイルのプロジェクトもありますが、長持ちさせたいシステムではそれには適していないと思います。早く作らなくてはいけないものと長く使いたいものではその判断も変わるものだとは思いますが、一番良く設計されたシステムなら両方に対応できます。考えられて作ったものは、いろんな要望に応えることができますし、早く作らなくてはいけなくてもメンテナンス性を保つことができます。

チーム開発で決めるルールは「こう書く」よりも「こう書かない」

フロントエンドの領域には興味を持っていないエンジニアもいます。フロントはある程度汚く、全部制御はできず、曖昧な世界です。自分もバックエンドから始まりフロントエンドは汚いと思っていたのでそちら側に行きたくないと思っていました。幸いユニークビジョンではTypeScriptを使っているのである程度は守られていますが、まずJavaScriptは使いたくなかったです。 フロントに興味はなかったものの、結局自分で何か作りたいなら絶対にUIを考えないといけないので、少しずつ自分の時間で作っていました。ユニークビジョンで初めて本格的にフロントエンドエンジニアになりましたが、思いのほか大きな一歩ではなかったです。

フロントが、というか、現実が汚いのです。バックエンドは情報だけ、APIも抽象的なものです。ですがフロントでは、人間の行動をプログラミング言語で表現しなくてはいけません。それはどうしても汚くなってしまいます。例えば数字しか入力できないものに対して記号がたくさん入ってくることもありますし、デザインの考慮もあります。見た目はバックエンドの世界には存在しないですからね。

Webのフロントエンド開発の世界では、常識や決まったやり方はほぼ無いです。なので、ReactやVue.jsのような常識をもたらしてくれるフレームワークは人気です。ですがJavaScriptやブラウザのAPIなど、理想とかけ離れた仕組みの上で動いているので、残念ながらどうしてもこのレイヤーを意識しないといけないのです。Webのフロントエンド開発を滅多にしないエンジニアなら、どうやってその仕組み上で効率的に開発できるのかがとても難しい問題になります。

なのでやり方を指定するよりも、やってはいけないことを指定すれば良いと思っています。例えば、このように書いてはいけない、というルールが100個あればやり方がかなり狭まります。そうすると一つの機能に対するやり方が決まってくるので、作れば良いだけになり、みんな同じように書き始めるんです。 機能ややり方が多すぎて正しく作る方法がわからない時には、やり方を減らせば良いのです。一つのやり方しかない環境を作っておけば誰でも作ることができます。初めてそのシステムに入った人でも、どこを見ても同じように書かれていれば、これで良いんだと思ってくれます。

前の仕事ではこんなにシステムの構成を考えることはなかったので、ようやく経験を積んでできるようになったのだと思います。自分のルールにはあまり自信はありませんが、自分を含めみんながが同じような失敗をしているのを見かけると、これはダメなのでルールにした方が良いかなと感じます。そこでみんなに相談し、納得を得てルールとしています。

完璧な環境や言語はありません。現代の汎用プログラミング言語にはいろんな書き方があり、目的に応じて選んで使い分けなければいけないんです。どれか一つしか知らないのでは正しく選べないですし、自分が書いたことがおかしいかもしれない、もっと良い書き方にしよう、と思うことがなくなってしまいます。エンジニアとしてやっていく意思のある人たちは、もっといい書き方をしたいと考えていると思いますし、そう信じたいです。

改善策が検討されやすいユニークビジョンの環境

入社して1年半ですが、先述の通りフロントの開発工程、やり方、ツールなど、環境をとても変えてきました。別の会社だったら「良いツールだけど今導入することは難しい」などと断られていたと思いますが、ユニークビジョンではちゃんと理由を持って話せば改善策を通すことができ、非効率なやり方をする必要はなくなります。締め切りなどはもちろんありますが、プロジェクトを良くさせたいのであれば改善はしやすいです。書き方など、何かをよくしようとすることには時間を割いてもらいやすいですね。

最初の方のフェーズで考えて設計しておけば後の修正も早くできるようになるので、前の方のフェーズに力を入れることには時間を使うと言ってもらえています。ユニークビジョンではフェーズ毎の基準を通らなければ次のフェーズに進めないのでこのような形になっていますが、このプロセスはユニークビジョンならではだと思います。同じような考えを掲げていても行動に伴わない会社も多いので、こんなに開発フローがしっかりと考えられているところはあまり見かけないですね。

大学の授業では設計の時間を設けていたのに、前の仕事ではしっかりした設計の時間はなく、全部頭でやっていました。特にベンチャーはリリースしないと会社が潰れてしまうのでどんどん作っていかないとというのはわかりますが、また結局作り直すことになります。その覚悟ができているのなら良いですが、できていないのなら、後からエンジニアに大きく修正依頼してはいけないと思います。ユニークビジョンでもそのような失敗が今までたくさんあったので、今のような環境ができているようです。

前の会社ではもちろん正しく書くことが求められるものの、その工数が与えられなかったり、うまく行かなければ誰かのせいになったりすることもありました。ユニークビジョンに入って一番驚いたことは、ここではそういうことが一切ないんです。最初のプロジェクトでいくつかバグが存在していましたが、誰がこのバグを生んだのか、などといった話は全く聞きませんでした。いつも今後どのように改善できるかという議論になり、それにより効率的な方法が生まれていきました。

この日までにこの機能を作ってくださいと言われ、技術的に不可能であれば多くの会社ではエンジニアのせいになりがちですが、それはビジネスとエンジニアの考えが乖離しているんです。良いものを作ろうとする気持ちは素晴らしいですし、その工数も正しく出せるのであれば、ビジネス側の人も覚悟ができます。そもそも期待外れにはなりません。ユニークビジョンではその調和ができていることに良い意味で本当に驚きました。

日本でも今までの仕事のようになるんだろうと思っていましたが、全然違っていました。ユニークビジョンに入る前は、エンジニアに向いていないかも...と思いながらも自分の経歴的にエンジニア職が可能だったのでエンジニア職を選んだんです。ですがユニークビジョンの考え方、環境の下ではエンジニアとして働くことは楽ですし、一生でもできると思っています!これから転職することがあっても、ユニークビジョンのような環境を次の会社でも作らないといけないと思っています。

コードは芸術作品、読みやすい小説のように書きたい

これからユニークビジョンに入ってくれる人に一番期待していることは、エンジニアならコンピュータサイエンスの分野に興味を持って欲しいということです。動くだけでなく、書いたものが他のエンジニアに伝わるか、テストしやすいか、長く使えるか、その言語・フレームワークの典型的な書き方かどうかなど、いろいろなことを考えてもらえないと一緒に働くことは難しいと思います。 と言うのも、コードレビューにおいてもどうしてそのように書いたかとよく聞きます。これで動くから、特に気にしていなかった、などと答えられたら嫌ですね。新卒であっても中途であっても、自分の作るものが書き方や表面的なものだけでなく、中身まで正しいのかどうか考えられる人に入って欲しいです。

言い換えれば、自分のコードが商品だと思ってくれるエンジニアがいいですね。実行して動くということだけでなく、書くもの自体が商品だと思って欲しいです。コードを書くことは芸術作品に近いと思っているので、綺麗さ、かわいさ、醜さなどは自分も結構気にして書いています。自分のコードやプロジェクトのコードには、そういった感覚でよく反応してしまいますね。 この感覚はコンピュータサイエンスへの興味からくると思いますし、同時に効率的でわかりやすいコードはこの感覚に響くものになると思います。

自分は大学で最初は英語を専攻していて作家になりたいと思っていましたが、話を書くだけではなくそれを現実のものにできるコンピュータサイエンスに惹かれ、普通に書くだけでは足りなくなりエンジニアの道に進みました。小説だったら改行や句読点が乱雑だったら読みづらいように、綺麗なコードを書くということは品質にとても重要だと思っています!

recruit

「役立つギーク」新メンバー募集!

技術力はもちろん、
課題解決力や設計力など、
幅広い成長を目指す人に
最良の環境を追求しています。
ただいまエンジニア/ディレクター募集中!