flat7th

+ 良いソフトウェアって?

created 2009-06-23 modified 2013-05-02 

「良いソフトウェア」の条件

良いソフトウェア
・顧客目的を満たす
・性能がいい
・価格が安い

道具の調達時に考える性能(価格に対して)
・機能性(やりたいことができる)
・操作性(使いやすい)
・応答性(応答速度が速い)
・耐久性(壊れにくい)
・整備性(維持修理しやすい)
・保全性(情報が漏れない)
(上記は例えば「FBIがピストルを調達する」場面でも同じ)


ソフトウェアの整備性
・可読性(読みやすい)
・可変更性(修正しやすい)
・可管理性(手に負える状態を保ちやすい)

(整備性に優れるソフトウェア:技術者同士の観点)
いい図解、いい芝居、いい映画と似ている。

・役者が良い  (クラスのキャラが立っている)
・セリフが良い  (メッセージが必要十分で簡潔な構成)
・ストーリーがしっかりしている(しっかり=テーマが単一、首尾一貫)
・テーマが良い  (共感できる)
・采配が良い  (統率が取れている)


逆に、ダメな図解、ダメな芝居

・役者が大根
・セリフが意味不明
・テーマがあいまい(ない、ありすぎ、一貫性ない)
・テーマ自体に共感できない
・采配が悪い  (統率がなくバラバラ、スパゲッティ)

共感ってなに?
「うん、うん、そうだよね」 = 自分が作ってもそういうつくりになる
(だから、読みやすい、修正しやすい、手に負える状態を保ちやすい=整備性がよい)

料理レシピにも似ている(自分が作ってもそういうつくりになる、という前提知識があると、逆に違う部分に良く気づく)

→斬新な驚き
「そんな良い方法があったのか」

その点はソフトも同じ。いいプログラムのソースを多数読むと、とても力がつく。


忘れてはいけないこと:

コック、シェフ同士の共感(コック同士でほめられる)は最終目的ではない。
最終顧客の満足が第一。「このシステム、使えるね」といわれること。



誰も「悪いソフトウェアをつくろう」なんて思うはずがないのに、僕等は往々にしてそれをやってしまう。
良い音楽は医者になると誰かが言う。同じように、良いソフトウェアも人の心を幸せにする。
頑張ろう。良いソフトウェアをつくろう。
コンピュータ上の情報は、タイムトラベルできる。2009年に僕の脳内で起こった電位変化を書き留めたこのページを、数年後の誰かがアクセスして読んでくれるみたいに。
今、目の前の誰かが絶賛してくれなくても、時間をまたいだ誰かがニヤリと笑い、あなたに親指を立ててくれる。そう信じよう。



作品方程式(ソースはオレ、1994年くらい)(表現作品、曲とか書き物とか)

作品 = テーマ + Σ シチュエーション + ウソ + ジレンマ + α

・1つの作品には1つのテーマ。
・シチュエーションはたくさん。
・ウソ(妥当でない仮定)は1つだけ。(例:主人公がタイムマシンを開発した)
・作品の世界全体は妥当な推論で進み、最初の1つのウソから、ジレンマに導く。
・そのジレンマの解決が、ヤマ場。
・この式で表せない何か(プラスα)を入れる。

うーむ。システム開発だと…
プロセス = 役割 + Σ イベントメッセージ + (ウソ + ジレンマ) + α

・1つのプロセスには1つの(一言で言える)役割。
・イベントメッセージはたくさん。
・ウソ(おかしな仕様)は無しが良いが、いくつか出てくる。
・ウソがあればジレンマも出てくるが、どの向きに置けば最小になるかを考える。
・この式で表せない何か(プラスα)を入れる。

上記で「プロセス」は、置き換え可能なコトバがいくつかある。たとえば「フレームワークを構成する1つのコンポーネント(レイヤ)」とか。

映画に詳しい友人の言葉
「どんな映画?と聞かれて、一言で言えない映画は、ダメ」
=テーマは1つ、と同義かな。