This document contains notes from a presentation about becoming a great developer. It discusses qualities like passion, continuous learning by reading books and blogs, following others, attending local events, and having humility. It also covers technical topics such as object-oriented concepts, design principles, design patterns, and testing with mocks and stubs. The presenter's contact information and links to their blog and social media profiles are also included.
2. Padawan to Jedi
A Developer Jump-Start
A U S T I N - C O D E - C A M P - 2 0 1 1
Chris Edwards
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
3. About Me
Chris Edwards
Architect at BancVue
Ltd.
Email: ChrisEdwards357@gmail.com
Blog: http://
chrisedwards.dreamhosters.com
Twitter: @ChrisEdwards357
Github: http://github.com/
chrisedwards
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
4. About Me
Chris Edwards
Architect at BancVue
Ltd.
Email: ChrisEdwards357@gmail.com
Blog: http://
chrisedwards.dreamhosters.com
Twitter: @ChrisEdwards357
Github: http://github.com/
chrisedwards
We are hiring!
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
9. Passion
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
10. Continuous
Learning
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
11. Read
Books
Continuous
Learning
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
12. Read
Books
Continuous
Learning
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
13. Read
Books
Continuous
Learning
ad
Re s
Blog
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
14. Read
Books
Continuous
Learning
ad
Re s
Blog
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
15. Follow
Others
Read
Books
Continuous
Learning
ad
Re s
Blog
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
16. Follow
Others
Read
Books
Continuous
Learning
ad
Re s
Blog
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
17. Fiesta
! de Camp
Co A
ustin
Attend
A ustin
User
.NET
Grou
Follow
p
Events
Others
Read
Books
Continuous
Learning
ad
Re s
Blog
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
31. Low Coupling / High Cohesion
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
32. Communicating via uML
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
33. Class Diagram
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
34. Sequence Diagram
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
35. Activity Diagram
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
36. Design
The theory and Practice of Design...
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
51. Usability
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
52. Design Principles
The theory and Practice of Design...
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
76. The Boy Scout Rule
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
77. The Solid Principles
Principles for SOLID code
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
79. SRP Responsibility
The Single
Principle
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
87. dipDependency Inversion
The
Principle
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
88. SOLID Motivational Posters
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
89. Design Patterns
Testing with mocks and stubs.
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
91. First, a word of
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
92. gang of four patterns
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
93. Creational Patterns
Abstract
Factory Structural
Builder Adapter
Factory Method Bridge
Prototype Composite
Singleton Decorator
Facade
Flyweight
Proxy
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
94. Behavioral
Chain of Memento
Responsibility Observer
Interpreter State
Iterator Strategy
Mediator Template Method
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
95. PoEAA patterns
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
96. other design patterns
GRASP
Martin Fowler’s Pattern
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
97. Domain Driven Design
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
98. Building
Entity
Value Object
Aggregate Root Patterns
Service Ubiquitous Language
Repository Bounded Context
Factory Continuous
Integration
Many More...
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
99. Pattern Relationship
Map
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
100. refactoring changing form while preserving function
(Changing form while preserving function.)
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
101. Resources
http://www.refactoring.com
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
103. Code Smells
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
104. ReSharper
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
105. Persistence changing form while preserving function
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
109. Repository and
Unit of Work Patterns
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
110. Object Relational Mappers
NHibernate
Entity Framework
Etc.
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
111. TESTiNG
Testing with mocks and stubs.
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
113. Types of Tests
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
114. Types of Tests
Unit Tests
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
115. Types of Tests
Unit Tests
Integration Tests
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
116. Types of Tests
Unit Tests
Integration Tests
Functional / UI
Tests
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
125. unit testing
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
126. Good Unit Tests Are...
Atomic Easy to Set Up
Self-Contained Fast
Order- Repeatable
Independent Readable (Clear)
Meaningful Unique
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
128. Test-Driven Development
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
129. TDD
Test-Driven Development
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
130. uncle bob’s
Three Rules of
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
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
131. Red...Green...Refactor
The Heartbeat of
RED Write a failing unit test. See
Green it fail. the test pass.
Make
Refactor Clean up implementation
based on what you have
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
132. .NET Unit Testing
•NUnit
•MSpec (Machine.Specifications)
•MSTest
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
133. A Basic Unit Test using
[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 ) ); }
}
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
134. 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 ) );
}
}
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
142. BDD Driven
Behavior
Development
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
143. [ 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 ) );
}
}
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
144. [ 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 ) );
}
}
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
145. [ 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 ) );
}
}
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
146. [ 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 ) );
}
}
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
147. A BDD-Style Test using
[ 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 );
}
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
148. A BDD-Style Test using
[ 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 );
}
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
149. A BDD-Style Test using
[ 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 );
}
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
150. [ 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();
}
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
151. [ 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();
}
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
152. Tests are documentation
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
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
153. Tests are documentation
Context: Given an order with two line items:
Specificati When calculating the subtotal
on: It should be the sum of the line
item prices.
Specificati
on: When removing a line item by its
description
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
154. Tests are documentation
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
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
155. Tests are documentation
Arrange Given an order with two line items:
:
When calculating the subtotal
It should be the sum of the line
item prices.
Act:
Assert: When removing a line item by its
description
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
156. Acceptance Test Driven
Development (ATDD)
Specification By Example
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
157. Acceptance Test Driven
Development (ATDD)
Specification By Example
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
158. Acceptance Test Driven
Development (ATDD)
Specification By Example
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
159. More Resources for TDD
Bowling Game Kata
James Shore “Let’s Play TDD” video
series.
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
160. Mocking
Testing with mocks and stubs.
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
161. Rhino Mocks
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
162. State-based vs. Interaction-
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
163. inversion of control
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
164. inversion of control (IoC)
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
165. Tools (IoC
Structure Map
Ninject
Autofac
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
166. Code
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
167. Code Coverage Tools
TestDriven.NET
dotCover
(JetBrains)
NCover
NCrunch
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
168. Source control
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
169. Standard
Subversion
CVS
Others
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
170. Standard
Subversion
CVS
Others
Distributed
Git
Mercurial
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
171. continuous
integration
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
172. TeamCity
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
174. Build Monitor
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
175. Continuous
Deployment
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
176. Agile
(Embrace Change)
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
177. Agile embrace change!
(Embrace Change)
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
178. 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 &
over Processes & Tools
Interactions Comprehensive
Working Software over
Customer Documentation
over Contract Negotiation
Collaboration
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.
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
179. Many Methodologies
Extreme Programming
(XP)
Scrum
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
180. Extreme Programming (xp)
Values:
Communicati
on
Feedback Practices:
Simplicity Stand Up Meeting
Courage 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
http://chrisedwards.dreamhosters.com
Sustainable Pace
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
181. Scrum 3 Roles:
Product Owner
ScrumMaster
Team
4 Ceremonies:
Sprint Planning
Daily Scrum
Sprint Reviews
Sprint
Retrospectives
3 Artifacts:
Product Backlog
Sprint Backlog
Burndown
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
182. Agile Practices A walk through the process
(A walk through the process)
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
184. Short Iterations &
Feedback Loops
Frequency promotes
Efficiency
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
185. User Stories
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
186. Backlog
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
187. Planning Game
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
188. Sustainable Pace /
Velocity
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
189. Sustainable Pace /
Velocity
Looking at yesterday’s
weather
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
190. Self-Organizing
Team
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
191. Collective Code
Ownership
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
192. Collective Code
Ownership
“Mine Mine”
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
193. Pair
Programming
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
194. Merciless
Refactoring
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
195. Stand Up Meeting
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
196. Information Radiators
Burndown Chart Task Board
Build Monitors
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
197. Sprint Demo
Demonstration is better than
Discussion
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
198. Feedback
Firing tracer bullets
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
199. Retrospectives
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
200. Automation
Automate everything you can!
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
201. Don’t be discouraged!
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
202. Don’t be discouraged!
Everyone has to start somewhere.
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
203. About Me
Chris Edwards
Architect at BancVue
Ltd.
Email: ChrisEdwards357@gmail.com
Blog: http://
chrisedwards.dreamhosters.com
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
204. About Me
Chris Edwards
Architect at BancVue
Ltd.
Email: ChrisEdwards357@gmail.com
Blog: http://
chrisedwards.dreamhosters.com
We are hiring!
http://chrisedwards.dreamhosters.com
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Editor's Notes
[twitter]Starting my presentation "Padawan to Jedi". Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
[twitter]Starting my presentation "Padawan to Jedi". Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
[twitter]Starting my presentation "Padawan to Jedi". Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
[twitter]Starting my presentation "Padawan to Jedi". Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
[twitter]Starting my presentation "Padawan to Jedi". Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
[twitter]Starting my presentation "Padawan to Jedi". Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
[twitter]Starting my presentation "Padawan to Jedi". Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\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
Notification Service Example (Email)\nEncapsulation\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
Notification Service Example\nInheritance\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
Notification Service Example\nInheritance\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
Notification Service Example\nInheritance\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]The Agile Testing Quadrants define the different kinds of automated tests and when to use them: http://bit.ly/uLXR7h[/twitter]\n
[twitter]The Agile Testing Quadrants define the different kinds of automated tests and when to use them: http://bit.ly/uLXR7h[/twitter]\n
[twitter]The Test Automation Pyramid helps show what type of tests to invest your time in: http://bit.ly/KnDndM [/twitter]\n
[twitter]The Test Automation Pyramid helps show what type of tests to invest your time in: http://bit.ly/KnDndM [/twitter]\n
[twitter]The Test Automation Pyramid helps show what type of tests to invest your time in: http://bit.ly/KnDndM [/twitter]\n
[twitter]Agile Testing by Lisa Crispin and Janet Gregory, a must read book for agile developers: http://amzn.to/KnE72I [/twitter]\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
[twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
[twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
[twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
[twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
[twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
[twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
[twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
[twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
[twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
[twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
[twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
[twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
[twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
[twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
[twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
[twitter]Two great books on BDD/ATDD testing: The Cucumber Book http://bit.ly/niLRws Specification By Example: http://bit.ly/amqXZG [/twitter]\n
[twitter]Two great books on BDD/ATDD testing: The Cucumber Book http://bit.ly/niLRws Specification By Example: http://bit.ly/amqXZG [/twitter]\n
[twitter]Two great books on BDD/ATDD testing: The Cucumber Book http://bit.ly/niLRws Specification By Example: http://bit.ly/amqXZG [/twitter]\n
[twitter]Two great books on BDD/ATDD testing: The Cucumber Book http://bit.ly/niLRws Specification By Example: http://bit.ly/amqXZG [/twitter]\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
[twitter]NCrunch: Continuous testing in Visual Studio. The coolest tool I use (next to ReSharper) http://bit.ly/jUlUz6 [/twitter]\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