2nd hardest thing in computer science

A presentation at PyCon PL in August 2017 in 96-200 Ossa, Poland by Paweł Lewtak

Slide 1

Slide 1

2 n d

h a r d e s t

t h i n g

i n c o m p u t e r

s c i e n c e @ p a w e l _ l e w t a k

Slide 2

Slide 2

D e f i n i t i o n ?

Slide 3

Slide 3

T h e r e

a r e

o n l y

t w o

h a r d

t h i n g s

i n

C o m p u t e r S c i e n c e :

c a c h e

i n v a l i d a t i o n

a n d

n a m i n g t h i n g s . P h i l

K a r l t o n S o u r c e :

h t t p s : / / m a r t i n f o w l e r . c o m / b l i k i / T w o H a r d T h i n g s . h t m l

Slide 4

Slide 4

T h e r e

a r e

2

h a r d

p r o b l e m s

i n

c o m p u t e r s c i e n c e :

c a c h e

i n v a l i d a t i o n ,

n a m i n g

t h i n g s , a n d

o f f

b y

1

e r r o r s L e o n

B a m b r i c k S o u r c e :

h t t p s : / / t w i t t e r . c o m / s e c r e t g e e k / s t a t u s / 7 2 6 9 9 9 7 8 6 8

Slide 5

Slide 5

T h e r e

a r e

o n l y

t w o

h a r d

p r o b l e m s

i n d i s t r i b u t e d

s y s t e m s : 2 .

E x a c t l y

o n c e

d e l i v e r y 1 .

G u a r a n t e e d

o r d e r

o f

m e s s a g e s 2 .

E x a c t l y

o n c e

d e l i v e r y M a t h i a s

V e r r a e s S o u r c e :

h t t p s : / / t w i t t e r . c o m / m a t h i a s v e r r a e s / s t a t u s / 6 3 2 2 6 0 6 1 8 5 9 9 4 0 3 5 2 0

Slide 6

Slide 6

2

N a m i n g

t h i n g s *

Slide 7

Slide 7

t h i n g s v a r i a b l e s m e t h o d s c l a s s e s m o d u l e s c o m m e n t s i n l i n e

d o c s c o m m i t

m e s s a g e s

Slide 8

Slide 8

Y o u

d o n ' t

c o d e

f o r C P U

Slide 9

Slide 9

Y o u

d o n ' t

c o d e

f o r i n t e r p r e t e r

Slide 10

Slide 10

Y o u

d o n ' t

c o d e

f o r c o m p i l e r

Slide 11

Slide 11

Slide 12

Slide 12

Slide 13

Slide 13

Y o u

c o d e

f o r

p e o p l e

Slide 14

Slide 14

Y o u

c o d e

f o r

o t h e r d e v e l o p e r s

Slide 15

Slide 15

Y o u

c o d e

f o r

y o u r f u t u r e

s e l f

Slide 16

Slide 16

D o n ' t

c o d e , w r o t e

p r o s e S o u r c e :

h t t p s : / / w w w . y o u t u b e . c o m / w a t c h ? v

C K O N K Z L m M w k

Slide 17

Slide 17

S o u r c e :

h t t p s : / / t r u s t a r t i s t . c o m / 2 0 1 5 / 0 1 / 2 7 / p a i r

p r o g r a m m i n g

e c o n o m i c s /

Slide 18

Slide 18

A l w a y s

c o d e

a s

i f

t h e

g u y

w h o

e n d s

u p m a i n t a i n i n g

y o u r

c o d e

w i l l

b e

a

v i o l e n t p s y c h o p a t h

w h o

k n o w s

w h e r e

y o u

l i v e . C o d e

f o r

r e a d a b i l i t y . J o h n

F .

W o o d s S o u r c e :

h t t p s : / / g r o u p s . g o o g l e . c o m / f o r u m /

! m s g / c o m p . l a n g . c + + / r Y C O 5 y n 4 l X w / o I T t S k Z O t o U J

Slide 19

Slide 19

C o m p r e h e n s i o n

Slide 20

Slide 20

~ 7 0 %

Slide 21

Slide 21

d e f

a ( b ) :

c

=

s o r t e d ( b )

d

=

l e n ( b )

i f

d

%

2

=

1 :

r e t u r n

c [ ( d

1 )

/

2 ]

e l s e :

r e t u r n

( c [ d / 2

1 ]

c [ d / 2 ] )

/

2

Slide 22

Slide 22

d e f

m e d i a n ( p o o l ) :

c o p y

=

s o r t e d ( p o o l )

s i z e

=

l e n ( c o p y )

i f

s i z e

%

2

=

1 :

r e t u r n

