+ 良いソフトウェアって?
created 2009-06-23 modified 2013-05-02
「良いソフトウェア」の条件
良いソフトウェア
・顧客目的を満たす ・性能がいい ・価格が安い
道具の調達時に考える性能(価格に対して)
・機能性(やりたいことができる) ・操作性(使いやすい) ・応答性(応答速度が速い) ・耐久性(壊れにくい) ・整備性(維持修理しやすい) ・保全性(情報が漏れない)(上記は例えば「FBIがピストルを調達する」場面でも同じ)
ソフトウェアの整備性
・可読性(読みやすい) ・可変更性(修正しやすい) ・可管理性(手に負える状態を保ちやすい)
(整備性に優れるソフトウェア:技術者同士の観点)
いい図解、いい芝居、いい映画と似ている。
・役者が良い (クラスのキャラが立っている) ・セリフが良い (メッセージが必要十分で簡潔な構成) ・ストーリーがしっかりしている(しっかり=テーマが単一、首尾一貫) ・テーマが良い (共感できる) ・采配が良い (統率が取れている)
逆に、ダメな図解、ダメな芝居
・役者が大根 ・セリフが意味不明 ・テーマがあいまい(ない、ありすぎ、一貫性ない) ・テーマ自体に共感できない ・采配が悪い (統率がなくバラバラ、スパゲッティ)
共感ってなに?
「うん、うん、そうだよね」 = 自分が作ってもそういうつくりになる(だから、読みやすい、修正しやすい、手に負える状態を保ちやすい=整備性がよい)
料理レシピにも似ている(自分が作ってもそういうつくりになる、という前提知識があると、逆に違う部分に良く気づく)
→斬新な驚き
「そんな良い方法があったのか」
その点はソフトも同じ。いいプログラムのソースを多数読むと、とても力がつく。
忘れてはいけないこと:
コック、シェフ同士の共感(コック同士でほめられる)は最終目的ではない。 最終顧客の満足が第一。「このシステム、使えるね」といわれること。
誰も「悪いソフトウェアをつくろう」なんて思うはずがないのに、僕等は往々にしてそれをやってしまう。
良い音楽は医者になると誰かが言う。同じように、良いソフトウェアも人の心を幸せにする。
頑張ろう。良いソフトウェアをつくろう。
コンピュータ上の情報は、タイムトラベルできる。2009年に僕の脳内で起こった電位変化を書き留めたこのページを、数年後の誰かがアクセスして読んでくれるみたいに。
今、目の前の誰かが絶賛してくれなくても、時間をまたいだ誰かがニヤリと笑い、あなたに親指を立ててくれる。そう信じよう。
作品方程式(ソースはオレ、1994年くらい)(表現作品、曲とか書き物とか)
作品 = テーマ + Σ シチュエーション + ウソ + ジレンマ + α
・1つの作品には1つのテーマ。 ・シチュエーションはたくさん。 ・ウソ(妥当でない仮定)は1つだけ。(例:主人公がタイムマシンを開発した) ・作品の世界全体は妥当な推論で進み、最初の1つのウソから、ジレンマに導く。 ・そのジレンマの解決が、ヤマ場。 ・この式で表せない何か(プラスα)を入れる。
うーむ。システム開発だと…
プロセス = 役割 + Σ イベントメッセージ + (ウソ + ジレンマ) + α
・1つのプロセスには1つの(一言で言える)役割。 ・イベントメッセージはたくさん。 ・ウソ(おかしな仕様)は無しが良いが、いくつか出てくる。 ・ウソがあればジレンマも出てくるが、どの向きに置けば最小になるかを考える。 ・この式で表せない何か(プラスα)を入れる。
上記で「プロセス」は、置き換え可能なコトバがいくつかある。たとえば「フレームワークを構成する1つのコンポーネント(レイヤ)」とか。
映画に詳しい友人の言葉
「どんな映画?と聞かれて、一言で言えない映画は、ダメ」
=テーマは1つ、と同義かな。