infoShare 2014: Gino Marckx, Forget about Agile, let's write great code first!

Preview:

DESCRIPTION

 

Citation preview

Forget about Agile …Let’s write great code first

Gino Marckx

We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value

That is, while there is value in the items on the right, we value items on the left more.

Kent Beck - Mike Beedle - Arie van Bennekum - Alistair Cockburn - Ward Cunningham - Martin Fowler - James Grenning - Jim Highsmith Andrew Hunt - Ron Jeffries - John Kern - Brian Marick - Robert C. Martin - Steve Mellor - Ken Schwaber - Jeff Sutherland - Dave Thomas ignore

©2001, the above authors - this declaration may be freely copied in any form, but only in its entirety through this notice.

INDIVIDUALS and INTERACTIONSover PROCESSES and TOOLS

WORKING SOFTWAREover COMPREHENSIVE DOCUMENTATION

RESPONDING to CHANGEover FOLLOWING a PLAN

CUSTOMER COLLABORATION over CONTRACT NEGOTIATION

INDIVIDUALS and INTERACTIONSover PROCESSES and TOOLS

WORKING SOFTWAREover COMPREHENSIVE DOCUMENTATION

RESPONDING to CHANGEover FOLLOWING a PLAN

CUSTOMER COLLABORATION over CONTRACT NEGOTIATION

Building it Right

CRAFTSMANSHIPover CRAP

cahbn Chris Hedgate - https://www.flickr.com/photos/chrishedgate/3047997427

Quality !

Maintainable/Extensible

Working as a team

Building the right thing

Collective Code Ownership

Working as a team

public class Person { public String m_name; public String m_street; public String m_zip; public String m_city; public String m_province; public String m_country; public Person(String name, String country) { ... } public Person(String name, String town, String country) { ... } public Person(String name, String s, String z, String c, String p, String country) { ... }

public void add(Person person) { ... } public final List getFriends() { ... } public double between(Person person) { ... } public Person closestFriend() { ... }}

Working as a team

public class Person { public String m_name; public String m_street; public String m_zip; public String m_city; public String m_province; public String m_country; public Person(String name, String country) { ... } public Person(String name, String town, String country) { ... } public Person(String name, String s, String z, String c, String p, String country) { ... }

public void add(Person person) { ... } public final List getFriends() { ... } public double between(Person person) { ... } public Person closestFriend() { ... }}

Working as a team

public class Person { public String m_name; public String m_street; public String m_zip; public String m_city; public String m_province; public String m_country; public Person(String name, String country) { ... } public Person(String name, String town, String country) { ... } public Person(String name, String s, String z, String c, String p, String country) { ... }

public void add(Person person) { ... } public final List getFriends() { ... } public double between(Person person) { ... } public Person closestFriend() { ... }}

Working as a team

public class Person { public String m_name; public String m_street; public String m_zip; public String m_city; public String m_province; public String m_country; public Person(String name, String country) { ... } public Person(String name, String town, String country) { ... } public Person(String name, String s, String z, String c, String p, String country) { ... }

public void add(Person person) { ... } public final List getFriends() { ... } public double between(Person person) { ... } public Person closestFriend() { ... }}

Working as a team

The Wallaroo Prints © 2011

public class Person { public String name; public Address address; public Person(String name, Address address) { ... } public void addFriend(Person person) { ... } public List<Person> getFriends() { ... } /** * Find the friend who lives closest. * * @return the friend who lives closest * @throws NoSuchElementException in case this person has no friends */ public Person getNearestFriend() { ... } }

Working as a team

public class Person { public String name; public Address address; public Person(String name, Address address) { ... } public void addFriend(Person person) { ... } public List<Person> getFriends() { ... } /** * Find the friend who lives closest. * * @return the friend who lives closest * @throws NoSuchElementException in case this person has no friends */ public Person getNearestFriend() { ... } }

Working as a team

public class Person { public String name; public Address address; public Person(String name, Address address) { ... } public void addFriend(Person person) { ... } public List<Person> getFriends() { ... } /** * Find the friend who lives closest. * * @return the friend who lives closest * @throws NoSuchElementException in case this person has no friends */ public Person getNearestFriend() { ... } }

