SlideShare a Scribd company logo
1 of 39
Download to read offline
ソフトウェア設計の
学び方を考える
2019年6月23日
ギルドワークス 増田 亨
DevLOVE X(10周年記念イベント)
アジェンダ
1. 設計という課題
2. ソフトウェア設計の品質
3. 学習と成長
4. 設計の初歩を学ぶ
5. 設計の中級者への道
6. 設計の上級者への挑戦
2019/6/23 2
ソフトウェア設計という課題
2019/6/23 3
複雑さとの戦い
構成要素の数
構成要素間の関係
拡張と変更の繰り返し
2019/6/23 4
人間の知的能力の限界
構成要素の数
構成要素間の関係
拡張と変更の繰り返し
2019/6/23 5
ソフトウェア設計の品質
2019/6/23 6
構造と秩序
2019/6/23 7
時間とともに劣化する構造と秩序
2019/6/23 8
時間とともに進化する構造と秩序
2019/6/23 9
ソフトウェア設計のスキル
構造と秩序を生み出す能力
2019/6/23 10
学習と成長
2019/6/23 11
学習と成長
実験による設計スキルの習得
設計スキルの学習曲線
2019/6/23 12
実験による設計スキルの習得
最初からよい設計はみつからない
そのまま使える既存の設計はない
2019/6/23 13
実験による設計スキルの習得
観察 仮説 実験 考察
目の前の設計課題
過去の設計例
他者の設計例
今回設計案の列挙
仮決め
コードで検証
収まり具合
まわりとの関係性
全体の調和
2019/6/23 14
設計スキルの向上
設計知識の広さと深さ
設計経験の広さと深さ
着眼点とこだわりポイントの変化
2019/6/23 15
設計スキルの学習曲線
設計の初歩
を学ぶ
中級者への道
上級者の挑戦
知識と経験が広く深くなるにつれ
着眼点とこだわりポイントが変化していく
2019/6/23 16
設計の初歩を学ぶ
2019/6/23 17
設計の基本
関心を分離する
モジュールに分割する
2019/6/23 18
分割とモジュール化の方法論
2019/6/23 19
2つの分割アプローチ
機能で分解する 型で分解する
入出力 計算
画面・通信・データベースの操作
トランザクションスクリプト
導出ロジック/判定ロジックの記述
ドメインモデル
2019/6/23 20
B. Liskov
B. Meyer
M. Fowler
K. Beck
E. Evans
ボトムアップ
インクリメンタル
トップダウン
アップフロント
構造と秩序をもたらす設計の初歩
型(値の種類)で分解する
計算を主役に、入出力をわき役に
問題領域と設計の直接的な写像
2019/6/23 21
型による分解
2019/6/23 22
型(値の種類)による分解
動機は計算ロジックや判定ロジックの複雑さを扱う工夫
計算の結果や計算に使う値を分類する(型の発見)
型ごとに、値の有効な範囲を定義する
型ごとに、その値を使う有効な操作を定義する
値の範囲と操作の定義をカプセル化する(クラス)
2019/6/23 23
計算を設計の主役に
2019/6/23 24
計算が主役、入出力がわき役
Javaの言語、標準ライブラリ、フレームワークを例に
計算ロジックの記述 入出力の記述
かつては、java.io, java.net, java.sql …
今はフレームワークに隠蔽されている
さまざまな実証済の設計パターンの登場
かつては、int, boolean, BigDecimal, Calendar, collection
今でも、int, boolean, BigDecimal, java.time, collection, …
かつては、if文, switch文, enum, …
今でも、if文, switch文, enum, …
構造と秩序を生み出すための
設計の主たる関心事ではなくなりつつある
複雑さと戦い、構造と秩序を生み出すための
設計活動の主戦場
2019/6/23 25
問題領域と設計の直接的な写像
2019/6/23 26
怪しげな写像
金額
注文番号
消費税
換算レート
納期
誕生日
割引可能
出荷可能
long型
BigDecimal型
LocalDate型
boolean型
一方通行
N対1
値の範囲
可能な操作
問題領域の関心事 設計実装の関心事
2019/6/23 27
直接的な写像
金額
注文番号
消費税
換算レート
納期
誕生日
割引可能
出荷可能
双方向の対応
1対1
適切な値の範囲
適切な操作
問題領域の関心事 設計実装の関心事
金額型
注文番号型
消費税型
換算レート型
納期型
誕生日型
割引判定型
出荷判定型
2019/6/23 28
構造と秩序をもたらす設計の初歩
型(値の種類)で分解する
計算を主役に、入出力をわき役に
問題領域と設計の直接的な写像
2019/6/23 29
設計の中級者への道
2019/6/23 30
設計の初級者と中級者の違い
初級者にとっては時間のムダに思える活動
中級者は費用対効果が高いと考える活動
2019/6/23 31
設計に関する活動 初級者 中級者
リファクタリング 動けばOK/やらない 動いた後の改善こそ重要
名前の変更 どっちでも同じ 名前たいせつ
パッケージ構造の変更 時間のムダ/危険 見通し改善の効果大
設計の選択肢 選択肢はひとつ いろいろあって迷う
業務知識 わからない、興味ない 知っていると強い
設計スキルが高い 複雑なコードが書ける コードを単純にできる
2019/6/23 32
設計の中級者への道
➢多くに目を向け、複数の選択肢を持つようにする
➢時間の節約と投資を覚える
✓構造と秩序の「核になる20%」に注目する
✓核心の設計課題に、重点的に時間とエネルギーを投資する
✓周辺的な課題の設計は、できるだけ時間とエネルギーを節約する
➢仕様の補完力の必要性と効果を知る
✓詳細仕様はだれも知らない/決められない現実を理解する
✓業務知識の理解と直接的な写像の効果に気がつく
➢パッケージ名とパッケージ構造の威力を知る
2019/6/23 33
「中心」と「周辺」の関係に気づく
影響の大きい要素の発見
設計の上級者への挑戦
2019/6/23 34
設計の上級者
もっともっと広く、もっともっと深く
4%への挑戦
2019/6/23 35
設計の上級者
➢もっともっと広く、もっともっと深く
✓型による分解
✓計算を主役に
✓問題領域と設計実装の直接的な写像
➢4%への挑戦
✓20%×20%
✓関心の範囲を広げるほど、時間が足りなくなる
✓中核のなかの中核、要点のなかの要点を発見することに焦点をあわせる
✓4%の中心的な関心事に、重点的に投資する
✓周辺の関心事への節約を、さらに徹底する
2019/6/23 36
深く理解し、4%に挑戦する
➢多くに目を向け、複数の視点を持ち、視座をあちこち移動する
➢根底にある構造の発見へのこだわり
➢暗黙の概念の言語化へのこだわり
➢ビジネス活動とソフトウェア構造の直接的な関係性の気づき
✓どちらも構造と秩序が時間とともに変化する
✓両者の直接的な連動性への気づきと設計への反映
2019/6/23 37
本日のまとめ
2019/6/23 38
設計という課題
複雑さへの挑戦
構造と秩序をもたらす能力
設計の品質
変更が楽で安全であること、
進化を続ける秩序
学習と成長
実験による学習
着眼点とこだわりポイントの変化
設計の初歩を学ぶ
型による分解、計算が主役
直接的な写像
中級者への道
設計の費用対効果への気づき
中心と周辺の気づき、節約と投資
上級者への挑戦
4%への挑戦
隠れた概念/関係性の発見と言語化
2019/6/23 39

