This was presented at Austin Code Camp 2011 on Sept 10, 2011 by Chris Edwards http://chrisedwards.dreamhosters.com
Here is the abstract from the code camp:
Are you wanting to become a better developer, but don't know where to start? Do the terms TDD, BDD, CI, SOLID, etc. seem foreign to you? This two part presentation will cover many of the modern development practices today that every developer should know. Learn about object oriented design principles, design patterns, testing (mocking, TDD, BDD), source control, continuous integration, agile practices, plus many useful tools and techniques. That's a lot to cover, so while some topics will be discussed in-depth, others will be touched on lightly, with resources on where to get more information. The purpose of the presentation is to give a broad overview of how modern developers work and the tools they use to be efficient and productive and provide resources so that any aspiring developer can get on the fast-track to becoming better at their craft.
More than Just Lines on a Map: Best Practices for U.S Bike Routes
Padawan2Jedi - A Developer Jump-Start - Austin Code Camp 2011
1. +)1*3$&4(56&4#70&89::&
!"#$%&'()&*(&+,,&-).&/0($1(.12&
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
2. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
3. PadawanDeveloper Jump-Start
A
to Jedi
A U S T I N - C O D E - C A M P - 2 0 1 1
Chris Edwards
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
4. About Me
Chris Edwards
Architect at BancVue Ltd.
Email: ChrisEdwards357@gmail.com
Blog: http://chrisedwards.dreamhosters.com
Twitter: @cedwards
Github: http://github.com/chrisedwards
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
5. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
6. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
7. What makes a great developer?
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
8. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
9. Passion
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
10. Continuous Learning
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
11. Read Books
Continuous Learning
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
12. Read Books
Continuous Learning
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
13. Read Books
Continuous Learning
Blogs
Read
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
14. Read Books
Continuous Learning
Blogs
Read
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
15. Follow O
thers
Read Books
Continuous Learning
Blogs
Read
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
16. Follow O
thers
Read Books
Continuous Learning
Blogs
Read
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
17. Fiesta!
mp
ode Ca
tin C Aus
Aus tin .N
Attend User
Grou
ET
Follow O Events p
thers
Read Books
Continuous Learning
Blogs
Read
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
18. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
19. Humility
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
20. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
21. Communication Skills
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
22. Basics Beginning with the basics...
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
23. Basics Beginning with the basics...
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
24. Basic oo concepts
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
25. Basic oo concepts
(Object Oriented)
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
26. Encapsulation
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
27. Encapsulation
Information Hiding
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
28. Polymorphism
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
29. Polymorphism
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
30. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
31. Low Coupling / High Cohesion
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
32. Communicating via uML
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
33. Class Diagram
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
34. Sequence Diagram
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
35. Activity Diagram
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
36. Design
The theory and Practice of Design...
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
37. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
38. What makes great software...
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
39. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
40. Functionality (It works!)
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
41. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
42. Maintainability
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
43. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
44. Redundancy
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
45. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
46. Scalability
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
47. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
48. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
49. Performance
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
50. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
51. Usability
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
52. Design Principles
The theory and Practice of Design...
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
53. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
54. Keep
It
Super
Simple
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
55. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
56. You
A ren’t
G on na
Ne ed
It
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
57. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
58. Last Responsible Moment
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
59. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
60. Avoid Premature Optimization
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
61. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
62. Don’t
Repeat
Yourself
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
63. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
64. Separation of Concerns
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
65. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
66. Composition
over
Inheritance
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
67. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
68. Explicit
over
Implicit
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
69. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
70. Fail Fast
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
71. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
72. Law of Demeter
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
73. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
74. No Broken Windows
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
75. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
76. The Boy Scout Rule
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
77. The Solid Principles
Principles for SOLID code
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
78. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
79. SRP Responsibility Principle
The Single
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
80. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
81. ocp Open-Closed Principle
The
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
82. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
83. lspLiskov Substitution Principle
The
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
84. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
85. ispInterface Segregation Principle
The
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
86. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
87. dip
The Dependency Inversion Principle
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
88. SOLID Motivational Posters
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
89. Design Patterns
Testing with mocks and stubs.
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
90. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
91. First, a word of Wisdom...
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
92. gang of four patterns
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
93. Creational Patterns
Abstract Factory
Builder Structural Patterns
Factory Method Adapter
Prototype Bridge
Singleton Composite
Decorator
Facade
Flyweight
Proxy
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
94. Behavioral Patterns
Chain of Responsibility Observer
Interpreter State
Iterator Strategy
Mediator Template Method
Memento Visitor
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
95. PoEAA patterns
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
96. other design patterns
GRASP Patterns
Martin Fowler’s Pattern Repository List
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
97. Domain Driven Design
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
98. Building Blocks
Entity
Value Object
Aggregate Root Patterns
Service Ubiquitous Language
Repository Bounded Context
Factory Continuous Integration
Many More...
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
99. Pattern Relationship Map
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
100. refactoring changing form while preserving function
(Changing form while preserving function.)
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
101. Resources
http://www.refactoring.com
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
102. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
103. Code Smells
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
104. ReSharper
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
105. Persistence changing form while preserving function
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
106. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
107. Persistence Ignorance
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
108. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
109. Repository and
Unit of Work Patterns
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
110. Object Relational Mappers
NHibernate
Entity Framework
Etc.
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
111. TESTiNG
Testing with mocks and stubs.
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
112. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
113. Types of Tests
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
114. Types of Tests
UnitTests
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
115. Types of Tests
UnitTests
IntegrationTests
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
116. Types of Tests
UnitTests
IntegrationTests
Functional / UITests
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
117. unit testing
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
118. Good UnitT Are...
ests
Atomic Fast
Self-Contained Repeatable
Order-Independent Readable (Clear)
Meaningful Unique
Easy to Set Up Granular
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
119. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
120. Test-Driven Development
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
121. TDD Development
Test-Driven
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
122. uncle bob’s
Three Rules of TDD
1. You can write no production code unless it
makes a failing test pass.
2. You can write no more test code than is
sufficient to fail.
3. You can write no more production code than is
necessary to pass the failing test.
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
123. Red...Green...Refactor
The Heartbeat of TDD
RED Write a failing unit test. See it fail.
Green Make the test pass.
Refactor Clean up implementation based
on what you have learned.
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
124. .NET Unit Testing Frameworks
• NUnit
• MSpec (Machine.Specifications)
• MSTest
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
125. A Basic Unit Test using NUnit
[TestFixture]
public class OrderTests
{
[Test]
public void TestCalculateSubTotal()
{
var order = new Order();
order.AddLineItem("Star Destroyer", 5000.00);
order.AddLineItem("Death Star", 10000.00);
double subTotal = order.CalculateSubTotal();
Assert.That( subTotal, Is.EqualTo( 15000.00 ) ); }
}
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
126. public class Order
{
public int Id { get; set; }
public Customer Customer { get; set; }
public DateTime OrderDate { get; set; }
public IList< LineItem > LineItems { get; set; }
public double CalculateSubTotal()
{
return LineItems.Select( x => x.Price ).Sum();
}
public void AddLineItem( string description, double price )
{
LineItems.Add( new LineItem( 1, description, price ) );
}
}
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
127. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
128. Arrange, Act, Assert
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
129. AAA Act, Assert
Arrange,
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
130. [Test]
public void TestCalculateSubTotal()
{
var order = new Order();
order.AddLineItem("Star Destroyer", 5000.00);
order.AddLineItem("Death Star", 10000.00);
double subTotal = order.CalculateSubTotal();
Assert.That( subTotal, Is.EqualTo( 15000.00 ) );
}
[ Test ]
public void TestCalculateSubTotal()
{
// Arrange.
var order = new Order();
order.AddLineItem("Star Destroyer", 5000.00);
order.AddLineItem("Death Star", 10000.00);
// Act
double subTotal = order.CalculateSubTotal();
// Assert.
Assert.That( subTotal, Is.EqualTo( 15000.00 ) );
}
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
131. Unit Test with Setup
[ TestFixture ]
public class OrderTests
{
Order _order;
[ SetUp ]
public void SetUp()
{
// Arrange.
_order = new Order();
_order.AddLineItem( "Star Destroyer", 5000.00 );
_order.AddLineItem( "Death Star", 10000.00 );
}
[ Test ]
public void TestCalculateSubtotal()
{
// Act.
double subTotal = _order.CalculateSubTotal();
// Assert.
Assert.That( subTotal, Is.EqualTo( 15000.00 ) );
}
}
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
132. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
133. Behavior Driven Development
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
134. BDD Driven Development
Behavior
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
135. [ TestFixture ]
public class OrderTests
{
Order _order;
[ SetUp ]
public void SetUp()
{
// Arrange.
_order = new Order();
_order.AddLineItem( "Star Destroyer", 5000.00 );
_order.AddLineItem( "Death Star", 10000.00 );
}
[ Test ]
public void TestCalculateSubtotal()
{
// Act.
double subTotal = _order.CalculateSubTotal();
// Assert.
Assert.That( subTotal, Is.EqualTo( 15000.00 ) );
}
}
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
136. [ TestFixture ]
public class When_an_order_has_two_line_items
{
Order _order;
[ SetUp ]
public void SetUpContext()
{
_order = new Order();
_order.AddLineItem( "Star Destroyer", 5000.00 );
_order.AddLineItem( "Death Star", 10000.00 );
}
[ Test ]
public void Calculating_the_subtotal_should_return_the_sum_of_the_line_item_prices()
{
Assert.That( _order.CalculateSubTotal(), Is.EqualTo( 15000.00 ) );
}
}
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
137. [ TestFixture ]
public class When_an_order_has_two_line_items
{
Order _order;
[ SetUp ]
Context
public void SetUpContext()
{
_order = new Order();
_order.AddLineItem( "Star Destroyer", 5000.00 );
_order.AddLineItem( "Death Star", 10000.00 );
}
[ Test ]
public void Calculating_the_subtotal_should_return_the_sum_of_the_line_item_prices()
{
Assert.That( _order.CalculateSubTotal(), Is.EqualTo( 15000.00 ) );
}
}
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
138. [ TestFixture ]
public class When_an_order_has_two_line_items
{
Order _order;
[ SetUp ]
Context
public void SetUpContext()
{
_order = new Order();
_order.AddLineItem( "Star Destroyer", 5000.00 );
}
_order.AddLineItem( "Death Star", 10000.00 );
Specification
[ Test ]
public void Calculating_the_subtotal_should_return_the_sum_of_the_line_item_prices()
{
Assert.That( _order.CalculateSubTotal(), Is.EqualTo( 15000.00 ) );
}
}
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
139. A BDD-Style Test using Machine.Specifications
[ Subject("Order") ]
public class When_an_order_has_two_line_items
{
static Order _order;
static double _subTotal;
Establish context = () =>
{
_order = new Order();
_order.AddLineItem( "Star Destroyer", 5000.00 );
_order.AddLineItem( "Death Star", 10000.00 );
};
Because of = () => _subTotal = _order.CalculateSubTotal();
It should_calculate_the_subtotal_of_line_items = () => _subTotal.ShouldEqual( 15000.00 );
}
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
140. A BDD-Style Test using Machine.Specifications
[ Subject("Order") ]
public class When_an_order_has_two_line_items
{
static Order _order;
Context static double _subTotal;
Establish context = () =>
{
_order = new Order();
_order.AddLineItem( "Star Destroyer", 5000.00 );
_order.AddLineItem( "Death Star", 10000.00 );
};
Because of = () => _subTotal = _order.CalculateSubTotal();
It should_calculate_the_subtotal_of_line_items = () => _subTotal.ShouldEqual( 15000.00 );
}
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
141. A BDD-Style Test using Machine.Specifications
[ Subject("Order") ]
public class When_an_order_has_two_line_items
{
static Order _order;
Context static double _subTotal;
Establish context = () =>
{
_order = new Order();
_order.AddLineItem( "Star Destroyer", 5000.00 );
_order.AddLineItem( "Death Star", 10000.00 );
};
Because of = () => _subTotal = _order.CalculateSubTotal();
It should_calculate_the_subtotal_of_line_items = () => _subTotal.ShouldEqual( 15000.00 );
}
Specification
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
142. [ Subject( "Order" ) ]
public class Given_an_order_with_two_line_items
{
protected static Order _order;
Establish context = () =>
{
_order = new Order();
_order.AddLineItem( "Star Destroyer", 5000.00 );
_order.AddLineItem( "Death Star", 10000.00 );
};
}
public class When_calculating_the_subtotal : Given_an_order_with_two_line_items
{
static double _subTotal;
Because of = () => _subTotal = _order.CalculateSubTotal();
It should_equal_the_sum_of_the_line_item_prices = () => _subTotal.ShouldEqual( 15000.00 );
}
public class When_removing_a_line_item_by_its_description : Given_an_order_with_two_line_items
{
Because of = () => _order.RemoveLineItem( "Star Destroyer" );
It should_remove_the_line_item_from_the_order = () =>
_order.LineItems.Any( x => x.Description == "Star Destroyer" ).ShouldBeFalse();
}
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
143. [ Subject( "Order" ) ]
public class Given_an_order_with_two_line_items
{
protected static Order _order; Context
Establish context = () =>
{
_order = new Order();
_order.AddLineItem( "Star Destroyer", 5000.00 );
_order.AddLineItem( "Death Star", 10000.00 );
};
}
public class When_calculating_the_subtotal : Given_an_order_with_two_line_items
{
static double _subTotal;
Because of = () => _subTotal = _order.CalculateSubTotal();
It should_equal_the_sum_of_the_line_item_prices = () => _subTotal.ShouldEqual( 15000.00 );
}
public class When_removing_a_line_item_by_its_description : Given_an_order_with_two_line_items
{
Because of = () => _order.RemoveLineItem( "Star Destroyer" );
It should_remove_the_line_item_from_the_order = () =>
_order.LineItems.Any( x => x.Description == "Star Destroyer" ).ShouldBeFalse();
}
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
144. Tests are documentation (specifications)
Given an order with two line items:
When calculating the subtotal
It should be the sum of the line item prices.
When removing a line item by its description
It should remove the line item from the order.
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
145. Tests are documentation (specifications)
Context: Given an order with two line items:
Specification: When calculating the subtotal
It should be the sum of the line item prices.
Specification: When removing a line item by its description
It should remove the line item from the order.
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
146. Tests are documentation (specifications)
Given an order with two line items:
When calculating the subtotal
It should be the sum of the line item prices.
When removing a line item by its description
It should remove the line item from the order.
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
147. Tests are documentation (specifications)
Arrange: Given an order with two line items:
Act: When calculating the subtotal
Assert: It should be the sum of the line item prices.
When removing a line item by its description
It should remove the line item from the order.
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
148. Tests are documentation (specifications)
Given an order with two line items:
When calculating the subtotal
It should be the sum of the line item prices.
When removing a line item by its description
It should remove the line item from the order.
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
149. Tests are documentation (specifications)
Arrange: Given an order with two line items:
When calculating the subtotal
It should be the sum of the line item prices.
Act: When removing a line item by its description
Assert: It should remove the line item from the order.
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
150. More Resources for TDD
Bowling Game Kata
James Shore “Let’s Play TDD” video series.
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
151. Mocking
Testing with mocks and stubs.
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
152. Rhino Mocks
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
153. State-based vs. Interaction-based Testing
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
154. inversion of control
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
155. inversion of control (IoC)
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
156. Tools (IoC Containers)
Structure Map
Ninject
Autofac
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
157. Code Coverage
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
158. Code Coverage Tools
TestDriven.NET
dotCover (JetBrains)
NCover
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
159. Source control
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
160. Standard
Subversion
CVS
Others
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
161. Standard
Subversion
CVS
Others
Distributed
Git
Mercurial
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
162. continuous
integration
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
163. TeamCity
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
164. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
165. Build Monitor
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
166. Agile
(Embrace Change)
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
167. Agile embrace change!
(Embrace Change)
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
168. the Agile manifesto
We are uncovering better ways of developing
software by doing it and helping others do it.
Through this work we have come to value:
Individuals & Interactions over Processes & Tools
Working Software over Comprehensive Documentation
Customer Collaboration over Contract Negotiation
Responding to Change over Following a Plan
That is, while there is value in the items on the right,
we value the items on the left more.
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
169. Many Methodologies
Extreme Programming (XP)
Scrum
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
170. Extreme Programming (xp)
Values:
Communication
Feedback
Simplicity Practices:
Courage Stand Up Meeting
Respect Collective Code Ownership
Pair Programming
Planning Game
Test-Driven Development (TDD)
Whole Team
Continuous Integration (CI)
Merciless Refactoring
Small Releases
Coding Standards
Simple Design
System Metaphor
Sustainable Pace
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
171. Scrum 3 Roles:
Product Owner
ScrumMaster
Team
4 Ceremonies:
Sprint Planning
Daily Scrum
Sprint Reviews
Sprint Retrospectives
3 Artifacts:
Product Backlog
Sprint Backlog
Burndown
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
172. Agile Practices A walk through the process
(A walk through the process)
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
173. h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
174. Short Iterations &
Feedback Loops
Frequency promotes Efficiency
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
175. User Stories
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
176. Backlog
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
177. Planning Game
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
178. Sustainable Pace / Velocity
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
179. Sustainable Pace / Velocity
Looking at yesterday’s weather
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
180. Self-OrganizingTeam
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
181. Collective Code Ownership
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
182. Collective Code Ownership
“Mine Mine”
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
183. Pair Programming
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
184. Merciless Refactoring
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
185. Stand Up Meeting
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
186. Information Radiators
Burndown Chart Task Board
Build Monitors
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
187. Sprint Demo
Demonstration is better than Discussion
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
188. Feedback
Firing tracer bullets
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
189. Retrospectives
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
190. Automation
Automate everything you can!
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
191. Don’t be discouraged!
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
192. Don’t be discouraged!
Everyone has to start somewhere.
h t t p : / / c h r i s e d wa r d s . d r e a m h o s t e r s . c o m
Follow @cedwards or #Padawan2Jedi for tweet stream of resources during the presentation.
Notas del editor
[twitter]Starting my presentation "Padawan to Jedi" Part 1. Follow @cedwards or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Its passion that feeds your learning\n\n
[twitter]Use http://paper.li to read all the links tweeted throughout the day. Way faster than looking through the tweets.[/twitter]\nTips\nRead Blogs\nAttend\n Code Camps\n User Groups\n Conferences\nFollow the right people on twitter\n My list\n paper.li\nRead books\nListen.\n\n
[twitter]Use http://paper.li to read all the links tweeted throughout the day. Way faster than looking through the tweets.[/twitter]\nTips\nRead Blogs\nAttend\n Code Camps\n User Groups\n Conferences\nFollow the right people on twitter\n My list\n paper.li\nRead books\nListen.\n\n
[twitter]Use http://paper.li to read all the links tweeted throughout the day. Way faster than looking through the tweets.[/twitter]\nTips\nRead Blogs\nAttend\n Code Camps\n User Groups\n Conferences\nFollow the right people on twitter\n My list\n paper.li\nRead books\nListen.\n\n
[twitter]Use http://paper.li to read all the links tweeted throughout the day. Way faster than looking through the tweets.[/twitter]\nTips\nRead Blogs\nAttend\n Code Camps\n User Groups\n Conferences\nFollow the right people on twitter\n My list\n paper.li\nRead books\nListen.\n\n
Encapsulation\nSometimes called Information Hiding\nData and Methods kept together\nhttp://en.wikipedia.org/wiki/Information_hiding\n&#x201C;The hiding of design decisions in a computer program that are most likely to change&#x201D; - Wikipedia\n\n
Inheritance\nExtend/Override\nInterface\nDeferred implementation\nPolymorphism\nReplace an object of a class with an object of its subclasses\nAbstraction\n Code against an interface, not implementation\n Depend on abstractions, not concretions\n\n
Inheritance\nExtend/Override\nInterface\nDeferred implementation\nPolymorphism\nReplace an object of a class with an object of its subclasses\nAbstraction\n Code against an interface, not implementation\n Depend on abstractions, not concretions\n\n
Inheritance\nExtend/Override\nInterface\nDeferred implementation\nPolymorphism\nReplace an object of a class with an object of its subclasses\nAbstraction\n Code against an interface, not implementation\n Depend on abstractions, not concretions\n\n
Goals\nLow Coupling\n Unit tests promote low coupling. Highly coupled code is difficult to test.\n Links\n Coupling And Cohesion on c2.com\n http://c2.com/cgi/wiki?CouplingAndCohesion\n &#x201C;The degree to which each program module relies on each one of the other modules&#x201D; &#x2013;&#xA0;Wikipedia\n http://en.wikipedia.org/wiki/Coupling_(computer_science)\nHigh Cohesion\n http://codebetter.com/blogs/jeremy.miller/pages/129542.aspx &#x201C;A measure of how strongly-related and focused the various responsibilities of a software module are&#x201D; - Wikipedia \n http://en.wikipedia.org/wiki/Cohesion_(computer_science)\nValue\nDon't have to understand the whole picture because it is broken down into decoupled pieces.\n Understanding one piece is enough to work on that piece\n\n
[twitter]Every developer should be able to communicate using basic UML: http://bit.ly/qimo8 http://ibm.co/9cUooz http://bit.ly/kKwys [/twitter]\nLinks\nhttp://en.wikipedia.org/wiki/Class_diagram\nhttp://www.ibm.com/developerworks/rational/library/769.html\nhttp://www.holub.com/goodies/uml/\n UML Reference Card\n\n
[twitter]Every developer should be able to communicate using basic UML: http://bit.ly/qimo8 http://ibm.co/9cUooz http://bit.ly/kKwys [/twitter]\nClass Diagram\nRelationship\nInheritance\nImplementation\nLinks\n http://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/\n http://www.objectmentor.com/resources/articles/umlClassDiagrams.pdf\n http://www.agilemodeling.com/artifacts/classDiagram.htm\n\n
Sequence Diagram\nLifetimes and interactions\n\n\n
Activity Diagram\nOverall flow of functionality\nShows paralellism\n\n
\n
\n
Works\nSatisfies Requirements (the right ones)\n\n
Maintainability\nSimplicity\n\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Simplicity is the key! The following help keep it simple.\n
[twitter]YAGNI (You Aren't Gonna Need It): Don't implement code you don't need. http://bit.ly/7qy9B [/twitter]\nYAGNI (You Aren't Going To Need It)\nhttp://c2.com/xp/YouArentGonnaNeedIt.html\nHelps keep it simple\nPicture of targeting computer\n\n
[twitter]Defer design decisions to the Last Responsible Moment http://bit.ly/gGLzrb [/twitter]\nLast Responsible Moment\nhttp://www.codinghorror.com/blog/2006/10/the-last-responsible-moment.html\n\n
[twitter]Avoid Pre-Mature Optimization: http://bit.ly/qAANet http://bit.ly/n5fmTK[/twitter]\nAvoid Premature Optimization\nhttp://c2.com/cgi/wiki?PrematureOptimization "We should forget about small efficiencies, say about 97% of the time; premature optimization is the root of all evil Yet we should not pass up our opportunities in that critical 3%." &#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;-- Donald E. Knuth, Structured Programming with go to Statements \n http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.103.6084&rep=rep1&type=pdf Src: Structured Programming with go to Statements, ACM Journal Computing Surveys, Vol 6, No. 4, Dec. 1974. p.268. \n\n
[twitter]DRY: Don&#x2019;t Repeat Yourself. Repeated code is unmaintainable. http://bit.ly/m6wg2c http://bit.ly/DVBz9 http://bit.ly/owjNTR [/twitter]\nDRY\nhttp://en.wikipedia.org/wiki/Don%27t_repeat_yourself\nhttp://c2.com/cgi/wiki?DontRepeatYourself\nhttp://www.artima.com/intv/dry.html\nPicture of clones\n\n
[twitter]Separation of Concerns: A place for everything, and everything in its place. http://bit.ly/qL74lf [/twitter]\nSeparation of Concerns\nhttp://en.wikipedia.org/wiki/Separation_of_concerns\nDarth maul sliced in half\n\n
[twitter]Favor Composition over Inheritance: It is far more flexible. http://bit.ly/bfnaH4 http://bit.ly/ofJznN [/twitter]\nComposition over inheritance\nhttp://www.artima.com/lejava/articles/designprinciples4.html\nComposition is more decoupled than inheritance\n You can reuse an object that is part of the composition (strategy pattern)\n You cannot reuse an overriden method\n Inheritance allows the overriden method to make assumptions on the base class's internal state\nhttp://lostechies.com/chadmyers/2010/02/13/composition-versus-inheritance/\n\n
[twitter]Explicit over Implicit: Make implicit concepts explicit in your code. http://bit.ly/nS2NUB http://bit.ly/oSSFE2 [/twitter]\nfrom DDD\n make implicit concepts explicit. http://sympriser.wordpress.com/2009/03/31/revisiting-fowlers-video-store-02-making-implicit-concepts-explicit/ \nhttp://martinfowler.com/ieeeSoftware/explicit.pdf\n\n
[twitter]Fail Fast: The faster your code fails, the sooner you correct it. http://bit.ly/22QPBA [/twitter]\nFail Fast\nLinks\n Article by James Shore\n http://martinfowler.com/ieeeSoftware/failFast.pdf\nAssertions\nRaise errors with any info useful to debugging.\nPicture of Jar Jar Binks\n\n
[twitter]Fail Fast: The faster your code fails, the sooner you correct it. http://bit.ly/22QPBA [/twitter]\nFail Fast\nLinks\n Article by James Shore\n http://martinfowler.com/ieeeSoftware/failFast.pdf\nAssertions\nRaise errors with any info useful to debugging.\nPicture of Jar Jar Binks\n\n
[twitter]Fail Fast: The faster your code fails, the sooner you correct it. http://bit.ly/22QPBA [/twitter]\nFail Fast\nLinks\n Article by James Shore\n http://martinfowler.com/ieeeSoftware/failFast.pdf\nAssertions\nRaise errors with any info useful to debugging.\nPicture of Jar Jar Binks\n\n
[twitter]Law of Demeter: Reduce class dependencies by only talking to the nearest neighbor. http://bit.ly/qpnke [/twitter]\nLaw of Demeter\nLinks\n http://en.wikipedia.org/wiki/Law_of_Demeter\n\n
[twitter]No Broken Windows: &#x201C;A little leaven leavens the whole lump&#x201D; Keep code clean...sloppiness is contagious. http://bit.ly/nFNwc5 [/twitter]\nNo Broken Windows\nhttp://www.artima.com/intv/fixit.html\n On second page of article\n\n
[twitter]The Boy Scout Rule: Leave it better than you found it. http://bit.ly/9Q9nVR [/twitter]\nBoy Scout Principle\nLeave the codebase better than you found it\n\n
[twitter]The SOLID Principles: http://bit.ly/nkFfgw http://bit.ly/usIAS http://bit.ly/mQLEzk http://bit.ly/ow4iOV [/twitter]\nLinks\nhttp://en.wikipedia.org/wiki/Solid\nSOLID Motivational Posters\n http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/\nhttp://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod\nhttp://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf\nOCP,SRP,LSP, Chain of Responsibility, Double Dispatch by Jeremy Miller\n &#xA0;\nLos Techies Topic of the Month\n http://lostechies.com/chadmyers/2008/03/08/pablo-s-topic-of-the-month-march-solid-principles/\n e-book\n http://lostechies.com/wp-content/uploads/2011/03/pablos_solid_ebook.pdf\n\n
[twitter]Design Patterns: http://bit.ly/alwFHt http://bit.ly/IgCxT http://bit.ly/a6LwIT http://bit.ly/2owmxC [/twitter]\nLinks\nhttp://en.wikipedia.org/wiki/Design_Patterns\nhttp://sourcemaking.com/\nhttp://dofactory.com/Patterns/Patterns.aspx\nhttp://www.artima.com/lejava/articles/gammadp.html\n Summary Among developers, design patterns are a popular way to think about design, but what is the proper way to think about design patterns? In this interview, Erich Gamma, co-author of the landmark book, Design Patterns, talks with Bill Venners about the right way to think about and use design patterns. \nRelationships Diagram\n http://r3dux.org/2011/06/design-pattern-relationships/\n\n
[twitter]Wisdom: Don't use design patterns just because you can. That's a sure sign of immaturity.[/twitter]\nUse wisdom in applying patterns\nDon&#x2019;t use the patterns just to use them. A common newbie mistake.\nWhat works for a web app doesn't work for a backend data processing engine\nWhat works for a new application does not bode well for a legacy app\nDon't bite off more than you can chew.\nDon't try something new just because it's new. It must fulfill a buisiness need.\nConsider those who have to support the code you write. Can they?\n\n
\nLinks\nhttp://en.wikipedia.org/wiki/Design_Patterns\nhttp://sourcemaking.com/\nhttp://dofactory.com/Patterns/Patterns.aspx\nhttp://www.artima.com/lejava/articles/gammadp.html\n Summary Among developers, design patterns are a popular way to think about design, but what is the proper way to think about design patterns? In this interview, Erich Gamma, co-author of the landmark book, Design Patterns, talks with Bill Venners about the right way to think about and use design patterns. \nRelationships Diagram\n http://r3dux.org/2011/06/design-pattern-relationships/\n\n
\n
\n
[twitter]Patterns of Enterprise Application Architecture: Great patterns book. http://bit.ly/aC4dnZ [/twitter]\nPoEAA\nLinks\n http://martinfowler.com/eaaCatalog/index.html\n\n
[twitter]Other Design Pattern Pattern Resources... GRASP: http://bit.ly/qxXqoh Fowler's Pattern Repository List: http://bit.ly/hiCY6u [/twitter]\nLinks\nMartin Fowler's links to many pattern repositories\n http://martinfowler.com/articles/enterprisePatterns.html\n\n
[twitter]Domain Driven Design: Must read for developers. http://bit.ly/1l9LPT http://bit.ly/tlZJe [/twitter]\nLinks\nDomain Driven Design Quickly (Free e-book from Info-Q)\n http://www.infoq.com/minibooks/domain-driven-design-quickly\nhttp://domaindrivendesign.org/\n\n
\n
\n
[twitter]Refactoring: Just do it. Constantly improve your code. http://bit.ly/eg9sk http://bit.ly/aVTvzE http://bit.ly/41eSRm [/twitter]\nLinks\nhttp://martinfowler.com/books.html#refactoring\nhttp://www.refactoring.com/\nRefactoring to Patterns\n http://industriallogic.com/xp/refactoring/catalog.html\n\n
\n
[twitter]Code Smells: If it stinks, refactor it. http://bit.ly/8XixMa [/twitter]\n
[twitter]ReSharper: THE must-have tool for every .NET developer: http://bit.ly/s09v\n [/twitter]\n
\n
\n
[twitter]Repository and Unit of Work Patterns: Encapsulate your DB code. http://bit.ly/JSTHa http://bit.ly/CvEAA [/twitter]\nRepository\nStore objects like a collection...not worrying about sql or xml or whatever persistence mechanism you are using. All access is C#. (Persistence Ignorance) Show a class with inline sql, then try to replace sql for mongo \n Then show how introducing a repository can simplify this by depending on an interface.\nA repository is not a DAO. \n It is a model of a collection\n Repository == ICollection\n\n
[twitter]NHibernate: Eases DB access. http://bit.ly/amleRr , Book: http://bit.ly/17HK0T, Fluent NHibernate: http://bit.ly/17btBp [/twitter]\nNHibernate\nLinks\n http://nhforge.org/Default.aspx\n Book: NHibernate In Action\n http://www.manning.com/kuate/\n\n
\n
\n
\n
\n
\n
[twitter]XUnit Test Patterns: Excellent book on unit testing. http://bit.ly/9S8Ot4 [/twitter]\n
Good Unit Tests Are\nAtomic\n No dependencies on other tests\n Short (5 lines or so)\n Refactor\n Debugger?\n One logical assertion per test\nSelf-Contained\n Inserts their own data and removes it (if db test)\n Never depend on existing data in db\nOrder Independent & Isolated\nMeaningful\n Intention Revealing name\n Test something of importance (not properties/constructors)\nEasy to Setup\n Decouple from external dependencies\n DB, Web\n Use mocks\n Any dependencies must be set up by automated build\nFast\n Thousands of tests...means each must be very quick\nRepeatable\n Rerunning the test over and over produces same result\nReadable (clear)\n No clutter\n Simple flow\n Use var names rather than plain values\n Good tests names\n Include "Should"\n Tests ARE Documentation\nUnique\n Not testing something that is tested elsewhere\n DRY\nGranular\n Helps localize errors since smaller set of code is under test\n Targets failing code\n\n
[twitter]Test Driven Development: http://bit.ly/KPnS8 Book: http://bit.ly/p1IW6b [/twitter]\nLinks\nThe Bowling Game: An example of test-first pair programming -- Robert C. Marin and Robert S. Koss\n http://www.objectmentor.com/resources/articles/xpepisode.htm\nLet's Play TDD" Series of videos\n http://jamesshore.com/Blog/Lets-Play/\n\n
[twitter]Test Driven Development: http://bit.ly/KPnS8 Book: http://bit.ly/p1IW6b [/twitter]\nLinks\nThe Bowling Game: An example of test-first pair programming -- Robert C. Marin and Robert S. Koss\n http://www.objectmentor.com/resources/articles/xpepisode.htm\nLet's Play TDD" Series of videos\n http://jamesshore.com/Blog/Lets-Play/\n\n
[twitter]Uncle Bob's 3 Rules of TDD: http://bit.ly/bLQqF [/twitter]\nUncle Bob's Three Rules of TDD\nhttp://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd\n\n
[twitter]Red Green Refactor: The heartbeat of TDD. http://bit.ly/pZEG1z http://bit.ly/qr2L4X [/twitter]\nhttp://aydsoftware.blogspot.com/2009/05/tdd-rhythm.html\n\n
Then write class to usable interface, to make test pass.\n
\n
\n
Arrange can usually be pulled out into a common setup to be used by many tests.\n
\n
\n
\n
\n
\n
\n
\n
\n
Extract context into its own reusable class (SRP) (Separation of Concerns)\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
[twitter]Awesome TDD Resources: Bowling Kata: http://bit.ly/Lojwj , James Shore Videos: http://bit.ly/9nwSIu [/twitter]\nLinks\nThe Bowling Game: An example of test-first pair programming -- Robert C. Marin and Robert S. Koss\n http://www.objectmentor.com/resources/articles/xpepisode.htm\ns Play TDD" Series of videos\n http://jamesshore.com/Blog/Lets-Play/\n\n
[twitter]Excellent Mocking Resources: http://bit.ly/psZZeo http://bit.ly/Leyh http://bit.ly/r7ewwo http://bit.ly/rkWXBy [/twitter]\n\nMocks Aren't Stubs (Martin Fowler)\nhttp://martinfowler.com/articles/mocksArentStubs.html\nResources\nBest and Worst Practices for Mock Objects (Jeremy Miller)\n http://codebetter.com/jeremymiller/2006/01/10/best-and-worst-practices-for-mock-objects/\nUsing AAA with Rhino Mocks\n http://ayende.com/blog/3318/rhino-mocks-arrange-act-assert-syntax\n Quick Reference\n http://svengrand.blogspot.com/2011/02/rhino-mocks-arange-act-assert-aaa.html\n\n
[twitter]Rhino Mocks: Excellent tool for mocks in .NET http://bit.ly/qQh6i9 [/twitter]\n
\n
[twitter]Inversion of Control links: http://bit.ly/13DIh0 http://bit.ly/qGb1GT http://bit.ly/qqA1rw [/twitter]\nLinks\nhttp://martinfowler.com/articles/injection.html\nhttp://codebetter.com/jeremymiller/2005/09/20/what&#x2019;s-so-great-about-inversion-of-control/\nJeremy Millers Concepts to know first\n http://codebetter.com/jeremymiller/2008/06/29/some-concepts-to-know-first/\n\n
[twitter[TestDriven.NET: Fast test integration with Visual Studio http://bit.ly/vEAEQ [/twitter]\n
\n
[twitter]Source Control: Subversion is a common solution: http://bit.ly/bG0WEV Book: http://bit.ly/nCrYz3 [/twitter[\nSubversion\nLinks\n http://svnbook.red-bean.com/nightly/en/index.html\n http://subversion.apache.org/\n\n
[twitter]Source Control: Distributed models are better, like Git (http://git-scm.com/ Book:http://bit.ly/2wiLT) or Mercurial [/twitter]\nGit\nLinks\n http://progit.org/book/\n http://git-scm.com/\n\n
[twitter]Continuous Integration: A MUST DO practice for modern developers. http://bit.ly/qro5y7 http://bit.ly/pzF82M [/twitter]\nLinks\nhttp://www.martinfowler.com/articles/continuousIntegration.html#MaintainASingleSourceRepository.\nEnterprise Continuous Integration Maturity Model\n http://www.urbancode.com/html/resources/white-papers/view.html?id=1214\n\n
[twitter]Extreme Programming: http://bit.ly/PKEC Books: http://amzn.to/oMAxAJ http://amzn.to/mOFQx4 http://scr.bi/7u7bOU [/twitter]\nResources\nBooks\n +- Extreme Programming Explained (Second Edition) - Kent Beck\n http://www.amazon.com/exec/obidos/ASIN/0321278658\n First Edition\n http://www.amazon.com/exec/obidos/ASIN/0201616416\n +- XP Purple book (recommended by Martin Fowler)\n http://www.amazon.com/exec/obidos/ASIN/0201616408\n The New XP\n +- http://www.scribd.com/doc/196734/The-New-XP\n Check link\nSites\n http://www.extremeprogramming.org/\n\n
[twitter]Scrum: http://bit.ly/13E2eX http://bit.ly/qjrij http://bit.ly/1LRUCI and an excellent blog: http://bit.ly/58V63 [/twitter]\nScrum\nLinks\n http://en.wikipedia.org/wiki/Agile_software_development\n http://www.scrumalliance.org/\n http://www.mountaingoatsoftware.com/\n Blogs\n http://www.agileadvice.com/\n\n
[twitter]Excellent book on agile development: James Shore's Art of Agile Development http://bit.ly/cA9rXl [/twitter]\n
[twitter]Choosing an Iteration Length: http://bit.ly/qcaIBY [/twitter]\nFeedback Loop\nExample of tracer bullets\nExample of turning on a hotel shower\nBiggest reason why agile "works"\nOften, fixin agile is finding or fixing a broken or missing feedback loop\n\n
[twitter]Choosing an Iteration Length: http://bit.ly/qcaIBY [/twitter]\nFeedback Loop\nExample of tracer bullets\nExample of turning on a hotel shower\nBiggest reason why agile "works"\nOften, fixin agile is finding or fixing a broken or missing feedback loop\n\n