Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Design principles for hackers
Kuba Marchwicki
@kubem
@kubem
@kubem
Complex vs complicated
Simple to read, learn and understand
How easy it’s for novice programmer can
maintain a significant...
@kubem
@kubem
A flash is comming
What’s wrong with this code
Ktoś upowszechnił
Podstawowe zasady Wuja
• Nazywaj zmiennej w taki a taki sposób
• Stosuj komentarze w takich a nie innych
przypadkach
• Dzi...
Ktoś położył podwaliny
Wartości
• Kod jest podstawowym medium komunikacji
w projekcie
• Jako zespół jesteśmy jednością
– Jak ja pójdę na skróty, ...
Implementation patterns
• Komunikacja – kod źródłowy powinno się
czytad jak książkę
• Prostota – wprowadzaj złożonośd tylk...
Implementation patterns
• Lokalne konsekwencje – zmiana w jednym
miejscu nie powoduje zmian w innych
• Minimalne powtórzen...
„Czysty kod jest prosty i bezpośredni.
Czysty kod czyta się jak dobrze napisaną
prozę. Czysty kod nigdy nie zaciemnia
zami...
Affordance
a quality of an object, which allows an
individual to perform an action. For
example, a knob affords twisting, ...
public class Sql {
public Sql(String table, Column[] columns)
public String create()
public String insert(Object[] fields)...
abstract public class Sql {
public Sql(String table, Column[] columns)
abstract public String generate();
}
public class C...
George Miller
number of method parameters
function / class size
external API method names
readable & descriptive naming

@kubem
@kubem
Multi store memory model

@kubem
Mihaly Csikszentmigalyi
ME-HI CHICKS-SENT-ME-HI
BJ Fogg
Po co to wszystko?
Shu-Ha-Ri

@kubem
Shu-Ha-Ri

Kuba Marchwicki
@kubem
http://goo.gl/zd1YhU
In case you ask – we are hiring
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Design principles 4 hackers - tech3camp (28142014)
Upcoming SlideShare
Loading in …5
×

Design principles 4 hackers - tech3camp (28142014)

597 views

Published on

  • Hi there! Get Your Professional Job-Winning Resume Here - Check our website! http://bit.ly/resumpro
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • thx :)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Here you go: http://www.pinterest.com/pin/126241595778503742/
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Hi.

    Could you post a link for a comic from slides 38-42 ? It is a great explanation of why developers need quiet workspace :)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Design principles 4 hackers - tech3camp (28142014)

  1. 1. Design principles for hackers Kuba Marchwicki @kubem
  2. 2. @kubem
  3. 3. @kubem
  4. 4. 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
  5. 5. @kubem
  6. 6. @kubem
  7. 7. A flash is comming
  8. 8. What’s wrong with this code
  9. 9. Ktoś upowszechnił
  10. 10. 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
  11. 11. Ktoś położył podwaliny
  12. 12. Wartości • 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śd 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 @kubem
  13. 13. Implementation patterns • Komunikacja – kod źródłowy powinno się czytad jak książkę • Prostota – wprowadzaj złożonośd tylko wtedy, kiedy jest to konieczne • Elastyczność – elastycznośd to dodatkowa złożonośd, więc wprowadzaj ją tylko tam gdzie to konieczne @kubem
  14. 14. Implementation patterns • 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 @kubem
  15. 15. „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
  16. 16. 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
  17. 17. 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) }
  18. 18. 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() }
  19. 19. George Miller
  20. 20. number of method parameters function / class size external API method names readable & descriptive naming @kubem
  21. 21. @kubem
  22. 22. Multi store memory model @kubem
  23. 23. Mihaly Csikszentmigalyi
  24. 24. ME-HI CHICKS-SENT-ME-HI
  25. 25. BJ Fogg
  26. 26. Po co to wszystko?
  27. 27. Shu-Ha-Ri @kubem
  28. 28. Shu-Ha-Ri Kuba Marchwicki @kubem http://goo.gl/zd1YhU
  29. 29. In case you ask – we are hiring

×