SlideShare uma empresa Scribd logo
1 de 51
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 program
Make stuff simple but not simplistic

@kubem
@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
• Dziel funkcje na części zgodnie z takimi a
takimi zasadami
• Stosuj abstrakcje, symetrię, prawo Demeter
• Testuj, testuj, testuj, red – green – ….
• Refaktoruj
@kubem
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, 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
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
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
„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
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
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)
}
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()
}
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

Mais conteúdo relacionado

Semelhante a Design principles 4 hackers - tech3camp (28142014)

[PL] Jak programować aby nie zwariować?
[PL] Jak programować aby nie zwariować?[PL] Jak programować aby nie zwariować?
[PL] Jak programować aby nie zwariować?Jakub Marchwicki
 
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiGrzegorz Bartman
 
8. Programowanie w środowisku języka strukturalnego
8. Programowanie w środowisku języka strukturalnego8. Programowanie w środowisku języka strukturalnego
8. Programowanie w środowisku języka strukturalnegokalaxq
 
Dwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówDwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówMichal Lukaszewski
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowychTomasz Borowski
 
Porażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodnościPorażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodnościKamil Grabowski
 
JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...
JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...
JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...PROIDEA
 
Pomysł na analizę w Agile: Agile Modeling
Pomysł na analizę w Agile: Agile ModelingPomysł na analizę w Agile: Agile Modeling
Pomysł na analizę w Agile: Agile ModelingPaweł Jarosiński
 
Wyboista droga do dobrego kodu. ...
Wyboista droga do dobrego kodu.                                              ...Wyboista droga do dobrego kodu.                                              ...
Wyboista droga do dobrego kodu. ...Future Processing
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznieSages
 
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...Infoshare
 
Skok na naderwanym bungee, czyli agile bez automatyzacji
Skok na naderwanym bungee, czyli agile bez automatyzacjiSkok na naderwanym bungee, czyli agile bez automatyzacji
Skok na naderwanym bungee, czyli agile bez automatyzacjiWitold Bołt
 
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacjiInfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacjiJIT Solutions
 
Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]Droptica
 
Adam Roman - Automatyczne projektowanie testów
Adam Roman - Automatyczne projektowanie testówAdam Roman - Automatyczne projektowanie testów
Adam Roman - Automatyczne projektowanie testówkraqa
 

Semelhante a Design principles 4 hackers - tech3camp (28142014) (20)

[PL] Jak programować aby nie zwariować?
[PL] Jak programować aby nie zwariować?[PL] Jak programować aby nie zwariować?
[PL] Jak programować aby nie zwariować?
 
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
 
8. Programowanie w środowisku języka strukturalnego
8. Programowanie w środowisku języka strukturalnego8. Programowanie w środowisku języka strukturalnego
8. Programowanie w środowisku języka strukturalnego
 
M4j3
M4j3M4j3
M4j3
 
M4j3
M4j3M4j3
M4j3
 
Dwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędówDwa sposoby na pisanie aplikacji bez błędów
Dwa sposoby na pisanie aplikacji bez błędów
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
Grok Artykul
Grok ArtykulGrok Artykul
Grok Artykul
 
Porażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodnościPorażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodności
 
JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...
JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...
JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...
 
Pomysł na analizę w Agile: Agile Modeling
Pomysł na analizę w Agile: Agile ModelingPomysł na analizę w Agile: Agile Modeling
Pomysł na analizę w Agile: Agile Modeling
 
Wyboista droga do dobrego kodu. ...
Wyboista droga do dobrego kodu.                                              ...Wyboista droga do dobrego kodu.                                              ...
Wyboista droga do dobrego kodu. ...
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
 
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
infoShare 2014: Witold Bołt, Bartosz Zięba, Skok na naderwanym bungee, czyli ...
 
Skok na naderwanym bungee, czyli agile bez automatyzacji
Skok na naderwanym bungee, czyli agile bez automatyzacjiSkok na naderwanym bungee, czyli agile bez automatyzacji
Skok na naderwanym bungee, czyli agile bez automatyzacji
 
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacjiInfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
InfoShare 2014: Skok na naderwanym bungee, czyli agile bez automatyzacji
 
Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
university day 1
university day 1university day 1
university day 1
 
Adam Roman - Automatyczne projektowanie testów
Adam Roman - Automatyczne projektowanie testówAdam Roman - Automatyczne projektowanie testów
Adam Roman - Automatyczne projektowanie testów
 

Mais de Jakub Marchwicki

Test with Spock like the first officer
Test with Spock like the first officerTest with Spock like the first officer
Test with Spock like the first officerJakub Marchwicki
 
GeeCON 2013 - EJB application guided by tests
GeeCON 2013 - EJB application guided by testsGeeCON 2013 - EJB application guided by tests
GeeCON 2013 - EJB application guided by testsJakub Marchwicki
 
GeeCON 2012 hurdle run through ejb testing
GeeCON 2012 hurdle run through ejb testingGeeCON 2012 hurdle run through ejb testing
GeeCON 2012 hurdle run through ejb testingJakub Marchwicki
 
[PL] Metadane - dane o danych
[PL] Metadane - dane o danych[PL] Metadane - dane o danych
[PL] Metadane - dane o danychJakub Marchwicki
 
[PL] O klasycznej, programistycznej elegancji
[PL] O klasycznej, programistycznej elegancji[PL] O klasycznej, programistycznej elegancji
[PL] O klasycznej, programistycznej elegancjiJakub Marchwicki
 

Mais de Jakub Marchwicki (6)

Test with Spock like the first officer
Test with Spock like the first officerTest with Spock like the first officer
Test with Spock like the first officer
 
JEE.next()
JEE.next()JEE.next()
JEE.next()
 
GeeCON 2013 - EJB application guided by tests
GeeCON 2013 - EJB application guided by testsGeeCON 2013 - EJB application guided by tests
GeeCON 2013 - EJB application guided by tests
 
GeeCON 2012 hurdle run through ejb testing
GeeCON 2012 hurdle run through ejb testingGeeCON 2012 hurdle run through ejb testing
GeeCON 2012 hurdle run through ejb testing
 
[PL] Metadane - dane o danych
[PL] Metadane - dane o danych[PL] Metadane - dane o danych
[PL] Metadane - dane o danych
 
[PL] O klasycznej, programistycznej elegancji
[PL] O klasycznej, programistycznej elegancji[PL] O klasycznej, programistycznej elegancji
[PL] O klasycznej, programistycznej elegancji
 

Design principles 4 hackers - tech3camp (28142014)

  • 1. Design principles for hackers Kuba Marchwicki @kubem
  • 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.
  • 8. A flash is comming
  • 10.
  • 12. 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. „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
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24. 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
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31. 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) }
  • 32. 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() }
  • 34.
  • 35. number of method parameters function / class size external API method names readable & descriptive naming @kubem
  • 37. Multi store memory model @kubem
  • 38.
  • 39.
  • 40.
  • 41.
  • 44.
  • 45.
  • 47.
  • 48. Po co to wszystko?
  • 51. In case you ask – we are hiring