c o p y [ ( s i z e

1 )

/

2 ]

e l s e :

r e t u r n

( c o p y [ s i z e / 2

1 ]

c o p y [ s i z e / 2 ] )

/

2

Slide 23

Slide 23

S e l f

d o c u m e n t i n g c o d e

Slide 24

Slide 24

C o d e

w r i t t e n

b y s o m e b o d y

e l s e

Slide 25

Slide 25

P r o g r a m m i n g

i s

m a p p i n g f r o m

p r o b l e m

d o m a i n v i a

i n t e r m e d i a t e

d o m a i n i n t o

p r o g r a m m i n g

d o m a i n

Slide 26

Slide 26

D D D

F T W

Slide 27

Slide 27

W o r s t

v a r i a b l e

n a m e

Slide 28

Slide 28

d a t a S o u r c e :

h t t p : / / a r c h i v e . o r e i l l y . c o m / p u b / p o s t / t h e _ w o r l d s _ t w o _ w o r s t _ v a r i a b l e . h t m l

Slide 29

Slide 29

Slide 30

Slide 30

S e c o n d

w o r s t

n a m e ?

Slide 31

Slide 31

d a t a 2

Slide 32

Slide 32

t o t a l

=

p r i c e

q t y t o t a l 2

=

t o t a l

d i s c o u n t t o t a l 2

=

t o t a l

t a x r a t e t o t a l 3

=

p u r c h a s e _ o r d e r _ v a l u e

a v a i l a b l e _ c r e d i t i f

t o t a l 2

<

t o t a l 3 :

p r i n t

