30歳過ぎから工学 vol.2

http://d.hatena.ne.jp/j130s/ から移行しました.オープンソースロボットソフトウェア技術者兼主夫. 高校・大学学部文系-->何となくソフトウェア開発業-->退職・渡米,テキサス州でシステムズ工学修士取得,しかし実装の方が楽しいと気付き縁があったロボティクス業界で再就職.現在 Texas 州内の産業用オートメーションのスタートアップに Georgia 州から遠隔勤務.

システム開発の二大工程 "設計と実装" を分かり易く説明したい

アメリカは ThanksGiving Holiday で何処に行っても休み. そのためパーティが各所で開かれているらしく, 今日は学校の勉強もそこそこに, 2件お邪魔してきました. 人と会うと以前の仕事や今の学部や今後の大学院の専攻について聞かれる機会が多いですが, 私の志すシステム工学という分野は, 何が問題でどう解決するとハッピーで何が楽しいのか, について理解し易い説明がしにくく, 特にシステム工学の中核の 1つである "システム開発" をイメージして頂きにくい. 今日は説明を明快にしたいためによく使う例え話を紹介します. 今日書こうと試みるのは何も凄いこと, 斬新なこと, 難しいことを言ってるわけじゃなく, 当たり前のことなんだけど理解が若干難しいことの類です. 果たして分かり易いか否かご意見伺いたく.
設計, 実装, テスト. 未経験の方に "システム開発って何ですか?何が面白いの?" を説明する場合, 大きくこの三工程に分けられることをお話するようにしています. コンピュータシステムに限らず, 機械システムや社会システムに至るまですべての "システム" と呼び得る構造物/事象に共通するはずだと思っています.
それぞれの工程の面白さを, システム開発未経験の方(以降, "聞き手"と略します)に説明するのはいつも苦労するので以下の例えを用いてます.
(以下, 説明する時の順番通りに記載)
1. 聞き手に, 家(或いはビルディングでも可. 何らかの建物)を建てる時の主な登場人物を挙げてもらう. 期待する回答: 図面を引く人, 大工さんの 2人. 或いは, 施工者(電気, 水道, ガス) を含めた 3人.
2. 聞き手に各登場人物の仕事内容を想像してもらう. 特に各人物が関わるタイミング(例. 図面を引く人は最初から, 大工さんは途中から, 等)と, 建物の各箇所で不具合があった場合の責任者は誰になるかを考えてもらう
3. 着工前に耐震強度をはじめ建物の能力を決める人, それに合った図面を引く人, 工法を決める人, 材料を決める人は設計者, 着工後に現場で木を削り, 釘を打ち, 柱を組み合わせ, 壁を貼る大工さんや施工者は実装者である, と説明する.
補足
全体について: 三つ目の"テスト"の工程は, 聞き手に馴染が無い場合があると考えるため, 省くようにしている
1 について: 他の回答が出たら, この 3人のいづれかへの分類をできるだけ試みる. なお"顧客/依頼主"はどんなシステム開発においても最も重要な登場人物の 1人だがここでは省く. ただ, 聞き手から顧客について発言があるのは, 話に乗ってきてることを示す可能性があるので, 良いと思います
どうでしょう?元々 "設計" という言葉は建築で用いられる, というイメージが強いと思うので, 建築を例に取るのは想像し易いと思っています. そして, 人によって好みは分かれるとは思いますが, 例えば幼い頃に理想の家の間取りを書いてみたり, 設計図的なものを書くことが生来好きな人は多いはず. 部屋の役割と必要な機能を決め, 各部屋間を歩く距離が最短にする方法等を考える時の創意工夫と楽しさはまさにシステム開発の設計工程のそれに似ています. 一方, 図を描くよりも実際に手で触れられる形あるモノを造ることの方が好きな人も居て, 砂場や積み木, レゴブロック等で家やお城を作り, 想い描いたとおりの形にならなかったり, 壊れないように頑丈にする方法を考えながら手を動かす楽しさは実装のそれです.
特にコンピュータシステムの場合, ソースコードを書くことをプログラミングと呼び, それを行う人であるプログラマはここで言っている実装者にあたりますが, 新聞等一般向けの記事ではソースコードのことを "設計図" と説明していることが多い. またコンピュータシステムの開発イコールプログラミングだけ, と思っている方はきっと多いですが, 実際は設計はとても時間と労力をかけて行われるし, テストや更にその後の工程も含め, 色んな役割があります, あるのです...
ちなみに, システム開発については説明しましたが, システム工学については, 機会を改めます.
ところで, "システム" を定義してください, と聞くと う〜んと唸ってなかなか納得して回答できない人が仕事人でも結構多いかも知れない. かくいう私も数年前にはそうでしたが, 今は以下のサイトに記載されている定義にほぼのっとっています.


慶應大学システム・デザインマネジメント研究科サイトより
システムとは何か?
個々の構成要素に分割してしまうと失われてしまうような本質的な特性を 有する集合体を“システム”と言う。システムの本質的な性質は、数多くの構成要素の相互作用の産物である。
凄く分かり易いんですが, しかし定義というものが時々そうなるように, なんだか言い回しが小難しいので, 私はよりシンプルに, 以前上司に習った以下のような言い方に置き換えています.
"目的を達成するための 1個以上の機能の集合"
なお今日の記事の目的は "建築家と大工を定義すること" ではなく "システム開発未経験の方にその面白さを共感してもらうための方法の紹介" ですので, 目的から外れる点に関し批判もあろうかと思いますがご容赦を.