Slide 1

Slide 1 text

設計の学び方 自分流のススメ 有限会社システム設計 増田 亨

Slide 2

Slide 2 text

自己紹介 アプリケーション開発者 Java/Springを使った業務系アプリケーション開発 ドメイン駆動設計の開発現場への導入と実践 著書『現場で役立つシステム設計の原則』 ~変更を楽で安全にするオブジェクト指向の実践技法 技術者コミュニティ「現場から学ぶモデル駆動の設計」主催 2

Slide 3

Slide 3 text

これからお話すること 設計を学ぶのは自分のため 「正しい」学び方があるわけではない 設計の学びに特定の到達点はない 何を学ぶのか 設計の学び方 上達する:練習して変化する 成長する:時間をかけて変化する ひらめき:突発的に変化する 3

Slide 4

Slide 4 text

設計を学ぶのは自分のため どこに向かうか? 自分勝手に決める どこまで行くか? 自分勝手に決める どう進むか? 自分勝手に決める どこで休むか? 自分勝手に決める どこでやめるか? 自分勝手に決める 4

Slide 5

Slide 5 text

「正しい」学び方があるわけではない 苦労して学んでもよいし、楽しんで学んでもよい 遠回りもあり、寄り道もあり いっしょに学ぶのもあり、ひとりで学ぶのもあり 計画を立ててもよいし、臨機応変でもよい 5

Slide 6

Slide 6 text

設計の学びに到達点はない 設計スキルはさまざまな経験のかたまり 経験則なので、いつまでたっても新たな学びがある どこかに到達点があるわけではない ゴールがないので焦って学ぶ必要はない 自分流で、マイペースで、新たな経験と自分の成長を楽しむ 6

Slide 7

Slide 7 text

どの設計スタイルを学ぶか/経験するか アプリケーション方式 トランザクション スクリプト ドメインモデル モジュール単位 手続き 型 記述 命令的 宣言的 データ 変数 値 可変性 ミュータブル イミュータブル 現実世界の表現 最新の状態 出来事のストリーム 中核の関心事 画面・帳票 ビジネスルール 7

Slide 8

Slide 8 text

何を学ぶとよいのか 設計原則 設計パターン 設計結果の見本(模造品) 設計結果の例(実物) 設計の過程(before/afterの実体験の積み重ね) 8

Slide 9

Slide 9 text

設計の学び方 9

Slide 10

Slide 10 text

設計の学び方:三つの変化 ①上達する 練習して変化する ②成長する 時間をかけて変化する ③ひらめき 突発的に変化する 三つを並行して進める 10

Slide 11

Slide 11 text

①上達する:練習して変化する ➢自転車の乗り方 理屈ではなく、体で覚えるスキル ある段階までは誰でも確実に上達できる ぎごちない動作からはじめて、無意識に体が動くようになるまで練習する ➢リファクタリング ➢カプセル化のやり方 ➢契約プログラミングのやり方 ➢自己文書化のやり方 11

Slide 12

Slide 12 text

練習して変化する カプセル化のやり方 ロジックとデータを同じクラスに寄せる 他のクラスのデータをgetして計算判断していたらロジックを移動する コレクション操作のカプセル化 契約プログラミングのやり方 ミュータブルな(フィールドを書き変える)操作をなくす(不変条件を常に保証) 引数の型を目的特化の型にする(事前条件の明確化) メソッドの返す型を目的特化の型にする(事後条件の明確化) 自己文書化のやり方 わかりにくい名前を変える(メソッド名、変数名、クラス名、パッケージ名) パッケージ構造(パッケージを作る、移動する) 12 値オブジェクト コレクションオブジェクト 区分オブジェクト 目的特化の集約

Slide 13

Slide 13 text

②成長する:時間をかけて変化する 見る範囲を広げる(最初はぼんやりとしたイメージから) • いろいろな設計スタイル • アプリケーション全体のあちらこちら • ソフトウェアのライフサイクル全体のあちらこちら • アプリケーションとデータのネットワーク全体のあちらこちら • アプリケーションが対象とする業務のあちらこちら • 事業活動全体のあちらこちら • ソフトウェア開発の文脈(目的・価値観・とりまく環境)のあちらこちら 少しずつ手がかりを増やす(言葉の記憶、体験の記憶) つながりで理解する(つながりの有無、強弱、遠近、経路) 13

Slide 14

Slide 14 text

成長の手がかりを増やす:本から学ぶ 積読(物理的に本を並べて眺めていると視界が広がる) 文脈を把握する(まえがき) • 執筆の意図(誰に何を伝えたいと著者は考えているか) • 背景(どんな流れから生まれた本か) • 著者の価値観・判断基準・こだわりポイント あらすじ読み(目次・章見出し・リード文・まとめ文) 拾い読み(節見出し・図表・箇条書き・太字の気になるところ) しばらくたってから読みなおす(半年後、数年後) 14

Slide 15

Slide 15 text

成長の手がかりを増やす:観察と実験 観察(機械・建造物・自然・文章・コード・…) • 主要な構成要素は何か? • どうつながっているか? • どう変化するか(生まれる過程・短期の変化・長期の変化) 実験(自分の手でやってみる、特にコードで実験) • 結果を予想する(予想と異なることも実験の成果) • 自分の手で触った感じ • 自分の目で見た感じ 15

Slide 16

Slide 16 text

③ひらめき:突発的に変化する ➢もがく ➢設計に行き詰まる ➢あたためる その時ひらめかなくても、自覚できない潜在的な学びは増えている 何かをキッカケにその学びの成果が顕在化する 行き詰まるからひらめく、行き詰まっていなければひらめかない 16

Slide 17

Slide 17 text

まとめ 17

Slide 18

Slide 18 text

設計の学び方 ①上達する 練習して変化するために何ができるか? ②成長する 時間をかけて変化するために何ができるか? ③ひらめき 突発的に変化するために何ができるか? 三つを並行して進める 18