SlideShare a Scribd company logo
1 of 204
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Padawan to Jedi
                         A Developer Jump-Start
         A   U   S   T   I   N    -   C   O   D   E   -   C   A   M     P   -   2   0   1   1




                                          Chris Edwards


                                 http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
About Me
      Chris Edwards
      Architect at BancVue
      Ltd.
        Email: ChrisEdwards357@gmail.com
        Blog: http://
       chrisedwards.dreamhosters.com
        Twitter: @ChrisEdwards357
        Github: http://github.com/
       chrisedwards




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
About Me
      Chris Edwards
      Architect at BancVue
      Ltd.
        Email: ChrisEdwards357@gmail.com
        Blog: http://
       chrisedwards.dreamhosters.com
        Twitter: @ChrisEdwards357
        Github: http://github.com/
       chrisedwards

          We are hiring!

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
What makes a great developer?



                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Passion


                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Continuous
                                              Learning

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Read
                                                     Books
                                             Continuous
                                              Learning

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Read
                                                     Books
                                             Continuous
                                              Learning

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Read
                                                     Books
                                             Continuous
                                              Learning
                      ad
                   Re s
                   Blog
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Read
                                                     Books
                                             Continuous
                                              Learning
                      ad
                   Re s
                   Blog
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Follow
           Others

                                                     Read
                                                     Books
                                             Continuous
                                              Learning
                      ad
                   Re s
                   Blog
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Follow
           Others

                                                     Read
                                                     Books
                                             Continuous
                                              Learning
                      ad
                   Re s
                   Blog
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Fiesta
                                                                            ! de Camp
                                                                            Co A
                                                                      ustin
                                                                     Attend
                                                                     A          ustin
                                                                               User
                                                                                      .NET
                                                                                    Grou
           Follow
                                                                                        p
                                                                     Events
           Others

                                                     Read
                                                     Books
                                             Continuous
                                              Learning
                      ad
                   Re s
                   Blog
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Humility



                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Communication Skills

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Basics  Beginning with the basics...




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Basics  Beginning with the basics...




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Basic oo concepts


                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Basic oo concepts
                           (Object Oriented)



                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Encapsulatio




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Encapsulatio




                            Information Hiding
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Polymorphis




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Polymorphis




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Low Coupling / High Cohesion




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Communicating via uML

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Class Diagram




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Sequence Diagram




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Activity Diagram




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Design
                                   The theory and Practice of Design...




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
What makes great software...



                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Functionality (It
                                    works!)


                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Maintainabilit
                                                  y

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Redundanc
                                                       y



                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Scalability




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Performance



                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Usability


                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Design Principles
                          The theory and Practice of Design...




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Keep
                                                                It
                                                                Super
                                                                Simple


                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
You
     A ren’t
      G on na
       N eed
        It


                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Last Responsible
                         Moment
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Avoid Premature
                       Optimization
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Don’t
                              Repeat
                              Yourself




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Separation of
                                        Concerns


                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Composition
                                       over
                                    Inheritance


                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Explicit
                                         over
                                        Implicit

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Fail Fast


                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Law of
              Demeter




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
No Broken Windows




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
The Boy Scout Rule




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
The Solid Principles
        Principles for SOLID code




                                    http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
SRP Responsibility
   The Single
    Principle




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
ocp Open-Closed
    The
          Principle




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
lsp Liskov Substitution
    The
      Principle




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
ispInterface Segregation
    The
     Principle




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
dipDependency Inversion
   The
     Principle




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
SOLID Motivational Posters




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Design Patterns
                    Testing with mocks and stubs.

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
First, a word of

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
gang of four patterns




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Creational Patterns
          Abstract
          Factory                            Structural
        Builder                                   Adapter
        Factory Method                            Bridge
        Prototype                                 Composite
        Singleton                                 Decorator
                                                  Facade
                                                  Flyweight
                                                  Proxy
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Behavioral
           Chain of                                  Memento
           Responsibility                            Observer
           Interpreter                               State
           Iterator                                  Strategy
           Mediator                                  Template Method




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
PoEAA patterns




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
other design patterns

          GRASP
          Martin Fowler’s Pattern




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Domain Driven Design




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Building
          Entity
          Value Object
          Aggregate Root                         Patterns
          Service                                    Ubiquitous Language
          Repository                                 Bounded Context
          Factory                                    Continuous
                                                     Integration
                                                     Many More...

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Pattern Relationship
                              Map




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
refactoring               changing form while preserving function

                      (Changing form while preserving function.)


                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Resources

                                            http://www.refactoring.com




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Code Smells




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
ReSharper




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Persistence                changing form while preserving function




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Persistence Ignorance


                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Repository and
                                Unit of Work Patterns




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Object Relational Mappers



           NHibernate
        Entity Framework
                Etc.



                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
