「オブジェクト指向のこころ」を読んだのでざっくりまとめてみた

この本をざっくりと一言で表すと

適切な責務で分解をしてオブジェクトとして設計していくことで、
拡張に柔軟なアプリケーションを作ることが出来る

オブジェクト指向の原則

オブジェクトは適切な責務を伴い、自らに対する責務を有している

カプセル化は様々なものの隠蔽である

  • データの隠蔽
  • 実装の隠蔽
    • ex. クライアントオブジェクトから隠蔽する、Bridgeパターン
  • クラスの隠蔽
    • 抽象クラス・インターフェース
  • 設計の隠蔽
  • 実体化の隠蔽

抽象をもとに設計をする

  • 振る舞いやデータの流動的要素は共通性/可変性分析によって抽象化する
  • インターフェースを用いて設計する
  • 継承は「流動的要素を概念化する手段」として使う
    • 既存オブジェクトを特殊化するためではない
  • 結合度を高め、凝集度を低くするようにすること
  • オブジェクトを使用するコードと生成するコードを分離する

コードは保守性を高くする

  • OAOO(一度だけ)ルールを厳守する
    • Once and Only Once
  • 「意図によるプログラミング」
    • 意図を明確に表すネーミングルール
    • cf. リーダブルコード?
  • コードのテスト可能性を考慮する

デザインパターン

パターンとは

何度も繰り返される問題を描写して、
問題を解決する上での核心を描写して、
その解決策を繰り返し適用できるようにしたもの

パターンによって特定のコンテキストにおける特定の問題についての
フォース(因果関係)、動機、関連を描写することができ、取り組むためのアプローチが示される

パターンを見るときの観点

  • 何をカプセル化するのか?
  • どのように共通性/可変性分析を用いるのか?
  • どのようにして問題領域を責務に分解するのか?
  • どのようにしてオブジェクト間の関連を規定するのか?
  • どのようにしてコンテキストに基づく設計を浮き彫りにするのか?

デザインパターンを利用することの利点

パターンを用いて実装をカプセル化することでクライアントオブジェクトは
実装の詳細について知る必要がなくなる
変更されやすい実装の決定をその時まで遅らせることができる!

※重要なのは責務を分解してわかったコンテキストに応じたパターンを分析して考える事

共通性/可変性分析とデザインパターン

概念上の観点(共通性)と実装上の観点(特定の流動的要素)を洗い出す

要は共通するオブジェクトを使うオブジェクトを考慮する、
ということが問題領域を責務の分解という異なった観点から捉えられる

「どういったオブジェクトが必要か」と
「こうしたオブジェクトの実体化の方法と管理方法」を別々で考えるべき、ということ

この「責務」を実装すべきオブジェクトを定義をしてから実体化の方法を考えるべきである

そのために「共通性/可変性分析」が有効

分析の方法(ざっくり)

ex. 下記の特殊ケースに関して分析を適用する
下記の要件を元に「形状描画プログラム」を作る

  • 描画プログラム1を用いて正方形を描画したい
  • 描画プログラム2を用いて円を描画したい
  • 描画プログラム1を用いて長方形を描画したい

① 上のケースから以下の2つの共通性を見つけだす

  • 描画プログラム(実装の詳細)
  • 描画する形状(実装の抽象)

② すると以下の可変性を見いだせる

  • 描画プログラム
    • 描画プログラム1
    • 描画プログラム2
  • 描画する形状
    • 正方形
    • 長方形
  1. このうちの共通性が抽象となり、それらの関係性を定義することでインターフェースを考える
  2. そのインターフェースを元に可変性を表現する実装を考える

コンテキストに基づく設計をすること

上記の分析を用いて得られた抽象を元に基づいた設計をするということである

この抽象をコンテキストというが、つまり「クライアント側から見た仕様」のことであり、
常に利用側から見た抽象に基づいた設計をするべきということである

ざっくり言うと「依存性逆転の原則」を守ること、となる

例えば、インターフェースとポリモーフィズムを用いた設計などが言える

