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
The Perils Of Software Engineering
Search
Andrew Godwin
June 19, 2015
Programming
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The Perils Of Software Engineering
My keynote from PyCon SG 2015.
Andrew Godwin
June 19, 2015
More Decks by Andrew Godwin
See All by Andrew Godwin
Reconciling Everything
andrewgodwin
1
410
Django Through The Years
andrewgodwin
0
330
Writing Maintainable Software At Scale
andrewgodwin
0
540
A Newcomer's Guide To Airflow's Architecture
andrewgodwin
0
430
Async, Python, and the Future
andrewgodwin
2
750
How To Break Django: With Async
andrewgodwin
1
840
Taking Django's ORM Async
andrewgodwin
0
860
The Long Road To Asynchrony
andrewgodwin
0
780
The Scientist & The Engineer
andrewgodwin
1
860
Other Decks in Programming
See All in Programming
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.3k
AIエージェント時代のコードレビューを設計する
nogu66
5
2.5k
Oxlintはいいぞ(続)
yug1224
1
540
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
210
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
300
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
110
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
460
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
230
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
3
570
自分的「カンファレンスの楽しみ方」
syumai
0
190
バグを直したら useEffect が消えた
colorful12
3
830
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
500
Featured
See All Featured
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
770
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
410
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
520
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
720
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
570
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
230
Large-scale JavaScript Application Architecture
addyosmani
515
110k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
320
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
490
Transcript
Andrew Godwin @andrewgodwin PERILS OF THE SOFTWARE ENGINEERING
Andrew Godwin Hi, I'm Django Core Developer Senior Engineer at
Far too many hobbies
"Perils"
Computer Science ≠ Software Engineering
Engineering Mechanical Civil Software Chemical Materials
Mechanical Engineering https://www.flickr.com/photos/mariaeklind/
Nondeterministic
Cost of Entry
Civil Engineering
Timescales
Cost of Failure
Aerospace Software Engineering
Cost of Failure
Failure: When, not if
Margaret Hamilton, 1969
Apollo 11 LM, "Eagle"
Web/App Software Engineering
Quick to build and test
Minimal equipment costs
Well-paid
Well-paid
Explicit is better than Implicit
Code Indirection
class MyView(View): def get(self, request): return self.render(request, "template.html")
class MyView(FormView, AuditMixin, OtherMixin): def get(self, request): return self.render(request, "template.html")
class AuditMixin(BaseAuditor, AdditionalStuff): ... class OtherMixin(MyObject, SomethingElse): ...
Async Uncertainty
def async_handler(): with open("my_file.txt", "r") as fh: write_socket(1, fh.read()) redis.incr("key1",
2)
Schemas
{ "id": 342, "name": "David", "weight": 74, } { "id":
342, "name": "Ellie", "weight": "85kg", } { "id": 342, "nom": "Frankie", "weight": 77, } { "id": 342, "name": "Frankie", "weight": -67, }
Clever code is bad Maintainable code is good
xs = [number for inner in nested if len(inner) >
2 for number in inner]
for inner in nested: if len(inner) > 2: for number
in inner: xs.append(number)
Explore and Discard
There is no perfect solution
Throwing everything away rarely works
Backwards compatability is your friend
Nobody is a genius; we're all mediocre
Argue over code, not over ideas
Well-paid
10 years? 100 years? 1000 years?
Who will access it?
What format will it be?
Is it even important?
Over thousands of years, the machine memories have been filled
with programs that can help “ “ A Deepness In The Sky Vernor Vinge
Engineering is collaborative
Build well.
Thanks. Andrew Godwin @andrewgodwin