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 Scientist & The Engineer
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Andrew Godwin
February 07, 2020
Programming
830
1
Share
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
380
Django Through The Years
andrewgodwin
0
300
Writing Maintainable Software At Scale
andrewgodwin
0
510
A Newcomer's Guide To Airflow's Architecture
andrewgodwin
0
400
Async, Python, and the Future
andrewgodwin
2
720
How To Break Django: With Async
andrewgodwin
1
790
Taking Django's ORM Async
andrewgodwin
0
790
The Long Road To Asynchrony
andrewgodwin
0
750
Pioneering Real-Time
andrewgodwin
0
490
Other Decks in Programming
See All in Programming
Feature Toggle は捨てやすく使おう
gennei
0
520
LM Linkで(非力な!)ノートPCでローカルLLM
seosoft
0
450
Linux Kernelの1文字のミスで 権限昇格ができた話
rqda
0
2.3k
PHPで TLSのプロトコルを実装してみるをもう一度しゃべりたい
higaki_program
0
190
Coding at the Speed of Thought: The New Era of Symfony Docker
dunglas
0
4.8k
Nuxt Server Components
wattanx
0
260
Swift Concurrency Type System
inamiy
0
430
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
580
存在論的プログラミング: 時間と存在を記述する
koriym
5
850
PHPのバージョンアップ時にも役立ったAST(2026年版)
matsuo_atsushi
0
300
VueエンジニアがReactを触って感じた_設計の違い
koukimiura
0
170
「話せることがない」を乗り越える 〜日常業務から登壇テーマをつくる思考法〜
shoheimitani
4
640
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
53k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
110
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
710
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
350
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
99
Google's AI Overviews - The New Search
badams
0
960
Evolving SEO for Evolving Search Engines
ryanjones
0
180
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
How to Ace a Technical Interview
jacobian
281
24k
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