Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
The Scientist & The Engineer
Andrew Godwin
February 07, 2020
Programming
1
380
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
A Newcomer's Guide To Airflow's Architecture
andrewgodwin
0
98
Async, Python, and the Future
andrewgodwin
1
370
How To Break Django: With Async
andrewgodwin
1
310
Taking Django's ORM Async
andrewgodwin
0
340
The Long Road To Asynchrony
andrewgodwin
0
380
Pioneering Real-Time
andrewgodwin
0
150
Just Add Await: Retrofitting Async Into Django
andrewgodwin
2
1.1k
Terrain, Art, Python and LiDAR
andrewgodwin
1
240
Taming Terrain: Sculpting Geoscapes With LiDAR
andrewgodwin
0
110
Other Decks in Programming
See All in Programming
Custom Design Systems in Compose UI
rharter
5
510
Value and Record Types
hschwentner
0
540
Independently together: better developer experience & App performance
bcinarli
0
150
VisualProgramming_GoogleHome_LINE
nearmugi
1
140
Gitlab CIでMRを自動生成する
forcia_dev_pr
0
110
GDG Seoul IO Extended 2022 - Android Compose
taehwandev
0
270
Vite でお手軽 Vue.js の環境構築
azuki
2
170
Keeping your team in top shape with the Gradle Enterprise API
runningcode
3
120
Improving Developer Experience Through Tools and Techniques 2022
krzysztofzablocki
0
340
Jakarta EE 10 - Feature by Feature with My Open Source Journey
ivargrimstad
0
2k
git on intellij
hiroto_kitamura
0
160
One does not simply: migrating to Android 12 🤯
oleur
1
120
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
689
180k
Designing Experiences People Love
moore
130
22k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
315
19k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
349
27k
Streamline your AJAX requests with AmplifyJS and jQuery
dougneiner
126
8.5k
Building Applications with DynamoDB
mza
83
4.7k
Creatively Recalculating Your Daily Design Routine
revolveconf
207
10k
What the flash - Photography Introduction
edds
61
10k
Designing for Performance
lara
597
63k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
12
920
Raft: Consensus for Rubyists
vanstee
126
5.4k
Embracing the Ebb and Flow
colly
73
3.4k
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