こうすることで、自然発生的にデザインパターンが導かれることもある

デザインパターンとは当てはめるものではなく、
こうしたコンテキストに基づいた設計のプロセスで導かれるものである

感想

自分に欠けていた視点を得ることができたと思います
特に抽象から実装に進んでいくというやり方を、これまで考えてきませんでした
今までの自分の書き方を思い返して、すぐに実装から考えてしまっていたなぁと反省ばかりです
手戻りや仕様変更で発生する悪夢が発生しうる危険なやり方であったため、考えを改めようと思います

「イシューからはじめよ」を読んだ

バリューのある仕事をすること

  • イシュー度
    • 自分の置かれた局面で答えの出す必要性の高さ
  • 解の質
    • イシューに対してどこまで明確に答えが出せているか

※issueとは「根本に関わり白黒の付いていない問題」と「2つの集団で決着の付いていないもの」を表す

①大量の仕事を沢山こなして一つ当てるというタイプ
生産性が低くてダメ、根性に逃げてはいけない

②イシューを見極めて解の質を上げていくタイプ
これがバリューのある仕事、圧倒的な生産性への唯一の道
このためにはイシューからはじめる必要がある

イシューから始めるアプローチ

  • イシュードリブン
    • 本当に答えを出すべき問題(イシュー)を見極める
  • 仮説ドリブン①
    • イシューを解ける粒度まで砕いて、ストーリーの流れを整理する
  • 仮説ドリブン②
    • ストーリーの検証に必要なアウトプットのイメージを描き、分析を設計する
  • アウトプットドリブン
    • ストーリーの骨格を踏まえて検証する
  • メッセージドリブン
    • 論拠と構造を磨いて文書化する

イシューの見極め方

まずは以下をはっきりさせる

  • 何に答えを出す必要があるのか
  • そのためには何を明らかにする必要があるか

そこから咲の検討に大きく影響を与えるものであること

相談する相手を持つ

そのイシューがインパクトがあるかどうかを判断するには、その分野の経験を持っていて「見立てる力」が必要になる

  • 知恵袋的な人を持つこと
    • 課題領域に関して直接の経験を持っている人
    • 研究所
    • シンクタンク
    • etc…

仮説の立て方

ふんわりと方針を決めるよりも強引にでも仮説を立てて検証をはじめたほうが早く進む
そのためにはスタンスを取ること

その仮説に対するスタンスから生まれる疑問がイシューとなる

  • 答えを出すことできる
    • 仮説が単なる設問をイシューにする
      • 仮説はYes / Noで答えられるQ&Aになるようにすること
  • 必要な情報や分析すべきことがわかる
    • 仮説を立てなければ何を議論してどんな答えを出そうとしているのかが明確にならない
  • 分析の解釈が明確になる
    • 分析結果が十分なのかがわかる

イシューを定義する際には…

  • 主語と動詞を書く
  • 「WHERE」「WHAT」「HOW」で書く
    • 「WHY」には仮説がなく、何を白黒はっきりさせるのかがわからない
  • 比較表現をいれる
    • なにを対比しているかが明確になる

よいイシューとは

  • 本質的な選択肢である
    • 答えが出ると咲の検討方向性に大きく影響を与える
  • 深い仮説がある
    • ここまでスタンスをとるのか、というところまで決める
      • 検証をすれば価値を生むと誰もが納得できるもの
        • 常識を覆すような洞察
        • 新しい構造で世の中を説明する
        • etc…
  • 答えを出せる

本質的な選択肢である

  • 右か左かを決めたら大きく意味合いが変わること
  • 鍵となる質問である

cf. 診断フレームワーク「書く技術・考える技術」

なんちゃってイシュー

一見もっともらしいが、その局面で答えの出す必要のないもの

  • 「無理してやる必要がなかった」と後悔しないように
    • 「本当に今それに答えを出すべきなのか」
    • 「本当にそこから答えを出すべきなのか」

イシューは動く標的

