Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
The Scientist & The Engineer
Search
Andrew Godwin
February 07, 2020
Programming
870
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The Scientist & The Engineer
My keynote from PyCon Colombia 2020.
Andrew Godwin
February 07, 2020
More Decks by Andrew Godwin
See All by Andrew Godwin
Reconciling Everything
andrewgodwin
1
410
Django Through The Years
andrewgodwin
0
340
Writing Maintainable Software At Scale
andrewgodwin
0
550
A Newcomer's Guide To Airflow's Architecture
andrewgodwin
0
430
Async, Python, and the Future
andrewgodwin
2
760
How To Break Django: With Async
andrewgodwin
1
840
Taking Django's ORM Async
andrewgodwin
0
870
The Long Road To Asynchrony
andrewgodwin
0
780
Pioneering Real-Time
andrewgodwin
0
540
Other Decks in Programming
See All in Programming
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
1k
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2k
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
9.2k
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
110
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
280
The Rails Doctrine Decade
koic
2
420
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
190
AWSに止められる覚悟してますか?
morizo_1984
2
490
アクセシビリティから考える情報設計
high_g_engineer
0
430
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
450
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
250
JRuby: Past, Present, and Future
headius
0
210
Featured
See All Featured
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
750
Product Roadmaps are Hard
iamctodd
55
13k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
350
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
690
A designer walks into a library…
pauljervisheath
211
25k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
200
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
560
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
Embracing the Ebb and Flow
colly
88
5.2k
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