BPStudy#178〜成長し続け、変更を楽に安全にできるソフトウェア設計とは 株式会社ビープラウドが主催するIT勉強会 2022年6月30日
設計を学ぶのは自分のため 「正しい」学び方があるわけではない 設計の学びに特定の到達点はない 何を学ぶのか
設計の学び方 上達する:練習して変化する 成長する:時間をかけて変化する ひらめき:突発的に変化する
設計の学び方自分流のススメ有限会社システム設計 増田 亨
View Slide
自己紹介アプリケーション開発者Java/Springを使った業務系アプリケーション開発ドメイン駆動設計の開発現場への導入と実践著書『現場で役立つシステム設計の原則』~変更を楽で安全にするオブジェクト指向の実践技法技術者コミュニティ「現場から学ぶモデル駆動の設計」主催2
これからお話すること設計を学ぶのは自分のため「正しい」学び方があるわけではない設計の学びに特定の到達点はない何を学ぶのか設計の学び方上達する:練習して変化する成長する:時間をかけて変化するひらめき:突発的に変化する3
設計を学ぶのは自分のためどこに向かうか? 自分勝手に決めるどこまで行くか? 自分勝手に決めるどう進むか? 自分勝手に決めるどこで休むか? 自分勝手に決めるどこでやめるか? 自分勝手に決める4
「正しい」学び方があるわけではない苦労して学んでもよいし、楽しんで学んでもよい遠回りもあり、寄り道もありいっしょに学ぶのもあり、ひとりで学ぶのもあり計画を立ててもよいし、臨機応変でもよい5
設計の学びに到達点はない設計スキルはさまざまな経験のかたまり経験則なので、いつまでたっても新たな学びがあるどこかに到達点があるわけではないゴールがないので焦って学ぶ必要はない自分流で、マイペースで、新たな経験と自分の成長を楽しむ6
どの設計スタイルを学ぶか/経験するかアプリケーション方式トランザクションスクリプトドメインモデルモジュール単位 手続き 型記述 命令的 宣言的データ 変数 値可変性 ミュータブル イミュータブル現実世界の表現 最新の状態 出来事のストリーム中核の関心事 画面・帳票 ビジネスルール7
何を学ぶとよいのか設計原則設計パターン設計結果の見本(模造品)設計結果の例(実物)設計の過程(before/afterの実体験の積み重ね)8
設計の学び方9
設計の学び方:三つの変化①上達する 練習して変化する②成長する 時間をかけて変化する③ひらめき 突発的に変化する三つを並行して進める10
①上達する:練習して変化する➢自転車の乗り方理屈ではなく、体で覚えるスキルある段階までは誰でも確実に上達できるぎごちない動作からはじめて、無意識に体が動くようになるまで練習する➢リファクタリング➢カプセル化のやり方➢契約プログラミングのやり方➢自己文書化のやり方11
練習して変化するカプセル化のやり方ロジックとデータを同じクラスに寄せる他のクラスのデータをgetして計算判断していたらロジックを移動するコレクション操作のカプセル化契約プログラミングのやり方ミュータブルな(フィールドを書き変える)操作をなくす(不変条件を常に保証)引数の型を目的特化の型にする(事前条件の明確化)メソッドの返す型を目的特化の型にする(事後条件の明確化)自己文書化のやり方わかりにくい名前を変える(メソッド名、変数名、クラス名、パッケージ名)パッケージ構造(パッケージを作る、移動する)12値オブジェクトコレクションオブジェクト区分オブジェクト目的特化の集約
②成長する:時間をかけて変化する見る範囲を広げる(最初はぼんやりとしたイメージから)• いろいろな設計スタイル• アプリケーション全体のあちらこちら• ソフトウェアのライフサイクル全体のあちらこちら• アプリケーションとデータのネットワーク全体のあちらこちら• アプリケーションが対象とする業務のあちらこちら• 事業活動全体のあちらこちら• ソフトウェア開発の文脈(目的・価値観・とりまく環境)のあちらこちら少しずつ手がかりを増やす(言葉の記憶、体験の記憶)つながりで理解する(つながりの有無、強弱、遠近、経路)13
成長の手がかりを増やす:本から学ぶ積読(物理的に本を並べて眺めていると視界が広がる)文脈を把握する(まえがき)• 執筆の意図(誰に何を伝えたいと著者は考えているか)• 背景(どんな流れから生まれた本か)• 著者の価値観・判断基準・こだわりポイントあらすじ読み(目次・章見出し・リード文・まとめ文)拾い読み(節見出し・図表・箇条書き・太字の気になるところ)しばらくたってから読みなおす(半年後、数年後)14
成長の手がかりを増やす:観察と実験観察(機械・建造物・自然・文章・コード・…)• 主要な構成要素は何か?• どうつながっているか?• どう変化するか(生まれる過程・短期の変化・長期の変化)実験(自分の手でやってみる、特にコードで実験)• 結果を予想する(予想と異なることも実験の成果)• 自分の手で触った感じ• 自分の目で見た感じ15
③ひらめき:突発的に変化する➢もがく➢設計に行き詰まる➢あたためるその時ひらめかなくても、自覚できない潜在的な学びは増えている何かをキッカケにその学びの成果が顕在化する行き詰まるからひらめく、行き詰まっていなければひらめかない16
まとめ17
設計の学び方①上達する 練習して変化するために何ができるか?②成長する 時間をかけて変化するために何ができるか?③ひらめき 突発的に変化するために何ができるか?三つを並行して進める18