イシューは「今、答えを出さなければならないもの」である

  • 会社、部署、チーム、あるいは今日、明日、時間ごとに、あるいは話している人ごとにイシューは変わるものである
  • 自分にとってのイシューが他人にとってイシューでないこともままある
  • 大きな意思決定により周りのイシューが根こそぎイシューでなくなることもある

深い仮説がある

常識を否定する

一般的に信じられていることを並べて、そのなかで否定できる、あるいは異なる視点で説明できるものがないかを考える
ようは直感に反したものを探す

ex. 地動説、相対性理論、ビッグバン理論

その分野における「常識」を手に入れるには、その分野に詳しい人にインタビューするのがよい。

新しい構造で説明する

見慣れたものに対して、これまでにない理解を与えると衝撃を与えられる

2つ以上の既知の情報に新しいつながりを発見する

  • 共通性の発見
    • 比較軸として利用できる
  • 関係性の発見
    • 片方がわかればもう片方を推測できる
  • グルーピングの発見
    • それまではとは違う洞察を得られる
    • ex. セグメンテーション
  • ルールの発見
    • 2つ以上のものに何らかの普遍的なしくみ・普遍的な関係があることを示す
    • 深い洞察が得られる

cf. ピラミッドにおける左右の関係「書く技術考える技術」

  • 分類(重要性の順序)
  • 因果関係(時間の順序)
  • 構造(構造の順序)

otakumesi memo

この部分の話、
Web開発の現場では「ユーザーストーリー」などがあたるのだろうか…?
あるいはシステム設計…?
データドリブンな仮説検証、あるいはリーン的な?

答えを出せる

ありふれているが、解く方法が未だに存在しないモノは手を付けないほうがいい。
本当に既存の手法、現在着手しているアプローチで答えを出せるかどうかを見極める必要がある。
誰もが答えを出すべきだと感じていて「手のつけようがない」と思っている問題を「自分の手法なら答えを出せる」と感じる「視覚的なイシュー」を発見することが必要。

学術や事業の分野を超えた経験が物を言うのはこの「自分だけの視点」を持てるからである。

イシュー特定のための情報収集

一次情報に触れる

  • 現場に立つ
  • ユーザーに聞く
  • 当事者に聞く
  • その場所へ赴く
  • 元のデータを見る

面識がなくても外部の専門家へインタビューを申し込みむのも選択肢のひとつ

cf. リーンスタートアップ、社会学的なフィールドワーク、インタビュー、知的複眼思考法

基本情報をスキャンする

ようは常識や基本的なもののような通年的なものをMECEに確認する

  • 状況
    • 事業の上流・下流
    • 業界構造
    • 技術・イノベーション
    • 法制・規制
    • etc…
  • 対比情報
    • 競争関係
    • 新規参入者
    • 代替品
    • etc…
      • etc..

数字を確認する
この数字を知らなきゃ議論しても仕方ないとなる数字はすべて把握する

ex.

  • 規模感
  • シェア
  • 営業利益率
  • 変化率
  • KPI
  • etc…

問題意識を確認する
歴史的背景などを踏まえた業界に通じる常識や、課題領域に通じる一般的な通年などを把握する

フレームワーク
課題にかかわる領域がこれまで解決に利用してきたフレームワークなどを把握する

知りすぎない、集めすぎない

  • 情報収集はあるところで頭打ちになりやすい
  • 知りすぎると「自分ならではの視点がゼロに近づきがち」
    • ほどよいくらいに止めておくこと

イシュー特定のためのアプローチ

  • 変数を削る
    • 要素を削ってみたり、固定してみたり….
      • ようは微分したり、偏微分だったりとか?
      • 抽象化とかも方法の一つ
  • 視覚化する
    • 構造やプロセスを図示したり、空間(地図)を図示したり、グラフなどにあらわしてみたり…
  • 最終形から辿る
    • 「最後になにがほしいのか」から辿っていく
      • cf. 「生産性(著:伊賀泰代)」のブランクを埋めてく方式、ロジックツリー
  • 「So What?」を繰り返す
    • イシューの候補に対して「だから、何?」を繰り返してより具体的にしていく
      • cf. 「書く技術・考える技術」の診断フレームワーク、なぜなぜ分析
  • 極端な事例を考える
    • 要素が多い場合に重要な変数を極端な値にするとどの要素が動きのカギになるのかがわかりやすい

