2nd hardest thing in computer science

A presentation at PHPBenelux in January 2018 in Antwerp, Belgium 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

P a w e ł

L e w t a k D e v e l o p e r

@

G O G . c o m

Slide 3

Slide 3

D e f i n i t i o n ?

Slide 4

Slide 4

" 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 5

Slide 5

" 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 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

" I n s t e a d

o f

i m a g i n i n g

t h a t

o u r

m a i n

t a s k

i s

t o i n s t r u c t

a

c o m p u t e r

w h a t

t o

d o ,

l e t

u s c o n c e n t r a t e

r a t h e r

o n

e x p l a i n i n g

t o

h u m a n b e i n g s

w h a t

w e

w a n t

a

c o m p u t e r

t o

d o . " D o n a l d

E .

K n u t h S o u r c e :

L i t e r a t e

P r o g r a m m i n g ,

1 9 8 3

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

f u n c t i o n

a ( $ b )

{

s o r t ( $ b ) ;

$ c

=

c o u n t ( $ b ) ;

i f

( $ c

%

2

=

=

1 )

{

r e t u r n

$ b [ ( $ c

1 )

/

2 ] ;

}

e l s e

{

r e t u r n

( $ b [ $ c / 2

1 ]

$ b [ $ c / 2 ] )

/

2 ;

} }

Slide 22

Slide 22

f u n c t i o n

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

