Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

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

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

8f84b7d8869ef6005d89b378e8661f7c?s=128

増田 亨
PRO

June 30, 2022
Tweet

More Decks by 増田 亨

Other Decks in Programming

Transcript

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

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

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

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

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

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

  7. どの設計スタイルを学ぶか/経験するか アプリケーション方式 トランザクション スクリプト ドメインモデル モジュール単位 手続き 型 記述 命令的

    宣言的 データ 変数 値 可変性 ミュータブル イミュータブル 現実世界の表現 最新の状態 出来事のストリーム 中核の関心事 画面・帳票 ビジネスルール 7
  8. 何を学ぶとよいのか 設計原則 設計パターン 設計結果の見本(模造品) 設計結果の例(実物) 設計の過程(before/afterの実体験の積み重ね) 8

  9. 設計の学び方 9

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

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

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

    わかりにくい名前を変える(メソッド名、変数名、クラス名、パッケージ名) パッケージ構造(パッケージを作る、移動する) 12 値オブジェクト コレクションオブジェクト 区分オブジェクト 目的特化の集約
  13. ②成長する:時間をかけて変化する 見る範囲を広げる(最初はぼんやりとしたイメージから) • いろいろな設計スタイル • アプリケーション全体のあちらこちら • ソフトウェアのライフサイクル全体のあちらこちら • アプリケーションとデータのネットワーク全体のあちらこちら

    • アプリケーションが対象とする業務のあちらこちら • 事業活動全体のあちらこちら • ソフトウェア開発の文脈(目的・価値観・とりまく環境)のあちらこちら 少しずつ手がかりを増やす(言葉の記憶、体験の記憶) つながりで理解する(つながりの有無、強弱、遠近、経路) 13
  14. 成長の手がかりを増やす:本から学ぶ 積読(物理的に本を並べて眺めていると視界が広がる) 文脈を把握する(まえがき) • 執筆の意図(誰に何を伝えたいと著者は考えているか) • 背景(どんな流れから生まれた本か) • 著者の価値観・判断基準・こだわりポイント あらすじ読み(目次・章見出し・リード文・まとめ文)

    拾い読み(節見出し・図表・箇条書き・太字の気になるところ) しばらくたってから読みなおす(半年後、数年後) 14
  15. 成長の手がかりを増やす:観察と実験 観察(機械・建造物・自然・文章・コード・…) • 主要な構成要素は何か? • どうつながっているか? • どう変化するか(生まれる過程・短期の変化・長期の変化) 実験(自分の手でやってみる、特にコードで実験) •

    結果を予想する(予想と異なることも実験の成果) • 自分の手で触った感じ • 自分の目で見た感じ 15
  16. ③ひらめき:突発的に変化する ➢もがく ➢設計に行き詰まる ➢あたためる その時ひらめかなくても、自覚できない潜在的な学びは増えている 何かをキッカケにその学びの成果が顕在化する 行き詰まるからひらめく、行き詰まっていなければひらめかない 16

  17. まとめ 17

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