[4 developers] Jak zniszczyć swój kod - podstawy lingwistyki dla programistów

Post on 26-Jun-2015

1.588 views 0 download

Transcript of [4 developers] Jak zniszczyć swój kod - podstawy lingwistyki dla programistów

Jak zniszczyć swój kod? Podstawy lingwistyki dla programistów

Zwiększamy efektywność zespołów

projektowych

1

www.bnsit.pl

Michał Bartyzel mbartyzel.blogspot.com @MichalBartyzel Zwiększamy efektywność zespołów projektowych 2

www.bnsit.pl

Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem

Moja kinoteka

Dodaj serial

Dodaj odcinek

Opłacony/nieopłacony

Etykiety

Czas trwania: h 35 min.

Dr Home. Sezon 1 odcinek 29

Nonszalancja nazewnicza

Zwiększamy efektywność zespołów projektowych 3

www.bnsit.pl

Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem

Moja kinoteka Lista filmów

Dodaj serial

Dodaj odcinek

Opłacony/nieopłacony

Etykiety

Czas trwania: h 35 min.

Dr Home. Sezon 1 odcinek 29

Nonszalancja nazewnicza

Zwiększamy efektywność zespołów projektowych 4

www.bnsit.pl

Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem

Moja kinoteka Lista filmów

Dodaj serial Dodaj kategorię

Dodaj odcinek

Opłacony/nieopłacony

Etykiety

Czas trwania: h 35 min.

Dr Home. Sezon 1 odcinek 29

Nonszalancja nazewnicza

Zwiększamy efektywność zespołów projektowych 5

www.bnsit.pl

Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem

Moja kinoteka Lista filmów

Dodaj serial Dodaj kategorię

Dodaj odcinek Dodaj plik flv

Opłacony/nieopłacony

Etykiety

Czas trwania: h 35 min.

Dr Home. Sezon 1 odcinek 29

Nonszalancja nazewnicza

Zwiększamy efektywność zespołów projektowych 6

www.bnsit.pl

Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem

Moja kinoteka Lista filmów

Dodaj serial Dodaj kategorię

Dodaj odcinek Dodaj plik flv

Opłacony/nieopłacony Status [checkbox]

Etykiety

Czas trwania: h 35 min.

Dr Home. Sezon 1 odcinek 29

Nonszalancja nazewnicza

Zwiększamy efektywność zespołów projektowych 7

www.bnsit.pl

Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem

Moja kinoteka Lista filmów

Dodaj serial Dodaj kategorię

Dodaj odcinek Dodaj plik flv

Opłacony/nieopłacony Status [checkbox]

Etykiety Chmura tagów

Czas trwania: h 35 min.

Dr Home. Sezon 1 odcinek 29

Nonszalancja nazewnicza

Zwiększamy efektywność zespołów projektowych 8

www.bnsit.pl

Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem

Moja kinoteka Lista filmów

Dodaj serial Dodaj kategorię

Dodaj odcinek Dodaj plik flv

Opłacony/nieopłacony Status [checkbox]

Etykiety Chmura tagów

Czas trwania: h 35 min. Długość: 2 100 000 ms

Dr Home. Sezon 1 odcinek 29

Nonszalancja nazewnicza

Zwiększamy efektywność zespołów projektowych 9

www.bnsit.pl

Nazwa, którą ja się posługiwałem Nazwa, którą zobaczyłem

Moja kinoteka Lista filmów

Dodaj serial Dodaj kategorię

Dodaj odcinek Dodaj plik flv

Opłacony/nieopłacony Status [checkbox]

Etykiety Chmura tagów

Czas trwania: h 35 min. Długość: 2 100 000 ms

Dr Home. Sezon 1 odcinek 29 87a1b230ff910912.flv

Nonszalancja nazewnicza

Zwiększamy efektywność zespołów projektowych 10

www.bnsit.pl

Rzeczywistość, słowa, znaczenia, reguły

Zwiększamy efektywność zespołów projektowych 11

www.bnsit.pl

Rzeczywistość, słowa, znaczenia, reguły

Zwiększamy efektywność zespołów projektowych 12

www.bnsit.pl

Co można zrobić z…

Zwiększamy efektywność zespołów projektowych 13

Listą pracowników Ewidencją pracowników

• Dodać pracownika

• Usunąć pracownika

