code as a communication tool
DESCRIPTION
Presentation done at UFLA University on May 23th 2011.TRANSCRIPT
![Page 1: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/1.jpg)
Code as a Communication Tool
Vinicius Gomes
Mozair
May, 23rd 2011
© ThoughtWorks 2008
AKA Usando as Linguagens ao Seu Favor
![Page 2: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/2.jpg)
• About us
• Introduction
• What?
• Why?
• How?
• Conclusion
Agenda
© ThoughtWorks 2008
![Page 3: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/3.jpg)
• About us
• Introduction
• What?
• Why?
• How?
• Conclusion
Agenda
© ThoughtWorks 2008
![Page 4: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/4.jpg)
About us
Vinicius Gomes
• about.me/vvgomes
Mozair
@MACSkeptic
github.com/macskeptic
© ThoughtWorks 2008
![Page 5: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/5.jpg)
• About us
• Introduction
• What?
• Why?
• How?
• Conclusion
Agenda
© ThoughtWorks 2008
![Page 6: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/6.jpg)
© ThoughtWorks 2008
Introduction
![Page 7: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/7.jpg)
Reading existing code is
expensive
![Page 8: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/8.jpg)
Understanding existing
code is expensive
![Page 9: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/9.jpg)
Finding out where to
change is expensive
![Page 10: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/10.jpg)
Maintenance is expensive
![Page 11: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/11.jpg)
So, what to do?
![Page 12: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/12.jpg)
• About us
• Introduction
• What?
• Why?
• How?
• Conclusion
Agenda
© ThoughtWorks 2008
![Page 13: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/13.jpg)
© ThoughtWorks 2008
What?
![Page 14: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/14.jpg)
![Page 15: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/15.jpg)
![Page 16: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/16.jpg)
![Page 17: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/17.jpg)
![Page 18: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/18.jpg)
Communicate through
code effectively
![Page 19: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/19.jpg)
Make it fast to read
![Page 20: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/20.jpg)
Make it easy to understand
![Page 21: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/21.jpg)
Express domain knowledge
through software
![Page 22: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/22.jpg)
Keep maintenance costs
low
![Page 23: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/23.jpg)
![Page 24: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/24.jpg)
![Page 25: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/25.jpg)
• About us
• Introduction
• What?
• Why?
• How?
• Conclusion
Agenda
© ThoughtWorks 2008
![Page 26: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/26.jpg)
© ThoughtWorks 2008
Why?
![Page 27: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/27.jpg)
Maintenance
![Page 28: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/28.jpg)
Tech Debt
© ThoughtWorks 2008
![Page 29: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/29.jpg)
Time to market vs. Technical debt
© ThoughtWorks 2008
![Page 30: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/30.jpg)
• XP
–Communication
–Simplicity
–Feedback
–Courage
–Respect
What we do
© ThoughtWorks 2008
![Page 31: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/31.jpg)
Feedback
© ThoughtWorks 2008
![Page 32: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/32.jpg)
Feedback
© ThoughtWorks 2008
Project1
Unitary
Project1
Functional
Project2
Unitary
Project2
Functional
Project1
Regression
Project2
Regression
![Page 33: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/33.jpg)
Help your team
![Page 34: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/34.jpg)
Help your team
• Make people more productive
![Page 35: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/35.jpg)
Help your team
• Make people more productive
• Avoid ambiguous interpretation
![Page 36: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/36.jpg)
Help your team
• Make people more productive
• Avoid ambiguous interpretation
• Drop stress levels
![Page 37: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/37.jpg)
Help your team
• Make people more productive
• Avoid ambiguous interpretation
• Drop stress levels
• Help people to focus on the right things
![Page 38: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/38.jpg)
• About us
• Introduction
• What?
• Why?
• How?
• Conclusion
Agenda
© ThoughtWorks 2008
![Page 39: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/39.jpg)
© ThoughtWorks 2008
How?
![Page 40: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/40.jpg)
• Language constructs
![Page 41: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/41.jpg)
• Language constructs
• Implementation Patterns
![Page 42: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/42.jpg)
• Language constructs
• Implementation Patterns
• Domain Driven Design
![Page 43: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/43.jpg)
• Language constructs
• Implementation Patterns
• Domain Driven Design
• Test Driven Development / Design
![Page 44: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/44.jpg)
• Language constructs
• Implementation Patterns
• Domain Driven Design
• Test Driven Development / Design
• Refactoring
![Page 45: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/45.jpg)
• Language constructs
• Implementation Patterns
• Domain Driven Design
• Test Driven Development / Design
• Refactoring
• Domain Specific Languages
![Page 46: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/46.jpg)
Language constructs
![Page 47: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/47.jpg)
![Page 48: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/48.jpg)
![Page 49: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/49.jpg)
© ThoughtWorks 2008
![Page 50: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/50.jpg)
© ThoughtWorks 2008
![Page 51: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/51.jpg)
© ThoughtWorks 2008
![Page 52: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/52.jpg)
© ThoughtWorks 2008
![Page 53: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/53.jpg)
Avoid the Comic Sans Effect
![Page 54: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/54.jpg)
![Page 55: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/55.jpg)
![Page 56: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/56.jpg)
![Page 57: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/57.jpg)
![Page 58: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/58.jpg)
Tell “what”, not “how”
![Page 59: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/59.jpg)
© ThoughtWorks 2008
![Page 60: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/60.jpg)
© ThoughtWorks 2008
![Page 61: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/61.jpg)
© ThoughtWorks 2008
![Page 62: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/62.jpg)
Implementation
Patterns
![Page 63: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/63.jpg)
Name by role
![Page 64: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/64.jpg)
![Page 65: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/65.jpg)
![Page 66: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/66.jpg)
Abiding by the law of Demeter
![Page 67: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/67.jpg)
![Page 68: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/68.jpg)
![Page 69: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/69.jpg)
![Page 70: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/70.jpg)
![Page 71: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/71.jpg)
Abstraction symmetry
![Page 72: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/72.jpg)
![Page 73: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/73.jpg)
![Page 74: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/74.jpg)
One-line ifs
![Page 75: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/75.jpg)
![Page 76: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/76.jpg)
![Page 77: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/77.jpg)
Test Driven
Design/Development
© ThoughtWorks 2008
![Page 78: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/78.jpg)
© ThoughtWorks 2008
![Page 79: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/79.jpg)
© ThoughtWorks 2008
![Page 80: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/80.jpg)
© ThoughtWorks 2008
![Page 81: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/81.jpg)
© ThoughtWorks 2008
![Page 82: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/82.jpg)
© ThoughtWorks 2008
![Page 83: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/83.jpg)
Refactoring
© ThoughtWorks 2008
![Page 84: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/84.jpg)
© ThoughtWorks 2008
![Page 85: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/85.jpg)
© ThoughtWorks 2008
![Page 86: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/86.jpg)
© ThoughtWorks 2008
![Page 87: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/87.jpg)
© ThoughtWorks 2008
![Page 88: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/88.jpg)
© ThoughtWorks 2008
![Page 89: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/89.jpg)
© ThoughtWorks 2008
![Page 90: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/90.jpg)
Domain Specific
Languages
![Page 91: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/91.jpg)
© ThoughtWorks 2008
![Page 92: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/92.jpg)
© ThoughtWorks 2008
![Page 93: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/93.jpg)
• About us
• Introduction
• What?
• Why?
• How?
• Conclusion
Agenda
© ThoughtWorks 2008
![Page 94: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/94.jpg)
Conclusion
![Page 95: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/95.jpg)
Start to think about the
code as a communication
tool
![Page 96: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/96.jpg)
Harness the power of the
tools at hand
![Page 97: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/97.jpg)
Make the code talk the
domain knowledge
![Page 98: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/98.jpg)
Write code for human
beings
![Page 99: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/99.jpg)
More Information
XP Explained by Kent Beck
TDD by Example by Kent Beck
Implementation Patterns by Kent Beck
Refactoring by Martin Fowler
Clean Code by Bob Martin
Domain Driven Desing by Eric Evans
Literate Programming by David Knuth
![Page 100: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/100.jpg)
about.me/vvgomes @MACSkeptic
![Page 101: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/101.jpg)
Thanks :)
![Page 102: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/102.jpg)
Did you like this subject?
Would you like to work with things
like that on a daily basis?
05/20/11 © ThoughtWorks 2008
![Page 103: Code as a Communication Tool](https://reader034.vdocuments.us/reader034/viewer/2022052618/554f75abb4c9058a148b55ac/html5/thumbnails/103.jpg)
Come get to know us, we are looking
for smart people interested in doing
awesome stuff
www.thoughtworks.com/career-opportunities
05/20/11 © ThoughtWorks 2008