Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Andrew Godwin @andrewgodwin PERILS OF THE SOFTWARE ENGINEERING
Slide 2
Slide 2 text
Andrew Godwin Hi, I'm Django Core Developer Senior Engineer at Far too many hobbies
Slide 3
Slide 3 text
"Perils"
Slide 4
Slide 4 text
Computer Science ≠ Software Engineering
Slide 5
Slide 5 text
Engineering Mechanical Civil Software Chemical Materials
Slide 6
Slide 6 text
Mechanical Engineering https://www.flickr.com/photos/mariaeklind/
Slide 7
Slide 7 text
Nondeterministic
Slide 8
Slide 8 text
Cost of Entry
Slide 9
Slide 9 text
Civil Engineering
Slide 10
Slide 10 text
Timescales
Slide 11
Slide 11 text
Cost of Failure
Slide 12
Slide 12 text
Aerospace Software Engineering
Slide 13
Slide 13 text
Cost of Failure
Slide 14
Slide 14 text
Failure: When, not if
Slide 15
Slide 15 text
Margaret Hamilton, 1969
Slide 16
Slide 16 text
Apollo 11 LM, "Eagle"
Slide 17
Slide 17 text
Web/App Software Engineering
Slide 18
Slide 18 text
Quick to build and test
Slide 19
Slide 19 text
Minimal equipment costs
Slide 20
Slide 20 text
Well-paid
Slide 21
Slide 21 text
Well-paid
Slide 22
Slide 22 text
Explicit is better than Implicit
Slide 23
Slide 23 text
Code Indirection
Slide 24
Slide 24 text
class MyView(View): def get(self, request): return self.render(request, "template.html")
Slide 25
Slide 25 text
class MyView(FormView, AuditMixin, OtherMixin): def get(self, request): return self.render(request, "template.html") class AuditMixin(BaseAuditor, AdditionalStuff): ... class OtherMixin(MyObject, SomethingElse): ...
Slide 26
Slide 26 text
Async Uncertainty
Slide 27
Slide 27 text
def async_handler(): with open("my_file.txt", "r") as fh: write_socket(1, fh.read()) redis.incr("key1", 2)
Slide 28
Slide 28 text
Schemas
Slide 29
Slide 29 text
{ "id": 342, "name": "David", "weight": 74, } { "id": 342, "name": "Ellie", "weight": "85kg", } { "id": 342, "nom": "Frankie", "weight": 77, } { "id": 342, "name": "Frankie", "weight": -67, }
Slide 30
Slide 30 text
Clever code is bad Maintainable code is good
Slide 31
Slide 31 text
xs = [number for inner in nested if len(inner) > 2 for number in inner]
Slide 32
Slide 32 text
for inner in nested: if len(inner) > 2: for number in inner: xs.append(number)
Slide 33
Slide 33 text
Explore and Discard
Slide 34
Slide 34 text
There is no perfect solution
Slide 35
Slide 35 text
Throwing everything away rarely works
Slide 36
Slide 36 text
Backwards compatability is your friend
Slide 37
Slide 37 text
Nobody is a genius; we're all mediocre
Slide 38
Slide 38 text
Argue over code, not over ideas
Slide 39
Slide 39 text
Well-paid
Slide 40
Slide 40 text
10 years? 100 years? 1000 years?
Slide 41
Slide 41 text
Who will access it?
Slide 42
Slide 42 text
What format will it be?
Slide 43
Slide 43 text
Is it even important?
Slide 44
Slide 44 text
Over thousands of years, the machine memories have been filled with programs that can help “ “ A Deepness In The Sky Vernor Vinge
Slide 45
Slide 45 text
Engineering is collaborative
Slide 46
Slide 46 text
Build well.
Slide 47
Slide 47 text
Thanks. Andrew Godwin @andrewgodwin