Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
設計と複雑さのはなし
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Naoya Furudono
May 19, 2025
Programming
0
76
設計と複雑さのはなし
社内でのLT会に用いた資料
Naoya Furudono
May 19, 2025
Tweet
Share
More Decks by Naoya Furudono
See All by Naoya Furudono
「型システムのしくみ」輪講 第一章
naoyafurudono
0
110
waiwai-aiを入社2ヶ月の エンジニア3人と作るための さいきょうのアーキテクチャ
naoyafurudono
0
490
CLIツール開発をProtocol Buffers スキーマで駆動する
naoyafurudono
1
920
Protocol Buffersスキーマ定義から GoのCLIを生成する
naoyafurudono
0
110
Other Decks in Programming
See All in Programming
Agent Skills Workshop - AIへの頼み方を仕組み化する
gotalab555
15
8.6k
Swift ConcurrencyでよりSwiftyに
yuukiw00w
0
260
LangChain4jとは一味違うLangChain4j-CDI
kazumura
1
170
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
2
110
New in Go 1.26 Implementing go fix in product development
sunecosuri
0
430
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
130
Windows on Ryzen and I
seosoft
0
260
CSC307 Lecture 14
javiergs
PRO
0
470
クライアントワークでSREをするということ。あるいは事業会社におけるSREと同じこと・違うこと
nnaka2992
1
330
AIコードレビューの導入・運用と AI駆動開発における「AI4QA」の取り組みについて
hagevvashi
0
430
2026年は Rust 置き換えが流行る! / 20260220-niigata-5min-tech
girigiribauer
0
230
Claude Codeログ基盤の構築
giginet
PRO
7
2.9k
Featured
See All Featured
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
91
Embracing the Ebb and Flow
colly
88
5k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.8k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
150
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
67
37k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
120
The Pragmatic Product Professional
lauravandoore
37
7.2k
A better future with KSS
kneath
240
18k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
84
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
A designer walks into a library…
pauljervisheath
210
24k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
160
Transcript
複雑さと設計のはなし 古殿直也 2025-05-19
自己紹介 古殿直也 (Furudono Naoya) @furudono2 (Twitter) 酒、旅行、ランニングが好き ロリポップ・ムームードメイン事業部 事業開発チーム ホスティング環境とユーザを繋げるWebアプリケーションを作っている
13th 学生の頃はプログラミング言語意味論の勉強をしていた 好きな専門書は EoPL 2
今日の目的 設計を上手くやれるようになる動機を得ること 輪講会への勧誘 A Philosophy of Software Designをみんなで完全に理解したい すべてのエンジニアが潜在的な対象者だと考えている 事務的な話(開催形態とか)は扱わない。技術の話をする
3
複雑さと設計のはなし 4
ソフトウェアを簡単に作れるようになって、よりすごいシステムをより安価に 作れるようになりたい システムを作る人たちの願いである 個人として 楽しい 実現したいことを実現できるようになる 事業会社として ユーザに価値を提供できる 事業の試行錯誤ができる 自由自在にソフトウェアを作れないとき、それは何が原因だろうか
5
作るシステムを理解することがソフトウェア開発を律速する ソフトウェアを書くために必要な能力で支配的なのは、作るシステムがどんなもので あるか(つまり設計)を理解する能力(つまり設計する能力) ソフトウェアはどんなものを作るのかを明らかにすることが難しい どんなものが欲しいかを表現できれば(つまり設計をアウトプットできれば) 作れたも同然 例えば僕は愚かなのでどんな感じに作ればいいかを作りながら考える 既存のシステムを拡張する設計のためには、既存のシステムの理解を元に新しい 拡張を理解する必要がある 全く新しくソフトウェアを作ることはない
例えばCLIツールを作る場合は、コマンドラインインターフェースとかファイ ルみたいな既存のシステムの上にソフトウェアを作ることになる 高速にするためにできることは何か 6
理解する主体が賢くなるか、理解する対象を簡単にするかすればよい 主体が賢くなる コードリーディングの能力を高める エディタとかツールを使いこなす 設計の能力を高める 対象を簡単にすること インクリメンタルに開発するようにする ドキュメントやテストを書く ソフトウェアをシンプルに保つ 7
ソフトウェアをシンプルに保つことにフォーカスしたい 人間は流動的だしプロダクトはいくらでも複雑になれるので、何も工夫しなければ誰 も理解できない状態になれる 主体が賢くなる コードリーディングの能力を高める エディタとかツールを使いこなす 設計の能力を高める 対象を簡単にすること インクリメンタルに開発するようにする ドキュメントやテストを書く
ソフトウェアをシンプルに保つ シンプルにすることは複雑さを減らすこと 8
複雑さを減らすためのアプローチ コードをシンプルに保つこと 名前をちゃんとつける 例外的な処理を減らすこと 複雑性をカプセル化すること (モジュールの実装が複雑になったとしても)インターフェースを簡単にし て、システム全体としての複雑さを下げる戦略 moduler designと呼ばれる これだけではピンとこないだろう
9
これからできること 複雑さを理解すること 複雑さとは何を意味するか どんな問題があるのか 設計しているときや作り込んだ後に、いかに不必要な複雑さを認知するか 複雑さを減らす手法を身につけること 先人の知恵を勉強すること 開発を通じて練習すること 人のコードをレビューするとき 自分のコードをレビューしてもらったとき
10
輪講への勧誘 11
本に期待できること 一人で読むのも良いし、みんなで読むのも良いでしょう 複雑さを理解すること 複雑さとは何を意味するか どんな問題があるのか 設計しているときや作り込んだ後に、いかに不必要な複雑さを認知するか 複雑さを減らす手法を身につけること 先人の知恵を勉強すること 開発を通じて練習すること :
輪講ではなく普段の開発でやる 人のコードをレビューするとき 自分のコードをレビューしてもらったとき 12
参考文献・輪講で読みたい本 この発表ではA Philosophy of Software DesignのPrefaceと Chapter 1を参考にした 全体で200-300ページほど 日本語訳はないけど英語はわか
りやすい 13