• Usunąć wszystkich

pracowników

• Wciągnąć pracownika do

ewidencji

• Wyciągnąć kartotekę pracownika

• Oznaczyć urlop

• Oznaczyć zwolnienie chorobowe

• Wyciągnąć świadectwo pracy

www.bnsit.pl

Programujesz to, co nazywasz

Zwiększamy efektywność zespołów projektowych 14

List<Employee> employees...

//...

EmployeeFile employeeFile = findEmployeeFile( personalID );

employeeFile.getEmergencyContactInformation();

www.bnsit.pl

A potem powstaje architektura

Zwiększamy efektywność zespołów projektowych 15

List<Employee> employees...

//...

EmployeeFile employeeFile = findEmployeeFile( personalID );

employeeFile.getEmergencyContactInformation();

www.bnsit.pl

I dzieją się z nią dziwne rzeczy

Zwiększamy efektywność zespołów projektowych 16

www.bnsit.pl

Ile %% wymagań naprawdę się zmienia?

Zwiększamy efektywność zespołów projektowych 17

www.bnsit.pl

Jakie znaczenie może mieć słowo?

Zwiększamy efektywność zespołów projektowych 18

www.bnsit.pl

S.O.L.I.D

Podstawowe zasady

Zwiększamy efektywność zespołów projektowych 19

www.bnsit.pl

Przykład: Geometria euklidesowa ;)

Zwiększamy efektywność zespołów projektowych 20

www.bnsit.pl

Przykład: Geometria euklidesowa ;)

Zwiększamy efektywność zespołów projektowych 21

www.bnsit.pl

... ale jeśli nie znasz podstawowych zasad

Zwiększamy efektywność zespołów projektowych 22

www.bnsit.pl

S.O.L.I.D

Podstawowe zasady

Zwiększamy efektywność zespołów projektowych 23

www.bnsit.pl

# To jest proste?

• Koncepcyjnie proste, logicznie proste, eleganckie

• Lecz wcale nie tak łatwe do zastosowania

# To jest dla początkujących?

• Podstawy nie oznaczają rzeczy najłatwiejszych lecz p o d s t a w ę

• Trzeba sporo doświadczenia, aby zajmować się sprawami oczywistymi

To zbyt banalne?

Zwiększamy efektywność zespołów projektowych 24

www.bnsit.pl

Co chcemy zacząć zauważać?

Zwiększamy efektywność zespołów projektowych 25

www.bnsit.pl

Nazwa klasy cLOC

LocationManager 26 752

NetworkItem 10 955

TransferOperations 6 871

CalculatorsManager 4 325

MonitorManager 1 514

VTViewInvoker 48

ContactService 47

Address 34

DataRange 21

LoggedUserDetailsModel 13

Jeśli chodzi o klasy…

Zwiększamy efektywność zespołów projektowych 26

www.bnsit.pl

Hipoteza #1

Zwiększamy efektywność zespołów projektowych 27

www.bnsit.pl

Hipoteza #2

Zwiększamy efektywność zespołów projektowych 28

www.bnsit.pl

Hipoteza #3

Zwiększamy efektywność zespołów projektowych 29

www.bnsit.pl

Nazwa metody mLOC Nazwa klasy mLOC/ cLOC

checkDataProtectionStatus 956 PersonalDataProtectionCommon 79,47%

createWord 470 WordCreator 69,32%

process 95 SearchInText 60,51%

performOperation 1 187 TransferOperations 17,28%

closeTask 12 TaskEditAction 1,73%

updateCustomerSheet 56 TransferOperations 0,82%

onResponse 222 DeviceImpl_T41 0,50%

scanRoutingTable 26 DeviceImpl_T41 0,06%

countControlSum 10 AuthenticationLibrary 0,40%

checkTransactionStatus 10 AuthenticationLibrary 0,40%

Jeśli chodzi o metody…

Zwiększamy efektywność zespołów projektowych 30

www.bnsit.pl

Hipoteza #4

Zwiększamy efektywność zespołów projektowych 31

www.bnsit.pl

Hipoteza #5

Zwiększamy efektywność zespołów projektowych 32

www.bnsit.pl

Hipoteza #6

Zwiększamy efektywność zespołów projektowych 33

www.bnsit.pl

Extract Method?

Jeśli chodzi o zmienne…