これらを組み合わせてみる
たとえば、極端な値に振って視覚化してみるとか…


分析の仕方

イシューを見極めたあとに「解の質」を高める方法

  • イシュー分析
    • ストーリーラインづくり
      • イシューを分解して…
      • ストーリーラインを組み立てる
    • 絵コンテづくり
      • ストーリーラインの個々のサブイシューに対して必要な分析・検証のイメージをまとめる

cf. 「書く技術・考える技術」の「S→C→Q」みたいな、「創造の方法学」

イシューを分解する

イシューは大きな問題のため、分解する必要がある。

  • MECEであること
  • 本質的な固まりで切り分けて意味のある分解をすること
    • 似たようなサブイシューになって同じような検証をすることを避ける
      • ex. 売上×シェアと個数×単価、ユーザ数×ユーザあたりの打ち上げみたいな

問題のモデル化をする

イシューを分解することで全体像が見えやすくなり、優先順位をつけやすくなる

イシューを分解する型

ドメインの問題を分解する型を使う

  • 事業戦略立案なら

    • WHERE
    • WHAT
    • HOW
  • 脳神経科学なら

    • 生理学的(機能)
    • 解剖学的(形態)
    • 分子細胞生物学的(しくみ)

WEB業界なら…?

  • システム単位?
  • ドメイン単位?
  • 設計単位?
  • etc…?

型がない場合は逆算する

「最後にほしいもの」から考える

いつ誰がどこで…、なぜそれが既存のものよりも… → …
最後に何がほしいのかから考え、必要となる要素を何も仮想的にシミュレーションする

cf. リーンスタートアップ

分解をした上でそれぞれに仮説を立てる

分解して見えてきたサブイシューについてもスタンスをとって仮説を立てる。
メッセージをすっきりさせるほどの必要な分析のイメージを明確にすることがでkる

フレームワーク

分野ごとに分析のためのフレームワークが存在しているが、フレームワークにこだわりすぎて無理やりフレームににはめ込んで本質を見失ったり、自分の洞察や観点を生かせなくなったりしないこと。

「金槌を持っていればすべてがクギに見える」

ストーリーラインを組み立てる

「仮説が正しいとすれば」という前提でストーリーを作る

  1. 必要な問題意識・前提となる知識の共有(S→C→Q)
  2. カギとなるイシュー、サブイシューの明確化(キーラインポイント)
  3. それぞれのサブイシューについての検討結果
  4. 総合した意味合いの整理

ストーリーラインづくりは脚本作り、ネームづくり(筋書きやラフなイメージをまとめる)に近いプロセスである

ストーリーラインの役割

ストーリーラインは検討が進み、サブイシューに答えが出る、新しい気づき・洞察が得られるたびに書き換えて磨いていく

  • 立ち上げ段階
    • カギとなるサブイシュー(見極めどころ)を見つけ、何を検証するためにどのような活動をするのかという目的意識を揃えて、検討に範囲を明確にする
  • 分析・検討段階
    • イシューに対する仮説の検証がどこまでできているかが明確になる。
    • 分析結果や新しい事実が生まれるたびに肉付けをして刷新する
  • まとめの段階
    • サマリーや要約になる

ストーリーラインは生き物であり、分析もデータ収集もこれに従う

何も浮かばない場合…

  • イシューと仮説だし
    • 主語と動詞を明確にして、何を言おうとしているのかを箇条書きで明確にする

ストーリーラインの型

ピラミッド構造となる2通りのロジック構造の型がある

WHYの並べ立て

ex.
以下の理由で案件Aに投資すべきだ

  • 「なぜ、案件Aに魅力があるのか。…」
  • 「なぜ、案件Aを手がけるべきなのか。…」
  • 「なぜ、案件Aを手がけることができるのか。…」

