感性の高いプログラマは一度に三方を見る


プログラマのレベルは、プログラムの内容を観察すればある程度は検討がつきます。WebサービスのトップページのHTMLソースコードの完成度が低かったり、レスポンススピードなどが遅ければ、そのWebサイトのクオリティも同様に低く思われてしまうこともあるわけです。では、具体的にプログラマのどこを観察すればわかるのか。優秀なプログラマは、つねに以下の三方に感性のアンテナを張りながらプログラミングしているのです。

  • 動作
  • 保守
  • スピード

それぞれ詳しく見ていきましょう。

動作

考えたアイデアの表現や与えられた仕様をちゃんと動作するプログラムを書くことです。これは至極当たり前のことですが、これが基本です。プログラマの初心者は「後先考えずとにかく動くものを作る」大抵はここで精一杯です。

保守

長期的に保守しやすいクラス設計、データ設計、責任がしっかりと分かるクラス・メソッド、変数やクラス・メソッドの名前、オブジェクト思考であればポリモーフィズムが出来ているか、セキュアであるか、他人が見ても分かりやすいのか、変化に対応しやすいか、エラーはキャッチ出来るか、テストは書いてあるか。動作させることが出来るようになってくると、保守にも目が回るようになります。プログラムは書かれる時間より読まれる時間のほうが圧倒的に多いのです。自分だけが保守するならまだしも、他人が読むことも考えてコードを書きます。

スピード

動作がしっかり出来るようになり、保守性も考えられるようになると次はスピードを考えるようになります。保守をすっ飛ばしてスピード重視の場合もありますが、度が過ぎると後で苦労します。スピードには2つの意味があります。1つは「開発スピード」もうひとつは「レスポンススピード」です。考えたアイデアや与えられた仕様をどのくらいの期間で完成させるのか。お客様が1ヶ月で作って欲しいものを10年かかってようやく出来るようでは、殆どの場合はそのプログラムは役にたたないでしょう。期限をしっかりと意識することも感性の高いプログラマとしては重要です。しかし「開発スピード」をコントロールすることは非常に難しいです。開発とはオリジナルな物を作ることであり、既存のものがあるのであればそちらを使えば良いのです。そのため大抵は学習の必要が出てきて、開発スピードの計算を困難にします。もうひとつの「レスポンススピード」はそのプログラムを動かしてユーザにどのくらいで結果を返せるかです。Googleの検索結果のレスポンススピードを見てください。1秒かかることがあるでしょうか?Google検索で結果が1分も返ってこなかったらどうでしょうか?Yahoo検索へ行ってしまうでしょう。プログラムのレスポンススピードが早いというのは非常に重要です。しかしながら、非常に難しい分野です。とくにキャッシュできないようなタイプのデータについては苦労します。ここまでしっかりと考え、実装出来るプログラマは感性の高いプログラマです。

感性を高くする方法

上記の要件を満たすには想像力を高める訓練が絶対に必要です。想像力を高めるには、

  • そのプログラム全体で利用しているソフトウエア(プログラミング言語フレームワーク、データベース、Webサーバ、インフラ等)をしっかり学ぶこと。これを学ぶことで、例えば「なぜレスポンススピードが遅いのか」という問に対して、解決するヒントが直感で分かるようになります。
  • 良質なプログラムをたくさん読むこと。私はプログラマの基礎体力という表現をしていますが、詳しくはこちらに譲ります。
  • プログラムをたくさん書くこと。アウトプットすることで分かることがたくさんあります

上記を繰り返し行うこと以外に想像力を高めることができないと思います。そうして想像力が鍛えられると、判断力も養われ、自然と高い技術が身についてくるのです。

上記の文章の元

だいぶ変わってしまっていますが、この文章には元があります。「サービスを超える瞬間」という書籍の「感性の高いドアマンは一度に三方を見る」という節があります。ここはプログラマに置き換えると上記のようになるなと思い書いてみました。

リッツ・カールトンが大切にする サービスを超える瞬間

リッツ・カールトンが大切にする サービスを超える瞬間