TESTiNG
                                  Testing with mocks and stubs.




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Types of Tests




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Types of Tests

            Unit Tests




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Types of Tests

            Unit Tests

                       Integration Tests




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Types of Tests

            Unit Tests

                       Integration Tests
                                            Functional / UI
                                                Tests
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Agile Testing quadrants




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Agile Testing quadrants




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Test Automation Pyramid




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
unit testing




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Good Unit Tests Are...

               Atomic                                    Easy to Set Up
               Self-Contained                            Fast
               Order-                                    Repeatable
               Independent                               Readable (Clear)
               Meaningful                                Unique



                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Test-Driven Development




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
TDD
        Test-Driven Development




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
uncle bob’s
                             Three Rules of

         1. You can write no production code
            unless it makes a failing test pass.

         2. You can write no more test code than
            is sufficient to fail.

         3. You can write no more production
            code than is necessary to pass the
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Red...Green...Refactor
                                   The Heartbeat of


                   RED Write a failing unit test. See
               Green it fail. the test pass.
                     Make
          Refactor Clean up implementation
                              based on what you have

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
.NET Unit Testing
           •NUnit
           •MSpec (Machine.Specifications)
           •MSTest




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
A Basic Unit Test using
               [TestFixture]
               public class OrderTests
               {
                   [Test]
                   public void TestCalculateSubTotal()
                   {
                         var order = new Order();
                         order.AddLineItem("Star Destroyer", 5000.00);
                         order.AddLineItem("Death Star", 10000.00);

                       double subTotal = order.CalculateSubTotal();

                       Assert.That( subTotal, Is.EqualTo( 15000.00 ) );   }
               }




                                  http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
public class Order
               {
                   public int Id { get; set; }
                   public Customer Customer { get; set; }
                   public DateTime OrderDate { get; set; }
                   public IList< LineItem > LineItems { get; set; }

                   public double CalculateSubTotal()
                   {
                       return LineItems.Select( x => x.Price ).Sum();
                   }

                   public void AddLineItem( string description, double price )
                   {
                       LineItems.Add( new LineItem( 1, description, price ) );
                   }
               }




                                  http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
AAA
          Arrange, Act,
                   Assert




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
[Test]
               public void TestCalculateSubTotal()
               {
                   var order = new Order();
                   order.AddLineItem("Star Destroyer", 5000.00);
                   order.AddLineItem("Death Star", 10000.00);

                   double subTotal = order.CalculateSubTotal();

                   Assert.That( subTotal, Is.EqualTo( 15000.00 ) );
               }




                                 http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
[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 ) );
               }

                                 http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Unit Test with




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Unit Test with
                [ TestFixture ]
                public class OrderTests
                {
                     Order _order;

                    [ SetUp ]
                    public void SetUp()
                    {
                         // Arrange.
                         _order = new Order();
                         _order.AddLineItem( "Star Destroyer", 5000.00 );
                         _order.AddLineItem( "Death Star", 10000.00 );
                    }

                    [ Test ]
                    public void TestCalculateSubtotal()
                    {
                         // Act.
                         double subTotal = _order.CalculateSubTotal();

                         // Assert.
                         Assert.That( subTotal, Is.EqualTo( 15000.00 ) );
                    }
                }



                                  http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
BDD Driven
          Behavior
                 Development




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
[ TestFixture ]
              public class OrderTests
              {
                   Order _order;

                  [ SetUp ]
                  public void SetUp()
                  {
                       // Arrange.
                       _order = new Order();
                       _order.AddLineItem( "Star Destroyer", 5000.00 );
                       _order.AddLineItem( "Death Star", 10000.00 );
                  }

                  [ Test ]
                  public void TestCalculateSubtotal()
                  {
                       // Act.
                       double subTotal = _order.CalculateSubTotal();

                       // Assert.
                       Assert.That( subTotal, Is.EqualTo( 15000.00 ) );
                  }
              }



                                   http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
[ TestFixture ]
        public class When_an_order_has_two_line_items
        {
             Order _order;

            [ SetUp ]
            public void SetUpContext()
            {
                 _order = new Order();
                 _order.AddLineItem( "Star Destroyer", 5000.00 );
                 _order.AddLineItem( "Death Star", 10000.00 );
            }

            [ Test ]
            public void Calculating_the_subtotal_should_return_the_sum_of_the_line_item_prices()
            {
                 Assert.That( _order.CalculateSubTotal(), Is.EqualTo( 15000.00 ) );
            }
        }




                                    http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
[ TestFixture ]
        public class When_an_order_has_two_line_items
        {
             Order _order;

            [ SetUp ]
            public void SetUpContext()
            {
                 _order = new Order();
                 _order.AddLineItem( "Star Destroyer", 5000.00 );
                 _order.AddLineItem( "Death Star", 10000.00 );
            }

            [ Test ]
            public void Calculating_the_subtotal_should_return_the_sum_of_the_line_item_prices()
            {
                 Assert.That( _order.CalculateSubTotal(), Is.EqualTo( 15000.00 ) );
            }
        }




                                    http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