cf. 帰納的「書く技術・考える技術」

空・雨・傘

ex.

  • 空… 「西の空が晴れている」
  • 雨…「今の空の様子では、当面雨がふることはなさそう」
  • 傘…「だとすると、今日は傘を持っていく必要がない」

cf. 演繹的「書く技術・考える技術」

otakumesi memo

システム設計でも、関係やI/Oでつながりを表現できそうだなーとか思った。
あるいは、ユーザーストーリーをからトップダウンで考えるとか?


絵コンテとは

イシューが見え、ストーリーラインができれば、グラフや図表などの分析のイメージをデザインする。
memo: (Web系ならペーパープロトタイプ?落書き的な画面遷移図?)

絵コンテとは「最終的に伝えるべきメッセージ(イシューの仮説が証明されたもの)」をどういう結果であれば納得できるか、納得させられるかを考えて、ストーリーラインに沿って前倒しで作ったもの。

絵コンテは紙を縦に割って、サブイシュー(ストーリーライン上の仮説)、分析イメージ、分析手法、情報源なおをまとめていくとよい。

ex.

軸を整理する

分析では適切な比較の軸がカギとなる。

どのような軸で何と何を比較するとそのイシューに答えが出るのかを考える。
定量分析だろうと定性分析だろうと、どのような軸で何と何を比べるか、どのように条件の仕分けを行うが分析の本質。

cf. 創造の方法学

定量分析の3つの型

  • 比較
    • なんらかの共通の軸で2つ以上の値を並べる
    • ex. 棒グラフ
  • 構成
    • 全体に対する部分の比較
    • 「何を全体として何を抽出した議論をするか」の意味を考えることが軸の整理となる
    • ex. 構成比
  • 変化
    • 同じものを時間軸上で比較すること
    • 「何と何を比較したいのか」という軸の整理が重要
    • ex. 折れ線グラフ

どんなチャートでもこの軸を組み合わせて作られる。

分析は比較する条件である「原因」と評価する値である「結果」の掛け算から構成される。
つまり、軸を考えるとは原因側と結果側で何を比べるかを考える事である。

分析の軸を考えるときの方法の例

  1. 比較の際の条件を出せる限りすべて並べる
  2. 似ているものを束ねる

イメージを具体化する

軸の整理が終わると、具体的な数字を入れて分析・検討のイメージを作っていく。

数字の入ったイメージを作る

  • 最終的にどの精度のデータが欲しいかをイメージする
    • 50%か60%かを見極めようとしているときに、0.1%の精度はいらない

分析の意味合いとは「比べた結果違いがあるかどうか」となる。

  • 典型的な違い
    • 差がある
    • 変化がある
    • パターンがある

方法を明示する

絵コンテを作り終えたあとに、そのデータをどうやって取るのかを明示する必要がある

  • どんな分析手法を使ってどんな比較を実現するか
  • どんな情報源(データソース)から情報を得るのか

科学の世界では大きな発見の前に大きな手法の開発があることが多い
システム開発でも多い…?

欲しいものからアプローチをすれば「何が足りていないのか」「何が必要なのか」がわかる
手法から考えるとその既存の枠から出ることができない

アウトプットを生み出す

いきなり検証をはじめない

それぞれのサブイシューの軽重を見極めてもっともバリューのあるものから分析をおこなう。

必ずはじめに粗くても結論や骨格に影響の大きいものの検証ができるかの答えを出す。
カギとなる「前提」と「洞察」の部分

理想的な実験とは論理も実験も簡単で、どんな結果が出ても意義のある結論ができるものである

  • 自分たちの仮説のみが正しいと言えることばかり集めるのはダメ
  • 反対の説(対案)ですら実は自分の説の方が正しく解釈できることを証明する必要がある

トラブルをさばく

  • 重要なものにはヘッジをかけること
    • 二重三重の検証の仕掛けを考えて、一つ目が転んでもなんとかなるようにする

