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
0
76
設計と複雑さのはなし
社内でのLT会に用いた資料
Naoya Furudono
May 19, 2025
Tweet
Share
More Decks by Naoya Furudono
See All by Naoya Furudono
「型システムのしくみ」輪講 第一章
naoyafurudono
0
100
waiwai-aiを入社2ヶ月の エンジニア3人と作るための さいきょうのアーキテクチャ
naoyafurudono
0
490
CLIツール開発をProtocol Buffers スキーマで駆動する
naoyafurudono
1
910
Protocol Buffersスキーマ定義から GoのCLIを生成する
naoyafurudono
0
110
Other Decks in Programming
See All in Programming
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
360
ご飯食べながらエージェントが開発できる。そう、Agentic Engineeringならね。
yokomachi
1
210
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.7k
Scaling & Coordinating AI Agents for Development - Tamir Dresher
tamirdresher
0
100
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
160
CSC307 Lecture 06
javiergs
PRO
0
700
Agent Skills Workshop - AIへの頼み方を仕組み化する
gotalab555
9
4.1k
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
880
AI時代の認知負荷との向き合い方
optfit
0
180
360° Signals in Angular: Signal Forms with SignalStore & Resources @ngLondon 01/2026
manfredsteyer
PRO
0
180
エージェント開発初心者の僕がエージェントを作った話と今後やりたいこと
thasu0123
0
110
NOT A HOTEL - 建築や人と融合し、自由を創り出すソフトウェア
not_a_hokuts
2
390
Featured
See All Featured
Scaling GitHub
holman
464
140k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
450
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
650
Crafting Experiences
bethany
1
63
Practical Orchestrator
shlominoach
191
11k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
340
Being A Developer After 40
akosma
91
590k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
30 Presentation Tips
portentint
PRO
1
240
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