{

s o r t ( $ p o o l ) ;

$ s i z e

=

c o u n t ( $ p o o l ) ;

i f

( $ s i z e

%

2

=

=

1 )

{

r e t u r n

$ p o o l [ ( $ s i z e

1 ]

/

2 ] ;

}

e l s e

{

r e t u r n

( $ p o o l [ $ s i z e / 2

1 ]

$ p o o l [ $ 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

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 25

Slide 25

D D D

F T W

Slide 26

Slide 26

W o r s t

v a r i a b l e

n a m e

Slide 27

Slide 27

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 28

Slide 28

Slide 29

Slide 29

S e c o n d

w o r s t

n a m e ?

Slide 30

Slide 30

d a t a 2

Slide 31

Slide 31

$ 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 )

{

e c h o

" Y o u

c a n ' t

a f f o r d

t h i s

o r d e r . " ; }

Slide 32

Slide 32

$ 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 )

{

e c h o

" 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

" 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 34

Slide 34

B r o k e n

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

Slide 35

Slide 35

C o d e

w i l l

d e c a y

Slide 36

Slide 36

D e s i g n

p a t t e r n s

Slide 37

Slide 37

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 38

Slide 38

N a m i n g

c o n v e n t i o n s

Slide 39

Slide 39

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 40

Slide 40

s y n t a x

<

s e m a n t h i c s

Slide 41

Slide 41

C o m m o n

i s s u e s

Slide 42

Slide 42

P s e u d o

g e t t e r

Slide 43

Slide 43

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 44

Slide 44

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

Slide 45

Slide 45

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 46

Slide 46

N o t

r e a l l y

a

b o o l e a n

Slide 47

Slide 47

i s _ a c t i v e ( ) f u n c t i o n

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 48

Slide 48

i s _ v a l i d ( ) f u n c t i o n

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 49

Slide 49

P l u r a l

/

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

Slide 50

Slide 50

f u n c t i o n

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 ' ] ; } f u n c t i o n

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 51

Slide 51

M i s l e a d i n g

d o c s

Slide 52

Slide 52

f u n c t i o n

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

{ }

Slide 53

Slide 53

/ * *

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 .

/ f u n c t i o n

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

{ }

Slide 54

Slide 54

/ * *

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 .

/ f u n c t i o n

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

{

i f

( $ u s e r

=

=

n u l l )

{

r e t u r n

_ g e t _ h i g h e s t _ p r i c e ( ) ;

}

e l s e

{

r e t u r n

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

} }

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

$ c l i e n t

=

n e w

G u z z l e H t t p
C l i e n t ( ) ; $ u r l

=

' h t t p s : / / c o n f e r e n c e . p h p b e n e l u x . e u / ' ; $ r e s p o n s e

=

$ c l i e n t

r e q u e s t ( ' G E T ' ,

$ u r l ) ; $ r e s p o n s e _ c o d e

=

$ r e s p o n s e

g e t S t a t u s C o d e ( ) ; i f

( $ r e s p o n s e _ c o d e

=

=

2 0 0 )

{

e c h o

' I t

w o r k s ! ' ; }

e l s e i f

( $ r e s p o n s e _ c o d e

=

=

4 1 8 )

{

e c h o

' W h a t

i s

t h a t ? ! ' ; }

Slide 62

Slide 62

$ c l i e n t

=

n e w

G u z z l e H t t p
C l i e n t ( ) ; $ u r l

=

' h t t p s : / / c o n f e r e n c e . p h p b e n e l u x . e u / ' ; $ r e s p o n s e

=

$ c l i e n t

r e q u e s t ( ' G E T ' ,

$ u r l ) ; $ r e s p o n s e _ c o d e

=

$ r e s p o n s e

g e t S t a t u s C o d e ( ) ; i f

( $ r e s p o n s e _ c o d e

=

=

S t a t u s C o d e : : O K )

{

e c h o

' I t

w o r k s ! ' ; }

e l s e i f

( $ r e s p o n s e _ c o d e

=

=

S t a t u s C o d e : : I M _ A _ T E A P O T )

{

e c h o

' W e b s i t e

d o w n .

W o u l d

l i k e

a

c u p

o f

t e a

i n s t e a d ? ' ; }

Slide 63

Slide 63

U s e l e s s

c o m m e n t s

Slide 64

Slide 64

/ * *

R e t u r n s

t h e

d a t a .

/ f u n c t i o n

g e t _ d a t a ( )

{ } / * *

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 .

/ f u n c t i o n

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

{ }

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 d e

s h o u l d

h a v e

c o m m e n t s ,

b u t

i f

y o u r

f i l e i s

m o r e

t h a n

2 5 %

c o m m e n t s ,

t h a t ' s

a

r e d f l a g :

y o u

m a y

b e

e x p l a i n i n g

b a d

c o d e " A d a m

C u l p

Slide 67

Slide 67

C o m m i t

m e s s a g e s

Slide 68

Slide 68

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

$ Δ

=

1 ; + + $ Δ ; e c h o

$ Δ ;

Slide 83

Slide 83

c l a s s

   

{

f u n c t i o n

   ( $  ,

$  )

{

r e t u r n

$ 

$  ;

} } $ 

=

3 ; $ 

=

$ 

2 ; $ 

=

n e w

    ; e c h o

$ 

   ( $  ,

$  ) ;

Slide 84

Slide 84

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 85

Slide 85

T e s t s !

Slide 86

Slide 86

C o m m i t

m e s s a g e

Slide 87

Slide 87

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 88

Slide 88

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 89

Slide 89

H o w ?

Slide 90

Slide 90

A g r e e

o n

s t a n d a r d s

Slide 91

Slide 91

B o y

S c o u t

R u l e

Slide 92

Slide 92

P r a c t i c e

Slide 93

Slide 93

I m p r o v e

v o c a b u l a r y

Slide 94

Slide 94

R e f a c t o r

Slide 95

Slide 95

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 96

Slide 96

C o d e

o w n e r s h i p

Slide 97

Slide 97

C o m m i t

m e s s a g e s

Slide 98

Slide 98

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 99

Slide 99

T h a n k

y o u !

Slide 100

Slide 100

Q u e s t i o n s ? F e e d b a c k ? @ p a w e l _ l e w t a k h t t p s : / / j o i n d . i n / t a l k / 7 6 1 5 7