$30 off During Our Annual Pro Sale. View Details »

設計の学び方:自分流のススメ

 設計の学び方:自分流のススメ

BPStudy#178〜成長し続け、変更を楽に安全にできるソフトウェア設計とは
株式会社ビープラウドが主催するIT勉強会  2022年6月30日

設計を学ぶのは自分のため
「正しい」学び方があるわけではない
設計の学びに特定の到達点はない
何を学ぶのか

設計の学び方
上達する:練習して変化する
成長する:時間をかけて変化する
ひらめき:突発的に変化する

増田 亨
PRO

June 30, 2022
Tweet

More Decks by 増田 亨

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  9. 設計の学び方
    9

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. まとめ
    17

    View Slide

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

    View Slide