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
Naoya Furudono
May 19, 2025
Programming
81
0
Share
設計と複雑さのはなし
社内でのLT会に用いた資料
Naoya Furudono
May 19, 2025
More Decks by Naoya Furudono
See All by Naoya Furudono
「型システムのしくみ」輪講 第一章
naoyafurudono
0
120
waiwai-aiを入社2ヶ月の エンジニア3人と作るための さいきょうのアーキテクチャ
naoyafurudono
0
510
CLIツール開発をProtocol Buffers スキーマで駆動する
naoyafurudono
1
970
Protocol Buffersスキーマ定義から GoのCLIを生成する
naoyafurudono
0
130
Other Decks in Programming
See All in Programming
How We Benchmarked Quarkus: Patterns and anti-patterns
hollycummins
1
160
アクセシビリティ試験の"その後"を仕組み化する
yuuumiravy
1
180
JOAI2026 1st solution - heron0519 -
heron0519
0
160
2026_04_15_量子計算をパズルとして解く
hideakitakechi
0
130
VueエンジニアがReactを触って感じた_設計の違い
koukimiura
0
190
The Less-Told Story of Socket Timeouts
coe401_
3
780
ハーネスエンジニアリングとは?
kinopeee
13
6.4k
AIと共に生きる技術選定 2026
sgash708
0
110
Kingdom of the Machine
yui_knk
2
1.2k
Liberating Ruby's Parser from Lexer Hacks
ydah
2
2.3k
Vibe NLP for Applied NLP
inesmontani
PRO
0
520
ドメインイベントでビジネスロジックを解きほぐす #phpcon_odawara
kajitack
3
830
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
The Limits of Empathy - UXLibs8
cassininazir
1
310
Google's AI Overviews - The New Search
badams
0
990
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.5k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
290
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
190
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
280
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
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