Zwiększamy efektywność zespołów projektowych 34

www.bnsit.pl

Jeśli chodzi o pakiety…

Zwiększamy efektywność zespołów projektowych 35

Axel Fontaine, Architecting for Continuous Delivery

http://2013.33degree.org/talk/show/51

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell

Przykład

Refaktoring

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 36

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell Zmienna quasi-globalna

Przykład

Refaktoring

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 37

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell Zmienna quasi-globalna

Przykład tmp1, tmp2, tmp3

Refaktoring

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 38

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell Zmienna quasi-globalna

Przykład tmp1, tmp2, tmp3

Refaktoring

Split Temporary Variable http://refactoring.com

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 39

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell Long Method Zmienna quasi-globalna

Przykład tmp1, tmp2, tmp3

Refaktoring

Split Temporary Variable http://refactoring.com

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 40

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell Long Method Zmienna quasi-globalna

Przykład process, performOperation

tmp1, tmp2, tmp3

Refaktoring

Split Temporary Variable http://refactoring.com

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 41

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell Long Method Zmienna quasi-globalna

Przykład process, performOperation

tmp1, tmp2, tmp3

Refaktoring

Extract Method http://refactoring.com

Split Temporary Variable http://refactoring.com

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 42

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell God Class Long Method Zmienna quasi-globalna

Przykład process, performOperation

tmp1, tmp2, tmp3

Refaktoring

Extract Method http://refactoring.com

Split Temporary Variable http://refactoring.com

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 43

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell God Class Long Method Zmienna quasi-globalna

Przykład Location Manager, NetworkItem

process, performOperation

tmp1, tmp2, tmp3

Refaktoring

Extract Method http://refactoring.com

Split Temporary Variable http://refactoring.com

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 44

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell God Class Long Method Zmienna quasi-globalna

Przykład Location Manager, NetworkItem

process, performOperation

tmp1, tmp2, tmp3

Refaktoring

Extract Class http://refactoring.com

Extract Method http://refactoring.com

Split Temporary Variable http://refactoring.com

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 45

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell Big Ball of Mud http://laputan.org/mud/

God Class Long Method Zmienna quasi-globalna

Przykład Location Manager, NetworkItem

process, performOperation

tmp1, tmp2, tmp3

Refaktoring

Extract Class http://refactoring.com

Extract Method http://refactoring.com

Split Temporary Variable http://refactoring.com

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 46

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell Big Ball of Mud http://laputan.org/mud/

God Class Long Method Zmienna quasi-globalna

Przykład Genreic Plugin Framework, Multi-Device Platform

Location Manager, NetworkItem

process, performOperation

tmp1, tmp2, tmp3

Refaktoring

Extract Class http://refactoring.com

Extract Method http://refactoring.com

Split Temporary Variable http://refactoring.com

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 47

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell Big Ball of Mud http://laputan.org/mud/

God Class Long Method Zmienna quasi-globalna

Przykład Genreic Plugin Framework, Multi-Device Platform

Location Manager, NetworkItem

process, performOperation

tmp1, tmp2, tmp3

Refaktoring

Wprowadź wzorzec architektoniczny

Extract Class http://refactoring.com

Extract Method http://refactoring.com

Split Temporary Variable http://refactoring.com

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 48

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell Sexy Vision Big Ball of Mud http://laputan.org/mud/

God Class Long Method Zmienna quasi-globalna

Przykład Genreic Plugin Framework, Multi-Device Platform

Location Manager, NetworkItem

process, performOperation

tmp1, tmp2, tmp3

Refaktoring

Wprowadź wzorzec architektoniczny

Extract Class http://refactoring.com

Extract Method http://refactoring.com

Split Temporary Variable http://refactoring.com

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 49

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell Sexy Vision Big Ball of Mud http://laputan.org/mud/

God Class Long Method Zmienna quasi-globalna

Przykład ZSI, BI, DW Genreic Plugin Framework, Multi-Device Platform

Location Manager, NetworkItem

process, performOperation

tmp1, tmp2, tmp3

Refaktoring

Wprowadź wzorzec architektoniczny

Extract Class http://refactoring.com

Extract Method http://refactoring.com

Split Temporary Variable http://refactoring.com

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 50

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell Sexy Vision Big Ball of Mud http://laputan.org/mud/

