becoming a better developer. things i have learned
TRANSCRIPT
![Page 1: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/1.jpg)
Becoming a Better
Developer
![Page 2: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/2.jpg)
Things I have learned...
![Page 3: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/3.jpg)
... that has made me to a better developer ...
![Page 4: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/4.jpg)
... than I was before I learned them
![Page 5: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/5.jpg)
Johannes Brodwall
![Page 6: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/6.jpg)
Lead Software Architect, BBS
![Page 7: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/7.jpg)
Organizer, Oslo XP Meetup
![Page 8: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/8.jpg)
Board-member, Oslo Agile UG
![Page 9: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/9.jpg)
Committee member, ROOTS conference
![Page 10: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/10.jpg)
Slides:
• http://www.brodwall.com/johannes/blog/• http://www.brodwall.com/johannes/blog/2006/08/28/tips-for-developers/
![Page 11: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/11.jpg)
Experience Report
![Page 12: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/12.jpg)
Things I have learned...
![Page 13: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/13.jpg)
... that has made me to a better developer ...
![Page 14: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/14.jpg)
... than I was before I learned them
![Page 15: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/15.jpg)
(2)
![Page 16: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/16.jpg)
Be brief
![Page 17: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/17.jpg)
"I would have written a shorter letter but I didn't have the time.“- Mark Twain
![Page 18: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/18.jpg)
(1)
![Page 19: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/19.jpg)
Accept failure
![Page 20: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/20.jpg)
(But only settle for perfection)
![Page 21: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/21.jpg)
Developer or coder?
![Page 22: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/22.jpg)
Coder: A good coder writes good code
![Page 23: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/23.jpg)
Programmer: A good programmer is a good coder who thinks well
![Page 24: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/24.jpg)
Developer: A good developer is a good
programmer who communicates well
![Page 25: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/25.jpg)
The Word: Versatility
![Page 26: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/26.jpg)
Define: Versatility
”having a wide variety of skills”
![Page 27: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/27.jpg)
Know a lot about somethingAnd something about a lot
![Page 28: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/28.jpg)
(3)
![Page 29: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/29.jpg)
In-depth knowledge
![Page 30: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/30.jpg)
Code:
![Page 31: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/31.jpg)
public void testFoo() { try { int result = bar.doBar(); assertEquals("should be 0", 0, result);
} catch (BarException e) { fail("illegal exception caught");
} }
![Page 32: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/32.jpg)
public void testFoo() throws BarException { int result = bar.doBar(); assertEquals("result", 0, result); }
![Page 33: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/33.jpg)
Socket s = null;try { s = new Socket(”server”, 12345);} catch (IOException e) { log.error(”An exception occurred”, e);}
InputStream in = s.getInputStream();
![Page 34: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/34.jpg)
Exception Handling
![Page 35: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/35.jpg)
Socket s = null;try { s = new Socket("server", 12345);} catch (IOException e) { log.error("An exception occurred", e); throw new CustomException(e);}
InputStream in = s.getInputStream();
![Page 36: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/36.jpg)
try { Socket s = new Socket("server", 12345); InputStream in = s.getInputStream();} catch (IOException e) { throw new CustomException(e);}
![Page 37: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/37.jpg)
Catch block? Probably bug
![Page 38: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/38.jpg)
Johannes’ first rule of exceptions
![Page 39: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/39.jpg)
”There is usually nothing you can do”
![Page 40: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/40.jpg)
Source controlUnit testing
Continuous Integration
![Page 41: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/41.jpg)
What is a task?
![Page 42: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/42.jpg)
What is a good task?
![Page 43: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/43.jpg)
”How will I know when it is done?”
![Page 44: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/44.jpg)
(How about: The tests passes)
![Page 45: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/45.jpg)
public void testProcessFile() throws IOException { processor.process(file); assertEquals(StatusCode.PROCESSED,
file.getCurrentStatusCode()); assertEquals("transmissions", 1,
file.getTransmissions().size());
Transmission transmission = file.getTransmissions().iterator().next(); assertEquals(3,
transmission.getTransactions().size()); assertEquals("transactionSum", new Money(7000, Currency.getInstance("NOK")), transmission.getTransactionSum());
![Page 46: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/46.jpg)
Code perfection
• From: http://today.java.net/pub/a/today/2006/07/13/lazy-loading-is-easy.html
![Page 47: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/47.jpg)
Category category = dao.get(1);Category parent = dao.get(category.getParentId());List children = new ArrayList();for (Long childId : parent.getSubcategoryIds()) { children.add(dao.get(childId));}System.out.println(children);
![Page 48: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/48.jpg)
Category category = dao.get(1);System.out.println(category.getParent().getSubcategories());
![Page 49: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/49.jpg)
Exploit Defaults
![Page 50: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/50.jpg)
<class name="BookCategory" table="book_category"> <id name="id" column="id" access="property"
type="long"> <generator class="native" /> </id>
<property name="name" column="name” insert="true" update="true” access="property" />
<property name="creationYear" column="craton_year" insert="true" update="true" access="property" />
![Page 51: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/51.jpg)
No: You are not special
![Page 52: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/52.jpg)
<class name="BookCategory" > <id name="id"> <generator class="native"/>
</id>
<property name="name"/> <property name="creationYear"/>
![Page 53: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/53.jpg)
No: You are not special
![Page 54: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/54.jpg)
This gives tablename: bookcategory
But we wanted:book_category
![Page 55: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/55.jpg)
No: You are not special(except when you are)
![Page 56: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/56.jpg)
<bean id="hibernateSessionFactory”class=”...LocalSessionFactoryBean">
<...> <property name="namingStrategy” ref="hibernateNamingStrategy"/>
</bean>
<bean id="hibernateNamingStrategy”class=”...ImprovedNamingStrategy"/>
![Page 57: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/57.jpg)
No: You are not special
• Sun/Apache/Rod Johnson/DHH/Gavin King is probably smarter than you
![Page 58: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/58.jpg)
(4)
![Page 59: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/59.jpg)
Don’t overspecialize
![Page 60: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/60.jpg)
Specialization is for insects!
![Page 61: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/61.jpg)
Learn a different programming language
• Javascript example: http://joelonsoftware.com/
![Page 62: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/62.jpg)
function sum(array){ return reduce(array, 0, function(a, b){ return a + b; });
}
![Page 63: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/63.jpg)
function sum(array){ return reduce(array, 0, function(a, b){ return a + b; }); }
sum([1, 2, 3, 4, 5]); => 15
![Page 64: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/64.jpg)
function sum(array){ return reduce(array, 0, function(a, b){ return a + b; });
}
![Page 65: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/65.jpg)
function reduce(array, initial_value, fn) { var result = init; for (i = 0; i < array.length; i++) result = fn( result, array[i] ); return result;}
function sum(array){ return reduce(array, 0, function(a, b){ return a + b; });}
![Page 66: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/66.jpg)
Object sum(Collection collection) { return reduce(collection, 0, new BinaryFunction() { public Object doIt(Object a, Object b) {
return (Integer) a + (Integer) b;
} });}
![Page 67: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/67.jpg)
Practical use in Java
• Lazy Loading Example: http://today.java.net/pub/a/today/2006/07/13/lazy-loading-is-easy.html
![Page 68: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/68.jpg)
Parent getById(final long parentId) { ResultSet rs = ....; Parent parent = transformFromRs(rs); parent.setKids( (Collection)lazyLoad(new LazyLoader() { public Object loadObject() { return kidsByParentId(parentId) } }); return parent;}
![Page 69: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/69.jpg)
function getById(parentId) { var rs = ....; var parent = transformFromRs(rs); parent.kids = lazyLoad( function() { return kidsByParent(parentId); }); return parent;}
![Page 70: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/70.jpg)
JavaScriptScheme
Ruby
![Page 71: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/71.jpg)
Developer or coder?
![Page 72: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/72.jpg)
Coder: A good coder writes good code
![Page 73: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/73.jpg)
Programmer: A good programmer is a good
coder who thinks
![Page 74: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/74.jpg)
(5)
![Page 75: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/75.jpg)
See the bigger box
![Page 76: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/76.jpg)
”There is no use in trying,” said Alice. ”One cannot
believe impossible things”
![Page 77: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/77.jpg)
”I daresay you haven’t had much practice,” said the
queen.
![Page 78: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/78.jpg)
”When I was you age, I always did it for half an hour
a day. Why, sometimes, I believed as many as six impossible things before
breakfast”• Lewis Carroll: Through the looking glass
![Page 79: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/79.jpg)
How many Petals Around the Rose
• http://illuminations.nctm.org/LessonDetail.aspx?id=L576
![Page 80: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/80.jpg)
Disclaimer: Riddle-solving doesn’t measure
intelligence
![Page 81: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/81.jpg)
(My wife solved this one faster than me)
![Page 82: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/82.jpg)
How many Petals Around the Rose
![Page 83: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/83.jpg)
How many Petals Around the Rose
• Answer: 10 petals around the rose
![Page 84: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/84.jpg)
How many Petals Around the Rose
![Page 85: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/85.jpg)
How many Petals Around the Rose
• Answer: 6 petals around the rose
![Page 86: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/86.jpg)
How many Petals Around the Rose
![Page 87: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/87.jpg)
How many Petals Around the Rose
• Answer: 0 petals around the rose
![Page 88: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/88.jpg)
“The most profound discoveries never begin
with EUREKA!
Usually they start with the words "now that's odd..."
![Page 89: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/89.jpg)
How many Petals Around the Rose
![Page 90: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/90.jpg)
How many Petals Around the Rose
• Answer: 6 petals around the rose
![Page 91: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/91.jpg)
How many Petals Around the Rose
![Page 92: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/92.jpg)
How many Petals Around the Rose
• Answer: 2 petals around the rose
![Page 93: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/93.jpg)
Solve it yourself
• http://illuminations.nctm.org/LessonDetail.aspx?id=L576• (Or my blog)
– http://www.brodwall.com/johannes/blog/2006/07/22/thinking-outside-the-box/
![Page 94: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/94.jpg)
Ask ”why”
![Page 95: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/95.jpg)
Why are we doing this?
![Page 96: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/96.jpg)
• Why are you writing ”pay for order” functionality?– Because it is needed for the user to pay for the ticket
order service
• Why are we writing the ticket order service?– Because it is our project mandate to deliver an online
ticket system
• Why is an online ticket system our mandate?– Because we believe that with our expertice in
interactive web solutions, we can offer a really good service
![Page 97: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/97.jpg)
”Why am I writing this”
![Page 98: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/98.jpg)
From: JohannesTo: BjørnSubject: Build server is down
Hi, BjørnThe build server is down.
~Johannes
![Page 99: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/99.jpg)
What do you expect the recipient to do?
![Page 100: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/100.jpg)
From: JohannesTo: BjørnSubject: FYI: Build server is down
Hi, BjørnFor your info: The build server is down. I am currently investigating and will let you know as soon as I know more.
~Johannes
![Page 101: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/101.jpg)
From: JohannesTo: BjørnSubject: Please get the build server up again
Hi, BjørnThe build server is down. Can you get it fixed?
~Johannes
![Page 102: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/102.jpg)
Communications is
![Page 103: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/103.jpg)
Communications is not explaining
![Page 104: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/104.jpg)
Communication is creating a shared
understanding
![Page 105: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/105.jpg)
(6)
![Page 106: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/106.jpg)
Coupling
![Page 107: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/107.jpg)
Secret to good design:Avoid bad coupling
Exploit good coupling
![Page 108: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/108.jpg)
”Two things are coupled if change to one requires
change to the other”
![Page 109: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/109.jpg)
Avoiding bad coupling
![Page 110: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/110.jpg)
Programming by intention
![Page 111: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/111.jpg)
public void testCategoryIsStoredCorrectly() { Category category = new Category("category
name", 1999); category.addSubcategory(new Category("foo")); category.addSubcategory(new Category("bar"));
Object id = dao.save(category); dao.flushCache();
Category copy = dao.get(id); assertNotSame(copy, category); assertAllFieldsEquals(copy, category);}
![Page 112: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/112.jpg)
(Hiding details)
![Page 113: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/113.jpg)
public void testSearchForNameAndCreationYear() { Collection expected = new HashSet();
storeMatching(new Category("magic 1",1999), expected, dao);
storeNonMatching(new Category(”non-magic 2",2000), dao);
CategorySpecification specification = ...;
Collection actual = dao.find(specification); assertCollectionHasSameElements(”find " +
specification, expected, actual);}
![Page 114: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/114.jpg)
Avoiding repetition
![Page 115: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/115.jpg)
Comments repeating codeCode duplication
Duplicated decisions
![Page 116: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/116.jpg)
<class name="BookCategory" table="book_category">
<id name="id" column="id"> <generator class="native" /> </id>
<property name="name” column=”name" /> <property name="creationYear" column="creation_year" />
![Page 117: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/117.jpg)
(7)
![Page 118: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/118.jpg)
Haste != Productivity
![Page 119: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/119.jpg)
Johannes’ only rule for crisis management
![Page 120: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/120.jpg)
Don’t just do something
Stand there!
![Page 121: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/121.jpg)
Productivity = Getting Things Done
![Page 122: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/122.jpg)
What is a good task?
![Page 123: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/123.jpg)
”How will I know when it is done?”
![Page 124: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/124.jpg)
”How will someone else know when it is done?”
![Page 125: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/125.jpg)
Tip: Offload your task list from your brain
![Page 126: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/126.jpg)
Yellow notesOutlook: Flags and Tasks
Gmail: Inbox
![Page 127: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/127.jpg)
Tip: Do it now, Do it soon,
Defer it, Delegate it, or Drop it
![Page 128: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/128.jpg)
The Art of the Two-Minute Email
![Page 129: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/129.jpg)
Follow up on what you defer and delegate
![Page 130: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/130.jpg)
(8)
![Page 131: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/131.jpg)
Myopia (nearsightedness):the inability to see distant objects
as clearly as near objects.
![Page 132: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/132.jpg)
Myopia is good for your health
![Page 133: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/133.jpg)
Implement for today
![Page 134: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/134.jpg)
Not for tomorrow
![Page 135: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/135.jpg)
”We have to write this as a web service in case
someone someday want to integrate with us”
![Page 136: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/136.jpg)
Enterprisey!
![Page 137: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/137.jpg)
Not for yesterday
![Page 138: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/138.jpg)
• From http://antipatterns.org/
![Page 139: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/139.jpg)
” This class was written by some earlier (Alex?) to manage the indexing of something (maybe). It is probably
important. Don't delete. I don't think it's used anywhere - at least not in the new
MacroINdexer module which may actually replace what it was used for.”
• Credit: AntiPatterns
![Page 140: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/140.jpg)
(9)
![Page 141: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/141.jpg)
Leave proud
![Page 142: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/142.jpg)
/** TODO: Write a better comment. * @param foo * @return */ public boolean checkIt(String foo) { StringBuffer buffer = new StringBuffer(); buffer.append(foo); buffer.append("@"); if (getStuff().startsWith(buffer.toString())) { return true; } else if (!getStuff().startsWith(buffer.toString())) { return false; } else { return false; } } }
![Page 143: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/143.jpg)
/** TODO: Write a better comment. * @param foo * @return */ public boolean checkIt(String foo) { StringBuffer buffer = new StringBuffer(); buffer.append(foo); buffer.append("@"); if (getStuff().startsWith(buffer.toString())) { return true; } else if (!getStuff().startsWith(buffer.toString())) { return false; } else { return false; } } }
TODO comments
Skeleton javadoc
Premature (and unneeded)
optimization
Very common verbositis
Common unthinking
![Page 144: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/144.jpg)
public boolean isUsernameEqual( String username) { return getEmailAddress(). startsWith(username + "@");}
![Page 145: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/145.jpg)
(2)
![Page 146: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/146.jpg)
Be brief
![Page 147: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/147.jpg)
”Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.”(Antoine de Saint-Exupery)
![Page 148: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/148.jpg)
(1)
![Page 149: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/149.jpg)
Accept failure
![Page 150: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/150.jpg)
"Knowing the pathis not the same as walking
the path”- Tao te Ching
![Page 151: Becoming a Better Developer. Things I have learned](https://reader035.vdocuments.site/reader035/viewer/2022062404/551be7f3550346b9588b6159/html5/thumbnails/151.jpg)
Summary
1. Accept failure2. Be brief3. In-depth knowledge4. Don’t overspecialize5. See the bigger box6. Eliminate bad coupling7. Don’t just do something, stand there8. Work for today9. Leave proud