More Related Content

What's hot

オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
 

What's hot (20)

正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみようドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
 
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイントドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
 
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDDドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
 
3週連続DDDその1 ドメイン駆動設計の基本を理解する
3週連続DDDその1  ドメイン駆動設計の基本を理解する3週連続DDDその1  ドメイン駆動設計の基本を理解する
3週連続DDDその1 ドメイン駆動設計の基本を理解する
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Springドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
 
ドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計するドメイン駆動設計 分析しながら設計する
ドメイン駆動設計 分析しながら設計する
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
ドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かすドメイン駆動設計をゲーム開発に活かす
ドメイン駆動設計をゲーム開発に活かす
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
 

Similar to ソフトウェア設計の学び方を考える

多様性の時代を生きる、私たちのデザイン -インクルーシブデザインとサービスデザインを語る-
多様性の時代を生きる、私たちのデザイン -インクルーシブデザインとサービスデザインを語る-多様性の時代を生きる、私たちのデザイン -インクルーシブデザインとサービスデザインを語る-
多様性の時代を生きる、私たちのデザイン -インクルーシブデザインとサービスデザインを語る-
Concent, Inc.
 

Similar to ソフトウェア設計の学び方を考える (20)

プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイルプロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
 
Web App for Containers のデプロイでつまずいた話
Web App for Containers のデプロイでつまずいた話Web App for Containers のデプロイでつまずいた話
Web App for Containers のデプロイでつまずいた話
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
DEMODAY 2019 Spring スポンサーシップ募集要項
DEMODAY 2019 Spring スポンサーシップ募集要項DEMODAY 2019 Spring スポンサーシップ募集要項
DEMODAY 2019 Spring スポンサーシップ募集要項
 
派生開発でDXの時代を生き残る ~「2025年の崖」への処方箋 ~
派生開発でDXの時代を生き残る ~「2025年の崖」への処方箋 ~派生開発でDXの時代を生き残る ~「2025年の崖」への処方箋 ~
派生開発でDXの時代を生き残る ~「2025年の崖」への処方箋 ~
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
 
多様性の時代を生きる、私たちのデザイン -インクルーシブデザインとサービスデザインを語る-
多様性の時代を生きる、私たちのデザイン -インクルーシブデザインとサービスデザインを語る-多様性の時代を生きる、私たちのデザイン -インクルーシブデザインとサービスデザインを語る-
多様性の時代を生きる、私たちのデザイン -インクルーシブデザインとサービスデザインを語る-
 
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
 
20190117 teamup
20190117 teamup20190117 teamup
20190117 teamup
 
