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
91
0
Share
設計と複雑さのはなし
社内でのLT会に用いた資料
Naoya Furudono
May 19, 2025
More Decks by Naoya Furudono
See All by Naoya Furudono
「型システムのしくみ」輪講 第一章
naoyafurudono
0
130
waiwai-aiを入社2ヶ月の エンジニア3人と作るための さいきょうのアーキテクチャ
naoyafurudono
0
530
CLIツール開発をProtocol Buffers スキーマで駆動する
naoyafurudono
1
1k
Protocol Buffersスキーマ定義から GoのCLIを生成する
naoyafurudono
0
140
Other Decks in Programming
See All in Programming
Migrations : C'est une question d'hygiène !
vinceamstoutz
0
3.2k
AIとRubyの静的型付け
ukin0k0
0
520
CLIであることを活かしたGitHub Copilot CLI活用術 / GitHub Copilot CLI Pro Tips & Tricks
nao_mk2
1
1.2k
Claspは野良GASの夢をみるか
takter00
0
160
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
170
Inside Stream API
skrb
1
620
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
170
AI時代のUIはどこへ行く?その2!
yusukebe
19
6.5k
AIエージェントと協働するCLI開発 — BunとOpenClawで学んだこと
yoshikouki
1
230
OSもどきOS
arkw
0
400
AIエージェントの隔離技術の徹底比較
kawayu
0
460
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
180
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
41
2.5k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
The Invisible Side of Design
smashingmag
302
52k
Side Projects
sachag
455
43k
Ruling the World: When Life Gets Gamed
codingconduct
0
240
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
280
Mobile First: as difficult as doing things right
swwweet
225
10k
The Pragmatic Product Professional
lauravandoore
37
7.3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Scaling GitHub
holman
464
140k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
460
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