« ファンに支えられるプロダクトとユーザにdisられるプロダクト | メイン | 勉強会は発表してこそ意味がある »

2009年07月19日

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

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

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

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

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

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

    投稿者 taku : 2009年07月19日 20:41

    トラックバック

    このエントリーのトラックバックURL:
    http://chasen.org/~taku/blog/mt-tb.cgi/248