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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Andrew Godwin
February 07, 2020
Programming
850
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
390
Django Through The Years
andrewgodwin
0
320
Writing Maintainable Software At Scale
andrewgodwin
0
520
A Newcomer's Guide To Airflow's Architecture
andrewgodwin
0
420
Async, Python, and the Future
andrewgodwin
2
740
How To Break Django: With Async
andrewgodwin
1
820
Taking Django's ORM Async
andrewgodwin
0
840
The Long Road To Asynchrony
andrewgodwin
0
760
Pioneering Real-Time
andrewgodwin
0
520
Other Decks in Programming
See All in Programming
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.2k
JavaDoc 再入門
nagise
1
370
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
130
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
200
Lessons from Spec-Driven Development
simas
PRO
0
210
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
790
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
880
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.4k
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
270
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
710
TAKTでAI駆動開発の品質を設計する
j5ik2o
7
1.3k
AI 輔助遺留系統現代化的經驗分享
jame2408
1
680
Featured
See All Featured
Paper Plane (Part 1)
katiecoart
PRO
0
9.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
BBQ
matthewcrist
89
10k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
530
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Claude Code のすすめ
schroneko
67
230k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
850
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Speed Design
sergeychernyshev
33
1.9k
The Curious Case for Waylosing
cassininazir
1
390
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