Slide 1

Slide 1 text

Professional Software Development Can it be taught? Ivan Zimine PyConSG Edu Summit, 25 Jun 2019

Slide 2

Slide 2 text

2

Slide 3

Slide 3 text

3 20 years ago… me X

Slide 4

Slide 4 text

4 image data: multi-channel multi-slice multi-timepoint Need for custom GUI code

Slide 5

Slide 5 text

5 Math, binary logic, and language syntax are the small and easy parts. Small programs are easy to create, but it’s hard to grow and maintain them. Spec/design first Lessons learned

Slide 6

Slide 6 text

6

Slide 7

Slide 7 text

7 1995: Delphi 1996: html, (t)csh, emacs 1997: IDL, bash, latex 1998-2010: IDL, C/C++, bash, perl, python, php, sql, vim, svn/git 2010-2016: python 2016-now: python, ruby, js, java (+ TDD, BDD, CI/CD,…) programming experience (paid)

Slide 8

Slide 8 text

8

Slide 9

Slide 9 text

9 professional == responsible for outcome

Slide 10

Slide 10 text

10 http://disenthrall.co/complexity-is-easy/ Complexity == “software gravity”

Slide 11

Slide 11 text

11 https://en.wikipedia.org/wiki/Apollo_Guidance_Computer AGC, 1969 ~100’000 SLOC 1400 person-years Space Shuttle, 1981 > 1’000’000 SLOC Windows NT 3.5, 1993 > 7’500’000 SLOC Mac OS X (tiger), 2007 > 86’000’000 SLOC

Slide 12

Slide 12 text

12 0.1 MSLOC ~= 1.5m 10 MSLOC ~= 150m

Slide 13

Slide 13 text

13 Invest in communication and social skills (working effectively in teams) Invest in simple tools and pragmatic development practices How to handle complexity?

Slide 14

Slide 14 text

14 “ Programs must be written for people to read, and only incidentally for machines to execute.” — Hal Abelson

Slide 15

Slide 15 text

15 Proper naming (clarity beats cleverness) - use intention-revealing names - avoid disinformation - use pronounceable names

Slide 16

Slide 16 text

16 hello FizzBuzz

Slide 17

Slide 17 text

17 refactored FizzBuzz

Slide 18

Slide 18 text

18 Linguistics is more important for programming than math! Communicate in code with others Listen to your own code

Slide 19

Slide 19 text

19 Executable specifications are much more useful than requirements docs and architecture diagrams.

Slide 20

Slide 20 text

20 Building the right product requires communication with all stakeholders

Slide 21

Slide 21 text

Working together: pairing

Slide 22

Slide 22 text

“For an idea to go from someone’s head into the computer it must go through someone else’s hands” — Llewellyn Falco Working together: mobbing

Slide 23

Slide 23 text

23 Tools: plain text

Slide 24

Slide 24 text

24 Tools: command line

Slide 25

Slide 25 text

25 Tools: text editor

Slide 26

Slide 26 text

26 dev practices: TDD

Slide 27

Slide 27 text

27 Can it be taught?

Slide 28

Slide 28 text

28 Can it be taught?

Slide 29

Slide 29 text

29 Learning is not compulsory… neither is survival. — W. Edwards Deming Thank you [email protected]