ほしい数字が出ない

  • 構造化して推定する
    • フェルミ推定的な式を組み立てる
  • 足で稼ぐ(直接検証する)
    • ex. 出店場所の検証(日中に歩いている人の人数を実際に調査)
  • 複数のアプローチから推定する
    • 全体の値やセグメントの値などの他の変数を使って逆算して比較する
      • 複数の逆算結果からおおよその近い値を推定できる

自分の知識や技ではうまくいかない

  • 他力を活用する
    • 経験者に話を聞くことで知恵やアイデアをもらえるかもしれない
  • 期限を決めて、そこを目安に解決の目処がつかなければさっさよ手法に見切りをつける
    • 手法に愛着がある場合でもこだわりをほどほどにしなければならない

軽快に答えを出す

いくつもの手法を持つ

  • 方法であれ、考えであれ、人であれ一つのものに固執しないこと
  • バリューを生み出すことに直接関わる資質
    • 持っている手札の数
    • 自分の技となっている手法の豊かさ

いくつもの方法を組み合わせたり、既存の手法に自分なりの視点を加えたりすることで初めて答えに近づく

だからこそ、使える手法が大いに越したことがなく自分の仕事の関連する分野の手法には一通りなじんでおくべき

回転数とスピートを重視

  • 丁寧にやりすぎず60%ほどの完成度で作り上げて、はじめから見直すほうがよい
    • 数字をこねくり回さずに手早くまとめる
      • 1回の完成度よりも取り組む回数(回転数)を重視する

cf. MVP、プロトタイピング

memo: アジャイル的な考え、リーン的な考えに近い気がする(?)

受け手にとって十分なレベルを自分の中で理解しやりすぎないようにする
memo: システムの設計も同様

「本質的」「シンプル」を実現する

検討報告における最終的なアウトプットは「聞き手・読み手と自分の知識ギャップを埋める」ためにある

  • 受け手には次のようになってもらう必要がある
    • 意味のある課題を扱っていることを理解してもらう
    • 最終的なメッセージを理解してもらう
    • メッセージに納得して行動に移してもらう

聞き手を想定する時、聞き手は専門知識は持っていないが基本的な考えや問題、イシューを共有し、結論を伝えれば理解してくれると信頼すること

要は賢いが無知だと想定する

ストーリーラインを磨く

  • 論理構造を確認する

    • ピラミッド構造、WHYの並べ立て、空・雨・傘を確認し、スッキリ整理できているかを確認する
      • ex. 「書く技術考える技術」
    • 分析の結果全体のメッセージに影響が出るときは全体のストーリ構造を見直す必要がないかを確認する
      • 仮説が崩れたら発見だ!と思うくらいでよい
        • 誰も想定していない答えのほうがインパクトが強いため
  • 流れを磨く

    • 紙芝居形式の荒磨き
      • めくりながら説明をして話の順番やメッセージのメリハリを修正する
    • 人を相手にした細かい仕上げ
      • 本番同様のリハーサルをする
      • 素朴な疑問を得るためにもプロジェクト、テーマ、内容などを一切知らない人に見てもらうとよい
  • エレベータテストに備える
    • CEOとエレベータに乗り合わせて降りるまでの間に簡潔に説明できるか

チャートを磨く

  • チャートの構成要素

    • メッセージ(チャートの説明)
    • タイトル
    • サポート(実際の図など)
  • 優れたチャートが満たす条件

    • イシューに沿ったメッセージがある
    • (サポートの)タテとヨコの広がりに意味がある
    • サポートがメッセージを支えている

チャートを優れたものにする

  • 1チャート・1メッセージを徹底する
    • 「最近の動向」といった意味のないメッセージは不要
      • このチャートでなにをいいたいのかを書く
  • チャートがひとつのメッセージしか無いことを確認する
    • パッと見て何をしてるのかがわかるレベル
  • サブイシューとつながっていることを確認する

    タテとヨコの比較軸を磨く

    答えを出すための適切な比較ができているかどうか
  • 軸の選択をフェアにする
    • 恣意的な比較が見つかると信頼性が落ちる
  • 軸の順序に意味をもたせる
    • プロセスの順序、アルファベットの順序、etc..
    • ex. ピラミッドの横の関係の順序「書く技術考える技術」
  • 軸を統合・合成する
    • 重なり合っている条件を比較している場合がないかを確認する
    • あった場合はMECEに整理する
  • 軸の切り口を見直す
    • 明確なメッセージにつながらない場合は切り口にノイズが混ざっている可能性がある

