« 2009年05月 | メイン | 2009年08月 »

2009年07月19日

「ハードウェア」プログラマと「ソフトウェア」プログラマ

プログラマ・ソフトウェアエンジニアと呼ばれる人間には、 2つのタイプがあるような気がしています。 ひとつは、もともと機械いじりやハードウェアが好きな 「ハードウェア」プログラマ、もう一つはその反対の「ソフトウェア」プログラマ。 それぞれどういう特徴があるか、独断と偏見でまとめてみました。 (私自身ハード出身なのでそちらに偏重していますw )

「ハードウェア」プログラマ
  • 「最適化」という言葉が好き
  • 外的な制約(メモリ/速度/ディスク)がある方が燃えるし、真の能力を発揮できる
  • 逆に制約がないと何していいのかわからず、平凡なアイデアしか思いつけない
  • 開発言語は、制約から決定する
  • O(n) の計算量でも、その定数項を気にする
  • 専用ハード好き (地球シミュレータ, メーンフレーム)
  • 定量評価ができないような仕事は興味ない
  • 固定長データ
  • バイナリデータ
  • 再帰なんてもってのほか
  • スピード狂
  • CPUがどれくらいクロックを消費するか考えながらコードを書いている
  • ハードにしろソフトにしろ、その動作原理に興味がある
  • ソフトウェアを使ってみる前にソースを眺める
  • マイ半田ごてを持っている
  • 抵抗のカラーコードはそらで言える
  • D/A A/D 変換の仕組みは常識
  • 電車のVVVFインバータに興味を持つ
  • 数学は道具だ
  • ミニ四駆のモーターは手巻きした
  • プラレールはラジコン改造した

    「ソフトウェア」プログラマ
  • 外的制約は考えずに自由な発想でプログラムを作る
  • 開発言語は、作っていて気持ちいとか習得がしやすいといった内的要因で決まる
  • アジャイル、クイックプロトタイピング
  • O(n^2) と O(n) は気にするけど、定数項は気にしない。
  • コモディティハードをたくさん並べる
  • 人を感動させなきゃ意味がない。(けどその評価は難しい)
  • 可変長データ
  • テキストデータ
  • 再帰萌え
  • 富豪的
  • 早期の最適化は避け、自明でわかりやすいコードを書く
  • ハードにしろソフトにしろ、それがどういう作用をもたらすかに興味がある

    個人にしろチームにしろ、この2つのバランスが重要なのは言うまでもありません。 ハードウェアプログラマだけだと、些末なタコツボ議論に陥りがちで本来時間を かけなくていいような最適化に無駄にリソースを投入してしまいます。 出来上がるものもすごーく平凡になりがちです。「ソフトウェア」プログラマだけだと、 プロトタイプはすぐに出来上がるのですが、そのあとの地道な安定性の向上 高速化や省メモリ化スケールアウトに苦しみます。

    最後に、経験上「ハードウェア」から「ソフトウェア」に転向することは 比較的簡単ですが、その逆は難しいです。若いときはハードウェア (もっと簡単には機械いじり)をやっておいた方がいかもしれません。 私も元々電気の出身ですが、そこでの経験や考え方は今の ソフトウェア開発に役に立っています。

    投稿者 taku : 20:41 | トラックバック

    2009年07月12日

    ファンに支えられるプロダクトとユーザにdisられるプロダクト

    世の中には熱狂的なファンに支えられるサービスやプロダクトがあります。 Appleファン、Googleファン、日産ファンといえばピンときますが、 Microsoftファン、Yahooファン、トヨタファンと言うとあまり聞きません。

    ファンに支えられることは素晴らしいことですが、ファンが多いからといって プロダクトの完成度やクオリティが高いとは限りません。私がファンになるのは アイドルぐらいで、ソフトウェアに関してこれとってファンはないのですが (いやむしろありとあらゆるプロダクトを触ってみては〇〇はウンコと言っていますが...) 某製品の改善点をそのファンに伝えると「愛が足りない」とか 「そんな所誰が気にするのか」とかわされます。

    あるプロダクトのファンになるかどうかは、中の人がどれだけカリスマ性があるかとか、 彼らの長期的なビジョンや理念がどれだけ魅力的かと言ったハイレベルなところで 決まります。そのため、いったんファンになってしまうとバイアスの影響で その製品の正当な評価が出来にくくなってきます。個々の機能の完成度の許容量が低くなり、 少しのことではイライラしなくなります。この状態は実は危険です。 開発者はファンの声に満足してしまい、一般ユーザがイライラするような 改善点を見落としてしまいます。

    開発者が自身のプロダクトでユーザを「驚かせる」方法には二種類あります。 前者は正の驚き。セクシーなインタラクションやビジュアル、クールな機能。 もう一つは負の驚き。ウンコなインタラクション、直感的ではない動作、 データ喪失、甘い作り込みなどです。開発者はどうしても正の驚きにフォーカスをあて、 合コン受けするようなプロダクトを作りたがりですが、私に言わせれば、 1000個の正の驚きを生み出すぐらいなら、1個の負の驚きを潰すほうがはるかに重要です。

    ファンも同様に正の驚きを誇張しがちです。ファンじゃない普通の ユーザは「この部分はウンコだ」と負の驚き、改善点を正直にぶつけてきます。 Microsoftのスゴイところは、ユーザ(not ファン)にdisられまくってますが、 それらを真摯に受け止めコツコツと改善していっているところです。Vistaになって セキュリティモデルが一新され、IEが乗っ取られてもシステムには 影響がないような設計になってますし、VistaのウンコなUIは Windows7で それなりに改善されています。

    私もオープンソースのソフトウェアをいくつか公開しています。 ポジティブなファンの応援は確かに励みになりますが、改善点を 正直にぶつけてdisってくれるユーザ(not ファン)を大事にしていきたいと思います。 良くも悪くも言われないんだけど、誰もが空気のように使っている というのが私の理想のプロダクトです

    投稿者 taku : 22:31 | トラックバック