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