最近、フットボールネーションというサッカー漫画を読みました。とても面白かったのですが、漫画の感想は置いといて。その漫画で知ったのですが、オランダのアヤックスという古豪のサッカーチームがあるのですが、そこは若手選手からの育成が素晴らしく、特に優秀な若者を集めてくるスカウティングが優れているそうです。

そのアヤックスで優れた選手を選抜する際に見ているのがTIPSと呼ばれているものだそうです。TIPSとは、テクニック(T)、インテリジェンス(I)、パーソナリティ(P)、スピード(S)の4つの頭文字をあわせたものです。(Wikipedia調べ

なるほど、と思いつつ、この4つの視点は、実は私たちが優れたプログラマを選抜する際に考えていたことにも当てはまるな、と思いました。

この記事では、アヤックスのTIPSに当てはめながら、私たちがプログラマの採用の際に見極めようとしているポイントについて書いてみます。

Gunners_Spring_Soccer_2010_2162Gunners_Spring_Soccer_2010_2162 / KG Sand Soccer

前提:プログラマとは

前提として、ソニックガーデンのプログラマは、お客様と話をして要求を引き出すところから、画面やデータベースの設計、プログラミングとテスト、クラウドでの運用までの、ソフトウェアに関するすべてに責任を持つ役割のことを指しています。ソニックガーデンのビジネスモデルでは「顧問プログラマ」として、ひとりでお客様を担当します。

これは、サッカー選手が、ドリブルもヘディングも、シュートも、一通りのことが出来てサッカー選手だと言うのと同じことだと考えています。得意不得意で、FWやDFなどのポジションがあるにしても、一通りのことが出来るはずです。ドリブルしか出来ない人はサッカー選手ではありません。

テクニック

アヤックスでいうテクニックは、トリッキーなプレイができるとか難しい技が出来ることをテクニックとは呼んでおらず、基礎的なボールタッチの上手さや、ドリブルやシュートといった基本的な技術のことを指しており、そういった基本技術がきちんと出来ている選手を選抜しているそうです。

ソニックガーデンのプログラマに求められるテクニックも、色々な言語を使いこなせるとか、最新の技術要素に詳しいとか、といったことよりも、誰が見ても読みやすいソースコードが書けることや、安定して運用するための基礎知識を持っているか、といったことを重視しています。

私たちはプログラマの採用を決めるまでに、必ずソースコードレビューを行っています。自分一人で書いた一番自信のあるソースコードを見せてもらいます。そこで見るのは、言語の習得レベルというよりも、スジが良いかどうか、という点です。ソースコードにおいて何を大事にしているかを見極めたいのです。

また、私たちはクラウド環境でサービスの運用を行っていますが、そのときに必要なのは、クラウドに関する知識もさることながら、結局は、きちんとした運用に関する知識が必要になってきます。バックアップや監視の仕組みをどうすべきかなど、手段はクラウドを使うとしても、大事な基本は同じです。そういった基本的な知識を持っているかどうかを見極めます。

インテリジェンス

サッカーにおけるインテリジェンスは、監督の戦術を理解できること、そして試合の流れを読み、実戦の中で戦術に沿った動きを、自分の頭で考えることができることを指しています。たしかに、サッカーの場合、野球と違って試合中は逐一監督の指示を受ける訳にはいかないので、自分で考えられる能力が重要になってくるのでしょう。

ソニックガーデンの場合、一般的なソフトウェア開発のビジネスとは違うビジネスモデルを採用しています。会社の仕組みも少し変わっているかもしれません。しかし、変わったことをしようとして、今の仕組みとビジネスモデルになっている訳ではなく、きちんと理由と考えがあって、そうなっています。

そんな中でプログラマとして働く場合、ビジネスモデルと会社の仕組みを理解した上で、何をすることが、お客様にとって喜ばしいことで、会社にとって利益になることかを考えて、行動することが求められます。表面的な知識というよりも、理解力が必要です。

特に、ソニックガーデンではプログラマは顧問として一人でお客様に対峙しますので、指示に従って仕事をする訳にはいきません。そのときそのときの判断を自分でしないといけないのはフィールドに立つサッカー選手と同じです。経営者の戦略・戦術を理解した上で、自分で考えられる能力が求められます。

パーソナリティ

どれだけ足が速く、技術に長けていても、それだけではアヤックスの選手にはなれないのが、このTIPSのパーソナリティの部分です。サッカーはチームスポーツですし、トップチームになるとリーグ戦やカップ戦がシーズン中は続いていきます。そうした中では、優れた人格であることやチームのために貢献できる性格であることは、重要な要素になってきます。

ソニックガーデンのプログラマも同じです。ひとり一人が顧問プログラマとしてお客様を担当するといっても、お客様はソニックガーデンとしての品質や出来ることを求めていらっしゃいますし、それにお応えするには、決してひとりだけの力では対応しきれません。

クラウドの運用が得意なプログラマ、Railsに関する知識が一番なプログラマ、など、それぞれのプログラマに得意分野があって、お互いに助け合うことで、すべてのお客様にソニックガーデンとしてのクォリティを提供することができるのです。なので、チームワークを重視し一緒に働ける人格というのは、とても重要なポイントになります。

長期的な視点を持つことが出来ることが大事です。長く一緒にいようと考えられるなら、一緒にいようとする人たちと仲良くしようとするし、うまくやっていこうとしてくれます。そして、弟子を育てることができる人かどうかも重要です。これも長期的な視点を会社と一緒にもってもらえるかということの判断になります。

スピード

サッカーに置けるスピードは、ただどれだけ足が速いかということもアドバンテージにはなりますが、長時間のゲーム中をずっと走っている訳にはいかないので、大事なのは、動きだしの速さや走り出しのタイミングがうまいかどうか、ということが必要とされています。

私たちの考えるスピードも同じ考えです。ただプログラムが速く作れたとしても意味はありません。コピー&ペーストで速く作れたとしても、そんなコードはゴミ同然です。品質の高いコードとは、DRY(繰り返しの無い)なコードです。DRYなコードは保守性が高いです。保守性が高ければ、機能の追加も、不具合の修正も、仕様の変更も速く出来ます。私たちの求めるスピードとは、そういうことです。

これは、これまで「完成すること」を目指して来たプログラマにとっては、「持続すること(sustainable)」を目指すという、とても大きなパラダイムシフトが必要です。「持続すること」のパラダイムでは、バグを出さないことよりも、バグをすぐに直せることや、サーバを落ちないようにすることよりも、落ちてもすぐに復旧できることを大事にします。スピードの意味が変わるのです。

アジャイル開発のアジャイルという言葉は「俊敏な」という意味になります。私たちが大事にしている俊敏さのスピードというのは、どれだけの変化に俊敏に対応出来るか、ということだと考えています。そして、アジャイル開発で目指していたのは、そういうことだったのではないでしょうか。