ボクココ

個人開発に関するテックブログ

優秀なWeb エンジニアになるには

ども。@kimihom です。

今回はエンジニアという範囲の広い話。

皆さんは、"優秀なエンジニア" の定義って何だと思いますか?作りたい機能をすぐに作れる"スピード"や"技術力"でしょうか。その人にしか作れないような"専門知識" でしょうか。

私はエンジニアとして長らくやってきていますが、今まではいかに考えた機能をスピーディに実現できるか、を常に最優先して技術力を磨いてきました。そのため、新しくサービスを作ったり、ハッカソンなど短時間で仕上げる系の技術力なら自信があります。が、より専門的な知識となるとまだまだだと痛感している日々です。

今後の自分に必要なのは、"より専門的な知識"。そう考えていました。

サービス運用を本気で半年間おこなってみて

ご存知の方もいるかと思いますが私は2015年の中頃から CallConnect という 5分で電話窓口を開設できる 電話クラウドサービスを運営しております。その中で感じたのは、 このまま機能開発を続ければ、どんどん機能は多いが使いにくくなるサービスになっていく ということです。日本の発展したWebサービスのほとんどはこの拡張しすぎ問題にぶち当たります。たくさんのメニューがあるようなWebサービスを皆さんは使ったことがあるかと思います。

ほとんどのユーザーが実際に使うのは一部分の機能だけなのに、なぜああいうたくさんのメニューがあるサービスができてしまうのでしょうか。理由は、 優秀なエンジニアが、言われた機能をすぐ作ってくれるから なんです。これって私が前に考えていた、優秀なエンジニアの定義だったんですよね。そうした複雑なサービスを管理・運用できるスキルは確かにすごいと思います。しかし、それが本当にユーザーのためになっているのでしょうか。

機能を色々と素早く追加できるエンジニア。これって実はそれ程いいエンジニアではないのかもしれません。機能追加はサービス運用における開発の中で最も簡単な開発タスクなのです。なぜなら既存のシステムの影響をあまり考えずに、ただ追加すればいいだけだからです。本当にそのエンジニアの腕が試されるのは、既存ソースを更新・削除できるか ということなのだと思います。

サービスをシンプルに保つということ

ソースコードを更新・削除するのはとても難しいです。新しい知識や技術を使って複雑な新機能を追加するよりも難しいです。なぜならば、既存のシステム全体の構成を知らなくてはならないからです。これを全て知っている人はまずは一から全部作った人。それ以外の人は、誰かの書いたコードを全て理解していなければなりません。全体を把握しているエンジニア、すぐに更新・削除を思い切って行えるエンジニアはどのくらいいるでしょうか。

ソースコードを更新・削除できなければ、多くのサービスのように機能の多い複雑なサービスになってしまうのです。そのことを悟った瞬間、私は機能を素早く開発できるのがいいエンジニアではない という考えに行き着きました。

とはいえ、先ほど書いたシステム構成を全て把握しているエンジニアになるなんて困難なことです。そのためにテストコードを必ず書きなさいと言われてるのだと思います。ただ、テストコードだけでも不十分なところは絶対あるので、自分のサービス構成を知ってソースの影響範囲を知り尽くした人こそ優秀なエンジニアなのではないでしょうか。

エンジニアのその先へ

ここまで来て、"プロデューサなどのビジネス職のやつらが作れと言ったのを作ってるのだから、悪いのはビジネス側の奴らだ" と思っている方もいるかもしれません。事実、次の機能開発を決めるのは技術を全くわかってない顧客や、ビジネス寄りの人からの意見が優先されたりします。そうした人からの言いなりになって、素早く品質の良いプロダクトを開発できるエンジニアって優秀なのでしょうか。

もはやエンジニアの領域ではないかもしれません。作ろうとしている機能に関して議論できるエンジニア。つまりビジネスサイドまで入り込み、利益やユーザーなどを考えて機能を削除・更新できるエンジニアが、今後必要になってくる"優秀なエンジニア"の定義だと思うのです。

先日ふらっと読んだ、 Twitter 本社で働いていた日本人の方も同じようなことをおっしゃっています。

一般的なエンジニアならユーザーやサポートスタッフからの声をそのままプロダクトに反映するのに対し、優れたエンジニアはリクエストの裏側にある本質的な問題を見つけ、解決策を提案できる。

米国Twitter初の海外新卒エンジニア・野口勝也氏が学んだ、「シンプルなプロダクト開発の極意」 - エンジニアtype

本当に優秀なエンジニアになりたければ、技術だけずっとやっているのではなくユーザーの声の本質。"なぜ" を考えらえるエンジニアを目指すと良いかもしれません。それを突き詰めれば、結論はシンプルにまとまって複雑なウェブサービスにならないサービスを実現することが可能なのです。

著名人 = 優秀なエンジニア?

有名OSSの開発者やコントリビュータは、技術者にとって憧れの的となりがちです。そうした方々を目指すのもいいかもしれません。この話題は人それぞれの価値観の違いだと思います。ですがそういう方々 = 優秀なエンジニア と決めつけて全員がそれを目指すのは私はよくないと思います。今回の記事で良いエンジニアの定義について考え直すきっかけが得られれば幸いです。

私はそんな優秀なエンジニアの定義・価値観を持ちながら、2016年も CallConnect のソースを削除し続けたいと思います。本年もよろしくお願いします。