scrum_fest_osaka_2020
scrum_fest_osaka_2020scrum_fest_osaka_2020
scrum_fest_osaka_2020
 
Story-Assured Design で開発チーム全員でデザインする
Story-Assured Design で開発チーム全員でデザインするStory-Assured Design で開発チーム全員でデザインする
Story-Assured Design で開発チーム全員でデザインする
 
Devsumi2013 gunta 2_pdf
Devsumi2013 gunta 2_pdfDevsumi2013 gunta 2_pdf
Devsumi2013 gunta 2_pdf
 
OSC2019名古屋 : LibreOfficeで役立つ「モノづくり」
OSC2019名古屋 : LibreOfficeで役立つ「モノづくり」OSC2019名古屋 : LibreOfficeで役立つ「モノづくり」
OSC2019名古屋 : LibreOfficeで役立つ「モノづくり」
 
Build2019発表情報一気見せ
Build2019発表情報一気見せBuild2019発表情報一気見せ
Build2019発表情報一気見せ
 
【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料
【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料
【Azureデータ分析シリーズ】非専門家向け/利用部門主導で始めるデータ分析_ナレッジコミュニケーション公開資料
 
Androidの開発概要
Androidの開発概要Androidの開発概要
Androidの開発概要
 
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイルVisual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル
 
2019.12.7 kaihatsu
2019.12.7 kaihatsu2019.12.7 kaihatsu
2019.12.7 kaihatsu
 
クラウドコンピューティング時代のタブレットコンピューター向けマトリックス型ワードプロセッシングシステムの試作
クラウドコンピューティング時代のタブレットコンピューター向けマトリックス型ワードプロセッシングシステムの試作クラウドコンピューティング時代のタブレットコンピューター向けマトリックス型ワードプロセッシングシステムの試作
クラウドコンピューティング時代のタブレットコンピューター向けマトリックス型ワードプロセッシングシステムの試作
 

More from 増田 亨

More from 増田 亨 (16)

事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java
 
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指してアジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
SoR 2.0 summary
SoR 2.0 summarySoR 2.0 summary
SoR 2.0 summary
 
毎日が越境だ!
毎日が越境だ!毎日が越境だ!
毎日が越境だ!
 
SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築SoR 2.0 基幹システムの再定義と再構築
SoR 2.0 基幹システムの再定義と再構築
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる越境する情シス:進化可能なアーキテクチャを手に入れる
越境する情シス:進化可能なアーキテクチャを手に入れる
 
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイルドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
ドメイン駆動設計の基礎知識:設計のスタイル、開発のスタイル
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 

Recently uploaded

Recently uploaded (7)

sm支付宝号购买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】抖音小号自动发号
sm支付宝号购买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】抖音小号自动发号sm支付宝号购买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】抖音小号自动发号
sm支付宝号购买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】抖音小号自动发号
 
境外手机卡商城【☆购买网站:fk578.com】【☆购买网址:fk578.com☆】☆☆快手账号交易平台
境外手机卡商城【☆购买网站:fk578.com】【☆购买网址:fk578.com☆】☆☆快手账号交易平台境外手机卡商城【☆购买网站:fk578.com】【☆购买网址:fk578.com☆】☆☆快手账号交易平台
境外手机卡商城【☆购买网站:fk578.com】【☆购买网址:fk578.com☆】☆☆快手账号交易平台
 
购买官网听话水【购买网址: GHB1.com】 迷幻药货到付款【商城网址: 91miwan.com☆】
购买官网听话水【购买网址:  GHB1.com】 迷幻药货到付款【商城网址:  91miwan.com☆】购买官网听话水【购买网址:  GHB1.com】 迷幻药货到付款【商城网址:  91miwan.com☆】
购买官网听话水【购买网址: GHB1.com】 迷幻药货到付款【商城网址: 91miwan.com☆】
 
QQ实名号自助购买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】实名微博号购买商城
QQ实名号自助购买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】实名微博号购买商城QQ实名号自助购买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】实名微博号购买商城
QQ实名号自助购买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】实名微博号购买商城
 
微信白号怎么买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】soul账号交易平台
微信白号怎么买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】soul账号交易平台微信白号怎么买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】soul账号交易平台
微信白号怎么买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】soul账号交易平台
 
失忆方法迷幻药【购买网址: GHB1.com】 拍肩粉货到付款购买【商城网址: 91miwan.com☆】
失忆方法迷幻药【购买网址:  GHB1.com】 拍肩粉货到付款购买【商城网址:  91miwan.com☆】失忆方法迷幻药【购买网址:  GHB1.com】 拍肩粉货到付款购买【商城网址:  91miwan.com☆】
失忆方法迷幻药【购买网址: GHB1.com】 拍肩粉货到付款购买【商城网址: 91miwan.com☆】
 
微信实名号哪里买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】soul实名账号批发
微信实名号哪里买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】soul实名账号批发微信实名号哪里买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】soul实名账号批发
微信实名号哪里买【☆出售网址:fk578。com☆】【☆购买网址:fk578。com☆】soul实名账号批发
 

ソフトウェア設計の学び方を考える