SlideShare una empresa de Scribd logo
1 de 192
Descargar para leer sin conexión
+)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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
.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.
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.
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.
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.
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.
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.
[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.
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.
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.
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.
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.
[ 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.
[ 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.
[ 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.
[ 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.
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.
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.
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.
[ 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.
[ 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.

Más contenido relacionado

Último

UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6DianaGray10
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDELiveplex
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxGDSC PJATK
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaborationbruanjhuli
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Commit University
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
Linked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond OntologiesLinked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond OntologiesDavid Newbury
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfDianaGray10
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024D Cloud Solutions
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfAijun Zhang
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsSafe Software
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdfPedro Manuel
 

Último (20)

UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptx
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
Linked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond OntologiesLinked Data in Production: Moving Beyond Ontologies
Linked Data in Production: Moving Beyond Ontologies
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdf
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdf
 
20150722 - AGV
20150722 - AGV20150722 - AGV
20150722 - AGV
 

Destacado

AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 

Destacado (20)

AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
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

  1. [twitter]Starting my presentation &quot;Padawan to Jedi&quot; Part 1. Follow @cedwards or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. Its passion that feeds your learning\n\n
  12. [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
  13. [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
  14. [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
  15. [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
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. Links\nhttp://objectmentor.com/\nhttp://www.objectmentor.com/omSolutions/oops_what.html\nhttp://en.wikipedia.org/wiki/Object-oriented_design\nhttp://en.wikipedia.org/wiki/Object-oriented_programming\n\n
  24. Encapsulation\nSometimes called Information Hiding\nData and Methods kept together\nhttp://en.wikipedia.org/wiki/Information_hiding\n&amp;#x201C;The hiding of design decisions in a computer program that are most likely to change&amp;#x201D; - Wikipedia\n\n
  25. 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
  26. 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
  27. 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
  28. 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 &amp;#x201C;The degree to which each program module relies on each one of the other modules&amp;#x201D; &amp;#x2013;&amp;#xA0;Wikipedia\n http://en.wikipedia.org/wiki/Coupling_(computer_science)\nHigh Cohesion\n http://codebetter.com/blogs/jeremy.miller/pages/129542.aspx &amp;#x201C;A measure of how strongly-related and focused the various responsibilities of a software module are&amp;#x201D; - Wikipedia \n http://en.wikipedia.org/wiki/Cohesion_(computer_science)\nValue\nDon&apos;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
  29. [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
  30. [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
  31. Sequence Diagram\nLifetimes and interactions\n\n\n
  32. Activity Diagram\nOverall flow of functionality\nShows paralellism\n\n
  33. \n
  34. \n
  35. Works\nSatisfies Requirements (the right ones)\n\n
  36. Maintainability\nSimplicity\n\n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. Simplicity is the key! The following help keep it simple.\n
  47. [twitter]YAGNI (You Aren&apos;t Gonna Need It): Don&apos;t implement code you don&apos;t need. http://bit.ly/7qy9B [/twitter]\nYAGNI (You Aren&apos;t Going To Need It)\nhttp://c2.com/xp/YouArentGonnaNeedIt.html\nHelps keep it simple\nPicture of targeting computer\n\n
  48. [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
  49. [twitter]Avoid Pre-Mature Optimization: http://bit.ly/qAANet http://bit.ly/n5fmTK[/twitter]\nAvoid Premature Optimization\nhttp://c2.com/cgi/wiki?PrematureOptimization &quot;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%.&quot; &amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;&amp;#xA0;-- Donald E. Knuth, Structured Programming with go to Statements \n http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.103.6084&amp;rep=rep1&amp;type=pdf Src: Structured Programming with go to Statements, ACM Journal Computing Surveys, Vol 6, No. 4, Dec. 1974. p.268. \n\n
  50. [twitter]DRY: Don&amp;#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
  51. [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
  52. [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&apos;s internal state\nhttp://lostechies.com/chadmyers/2010/02/13/composition-versus-inheritance/\n\n
  53. [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
  54. [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
  55. [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
  56. [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
  57. [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
  58. [twitter]No Broken Windows: &amp;#x201C;A little leaven leavens the whole lump&amp;#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
  59. [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
  60. [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 &amp;#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
  61. SRP\nhttp://www.objectmentor.com/resources/articles/srp.pdf\n\n
  62. SRP\nhttp://www.objectmentor.com/resources/articles/srp.pdf\n\n
  63. OCP\nLinks\n http://www.objectmentor.com/resources/articles/ocp.pdf\n http://c2.com/cgi/wiki?OpenClosedPrinciple\n\n
  64. OCP\nLinks\n http://www.objectmentor.com/resources/articles/ocp.pdf\n http://c2.com/cgi/wiki?OpenClosedPrinciple\n\n
  65. LSP\nhttp://www.objectmentor.com/resources/articles/lsp.pdf\n\n
  66. LSP\nhttp://www.objectmentor.com/resources/articles/lsp.pdf\n\n
  67. ISP\nhttp://www.objectmentor.com/resources/articles/isp.pdf\n\n
  68. ISP\nhttp://www.objectmentor.com/resources/articles/isp.pdf\n\n
  69. DIP\nIoC\nLinks\n http://www.objectmentor.com/resources/articles/dip.pdf\n http://codebetter.com/jeremymiller/2005/07/20/tdd-design-starter-kit-dependency-inversion-principle/\n\n
  70. DIP\nIoC\nLinks\n http://www.objectmentor.com/resources/articles/dip.pdf\n http://codebetter.com/jeremymiller/2005/07/20/tdd-design-starter-kit-dependency-inversion-principle/\n\n
  71. [twitter]SOLID Motivational Posters: http://bit.ly/o21sQa[/twitter]\n
  72. [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
  73. [twitter]Wisdom: Don&apos;t use design patterns just because you can. That&apos;s a sure sign of immaturity.[/twitter]\nUse wisdom in applying patterns\nDon&amp;#x2019;t use the patterns just to use them. A common newbie mistake.\nWhat works for a web app doesn&apos;t work for a backend data processing engine\nWhat works for a new application does not bode well for a legacy app\nDon&apos;t bite off more than you can chew.\nDon&apos;t try something new just because it&apos;s new. It must fulfill a buisiness need.\nConsider those who have to support the code you write. Can they?\n\n
  74. \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
  75. \n
  76. \n
  77. [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
  78. [twitter]Other Design Pattern Pattern Resources... GRASP: http://bit.ly/qxXqoh Fowler&apos;s Pattern Repository List: http://bit.ly/hiCY6u [/twitter]\nLinks\nMartin Fowler&apos;s links to many pattern repositories\n http://martinfowler.com/articles/enterprisePatterns.html\n\n
  79. [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
  80. \n
  81. \n
  82. [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
  83. \n
  84. [twitter]Code Smells: If it stinks, refactor it. http://bit.ly/8XixMa [/twitter]\n
  85. [twitter]ReSharper: THE must-have tool for every .NET developer: http://bit.ly/s09v\n [/twitter]\n
  86. \n
  87. \n
  88. [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
  89. [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
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. [twitter]XUnit Test Patterns: Excellent book on unit testing. http://bit.ly/9S8Ot4 [/twitter]\n
  96. 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 &amp; 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 &quot;Should&quot;\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
  97. [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&apos;s Play TDD&quot; Series of videos\n http://jamesshore.com/Blog/Lets-Play/\n\n
  98. [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&apos;s Play TDD&quot; Series of videos\n http://jamesshore.com/Blog/Lets-Play/\n\n
  99. [twitter]Uncle Bob&apos;s 3 Rules of TDD: http://bit.ly/bLQqF [/twitter]\nUncle Bob&apos;s Three Rules of TDD\nhttp://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd\n\n
  100. [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
  101. [twitter].NET Testing Frameworks: NUnit: http://nunit.org Machine.Specifications: http://bit.ly/hyBixj [/twitter]\n\n
  102. Test first...defines interface\n
  103. Then write class to usable interface, to make test pass.\n
  104. \n
  105. \n
  106. Arrange can usually be pulled out into a common setup to be used by many tests.\n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. Extract context into its own reusable class (SRP) (Separation of Concerns)\n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. [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&quot; Series of videos\n http://jamesshore.com/Blog/Lets-Play/\n\n
  132. [twitter]Excellent Mocking Resources: http://bit.ly/psZZeo http://bit.ly/Leyh http://bit.ly/r7ewwo http://bit.ly/rkWXBy [/twitter]\n\nMocks Aren&apos;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
  133. [twitter]Rhino Mocks: Excellent tool for mocks in .NET http://bit.ly/qQh6i9 [/twitter]\n
  134. \n
  135. [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&amp;#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
  136. [twitter]IoC Containers: StructureMap (http://bit.ly/eOqhpl), Ninject (http://ninject.org/), Autofac (http://bit.ly/JL7nQ) [/twitter]\nTools\nStructureMap\n http://structuremap.net/structuremap/\nNinject\n http://ninject.org/\nAutofac\n http://code.google.com/p/autofac/\n\n
  137. [twitter]Code Coverage Tools: dotCover http://bit.ly/9zvPnD and NCover http://bit.ly/GapKF [/twitter]\nCode Coverage\nNCover (with TDD.NET)\n http://testdriven.net\nCommercial\n NCover\n Links\n http://www.ncover.com\n dotCover\n http://www.jetbrains.com/dotcover/\n\n
  138. [twitter[TestDriven.NET: Fast test integration with Visual Studio http://bit.ly/vEAEQ [/twitter]\n
  139. \n
  140. [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
  141. [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
  142. [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
  143. [twitter]Continuous Integration Servers: TeamCity (http://bit.ly/25gir), Jenkins (http://bit.ly/fC15Q8) [/twitter]\n
  144. \n
  145. [twitter]Build Monitor: Cradiator is a great tool to visualize pass/fail of your builds. http://bit.ly/raxChw [/twitter]\n
  146. \n
  147. [twitter]The Agile manifesto: http://agilemanifesto.org/ [/twitter]\n
  148. \n
  149. [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
  150. [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
  151. [twitter]Excellent book on agile development: James Shore&apos;s Art of Agile Development http://bit.ly/cA9rXl [/twitter]\n
  152. [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 &quot;works&quot;\nOften, fixin agile is finding or fixing a broken or missing feedback loop\n\n
  153. [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 &quot;works&quot;\nOften, fixin agile is finding or fixing a broken or missing feedback loop\n\n
  154. [twitter]User Stories: http://bit.ly/id6lsV http://bit.ly/2Js80z [twitter]\n
  155. \n
  156. [twitter]The Planning Game: http://bit.ly/rt0u8k http://bit.ly/nsBNux [/twitter]\n
  157. \n
  158. \n
  159. [twitter]Shared Code Ownership: http://bit.ly/qF9mzE [/twitter]\n
  160. [twitter]Pair Programming: Arlo Belshee&apos;s excellent doc: &quot;Promiscuous Pairing&quot; http://bit.ly/pBAb [/twitter]\n
  161. \n
  162. \n
  163. \n
  164. \n
  165. \n
  166. [twitter]Questions to ask in Retrospectives: http://bit.ly/qvBogF [/twitter]\n
  167. \n
  168. \n
  169. \n