argius note

プログラミング関連

5つの世界

5つの世界 - The Joel on Software Translation Project
JoSはまだ読んだことがなかった。これは読んでおくべき。メモ&コメント。

ソフトウェア開発には、しばしば交わっているがたいていは分かれている、5つの世界があると思う。その5つとは:

  1. パッケージ
  2. インターナル
  3. 組み込み
  4. ゲーム
  5. 使い捨て

あなたがエクストリーム・プログラミングについての最新刊や、スティーブ・マッコーネルのすばらしい本や、あるいはJoel on Softwareや雑誌Software Developmentを読むとき、ソフトウェア開発をどう行うかについてのたくさんの主張を目にするだろうが、彼らがどんな種類の開発の話をしているのかについて言及していることはめったにない。世界が違えばする必要のあることも違うので、これは残念なことだ。

プログラミングに関する議論では、この前提が無いと、こじれる可能性大。

コンサルウェアはパッケージソフトの変種のひとつで、多くのカスタマイズを必要とし、インストールには一群のコンサルタントが必要となり、法外なコストがかかる。CRMCMSパッケージはしばしばこのカテゴリに入る。人は彼らが実際何もしておらず、ただ時間当たり$300になるコンサルタントの軍隊を送り込む言い訳をしているだけだと感じる。コンサルウェアはパッケージソフトの衣を着てはいるが、実装に要する高いコストは、それが実際にはインターナルソフトウェアにより近いことを物語っている。

技術について詳しくない顧客を相手に、プレゼンで煙に巻き、採用が決まればしめたもの。ちゃんと責任を取ってくれるのなら文句はありません。でも売るだけ売って逃げるのはどうかと。ビジネスとしては売ったもの勝ちかもしれませんが、会社の信用は墜ちています。
良いコンサルさんにはごめんなさい。

最後に使い捨てコードだが、これは何か別なものを得るためだけに一時的に作られるコードで、ひとたび目的のものが得られたなら必要なくなるものだ。たとえばあなたは、手に入れた入力ファイルを操作して何か別のことで必要なフォーマットに変換するための、小さなシェルスクリプトを書くかもしれず、そしてこれは一度きりしか使われない。

使い捨てコードのつもりで作ったスクリプトが、いつのまにか汎用ツールに。使い捨てコードは、限定された条件下でのみ正常に動作すれば良いので、綿密なデバッグなどは行わない。そのため、汎用にしてしまうと色々と問題がある。
使い捨てに作ったかどうかを自分自身が忘れることがあるので、ファイル名の先頭に"_"をつけるようにしています。

ソフトウェア開発のほとんどのことは、あなたがどんな種類のプロジェクトで働いているかに関わらず同じであるが、しかしすべてがというわけではない。誰かがあなたにメソドロジーについて話すとき、あなたがしている仕事にどう適用できるか考えてみることだ。その人がどこから来ているのか考えてみることだ。

まるごと適用するのではなく、その方法論を「(方法論の)どの部分が採用できるか」および「(自分の仕事の)どの部分に適用できるか」を、的確に見分けるよう努めることが重要。