[ TestFixture ]
        public class When_an_order_has_two_line_items
        {
             Order _order;

            [ SetUp ]
            public void SetUpContext()
            {
                 _order = new Order();
                 _order.AddLineItem( "Star Destroyer", 5000.00 );
                 _order.AddLineItem( "Death Star", 10000.00 );
            }

            [ Test ]
            public void Calculating_the_subtotal_should_return_the_sum_of_the_line_item_prices()
            {
                 Assert.That( _order.CalculateSubTotal(), Is.EqualTo( 15000.00 ) );
            }
        }




                                    http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
A BDD-Style Test using
                [ Subject("Order") ]
                public class When_an_order_has_two_line_items
                {
                    static Order _order;
                    static double _subTotal;

                    Establish context = () =>
                             {
                                  _order = new Order();
                                  _order.AddLineItem( "Star Destroyer", 5000.00 );
                                  _order.AddLineItem( "Death Star", 10000.00 );
                             };

                    Because of = () => _subTotal = _order.CalculateSubTotal();

                    It should_calculate_the_subtotal_of_line_items = () => _subTotal.ShouldEqual( 15000.00 );
                }




                                 http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
A BDD-Style Test using
                [ Subject("Order") ]
                public class When_an_order_has_two_line_items
                {
                    static Order _order;
                    static double _subTotal;

                    Establish context = () =>
                             {
                                  _order = new Order();
                                  _order.AddLineItem( "Star Destroyer", 5000.00 );
                                  _order.AddLineItem( "Death Star", 10000.00 );
                             };

                    Because of = () => _subTotal = _order.CalculateSubTotal();

                    It should_calculate_the_subtotal_of_line_items = () => _subTotal.ShouldEqual( 15000.00 );
                }




                                 http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
A BDD-Style Test using
                [ Subject("Order") ]
                public class When_an_order_has_two_line_items
                {
                    static Order _order;
                    static double _subTotal;

                    Establish context = () =>
                             {
                                  _order = new Order();
                                  _order.AddLineItem( "Star Destroyer", 5000.00 );
                                  _order.AddLineItem( "Death Star", 10000.00 );
                             };

                    Because of = () => _subTotal = _order.CalculateSubTotal();

                    It should_calculate_the_subtotal_of_line_items = () => _subTotal.ShouldEqual( 15000.00 );
                }




                                 http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
[ Subject( "Order" ) ]
         public class Given_an_order_with_two_line_items
         {
             protected static Order _order;

             Establish context = () =>
                               {
                                    _order = new Order();
                                    _order.AddLineItem( "Star Destroyer", 5000.00 );
                                    _order.AddLineItem( "Death Star", 10000.00 );
                               };
         }

         public class When_calculating_the_subtotal : Given_an_order_with_two_line_items
         {
             static double _subTotal;

             Because of = () => _subTotal = _order.CalculateSubTotal();
             It should_equal_the_sum_of_the_line_item_prices = () => _subTotal.ShouldEqual( 15000.00 );
         }

         public class When_removing_a_line_item_by_its_description : Given_an_order_with_two_line_items
         {
             Because of = () => _order.RemoveLineItem( "Star Destroyer" );
             It should_remove_the_line_item_from_the_order = () =>
                              _order.LineItems.Any( x => x.Description == "Star Destroyer" ).ShouldBeFalse();
         }


                                    http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
[ Subject( "Order" ) ]
         public class Given_an_order_with_two_line_items
         {
             protected static Order _order;

             Establish context = () =>
                               {
                                    _order = new Order();
                                    _order.AddLineItem( "Star Destroyer", 5000.00 );
                                    _order.AddLineItem( "Death Star", 10000.00 );
                               };
         }

         public class When_calculating_the_subtotal : Given_an_order_with_two_line_items
         {
             static double _subTotal;

             Because of = () => _subTotal = _order.CalculateSubTotal();
             It should_equal_the_sum_of_the_line_item_prices = () => _subTotal.ShouldEqual( 15000.00 );
         }

         public class When_removing_a_line_item_by_its_description : Given_an_order_with_two_line_items
         {
             Because of = () => _order.RemoveLineItem( "Star Destroyer" );
             It should_remove_the_line_item_from_the_order = () =>
                              _order.LineItems.Any( x => x.Description == "Star Destroyer" ).ShouldBeFalse();
         }


                                    http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Tests are documentation
                  Given an order with two line items:

                     When calculating the subtotal
                     It should be the sum of the line
                  item prices.

                    When removing a line item by its
                  description
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Tests are documentation
Context: Given an order with two line items:

Specificati When calculating the subtotal
        on: It should be the sum of the line
         item prices.
