Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Scientist & The Engineer
Search
Andrew Godwin
February 07, 2020
Programming
1
800
The Scientist & The Engineer
My keynote from PyCon Colombia 2020.
Andrew Godwin
February 07, 2020
Tweet
Share
More Decks by Andrew Godwin
See All by Andrew Godwin
Reconciling Everything
andrewgodwin
1
350
Django Through The Years
andrewgodwin
0
260
Writing Maintainable Software At Scale
andrewgodwin
0
470
A Newcomer's Guide To Airflow's Architecture
andrewgodwin
0
380
Async, Python, and the Future
andrewgodwin
2
700
How To Break Django: With Async
andrewgodwin
1
760
Taking Django's ORM Async
andrewgodwin
0
750
The Long Road To Asynchrony
andrewgodwin
0
700
Pioneering Real-Time
andrewgodwin
0
470
Other Decks in Programming
See All in Programming
[SF Ruby Conf 2025] Rails X
palkan
0
480
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
360
テストやOSS開発に役立つSetup PHP Action
matsuo_atsushi
0
140
ソフトウェア設計の課題・原則・実践技法
masuda220
PRO
26
22k
全員アーキテクトで挑む、 巨大で高密度なドメインの紐解き方
agatan
8
19k
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
110
ゲームの物理 剛体編
fadis
0
300
社内オペレーション改善のためのTypeScript / TSKaigi Hokuriku 2025
dachi023
1
540
著者と進める!『AIと個人開発したくなったらまずCursorで要件定義だ!』
yasunacoffee
0
120
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
18
7.1k
ローターアクトEクラブ アメリカンナイト:川端 柚菜 氏(Japan O.K. ローターアクトEクラブ 会長):2720 Japan O.K. ロータリーEクラブ2025年12月1日卓話
2720japanoke
0
710
AIコーディングエージェント(NotebookLM)
kondai24
0
160
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
380
The Cult of Friendly URLs
andyhume
79
6.7k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
GraphQLとの向き合い方2022年版
quramy
50
14k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Embracing the Ebb and Flow
colly
88
4.9k
Context Engineering - Making Every Token Count
addyosmani
9
490
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Transcript
THE SCIENTIST ANDREW GODWIN // @andrewgodwin THE ENGINEER AND
Hi, I’m Andrew Godwin
I call myself an "engineer"
But I studied Computer Science
I knew programming going in. But this was different.
“ Edsger Dijkstra Computer science is no more about computers
than astronomy is about telescopes.
Computer Science is idealistic
"Turing-complete"
We first want to prove it is possible
async def sleep_sort(numbers): async def sleep_add(number): await asyncio.sleep(number) result.append(number) result
= [] await asyncio.wait([ sleep_add(number) for number in numbers ]) return result
We can prove that programs are correct
def is_two(number): return number == 2
>>> import __builtin__ >>> __builtin__.True = False >>> True False
>>> True == False True (Thankfully, only works in Python 2!)
"Communicating Sequential Processes", C. A. R Hoare
contains :: (Ord a) => (Tree a) -> a ->
Bool contains Nil _ = False contains (Node t1 v t2) x | x == v = True | x < v = contains t1 x | x > v = contains t2 x
A perfect world, of perfect programs
“ Benjamin Brewster In theory there is no difference between
theory and practice. In practice there is.
Software Engineering takes shortcuts
When is it safe to take a risk?
None
Software is faster and cheaper to change
The real world is a nasty place
How often does a cosmic ray affect RAM? 36 hours
(for 16GB; "SEU at Ground Level", Eugene Normand) How long can an unpowered SSD keep data? 3 weeks - 1 year (Enterprise at 40ºC, Client at 30ºC; Intel/JEDEC) Does quantum tunneling affect CPUs? Continuously!
Always design for failure
How do we reason about software?
Input Process Output
async def disable_alarm(): ... async def open_door(): ... await asyncio.wait(
[disable_alarm(), open_door()] )
Input Rendering Output Validation Reporting Storage Processing Logging Cache
Django has 250,000 lines of code
An Airbus A380 has 4,000,000 parts
A new car has 100,000,000 lines of code
How are we supposed to handle this?
Abstract, verify and forget
Abstract Define a contract - types, behaviour, exceptions Verify Write
tests to keep the contract valid Forget Work with the contract, not the fine details
You have to learn to forget
Engineering is communication
“ Grace Hopper A ship in port is safe, but
that's not what ships are built for.
Build to expect growth
Build to expect failure
Everyone can build near-perfect software
Know when not to!
Python lets you do both.
Types Start without types, progressively add with mypy Async Make
it work synchronously first. Add async later. Speed Write slow, understandable code. Test it. Then improve it.
Scientists observe and question
Engineers build and invent
All software has consequences
Be the scientist and the engineer
Gracias. Andrew Godwin @andrewgodwin // aeracode.org