( " Y o u

c a n ' t

a f f o r d

t h i s

o r d e r . " )

Slide 33

Slide 33

o r d e r _ t o t a l

=

p r i c e

q t y p a y a b l e _ t o t a l

=

o r d e r _ t o t a l

d i s c o u n t p a y a b l e _ t o t a l

=

p a y a b l e _ t o t a l

t a x r a t e a v a i l a b l e _ f u n d s

=

p u r c h a s e _ o r d e r _ v a l u e

a v a i l b l e _ c r e d i t i f

p a y a b l e _ t o t a l

<

a v a i l a b l e _ f u n d s :

p r i n t

( " Y o u

c a n ' t

a f f o r d

t h i s

o r d e r . " )

Slide 34

Slide 34

N o

o n e

s e t s

o u t

t o

w r i t e

l e g a c y

c o d e R a c h e l

W i l l m e r S o u r c e :

h t t p s : / / t w i t t e r . c o m / a m o k l e b e n / s t a t u s / 8 6 8 3 7 7 2 8 3 4 9 6 7 5 1 1 0 4 ? s

0 9

Slide 35

Slide 35

B r o k e n

w i n d o w t h e o r y

Slide 36

Slide 36

C o d e

w i l l

d e c a y

Slide 37

Slide 37

D e s i g n

p a t t e r n s

Slide 38

Slide 38

M i s a p p l i e d

J a v a

d e s i g n

​ p a t t e r n s a r e

t h e

r o o t

o f

a l l A b s t r a c t W o r d F a c t o r y F a c t o r y ( " e v i l " ) H N

c o m m e n t S o u r c e :

h t t p s : / / t w i t t e r . c o m / t m m x / s t a t u s / 8 6 5 3 0 8 6 7 8 9 0 3 2 6 7 3 2 8

Slide 39

Slide 39

N a m i n g

c o n v e n t i o n s

Slide 40

Slide 40

T L ; D R C a m e l C a s e C l a s s m e t h o d N a m e s o m e V a r i a b l e C A P I T A L _ C O N S T A N T

Slide 41

Slide 41

s y n t a x

<

s e m a n t h i c s

Slide 42

Slide 42

C o m m o n

i s s u e s

Slide 43

Slide 43

P s e u d o

g e t t e r

Slide 44

Slide 44

g e t _ d a t a ( ) w i t h

e x t r a

o p e r a t i o n s

i n s i d e

Slide 45

Slide 45

g e t _ c r e a t e _ o b j e c t ( )

Slide 46

Slide 46

f e t c h f i n d l o o k u p c r e a t e c a l c u l a t e

Slide 47

Slide 47

N o t

r e a l l y

a

b o o l e a n

Slide 48

Slide 48

i s _ a c t i v e ( ) d e f

i s _ a c t i v e ( ) :

i f

c o n d :

r e t u r n

' f a l s e '

r e t u r n

' t r u e '

Slide 49

Slide 49

i s _ v a l i d ( ) d e f

i s _ v a l i d ( ) :

i f

i n p u t _ i s _ v a l i d :

r e t u r n

T r u e

Slide 50

Slide 50

P l u r a l

/

s i n g u l a r n a m e s

Slide 51

Slide 51

d e f

g e t _ p e r s o n ( ) :

r e t u r n

[ ' J o h n

D o e ' ,

' J a n e

D o e ' ] d e f

g e t _ e m p l o y e r s ( ) :

r e t u r n

' J o h n

D o e '

Slide 52

Slide 52

M i s l e a d i n g

d o c s

Slide 53

Slide 53

d e f

g e t _ l o w e s t _ p r i c e ( u s e r ) :

p a s s

Slide 54

Slide 54

d e f

g e t _ l o w e s t _ p r i c e ( u s e r ) :

" " " A c t u a l l y

i t

r e t u r n s

t h e

h i g h e s t

p r i c e . " " "

p a s s

Slide 55

Slide 55

M o r e

t h a n

o n e r e s p o n s i b i l i t y

Slide 56

Slide 56

A b b r e v i a t i o n s p o s m o d a b s a u t h

Slide 57

Slide 57

S y n o n y m s

Slide 58

Slide 58

< T h a t T h i n g

M a n a g e r U s e r M a n a g e r S t r i n g M a n a g e r P r o d u c t M a n a g e r e t c .

Slide 59

Slide 59

A l t e r n a t i v e s B u i l d e r W r i t e r A d a p t e r F a c t o r y H a n d l e r P r o v i d e r C o n v e r t e r

Slide 60

Slide 60

M a g i c

n u m b e r s

Slide 61

Slide 61

i m p o r t

r e q u e s t s r e s p o n s e

=

r e q u e s t s . g e t ( ' h t t p s : / / p l . p y c o n . o r g / ' ) i f

r e s p o n s e . s t a t u s _ c o d e

=

2 0 0 :

p r i n t

( " I t

w o r k s ! " ) e l i f

r e s p o n s e . s t a t u s _ c o d e

=

4 1 8 :

p r i n t

( " U n e x p e c t e d

t e a p o t ! " )

Slide 62

Slide 62

i m p o r t

r e q u e s t s r e s p o n s e

=

r e q u e s t s . g e t ( ' h t t p s : / / p l . p y c o n . o r g / ' ) i f

r e s p o n s e . s t a t u s _ c o d e

=

r e q u e s t s . c o d e s . o k :

p r i n t

( " I t

w o r k s ! " ) e l i f

r e s p o n s e . s t a t u s _ c o d e

=

r e q u e s t s . c o d e s . t e a p o t :

p r i n t

( " U n e x p e c t e d

t e a p o t ! " )

Slide 63

Slide 63

U s e l e s s

c o m m e n t s

Slide 64

Slide 64

d e f

g e t _ d a t a ( ) :

" " "

R e t u r n s

t h e

d a t a .

" " "

p a s s d e f

g e t _ m a x _ i d _ f r o m _ d b ( ) :

" " "

R e t u r n

m a x i m u m

I D

v a l u e

f r o m

t h e

d a t a b a s e . " " "

p a s s

Slide 65

Slide 65

E x p l a i n

w h y , n o t

w h a t

o r

h o w

Slide 66

Slide 66

C o m m i t

m e s s a g e s

Slide 67

Slide 67

S o u r c e :

h t t p s : / / t w i t t e r . c o m / A r i e l B H / s t a t u s / 8 9 5 6 0 1 4 2 9 2 5 5 2 4 5 8 2 4

Slide 68

Slide 68

D o n ' t

d o

i t

l i k e

t h i s h t t p : / / w h a t t h e c o m m i t . c o m h t t p : / / w w w . c o m m i t l o g s f r o m l a s t n i g h t . c o m /

Slide 69

Slide 69

B a d

n a m e : D o e s

m o r e

t h a t

w h a t

i s

s a y s S a y s

m o r e

t h a n

w h a t

i t

d o e s D o e s

t h e

o p p o s i t e C o n t a i n s

m o r e

t h a n

w h a t

i t

s a y s S a y s

m o r e

t h a n

w h a t

i t

c o n t a i n s C o n t a i n s

t h e

o p p o s i t e

Slide 70

Slide 70

G o o d

p r a c t i c e s

Slide 71

Slide 71

S p e c i f i c

n a m e s N o

g e n e r i c s

Slide 72

Slide 72

S h o r t

n a m e s

Slide 73

Slide 73

D o

n o t

u s e

n e g a t i o n

Slide 74

Slide 74

i s _ n o t _ e n a b l e d ( )

Slide 75

Slide 75

i s _ d i s a b l e d ( )

Slide 76

Slide 76

C o n s i s t e n t

n a m e s

Slide 77

Slide 77

C o d e

&

d o c s

Slide 78

Slide 78

S i n g l e

r e s p o n s i b i l i t y

Slide 79

Slide 79

D o m a i n

t e r m s

Slide 80

Slide 80

T h i n k

a b o u t

i t

Slide 81

Slide 81

A S C I I

o n l y

Slide 82

Slide 82

H u n g a r i a n

n o t a t i o n h o s t L i s t ,

h o s t S e t

=

h o s t s ,

v a l i d H o s t s v a l u e S t r i n g

=

f i r s t N a m e ,

l o w e r c a s e d S K U i n t N u m b e r

=

a c c o u n t N u m b e r

Slide 83

Slide 83

T e s t s !

Slide 84

Slide 84

C o m m i t

m e s s a g e

Slide 85

Slide 85

G o o d

c o m m i t

m e s s a g e S p e e d s

u p

r e v i e w

p r o c e s s H e l p s

w r i t e

r e l e a s e

n o t e s H e l p s

f u t u r e

m a i n t a i n e r s

Slide 86

Slide 86

S h o r t

( 5 0

c h a r s

o r

l e s s )

s u m m a r y

o f

c h a n g e s M o r e

d e t a i l e d

e x p l a n a t o r y

t e x t ,

i f

n e c e s s a r y .

W r a p

i t

t o

a b o u t

7 2 c h a r a c t e r s

o r

s o .

I n

s o m e

c o n t e x t s ,

t h e

f i r s t

l i n e

i s

t r e a t e d

a s

t h e s u b j e c t

o f

a n

e m a i l

a n d

t h e

r e s t

o f

t h e

t e x t

a s

t h e

b o d y .

T h e

b l a n k l i n e

s e p a r a t i n g

t h e

s u m m a r y

f r o m

t h e

b o d y

i s

c r i t i c a l

( u n l e s s

y o u

o m i t t h e

b o d y

e n t i r e l y ) ;

t o o l s

l i k e

r e b a s e

c a n

g e t

c o n f u s e d

i f

y o u

r u n

t h e t w o

t o g e t h e r . F u r t h e r

p a r a g r a p h s

c o m e

a f t e r

b l a n k

l i n e s .

B u l l e t

p o i n t s

a r e

o k a y ,

t o o

T y p i c a l l y

a

h y p h e n

o r

a s t e r i s k

i s

u s e d

f o r

t h e

b u l l e t ,

p r e c e d e d

b y

a

s i n g l e

s p a c e ,

w i t h

b l a n k

l i n e s

i n

b e t w e e n ,

b u t

c o n v e n t i o n s

v a r y

h e r e S o u r c e :

S o u r c e :

h t t p : / / g i t

s c m . c o m / b o o k / c h 5

2 . h t m l

Slide 87

Slide 87

H o w ?

Slide 88

Slide 88

A g r e e

o n

s t a n d a r d s

Slide 89

Slide 89

B o y

S c o u t

R u l e

Slide 90

Slide 90

P r a c t i c e

Slide 91

Slide 91

I m p r o v e

v o c a b u l a r y

Slide 92

Slide 92

R e f a c t o r

Slide 93

Slide 93

C o d e

r e v i e w s S h o r t ,

b i t e

s i z e ,

s i n g l e

l o g i c a l

c h a n g e

Slide 94

Slide 94

C o d e

o w n e r s h i p

Slide 95

Slide 95

C o m m i t

m e s s a g e s

Slide 96

Slide 96

R e s e a r c h

p a p e r s h t t p s : / / w w w . c q s e . e u / p u b l i c a t i o n s / 2 0 0 5

c o n c i s e

a n d

c o n s i s t e n t

n a m i n g . p d f h t t p : / / w w w . c s . l o y o l a . e d u / ~ l a w r i e / p a p e r s / l a w r i e J e s e 0 7 . p d f h t t p s : / / w w w . r e s e a r c h g a t e . n e t / p u b l i c a t i o n / 2 2 4 0 7 9 4 4 1 _ R e l a t i n g _ I d e n t i f i e r _ N a m i n g _ F l a w s _ a n d _ C o d e _ Q u a l i t y _ A n _ E m p i r i c a l _ S t u d y h t t p : / / w w w . v e n e r a a r n a o u d o v a . c o m / w p

c o n t e n t / u p l o a d s / 2 0 1 4 / 1 0 / 2 0 1 4

E M S E

A r n a o d o v a

e t

a l

P e r c e p t i o n

L A s . p d f ​

Slide 97

Slide 97

T h a n k

y o u ! @ p a w e l _ l e w t a k

Slide 98

Slide 98

Q u e s t i o n s ? @ p a w e l _ l e w t a k