God Class Long Method Zmienna quasi-globalna

Przykład ZSI, BI, DW Genreic Plugin Framework, Multi-Device Platform

Location Manager, NetworkItem

process, performOperation

tmp1, tmp2, tmp3

Refaktoring

Zdefiniuj, podziel, zmień proces

Wprowadź wzorzec architektoniczny

Extract Class http://refactoring.com

Extract Method http://refactoring.com

Split Temporary Variable http://refactoring.com

Co sprawia brak umiejętności n a z y w a n i a?

Zwiększamy efektywność zespołów projektowych 51

www.bnsit.pl

Biznes ARCH Klasy Metody Zmienne

Smell Sexy Vision Big Ball of Mud http://laputan.org/mud/

God Class Long Method Zmienna quasi-globalna

Przykład ZSI, BI, DW Genreic Plugin Framework, Multi-Device Platform

Location Manager, NetworkItem

process, performOperation

tmp1, tmp2, tmp3

Refaktoring

Zdefiniuj, podziel, zmień proces

Wprowadź wzorzec architektoniczny

Extract Class http://refactoring.com

Extract Method http://refactoring.com

Split Temporary Variable http://refactoring.com

Skąd wieje wiatr?

Zwiększamy efektywność zespołów projektowych 52

www.bnsit.pl

process( name, surname,

age, street, city,

postalCode, area);

//...

Biznes ARCH Klasy Metody Zmienne

Skąd wieje wiatr?

Zwiększamy efektywność zespołów projektowych 53

www.bnsit.pl

Diagnoza i leczenie

Zwiększamy efektywność zespołów projektowych 54

www.bnsit.pl

Abstrakcja, implementacja

Zwiększamy efektywność zespołów projektowych 55

www.bnsit.pl

Abstrakcja, implementacja

Zwiększamy efektywność zespołów projektowych 56

www.bnsit.pl

Abstrakcja, implementacja: Kiedy? co?

Zwiększamy efektywność zespołów projektowych 57

www.bnsit.pl

Abstrakcja, implementacja: Kiedy? co?

Zwiększamy efektywność zespołów projektowych 58

www.bnsit.pl

Abstrakcja, implementacja: Kiedy? co?

Zwiększamy efektywność zespołów projektowych 59

www.bnsit.pl

Abstrakcja, implementacja w procesie – NOR

Zwiększamy efektywność zespołów projektowych 60

www.bnsit.pl

Skąd się biorą dobre nazwy

Zwiększamy efektywność zespołów projektowych 61

Biznes ARCH Klasy Metody Zmienne

List<Employee> employees...

//...

EmployeeFile employeeFile = findEmployeeFile( personalID );

employeeFile.getEmergencyContactInformation();

www.bnsit.pl Zwiększamy efektywność zespołów projektowych 62

Kadry

# Kartoteka pracowników

# Akta osobowe pracownika

# Umowa o pracę

# Kwestionariusz osobowy

# Świadectwo pracy

# …

Human Resources

# Employee Personell File

# Medical File

# Payroll File

# I-9 Forms File

# …

Brakło pojęć w domenie!

www.bnsit.pl

Pomieszanie z poplątaniem

Zwiększamy efektywność zespołów projektowych 63

http://pl.wikipedia.org/wiki/Flagi_państw_świata

Pracownik employee =

findPracownik( employeeId );

int wiek = employee.getAge();

//Vafanapoli! Non capisco!

Lavoratore lavoratore =

trovareLavoratore( id );

int età = lavoratore.età();

//Bravo! Bravissimo!

www.bnsit.pl

# Tylko język, w którym myśli klient, pozwala swobodne eksplorować domenę klienta i nadawać nazwy pojęciom

# Java pozwala, ale co z get* set*

# Język programowania nie powinien narzucać konwencji kodowania bazującej na jakimkolwiek języku naturalnym

Programowanie w języku klienta?

Zwiększamy efektywność zespołów projektowych 64

www.bnsit.pl

Podsumowując

Zwiększamy efektywność zespołów projektowych 65

www.bnsit.pl

S.O.L.I.D

Podstawowe zasady

Zwiększamy efektywność zespołów projektowych 66

Dziękuję za Twój czas!

Zwiększamy efektywność zespołów

projektowych

67