メッセージと分析表現を揃える

  • 様々なチャートの中から他に適した表現方法がないかを確認する
  • 軸の刻みが適切化を確認する
    • ex. 差分の表現、指数の表現、相対…

仮説を持って絵コンテ作りをした上で分析・検証すると、結果は完全には一致しないのが普通である。
このズレは貴重な情報で、それを元にメッセージやチャートを磨き込んでいく。

感想

これまで読んできた本のいくつかと重なるものがあって、
問題解決の総まとめ本を読んでいるように感じました。

私はWebエンジニアであるため、そのまま利用するということはできないと思いますが、
読みつつ「こういうふうにすれば、あの使うことができるんじゃないか?」と考えるのが楽しかったです。

本書の考え方は割りと多くのWeb開発者が納得できるやり方が多いんじゃないかなと思います。

読んだままで終わらたくないためにブログをはじめたこともあって、すぐにでも実行に移そうと考えてます。
とりあえず本の内容を元に「こうやって運用してみよう」という問題解決プロセスをまとめました。

それを運用してみて、効果を感じられた暁にはブログにまとめてみようと思います。

「書く技術・考える技術」を読んだ

世の中にはこの本のメモと書評はたくさんあるので、
読んだ上で自分はこうしていこうかなと、自分なりに体系づけてみました。

問題定義を定義する

基本的にドメイン知識によって定義していく

問題定義はストーリー仕立てで考えていく

「Situation(状況)→Complication(複雑化)→Question(疑問)」に則る

  • Situationとは時間や場所、その時点における対象の構造を表したモノや、その状況において懸念されているモノなどの読み手が「そうだね。それで何?」となるような内容
  • ComplicationとはSituationに変化を起こしなんらかの問題を発生させる事象で、悪い状況の原因になる

  1. Situation(状況)を示す
    開始時点における状況などを視覚的に示す
    (業界の構造やシステムの構成など…)

  2. 懸念される出来事を示す
    大抵はR1につながるような原因となる事象
    (Complicationを引き起こす大元)

  3. R1に現状の状態、あるいは悪い状況を示す
    最も新しく発生したComplicationの状況をR1とすること
    読み手の関心(Concern)の部分
    このフレームワークのR1とR2のギャップにより発生したQuestionは新しい「現状」となり、新しい「理想の状態」を作り、より深く再帰的に掘り下げていくことができる

  4. R2に理想的な状況を示す

    • 読み手が現状から到達したい姿
    • 問題の解決

どうやってそのギャップを埋めるんだ?といったQuestion(疑問)までたどり着くこと
そしたら、Solution(解決策)を探し始めることができる

この理想的な状況と現在の状態のギャップを埋める方法が課題

課題分析をする

定義した問題からどうやって課題を見つけるのか…
もっともドメイン知識がいるところ

データを収集する

  • 収集するデータを絞って仮説を立てる
  • 仮説を課題として検証をおこなう
    • 望んでいる結果をもたらす案を論理的に系統立てて検証してみる
      • 帰納法
      • 演繹法
    • データがなくまだわからないものであれば「実験」をおこなって検証する
      • 不明推測法

仮説を立てるために…

診断フレームワークを作る

どれもMECEで分類することが重要

  • 構造を図式化する
    • プロセス / 関心分野の相互関係など
  • 因果関係をたどる
    • 時間の流れ / 原因と結果
    • ツリー構造で辿っていく
  • ありうる原因を分類する
    • MECEで分類し枝を分解していく
    • 最終的にYES / NOで答えられる問題へと変える
      • これは原因か?

