ねばり強く問題に向き合えるかという資質

こんにちは、CTOの山岡(@hiro_y)です。

先日、ISUCON12オンライン予選に三人のチームで参加しました。本戦には進出できませんでしたが、目標の「スコアをゼロでなく、きちんと出せる形で終わること」「楽しむこと」の二つは達成することができました。

久しぶりに一日アプリケーション開発のことだけ考える時間を持てた気がします。自分の場合、普段はどうしても会議やいろいろやらなければならないことが多く、なかなかまとまった時間を取ることができていませんでした。定期的にそうした時間を取れるようにしてみようかな、と思ったりしています。

さて、ISUCON12オンライン予選への参加を通じて、エンジニアの資質としてあらためて「ねばり強さ」というものがあるなと感じました。何か問題が起こったとき、あるいはわからないことに遭遇したときに、一歩一歩解決に向けて考えたり、調べたりしながら手を動かし続けられる能力です。

以前「Webエンジニアとして駆け出そうとしているあなたへ」でも書きましたが、最近のWebアプリケーションフレームワークやライブラリ、あるいはインフラにPaaS等を使うとWebアプリケーションの枠組みは簡単に作れてしまいます。問題はその先、(今のところ)人の手で実装しなければならない部分です。

当然、実装はうまくいくことばかりではありません。あるいは既に動いているWebアプリケーションであっても、何かしら問題が起こることもありえます。どこかで不確実な部分、人の手で解決しなければならない箇所は絶対に残るのです。その部分を専門家として解決していくことがWebエンジニアには求められます。

たいていの場合、問題は一発で解決しません。試行錯誤を繰り返しながら、少しずつ解答に近づいていく。調べること、実装すること、実行結果を見て(計測して)考えること。そのプロセスは、実務か実際のWebアプリケーションを作ってみないと経験できません。

採用活動をしていると、いわゆる「ポートフォリオ」と称するリポジトリをたくさん見かけます。たいていの場合、多くて30回程度のコミットがされていて、それきりになって打ち捨てられていることがほとんど。自分が見たいのは実際のコードだけでなく、試行錯誤の痕跡なのでそのようなリポジトリはあまり参考になりません。

正直、コードは自分で書いたものなのかインターネットのどこからかコピーしてきたものなのかわかりません。でも、試行錯誤の痕跡はその人だけの経験値です。それを見ることで、きちんと自分で問題を見つけて解決できているかだったり、問題にどう向き合い、取り組んだのかがわかって非常に安心・信頼できます。

経験値を積むことでしか上げられないレベルというのが存在します。ねばり強く問題と向き合い続けられるかどうかは、技術的なスキルを武器にしてどう戦えるか、継戦できるかという問題です。一発ですぐに片付けられるような問題ばかりではない以上、その能力・レベルは非常に重要ですし、その部分を見せてほしいなあ、と思います。

採用の話に寄ってしまいましたが、普段からこの経験値は積んでおかないと、いわゆる勘が鈍ります。問題に遭遇したときに素早く対応を開始できるかは、普段の経験、言い換えると訓練できているかによって大きく左右されます。

冒頭に書いたとおり、自分でも題材を見つけて定期的に時間を取ろうと思いますが、会社としては、適切に業務の中で経験を積める環境を用意する感じですかね。プロジェクトによって状況は異なるので、うまい具合にローテーションできるようにする等、全体としてレベルアップを継続できるようにしていくつもりです。