Specificati
        on: When removing a line item by its
                  description
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Tests are documentation
                  Given an order with two line items:

                     When calculating the subtotal
                     It should be the sum of the line
                  item prices.

                    When removing a line item by its
                  description
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Tests are documentation
Arrange Given an order with two line items:
       :
            When calculating the subtotal
            It should be the sum of the line
         item prices.
    Act:
 Assert: When removing a line item by its
                  description
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Acceptance Test Driven
                Development (ATDD)
               Specification By Example




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Acceptance Test Driven
                Development (ATDD)
               Specification By Example




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Acceptance Test Driven
                Development (ATDD)
               Specification By Example




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
More Resources for TDD
          Bowling Game Kata
          James Shore “Let’s Play TDD” video
          series.




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Mocking
                             Testing with mocks and stubs.




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Rhino Mocks




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
State-based vs. Interaction-




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
inversion of control




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
inversion of control                                       (IoC)




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Tools (IoC
              Structure Map
              Ninject
              Autofac




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Code


                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Code Coverage Tools




                                                     TestDriven.NET
                                                     dotCover
                                                     (JetBrains)
                                                     NCover
                                                     NCrunch

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Source control




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Standard
           Subversion
           CVS
           Others




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Standard
           Subversion
           CVS
           Others

                 Distributed
                      Git
                      Mercurial

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
continuous
       integration




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
TeamCity




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Build Monitor




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Continuous
                                        Deployment

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Agile
                                          (Embrace Change)
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Agile    embrace change!
                                          (Embrace Change)
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
the Agile manifesto
                   We are uncovering better ways of
                  developing software by doing it and
                         helping others do it.
               Through this work we have come to value:
        Individuals &
                                           over       Processes & Tools
         Interactions                                 Comprehensive
    Working Software                       over
            Customer                                  Documentation
                                           over       Contract Negotiation
        Collaboration
Responding to Change                       over       Following a Plan
                      That is, while there is value in the items
                      on the right, we value the items on the
                                      left more.
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Many Methodologies




               Extreme Programming
               (XP)
               Scrum
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Extreme Programming                                               (xp)
                                        Values:
                                          Communicati
                                          on
                                          Feedback        Practices:
                                          Simplicity  Stand Up Meeting
                                          Courage     Collective Code
                                                      Ownership
                                                      Pair Programming
                                                      Planning Game
                                                      Test-Driven Development
                                                             (TDD)
                                                                Whole Team
                                                                Continuous Integration (CI)
                                                                Merciless Refactoring
                                                                Small Releases
                                                                Coding Standards
                                                                Simple Design
                                                                System Metaphor
                              http://chrisedwards.dreamhosters.com
                                                                Sustainable Pace
Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Scrum                        3 Roles:
                                                      Product Owner
                                                      ScrumMaster
                                                      Team


                                                       4 Ceremonies:
                                                           Sprint Planning
                                                           Daily Scrum
                                                           Sprint Reviews
                                                           Sprint
                                                           Retrospectives
                                                           3 Artifacts:
                                                                Product Backlog
                                                                Sprint Backlog
                                                                Burndown
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Agile Practices             A walk through the process
                                              (A walk through the process)




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Short Iterations &
                                Feedback Loops




                          Frequency promotes
                               Efficiency
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
User Stories




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Backlog




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Planning Game




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Sustainable Pace /
                  Velocity




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Sustainable Pace /
                  Velocity




                        Looking at yesterday’s
                              weather
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Self-Organizing
                            Team




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Collective Code
                  Ownership




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Collective Code
                  Ownership




                                    “Mine Mine”


                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Pair
                                  Programming




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Merciless
                          Refactoring




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Stand Up Meeting




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Information Radiators

       Burndown Chart                                     Task Board




      Build Monitors
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Sprint Demo




                  Demonstration is better than
                         Discussion
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Feedback




                           Firing tracer bullets
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Retrospectives




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Automation




                 Automate everything you can!
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Don’t be discouraged!




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
Don’t be discouraged!




              Everyone has to start somewhere.
                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
About Me
      Chris Edwards
      Architect at BancVue
      Ltd.
        Email: ChrisEdwards357@gmail.com
        Blog: http://
       chrisedwards.dreamhosters.com




                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
About Me
      Chris Edwards
      Architect at BancVue
      Ltd.
        Email: ChrisEdwards357@gmail.com
        Blog: http://
       chrisedwards.dreamhosters.com




          We are hiring!

                              http://chrisedwards.dreamhosters.com

Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources

More Related Content

Recently uploaded

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 

Recently uploaded (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
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
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
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...
 

Padawan to Jedi Developer Jump-Start

  • 1. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 2. Padawan to Jedi A Developer Jump-Start A U S T I N - C O D E - C A M P - 2 0 1 1 Chris Edwards http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 3. About Me Chris Edwards Architect at BancVue Ltd. Email: ChrisEdwards357@gmail.com Blog: http:// chrisedwards.dreamhosters.com Twitter: @ChrisEdwards357 Github: http://github.com/ chrisedwards http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 4. About Me Chris Edwards Architect at BancVue Ltd. Email: ChrisEdwards357@gmail.com Blog: http:// chrisedwards.dreamhosters.com Twitter: @ChrisEdwards357 Github: http://github.com/ chrisedwards We are hiring! http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 5. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 6. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 7. What makes a great developer? http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 8. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 9. Passion http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 10. Continuous Learning http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 11. Read Books Continuous Learning http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 12. Read Books Continuous Learning http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 13. Read Books Continuous Learning ad Re s Blog http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 14. Read Books Continuous Learning ad Re s Blog http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 15. Follow Others Read Books Continuous Learning ad Re s Blog http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 16. Follow Others Read Books Continuous Learning ad Re s Blog http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 17. Fiesta ! de Camp Co A ustin Attend A ustin User .NET Grou Follow p Events Others Read Books Continuous Learning ad Re s Blog http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 18. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 19. Humility http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 20. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 21. Communication Skills http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 22. Basics Beginning with the basics... http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 23. Basics Beginning with the basics... http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 24. Basic oo concepts http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 25. Basic oo concepts (Object Oriented) http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 26. Encapsulatio http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 27. Encapsulatio Information Hiding http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 28. Polymorphis http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 29. Polymorphis http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 30. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 31. Low Coupling / High Cohesion http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 32. Communicating via uML http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 33. Class Diagram http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 34. Sequence Diagram http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 35. Activity Diagram http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 36. Design The theory and Practice of Design... http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 37. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 38. What makes great software... http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 39. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 40. Functionality (It works!) http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 41. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 42. Maintainabilit y http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 43. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 44. Redundanc y http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 45. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 46. Scalability http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 47. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 48. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 49. Performance http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 50. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 51. Usability http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 52. Design Principles The theory and Practice of Design... http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 53. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 54. Keep It Super Simple http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 55. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 56. You A ren’t G on na N eed It http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 57. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 58. Last Responsible Moment http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 59. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 60. Avoid Premature Optimization http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 61. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 62. Don’t Repeat Yourself http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 63. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 64. Separation of Concerns http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 65. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 66. Composition over Inheritance http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 67. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 68. Explicit over Implicit http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 69. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 70. Fail Fast http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 71. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 72. Law of Demeter http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 73. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 74. No Broken Windows http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 75. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 76. The Boy Scout Rule http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 77. The Solid Principles Principles for SOLID code http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 78. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 79. SRP Responsibility The Single Principle http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 80. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 81. ocp Open-Closed The Principle http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 82. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 83. lsp Liskov Substitution The Principle http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 84. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 85. ispInterface Segregation The Principle http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 86. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 87. dipDependency Inversion The Principle http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 88. SOLID Motivational Posters http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 89. Design Patterns Testing with mocks and stubs. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 90. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 91. First, a word of http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 92. gang of four patterns http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 93. Creational Patterns Abstract Factory Structural Builder Adapter Factory Method Bridge Prototype Composite Singleton Decorator Facade Flyweight Proxy http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 94. Behavioral Chain of Memento Responsibility Observer Interpreter State Iterator Strategy Mediator Template Method http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 95. PoEAA patterns http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 96. other design patterns GRASP Martin Fowler’s Pattern http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 97. Domain Driven Design http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 98. Building Entity Value Object Aggregate Root Patterns Service Ubiquitous Language Repository Bounded Context Factory Continuous Integration Many More... http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 99. Pattern Relationship Map http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 100. refactoring changing form while preserving function (Changing form while preserving function.) http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 101. Resources http://www.refactoring.com http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 102. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 103. Code Smells http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 104. ReSharper http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 105. Persistence changing form while preserving function http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 106. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 107. Persistence Ignorance http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 108. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 109. Repository and Unit of Work Patterns http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 110. Object Relational Mappers NHibernate Entity Framework Etc. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 111. TESTiNG Testing with mocks and stubs. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 112. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 113. Types of Tests http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 114. Types of Tests Unit Tests http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 115. Types of Tests Unit Tests Integration Tests http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 116. Types of Tests Unit Tests Integration Tests Functional / UI Tests http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 117. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 118. Agile Testing quadrants http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 119. Agile Testing quadrants http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 120. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 121. Test Automation Pyramid http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 122. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 123. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 124. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 125. unit testing http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 126. Good Unit Tests Are... Atomic Easy to Set Up Self-Contained Fast Order- Repeatable Independent Readable (Clear) Meaningful Unique http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 127. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 128. Test-Driven Development http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 129. TDD Test-Driven Development http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 130. uncle bob’s Three Rules of 1. You can write no production code unless it makes a failing test pass. 2. You can write no more test code than is sufficient to fail. 3. You can write no more production code than is necessary to pass the http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 131. Red...Green...Refactor The Heartbeat of RED Write a failing unit test. See Green it fail. the test pass. Make Refactor Clean up implementation based on what you have http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 132. .NET Unit Testing •NUnit •MSpec (Machine.Specifications) •MSTest http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 133. A Basic Unit Test using [TestFixture] public class OrderTests { [Test] public void TestCalculateSubTotal() { var order = new Order(); order.AddLineItem("Star Destroyer", 5000.00); order.AddLineItem("Death Star", 10000.00); double subTotal = order.CalculateSubTotal(); Assert.That( subTotal, Is.EqualTo( 15000.00 ) ); } } http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 134. public class Order { public int Id { get; set; } public Customer Customer { get; set; } public DateTime OrderDate { get; set; } public IList< LineItem > LineItems { get; set; } public double CalculateSubTotal() { return LineItems.Select( x => x.Price ).Sum(); } public void AddLineItem( string description, double price ) { LineItems.Add( new LineItem( 1, description, price ) ); } } http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 135. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 136. AAA Arrange, Act, Assert http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 137. [Test] public void TestCalculateSubTotal() { var order = new Order(); order.AddLineItem("Star Destroyer", 5000.00); order.AddLineItem("Death Star", 10000.00); double subTotal = order.CalculateSubTotal(); Assert.That( subTotal, Is.EqualTo( 15000.00 ) ); } http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 138. [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 ) ); } http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 139. Unit Test with http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 140. Unit Test with [ TestFixture ] public class OrderTests { Order _order; [ SetUp ] public void SetUp() { // Arrange. _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); } [ Test ] public void TestCalculateSubtotal() { // Act. double subTotal = _order.CalculateSubTotal(); // Assert. Assert.That( subTotal, Is.EqualTo( 15000.00 ) ); } } http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 141. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 142. BDD Driven Behavior Development http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 143. [ TestFixture ] public class OrderTests { Order _order; [ SetUp ] public void SetUp() { // Arrange. _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); } [ Test ] public void TestCalculateSubtotal() { // Act. double subTotal = _order.CalculateSubTotal(); // Assert. Assert.That( subTotal, Is.EqualTo( 15000.00 ) ); } } http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 144. [ TestFixture ] public class When_an_order_has_two_line_items { Order _order; [ SetUp ] public void SetUpContext() { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); } [ Test ] public void Calculating_the_subtotal_should_return_the_sum_of_the_line_item_prices() { Assert.That( _order.CalculateSubTotal(), Is.EqualTo( 15000.00 ) ); } } http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 145. [ TestFixture ] public class When_an_order_has_two_line_items { Order _order; [ SetUp ] public void SetUpContext() { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); } [ Test ] public void Calculating_the_subtotal_should_return_the_sum_of_the_line_item_prices() { Assert.That( _order.CalculateSubTotal(), Is.EqualTo( 15000.00 ) ); } } http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 146. [ TestFixture ] public class When_an_order_has_two_line_items { Order _order; [ SetUp ] public void SetUpContext() { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); } [ Test ] public void Calculating_the_subtotal_should_return_the_sum_of_the_line_item_prices() { Assert.That( _order.CalculateSubTotal(), Is.EqualTo( 15000.00 ) ); } } http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 147. A BDD-Style Test using [ Subject("Order") ] public class When_an_order_has_two_line_items { static Order _order; static double _subTotal; Establish context = () => { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); }; Because of = () => _subTotal = _order.CalculateSubTotal(); It should_calculate_the_subtotal_of_line_items = () => _subTotal.ShouldEqual( 15000.00 ); } http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 148. A BDD-Style Test using [ Subject("Order") ] public class When_an_order_has_two_line_items { static Order _order; static double _subTotal; Establish context = () => { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); }; Because of = () => _subTotal = _order.CalculateSubTotal(); It should_calculate_the_subtotal_of_line_items = () => _subTotal.ShouldEqual( 15000.00 ); } http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 149. A BDD-Style Test using [ Subject("Order") ] public class When_an_order_has_two_line_items { static Order _order; static double _subTotal; Establish context = () => { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); }; Because of = () => _subTotal = _order.CalculateSubTotal(); It should_calculate_the_subtotal_of_line_items = () => _subTotal.ShouldEqual( 15000.00 ); } http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 150. [ Subject( "Order" ) ] public class Given_an_order_with_two_line_items { protected static Order _order; Establish context = () => { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); }; } public class When_calculating_the_subtotal : Given_an_order_with_two_line_items { static double _subTotal; Because of = () => _subTotal = _order.CalculateSubTotal(); It should_equal_the_sum_of_the_line_item_prices = () => _subTotal.ShouldEqual( 15000.00 ); } public class When_removing_a_line_item_by_its_description : Given_an_order_with_two_line_items { Because of = () => _order.RemoveLineItem( "Star Destroyer" ); It should_remove_the_line_item_from_the_order = () => _order.LineItems.Any( x => x.Description == "Star Destroyer" ).ShouldBeFalse(); } http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 151. [ Subject( "Order" ) ] public class Given_an_order_with_two_line_items { protected static Order _order; Establish context = () => { _order = new Order(); _order.AddLineItem( "Star Destroyer", 5000.00 ); _order.AddLineItem( "Death Star", 10000.00 ); }; } public class When_calculating_the_subtotal : Given_an_order_with_two_line_items { static double _subTotal; Because of = () => _subTotal = _order.CalculateSubTotal(); It should_equal_the_sum_of_the_line_item_prices = () => _subTotal.ShouldEqual( 15000.00 ); } public class When_removing_a_line_item_by_its_description : Given_an_order_with_two_line_items { Because of = () => _order.RemoveLineItem( "Star Destroyer" ); It should_remove_the_line_item_from_the_order = () => _order.LineItems.Any( x => x.Description == "Star Destroyer" ).ShouldBeFalse(); } http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 152. Tests are documentation Given an order with two line items: When calculating the subtotal It should be the sum of the line item prices. When removing a line item by its description http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 153. Tests are documentation Context: Given an order with two line items: Specificati When calculating the subtotal on: It should be the sum of the line item prices. Specificati on: When removing a line item by its description http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 154. Tests are documentation Given an order with two line items: When calculating the subtotal It should be the sum of the line item prices. When removing a line item by its description http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 155. Tests are documentation Arrange Given an order with two line items: : When calculating the subtotal It should be the sum of the line item prices. Act: Assert: When removing a line item by its description http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 156. Acceptance Test Driven Development (ATDD) Specification By Example http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 157. Acceptance Test Driven Development (ATDD) Specification By Example http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 158. Acceptance Test Driven Development (ATDD) Specification By Example http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 159. More Resources for TDD Bowling Game Kata James Shore “Let’s Play TDD” video series. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 160. Mocking Testing with mocks and stubs. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 161. Rhino Mocks http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 162. State-based vs. Interaction- http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 163. inversion of control http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 164. inversion of control (IoC) http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 165. Tools (IoC Structure Map Ninject Autofac http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 166. Code http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 167. Code Coverage Tools TestDriven.NET dotCover (JetBrains) NCover NCrunch http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 168. Source control http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 169. Standard Subversion CVS Others http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 170. Standard Subversion CVS Others Distributed Git Mercurial http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 171. continuous integration http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 172. TeamCity http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 173. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 174. Build Monitor http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 175. Continuous Deployment http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 176. Agile (Embrace Change) http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 177. Agile embrace change! (Embrace Change) http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 178. the Agile manifesto We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value: Individuals & over Processes & Tools Interactions Comprehensive Working Software over Customer Documentation over Contract Negotiation Collaboration Responding to Change over Following a Plan That is, while there is value in the items on the right, we value the items on the left more. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 179. Many Methodologies Extreme Programming (XP) Scrum http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 180. Extreme Programming (xp) Values: Communicati on Feedback Practices: Simplicity Stand Up Meeting Courage Collective Code Ownership Pair Programming Planning Game Test-Driven Development (TDD) Whole Team Continuous Integration (CI) Merciless Refactoring Small Releases Coding Standards Simple Design System Metaphor http://chrisedwards.dreamhosters.com Sustainable Pace Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 181. Scrum 3 Roles: Product Owner ScrumMaster Team 4 Ceremonies: Sprint Planning Daily Scrum Sprint Reviews Sprint Retrospectives 3 Artifacts: Product Backlog Sprint Backlog Burndown http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 182. Agile Practices A walk through the process (A walk through the process) http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 183. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 184. Short Iterations & Feedback Loops Frequency promotes Efficiency http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 185. User Stories http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 186. Backlog http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 187. Planning Game http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 188. Sustainable Pace / Velocity http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 189. Sustainable Pace / Velocity Looking at yesterday’s weather http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 190. Self-Organizing Team http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 191. Collective Code Ownership http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 192. Collective Code Ownership “Mine Mine” http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 193. Pair Programming http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 194. Merciless Refactoring http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 195. Stand Up Meeting http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 196. Information Radiators Burndown Chart Task Board Build Monitors http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 197. Sprint Demo Demonstration is better than Discussion http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 198. Feedback Firing tracer bullets http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 199. Retrospectives http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 200. Automation Automate everything you can! http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 201. Don’t be discouraged! http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 202. Don’t be discouraged! Everyone has to start somewhere. http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 203. About Me Chris Edwards Architect at BancVue Ltd. Email: ChrisEdwards357@gmail.com Blog: http:// chrisedwards.dreamhosters.com http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources
  • 204. About Me Chris Edwards Architect at BancVue Ltd. Email: ChrisEdwards357@gmail.com Blog: http:// chrisedwards.dreamhosters.com We are hiring! http://chrisedwards.dreamhosters.com Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream of resources

Editor's Notes

  1. [twitter]Starting my presentation &quot;Padawan to Jedi&quot;. Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
  2. [twitter]Starting my presentation &quot;Padawan to Jedi&quot;. Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
  3. [twitter]Starting my presentation &quot;Padawan to Jedi&quot;. Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
  4. [twitter]Starting my presentation &quot;Padawan to Jedi&quot;. Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
  5. [twitter]Starting my presentation &quot;Padawan to Jedi&quot;. Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
  6. [twitter]Starting my presentation &quot;Padawan to Jedi&quot;. Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\n
  7. [twitter]Starting my presentation &quot;Padawan to Jedi&quot;. Follow @ChrisEdwards357 or #Padawan2Jedi for tweet stream. #AustinCodeCamp[/twitter]\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. Notification Service Example (Email)\nEncapsulation\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. Notification Service Example\nInheritance\nExtend/Override\nInterface\nDeferred implementation\nPolymorphism\nReplace an object of a class with an object of its subclasses\nAbstraction\n Code against an interface, not implementation\n Depend on abstractions, not concretions\n\n
  26. Notification Service Example\nInheritance\nExtend/Override\nInterface\nDeferred implementation\nPolymorphism\nReplace an object of a class with an object of its subclasses\nAbstraction\n Code against an interface, not implementation\n Depend on abstractions, not concretions\n\n
  27. Notification Service Example\nInheritance\nExtend/Override\nInterface\nDeferred implementation\nPolymorphism\nReplace an object of a class with an object of its subclasses\nAbstraction\n Code against an interface, not implementation\n Depend on abstractions, not concretions\n\n
  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]The Agile Testing Quadrants define the different kinds of automated tests and when to use them: http://bit.ly/uLXR7h[/twitter]\n
  96. [twitter]The Agile Testing Quadrants define the different kinds of automated tests and when to use them: http://bit.ly/uLXR7h[/twitter]\n
  97. [twitter]The Test Automation Pyramid helps show what type of tests to invest your time in: http://bit.ly/KnDndM [/twitter]\n
  98. [twitter]The Test Automation Pyramid helps show what type of tests to invest your time in: http://bit.ly/KnDndM [/twitter]\n
  99. [twitter]The Test Automation Pyramid helps show what type of tests to invest your time in: http://bit.ly/KnDndM [/twitter]\n
  100. [twitter]Agile Testing by Lisa Crispin and Janet Gregory, a must read book for agile developers: http://amzn.to/KnE72I [/twitter]\n
  101. [twitter]XUnit Test Patterns: Excellent book on unit testing. http://bit.ly/9S8Ot4 [/twitter]\n
  102. 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
  103. [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
  104. [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
  105. [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
  106. [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
  107. [twitter].NET Testing Frameworks: NUnit: http://nunit.org Machine.Specifications: http://bit.ly/hyBixj [/twitter]\n\n
  108. Test first...defines interface\n
  109. Then write class to usable interface, to make test pass.\n
  110. \n
  111. \n
  112. Arrange can usually be pulled out into a common setup to be used by many tests.\n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. Extract context into its own reusable class (SRP) (Separation of Concerns)\n
  122. [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  123. [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  124. [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  125. [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  126. [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  127. [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  128. [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  129. [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  130. [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  131. [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  132. [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  133. [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  134. [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  135. [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  136. [twitter]SpecFlow, a Given-Then-When testing framework for .NET (cucumber for .NET) http://bit.ly/2QgFZ9 [/twitter]\n
  137. [twitter]Two great books on BDD/ATDD testing: The Cucumber Book http://bit.ly/niLRws Specification By Example: http://bit.ly/amqXZG [/twitter]\n
  138. [twitter]Two great books on BDD/ATDD testing: The Cucumber Book http://bit.ly/niLRws Specification By Example: http://bit.ly/amqXZG [/twitter]\n
  139. [twitter]Two great books on BDD/ATDD testing: The Cucumber Book http://bit.ly/niLRws Specification By Example: http://bit.ly/amqXZG [/twitter]\n
  140. [twitter]Two great books on BDD/ATDD testing: The Cucumber Book http://bit.ly/niLRws Specification By Example: http://bit.ly/amqXZG [/twitter]\n
  141. [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
  142. [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
  143. [twitter]Rhino Mocks: Excellent tool for mocks in .NET http://bit.ly/qQh6i9 [/twitter]\n
  144. \n
  145. [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
  146. [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
  147. [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
  148. [twitter]TestDriven.NET: Fast test integration with Visual Studio http://bit.ly/vEAEQ [/twitter]\n
  149. [twitter]NCrunch: Continuous testing in Visual Studio. The coolest tool I use (next to ReSharper) http://bit.ly/jUlUz6 [/twitter]\n
  150. [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
  151. [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
  152. [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
  153. [twitter]Continuous Integration Servers: TeamCity (http://bit.ly/25gir), Jenkins (http://bit.ly/fC15Q8) [/twitter]\n
  154. \n
  155. [twitter]Build Monitor: Cradiator is a great tool to visualize pass/fail of your builds. http://bit.ly/raxChw [/twitter]\n
  156. \n
  157. \n
  158. [twitter]The Agile manifesto: http://agilemanifesto.org/ [/twitter]\n
  159. \n
  160. [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
  161. [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
  162. [twitter]Excellent book on agile development: James Shore&apos;s Art of Agile Development http://bit.ly/cA9rXl [/twitter]\n
  163. [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
  164. [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
  165. [twitter]User Stories: http://bit.ly/id6lsV http://bit.ly/2Js80z [twitter]\n
  166. \n
  167. [twitter]The Planning Game: http://bit.ly/rt0u8k http://bit.ly/nsBNux [/twitter]\n
  168. \n
  169. \n
  170. [twitter]Shared Code Ownership: http://bit.ly/qF9mzE [/twitter]\n
  171. [twitter]Pair Programming: Arlo Belshee&apos;s excellent doc: &quot;Promiscuous Pairing&quot; http://bit.ly/pBAb [/twitter]\n
  172. \n
  173. \n
  174. \n
  175. \n
  176. \n
  177. [twitter]Questions to ask in Retrospectives: http://bit.ly/qvBogF [/twitter]\n
  178. \n
  179. \n
  180. \n
  181. \n