問題解決のための選択肢を考える

問題が見えたときに取る選択肢、取る対象を選定するために「ロジックツリー」を作る

文書化する

ピラミッドで考える

文章はストーリーとして展開される

Q&A形式になるようにピラミッドを構成する

  • 主題(テーマ)を明らかにする
    • 既知の内容や過去の事象はSituationやComplicationに書く
  • 「疑問」がなにかを決める(Question)
  • 「答え」を書いてみる
  • 「状況」と「複雑化」によって「疑問」導かれているかをチェックする
  • 「答え」が妥当化をチェックする

トップダウンアプローチ

  1. 頂点の箱に主題を書く
  2. 主題に対する疑問を書く(Question)
  3. それに対する答えを主題と同じ箱に書く
  4. 主題を取り巻く状況を書く(Situation)
  5. 状況を複雑化へと発展させる(Complication)
    • 読み手を想定してQ&Aを展開させる
  6. 「疑問」と「答え」をチェックして妥当性を見る

ボトムアップアプローチ

  1. ポイントをリスト化する
    • ex. 問題点、解決策
  2. 関係を図示する
    • ex. 因果関係や構造を図示する
  3. 関係から結論を導く
    • 読み手が知りたいことに答える結論を導く

ピラミッド内部は常に関係をしている

  • 頂上は読み手の疑問に答えること
    • 状況と複雑化によって疑問が導かれていること
  • 上位は下位のグループの要約となること
    • 縦の関係
      • Q&A形式による対話
      • 下位のようやくは再帰的に展開されていく
    • 横の関係
      • 上位グループのQuestionへの答え方
        • 帰納的
        • 演繹的
      • 同グループの要素同士の関係には順序がある
        • 時間の順序
        • 構造の順序
        • 重要度の順序

  • 演繹は関数的なイメージ
  • 帰納は共通集合から考えるイメージ

文章の導入部を書く際に意識すること

  • Situation-Complication-Questionの形式に則ること
  • 読み手が合意するもののみを書くこと
  • 「状況」をスタートポイントにする
  • 過去の出来事(既知の内容)はすべてここで書くこと

読んだ感想

時間のあった大学生のときに読んでおけば良かったと思う1冊だった。
こういった考え方ができていれば、卒業論文を書く際の試行錯誤のサイクルも早くなったんだろうなと思った。

この本は考え方が存在している何かから「帰納法」と「演繹法」によって、導き出すという考え方がメインになっていました。
つまり、分析に必要な収集すべきデータなどは既にこの世に存在しているという前提で書かれている印象を受けました。
「仮説検証」的な視点は「不明推測法」として補足として触れられているのに留められているため、
他の本でそれを補うのはよいのではないかなと思っております。

個人的にオススメしたいのは「イシューからはじめよ」と「創造の方法学」の2冊です。

ブログはじめてみた

技術者の端くれとして日々インプットばかりしてきましたが、
時間がたつにつれて勉強したものも忘れつつあって危機感を感じはじめました。

インプットしたものを何らかの形でも、
アウトプットをする場所が必要かなと思いたったため、ブログをはじめます。

GithubPages

どのCMSでスタートをするかをだいぶ悩んだのですが、
以下の理由でGithubPagesを利用しようと考えました。

  • 独自ドメインを利用してもお金がかからない
  • 維持費がかからない
  • 手元のエディタで記事を編集できる

ただ、いちいちファイルを作成したりするのはいろいろ辛い気がしたので、
なにか便利なツールがないかを探したところ…

hexoというツールを見つけました。

hexoはNode.js製の静的サイトジェネレータ(ブログ用フレームワークと称している)で、
特に手間がかかることなくはじめることができました。

hexo init #{ブログ名}でブログを作成し、
hexo new #{記事名}で記事を作成し、
hexo generateで作成した記事を
hexo deployでGithubにpushする。

この4つのコマンドでブログをはじめられます。
(もちろんinitの後にちょいちょいとconfigの設定などは必要ですが…)

ということで、よろしくお願いします。