プログラマの考えるGoodが必ずしも製品のGoodにならないこと
筆者も、昔はエンジニアリングの仕事をしていたのだが、その経験から言わせてもらうと、Apple製品のすごさは、OSレベルでの徹底的なソフトウェアの最適化に尽きる、と思う。Appleというソフトウェア会社は、自社でたまたまハードウェアもデザインしていた。AppleのOSなどの基本的なソフトウェアの設計は、iPhoneとMacというたったふたつのハードだけを考えて、この決め打ちされたハードに対して、プログラマが徹底的にソース・コードを最適化できるのだ。
なぜAppleの製品は一歩先を行っているのか? : アゴラ - ライブドアブログ
プログラマが言う、いわゆる「美しいコード」の一つに「特定の環境に依存しない」というのがある。この原則に照らし合わせてみると、Androidのアーキテクチャは「美しい」のである。それに対して、基本的に一つのプラットフォームしかないiOSは一つのハードウェアに特化している故に、プログラマ好みではないと考えられる。
実際のソースコードがどうなっているかは知らない。しかしここで重要なことは実装がどうなっているかではなく、ソフトウェア技術者がよいと思っていることと、ユーザが求めていることは違うという事実だと思う。もしハードウェアアーキテクチャが製品の良し悪しを決めるのであれば、パソコンのCPUはIntelではなく、Motorolaになっていたはずだ。だが、現実にはプログラマの嫌いな8086のIntelアーキテクチャがパソコンの標準になった。
ソフトウェア開発の現場においては、しばしばそのフィーチャーが有用かどうかという議論が発生する。そういった場合、プログラマは拡張性や効率性の観点で主張することが多い。だが、それは果たして製品をハッピーにするものなのだろうか。
良いソフトウェアの条件はいろいろあると思うが、重要なことの一つに性能のバランスが良いというのがあると思う。柔軟性は高くても、反応が遅くてストレスを感じるようなものは、いい評価にはならないだろう。ハードウェアとソフトウェアの限界を知り、その範囲で最適なチューニングを施すことができるソフトウェア技術者が、私の考える優秀なプログラマ。
私?最近のハードウェアの性能に甘えてるよ、うん^^;