Working as a team

Building the right thing

Test Automation

public class Address { public Address(String country) { ... } public Address(String city, String country) { ... } public Address(String street, String zipCode, String city, String state, String country) { ... } public String getStreet() { ... } public String getZip() { ... } public String getCity() { ... } public String getState() { ... } public String getCountry() { ... }! public Point getGeographicalLocation() { ... }! /** * Calculate the distance in kilometers to another address. * * @param anotherAddress the other address to calculate the distance to * @return the distance in kilometers between this address and the other * address * @throws IllegalArgumentException when location of either address is * unknown */ public double distanceTo(Address anotherAddress) { ... }}

Building the right thing

public class Address { public Address(String country) { ... } public Address(String city, String country) { ... } public Address(String street, String zipCode, String city, String state, String country) { ... } public String getStreet() { ... } public String getZip() { ... } public String getCity() { ... } public String getState() { ... } public String getCountry() { ... }! public Point getGeographicalLocation() { ... }! /** * Calculate the distance in kilometers to another address. * * @param anotherAddress the other address to calculate the distance to * @return the distance in kilometers between this address and the other * address * @throws IllegalArgumentException when location of either address is * unknown */ public double distanceTo(Address anotherAddress) { ... }}

Building the right thing

public class Address { public Address(String country) { ... } public Address(String city, String country) { ... } public Address(String street, String zipCode, String city, String state, String country) { ... } public String getStreet() { ... } public String getZip() { ... } public String getCity() { ... } public String getState() { ... } public String getCountry() { ... }! public Point getGeographicalLocation() { ... }! /** * Calculate the distance in kilometers to another address. * * @param anotherAddress the other address to calculate the distance to * @return the distance in kilometers between this address and the other * address * @throws IllegalArgumentException when location of either address is * unknown */ public double distanceTo(Address anotherAddress) { ... }}

Building the right thing

public class Address { public Address(String country) { ... } public Address(String city, String country) { ... } public Address(String street, String zipCode, String city, String state, String country) { ... } public String getStreet() { ... } public String getZip() { ... } public String getCity() { ... } public String getState() { ... } public String getCountry() { ... }! public Point getGeographicalLocation() { ... }! /** * Calculate the distance in kilometers to another address. * * @param anotherAddress the other address to calculate the distance to * @return the distance in kilometers between this address and the other * address * @throws IllegalArgumentException when location of either address is * unknown */ public double distanceTo(Address anotherAddress) { ... }}

Building the right thing

The Wallaroo Prints © 2011

public class Address { ... public static void setAddressLocator(AddressLocator locator) { ... } ...}!!public class AddressTest { public AddressLocator createMockLocatorWithPolandCentreOfTheUniverse() { ... }! @Test public void testDistanceTo() { Address.setAddressLocator( createMockLocatorWithPolandCentreOfTheUniverse()); Address polishAddress = new Address("Poland"); assertEquals(1000, polishAddress.distanceTo(new Address("Canada"))); }}

Building the right thing

Working as a team

Building the right thing

Building it right

about 56,400,000 results

http://www.zazzle.ca/comments_a_deodorant_to_mask_code_smells_tshirt-235182622652051339

We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value

That is, while there is value in the items on the right, we value items on the left more.

Kent Beck - Mike Beedle - Arie van Bennekum - Alistair Cockburn - Ward Cunningham - Martin Fowler - James Grenning - Jim Highsmith Andrew Hunt - Ron Jeffries - John Kern - Brian Marick - Robert C. Martin - Steve Mellor - Ken Schwaber - Jeff Sutherland - Dave Thomas ignore

©2001, the above authors - this declaration may be freely copied in any form, but only in its entirety through this notice.

INDIVIDUALS and INTERACTIONSover PROCESSES and TOOLS

WORKING SOFTWAREover COMPREHENSIVE DOCUMENTATION

RESPONSING to CHANGEover FOLLOWING a PLAN

CUSTOMER COLLABORATION over CONTRACT NEGOTIATION

better waysof developing software

CRAFTSMANSHIPover CRAP

Forget About Agile

Excel at Software Engineering

Thank you!

Gino Marckx Director Agile Competency Center