ENGLISH FOR DESIGN Principles of Design. Elements & Principles.
Design principles 4 hackers - tech3camp (28142014)
-
Upload
kuba-marchwicki -
Category
Documents
-
view
320 -
download
2
Transcript of Design principles 4 hackers - tech3camp (28142014)
![Page 1: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/1.jpg)
Design principles for hackers
Kuba Marchwicki@kubem
![Page 2: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/2.jpg)
@kubem
![Page 3: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/3.jpg)
@kubem
![Page 4: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/4.jpg)
Complex vs complicated
Simple to read, learn and understand
How easy it’s for novice programmer can maintain a significant program
Make stuff simple but not simplistic
@kubem
![Page 5: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/5.jpg)
![Page 6: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/6.jpg)
@kubem
![Page 7: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/7.jpg)
@kubem
![Page 8: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/8.jpg)
A flash is comming
![Page 9: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/9.jpg)
What’s wrong with this code
![Page 10: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/10.jpg)
![Page 11: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/11.jpg)
Ktoś upowszechnił
![Page 12: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/12.jpg)
Podstawowe zasady Wuja
• Nazywaj zmiennej w taki a taki sposób• Stosuj komentarze w takich a nie innych
przypadkach• Dziel funkcje na części zgodnie z takimi a
takimi zasadami• Stosuj abstrakcje, symetrię, prawo Demeter• Testuj, testuj, testuj, red – green – ….• Refaktoruj
@kubem
![Page 13: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/13.jpg)
Ktoś położył podwaliny
![Page 14: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/14.jpg)
• Kod jest podstawowym medium komunikacji w projekcie
• Jako zespół jesteśmy jednością– Jak ja pójdę na skróty, to kolega będzie się męczył– I jako całość i tak będziemy nieefektywni
• Programy są częściej czytane niż pisane• Więcej czasu poświęcamy na modyfikację
istniejącego kodu niż na tworzenie nowego
Wartości
@kubem
![Page 15: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/15.jpg)
• Komunikacja – kod źródłowy powinno się czytać jak książkę
• Prostota – wprowadzaj złożoność tylko wtedy, kiedy jest to konieczne
• Elastyczność – elastyczność to dodatkowa złożoność, więc wprowadzaj ją tylko tam gdzie to konieczne
Implementation patterns
@kubem
![Page 16: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/16.jpg)
• Lokalne konsekwencje – zmiana w jednym miejscu nie powoduje zmian w innych
• Minimalne powtórzenia – DRY• Dane i logika razem – ponieważ dane i logika z
reguły zmieniają się w tym samym czasie• Symetria– utrzymuj podobny poziom
abstrakcji w obrębie metody / klasy
Implementation patterns
@kubem
![Page 17: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/17.jpg)
„Czysty kod jest prosty i bezpośredni. Czysty kod czyta się jak dobrze napisaną
prozę. Czysty kod nigdy nie zaciemnia zamiarów projektanta; jest pełen
trafnych abstrakcji i prostych ścieżek sterowania.”
Grady Booch – to jeden z tych panów od UMLa
![Page 18: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/18.jpg)
![Page 19: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/19.jpg)
![Page 20: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/20.jpg)
![Page 21: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/21.jpg)
![Page 22: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/22.jpg)
![Page 23: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/23.jpg)
![Page 24: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/24.jpg)
Affordance
a quality of an object, which allows an individual to perform an action. For
example, a knob affords twisting, and perhaps pushing, while a cord affords
pulling
@kubem
![Page 25: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/25.jpg)
![Page 26: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/26.jpg)
![Page 27: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/27.jpg)
![Page 28: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/28.jpg)
![Page 29: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/29.jpg)
![Page 30: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/30.jpg)
![Page 31: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/31.jpg)
public class Sql { public Sql(String table, Column[] columns) public String create() public String insert(Object[] fields) public String selectAll() public String fieldByKey(
String keyColumn, String keyValue) private String ColumnList(Column[] columns) private String valuesList(
Object[] fields, final Column[] columns)}
![Page 32: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/32.jpg)
abstract public class Sql { public Sql(String table, Column[] columns) abstract public String generate();}
public class CreateSql extends Sql { public CreateSql(String table, Column[] columns) @Override public String generate()}
public class SelectSql extends Sql { public SelectSql(String table, Column[] columns) @Override public String generate()}
public class InsertSql extends Sql { public InsertSql(String table, Column[] columns) @Override public String generate() private String valuesList(Object[] fields, final Column[] columns)}
public class FindKeyBySql extends Sql { public FindKeyBySql(String table, Column[] columns, String keyColumn, String keyValue) @Override public String generate()}
public class ColumnList { public ColumnList(Column[] columns) public String generate()}
![Page 33: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/33.jpg)
George Miller
![Page 34: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/34.jpg)
![Page 35: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/35.jpg)
number of method parametersfunction / class size
external API method namesreadable & descriptive naming
@kubem
![Page 36: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/36.jpg)
@kubem
![Page 37: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/37.jpg)
Multi store memory model
@kubem
![Page 38: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/38.jpg)
![Page 39: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/39.jpg)
![Page 40: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/40.jpg)
![Page 41: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/41.jpg)
![Page 42: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/42.jpg)
Mihaly Csikszentmigalyi
![Page 43: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/43.jpg)
ME-HI CHICKS-SENT-ME-HI
![Page 44: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/44.jpg)
![Page 45: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/45.jpg)
![Page 46: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/46.jpg)
BJ Fogg
![Page 47: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/47.jpg)
![Page 48: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/48.jpg)
Po co to wszystko?
![Page 49: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/49.jpg)
Shu-Ha-Ri
@kubem
![Page 50: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/50.jpg)
Shu-Ha-Ri
Kuba Marchwicki@kubem
http://goo.gl/zd1YhU
![Page 51: Design principles 4 hackers - tech3camp (28142014)](https://reader038.fdocuments.us/reader038/viewer/2022110309/558de4841a28abef428b4623/html5/thumbnails/51.jpg)
In case you ask – we are hiring