About Me

Training

Nothin But .Net Developer Bootcamp

Navigation

Search

Categories

On this page

Just For Clarification re The Latest DotNetRocks Episode
Got A Spotter?
Austin - Nothin But .Net - 6 Spots Left
I see dead projects!!
Nothin But .Net - Austin, TX (April 7th - 11th)
Nothin But Agile Project Management - March 3rd-6th (Calgary,AB)
Getting started with BDD style Context/Specification base naming
Updated BDD Naming Macro
Setting The Record Straight - My Thoughts On The MVP Variants (for web applications)
code.google.com/p/jpboodhoo!!!
Stop Reading - Start Doing
Huge Code Drop Coming!!!!!!!
TDD is like snowboarding (or learning any new skill)
Directory Structure For Projects
Design vs. Coding - How Much Is Too Much?
Nothin But * Courses Coming Your Way
Nothin But .Net - New York , NY ( October 22nd - 26th, 2007 )
Nothin But .Net - London, England (September 10th - 14th)
Becoming Extreme - From the inside out
TDD is like paying using cash!!
And here's a number you can take to the bank!!
How can I convince my management/other developers of the value of unit testing?
DevTeach, what a fantastic event!!
TDD Anti-Patterns
From CodeGen To TDD
VSTS Unit Testing With ReSharper
Getting Started Learning Some New Developer Habits
Clean up your (NAnt) build files by taking advantage of fileset references
Applied Test Driven Development For Web Applications Part 1 Video - Reposted
My Thoughts On Sustainability
Applied Test Driven Development For Web Applications - Feature Request
Behaviour Driven Development
On growth,humility, and students and mentors of Test Driven Development
Sample CC.Net Configuration Section
Automating Your Builds With NAnt - Part 8 Videos
Automating Your Builds With NAnt - Part 8 (Enter CruiseControl)
Automating Your Builds With NAnt - Part 8 (Screenblog) tomorrow
Applied Test Driven Development For Web Applications - Part 1
One Of The Reasons TDD Can Be A Hard Sell
NAnt Starter Series
Running all of the sql files in a directory
Something to Ponder

Archive

Blogroll

 Agile Developer Venkat's Blog
 Ayende @ Blog
 B#
 Barry Gervin's Software Architecture Perspectives
 Boy Meets World
 Brad Abrams
 Canadian Developers
 Christopher Steen
 Claritude Software News
 Clemens Vasters: Enterprise Development and Alien Abductions
 Coding Horror
 Coding in an Igloo
 Dare Obasanjo aka Carnage4Life
 Darrell Norton's Blog [MVP]
 David Hayden [MVP C#]
 Don Box's Spoutlet
 Eric Gunnerson's C# Compendium
 EZWeb guy: Jeffrey Palermo [C# MVP]
 Fear and Loathing
 Generalities & Details: Adventures in the High-tech Underbelly
 Greg Young [MVP]
 Greg's Cool [Insert Clever Name] of the Day
 IanG on Tap
 Ingo Rammer's Weblog
 ISerializable - Roy Osherove's Blog
 James Kovacs' Weblog
 Jason Haley
 Jean-Luc David
 Jeremy D. Miller -- The Shade Tree Developer
 JetBrains .NET Tools Blog
 Jimmy Nilsson's weblog
 John Bristowe's Weblog
 John Papa [MVP C#]
 Jon Skeet's Coding Blog
 JonGalloway.ToString()
 Jump the Fence or Walk Around
 Lambda the Ultimate - Programming Languages Weblog
 Larkware News
 Lutz Roeder
 Marquee de Sells: Chris's insight outlet
 Martin Fowler's Bliki
 Mike Nichols - SonOfNun Technology
 MSDN Magazine - .NET Matters
 MSDN Magazine - All Articles
 OdeToCode Blogs
 Onion Blog
 Planet TW
 Raymond Lewallen [MVP]
 Rockford Lhotka
 RodMan's Corner
 Roger Johansson's blog
 Sahil Malik - blah.winsmarts.com
 Sam Gentile's Blog
 Scott Bellware [MVP]
 Scott Hanselman's Computer Zen
 ScottGu's Blog
 secretGeek
 Service Station, by Aaron Skonnard
 Signum sine tinnitu--by Guy Kawasaki
 Stephen Toub
 Steve Eichert's Blog
 Steven Rockarts
 The Blog Ride
 The Coding Hillbilly
 The Daily WTF
 TheServerSide.net: News
 Tim Gifford
 Vance Morrison's Weblog
 you've been HAACKED

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

RSS 2.0 | Atom 1.0 | CDF

Send mail to the author(s) E-mail

Total Posts: 397
This Year: 122
This Month: 0
This Week: 0
Comments: 1033

 Sunday, May 11, 2008
Sunday, May 11, 2008 2:36:37 AM (Mountain Standard Time, UTC-07:00) ( Agile )

First and foremost I have to stress my great amount of respect for Carl and what he does for the development community.

In the current DNR episode in which Carl and Richard interview Phil Haack there is a portion in the show where Carl makes some statements about Test Driven Development.

The two statements that  he makes are:

"Test first is just one extreme of test driven development"

"according to JP Boodhoo the whole test driven development ranges from wrapping NUnit tests around existing functions on one end of the spectrum and then test first on the other end of the spectrum but most people fall somewhere in between"

These are not my thoughts/practices with regards to Test Driven Development. I feel that test driven development is first and foremost a design activity that is used to flesh out the design of a component by creating a test that first describes the API it is going to expose and how you are going to consume it's functionality. The test will help shape and mold the System Under Test until you have been able to encapsulate enough functionality to satisfy whatever tasks you happen to be working on.

IMHO TDD as an activity requires the creation of the test code before you write any production code for the component itself. This is the way I personally develop as well as the way I teach and mentor people with respect to practicing TDD.

When you go into an existing code base and start wrapping tests around existing production code that is already there, that is Unit Testing, not TDD.

Develop With Passion!!

Comments [4] | | # 
 Friday, May 02, 2008
Friday, May 02, 2008 2:01:15 PM (Mountain Standard Time, UTC-07:00) ( Agile | Programming )

I was in the gym this morning (at one point I will write a whole post on a good exercise routine for those of you who are curious) and I was just about to finish the bench press. As I place the bar back up on the rack I realized that I probably had a little more in me, but I lacked the aid of a spotter who could provide me with a bit of incentive/support in the event that I would not be able to get another rep out.

This got me thinking about the term spotting. Here are a couple of quotes about spotting taking from the wikipedia definition:

"Spotting, in weight or resistance training, is the act of supporting another person during a particular exercise, with an emphasis on allowing the participant to lift or push more than he could normally do safely."


Correct spotting involves knowing when to assist with a lift and encouraging a training partner to push beyond the point in which they would normally 'rack' (return the weight to its stationary position) the weight....."


This actually got me thinking about the pair programming process and the concept of being a spotter in the software development realm. When two people are actively pairing on a problem there is usually only 1 person who is typing while the other person is observing and conversing with the person doing the driver. The person not typing is not there in a passive or static role. They are


"actively supporting another person during the programming exercise"


They will be:

  • Catching potential design flaws the person driving may be missing
  • Providing ideas to a "driver" who may be stuck without an idea of how to go forward
  • Positively criticizing code choices that will result in a maintenance issue a couple of minutes from now (compounded if you add 6 months on top of that). Things such as cryptic variable names, class names that do not fit with the domain or problem space being tackled, long methods...
  • Taking the weight (keyboard) from the person entirely if they are completely unable to move forward

I think the last sentence in the wikipedia description is interesting:

"As a general rule to prevent injury and ensure safety spotters should have the strength to be able to control the weight should their training partner's strength completely fail. This is known as a "bail out"."

When two programmers who are at a similar skill level get together to pair program a design problem, it provides a lot of stimulation, challenge, and idea bouncing that may not have happened had there been significant gaps in the skill level between the 2 developers. It also provides the added benefit of the "bail out" when the person driving the problem out in code gets stuck and they fail to keep moving forward, they can pass of the reigns to their pair while they regain their mental composure to tackle the problem once more.

Most of us know that it is a bad idea to attempt a heavy bench press without the aid of someone to spot us. In the same way, when you are facing down a particularly difficult challenge would you not prefer to have a spotter to aid you through the process?

Develop With Passion!!

Comments [1] | | # 
 Wednesday, March 05, 2008
Wednesday, March 05, 2008 6:49:38 PM (Mountain Standard Time, UTC-07:00) ( Agile | C# | Training )

This is just a message to those people who are interested in attending next months Nothin But .Net session in Austin, TX. There are only 6 spots left. Tell your friends, tell your co-workers. This session promises to be an absolute blast. The attendance roster is varied and will provide for lots of interesting conversation and pair programming opportunities.

You can register for the course here:

http://www.acteva.com/booking.cfm?bevaID=150826

Develop With Passion!!

Comments [1] | | # 
 Tuesday, January 29, 2008
Tuesday, January 29, 2008 5:49:52 PM (Mountain Standard Time, UTC-07:00) ( Agile )

Just finished reading an excellent blogpost by Jonathan Rasmusson. I think we can all identify with a lot of the information in this post!!

This is a good post that you can forward to your PM if you think they have a false sense of security about what is going on in their project!!

Comments [0] | | # 
Tuesday, January 29, 2008 5:40:24 PM (Mountain Standard Time, UTC-07:00) ( Agile | C# | Training )

After lots of requests, Nothin But .Net is finally coming to Austin,Texas!! I am sure that seats are going to sell out fast, so hurry and register here if you want a spot in what will surely be an amazing week of crazy coding!!

Overview

Nothin But .Net is a five day (intense) boot camp style course that will focus on applying .Net development best practices in the context of developing a working N-Tiered application. Registrants will learn about how to practically apply.Net as they apply it to the task of building a complete application from the UI layer all the way down to the mapping layer.

 

WARNING!!!!

If you are expecting to come to this course to learn about how to have VS.Net automatically generate an “application” for you, then this course is NOT for you.

This course is all about taking control of the .Net framework and having it work the way you want. This course will place a heavy emphasis on getting back to the basics and making .Net do things the way you want it to, in a predictable and testable way.

During the course of the week, there will be absolutely no code that gets compiled from within Visual Studio. Studio itself will be relegated to a glorified code editor. I will teach you development techniques and tools that will dramatically increase your day to day productivity as a software developer.

This course will focus on a code centric view of application development vs. the typical databinding/designer magic covered by many typical .Net courses. You will walk away with a deep understanding of fundamental aspects of .Net and how these pieces can be used to develop and deliver enterprise scale applications.

Core Concepts Overview

*        Expand the capabilities of developing with VS.Net - Enter ReSharper (a productivity add-in for Visual Studio .Net)

*        There’s more to development than code generators

*        Automated Builds       

*        Generics ( they’re not just for collections )

*        Object Relational Mapping in .Net

*        Creating layered architectures

*        Driving out functionality and design through testing

*        Taking Control Of Databinding

*        Test Driven Development & Mock Objects

*        Core Design Patterns Applied

 

Detailed Topic Coverage Breakdown

·          Language Enhancements

o    Generics

o    Anonymous Delegates

o    Iterators

o    Linq

·          Collections

o    Taking advantage of the collection interfaces

o    Making use of the IDictionary<T> and IList<T> interfaces.

o    Overcoming the limitations of the IList<T> interface

o    Sorting, searching, and manipulating collections using generic delegates

o    Overcoming limitations of searching with generic delegates

o    Creating custom comparers

·          Events

o    Delegates in depth

o    Creating classes that expose events

o    Safely publishing events

o    Multithreading with delegates

·          ADO .Net

o    Creating a Custom Object Relational mapping layer

o    Effective uses of TransactionScope to test the mapping layer

o    Eliminating the need for stored procedures

o    Effective techniques for querying data

·          ASP.Net

o    Master Pages

o    Passing Data Between Pages

o    Taking Control Of Databinding

o    Validation Techniques

o    Leveraging Front Controller Architecture styles for cleaner separation of concerns.

o    Saying goodbye to WebForms

o    MVC vs MVP vs SC

·          OO Practices & Principles

o    Dependency Inversion

o    Single Responsibility

o    Open Closed

o    Hollywood

o    Tell Don’t Ask

o    Encapsulation

o    Polymorphism

·          Patterns

o    Layered Architecture

o    Data Transfer Object

o    Supervising Controller

o    Passive View

o    Notification

o    Static Gateway

o    Unit Of Work

o    Mapper

o    Gateway

o    Domain Model

o    Null Object

o    Proxy

o    Adapter

o    Abstract Factory

o    Event Aggreagor

o    Service Layer

o    Façade

o    Visitor

o    Decorator

o    Composite

o    Front Controller

o    Notification

·          Testing

o    Using Automated Testing Frameworks

o    Dependency Based/Interaction Based

o    TDD as a design tool

o    Applied Test Driven Development

o    Avoiding over specification problems with Interaction Based Testing

o    Test Partitioning

o    Different types of testing (Integration,Acceptance,Unit)


Recommended Prerequisites

This is an intermediate to expert level course. In order to walk away with the most benefit from the course the following list outlines key prerequisites and the level of knowledge that people would be best served entering the course with:

 

*        Knowledge of the C# syntax (Strong)

*        Knowledge of the .Net event/delegate architecture (Moderate/Strong)

*        OO programming concepts (Moderate/Strong)

*        Domain Driven Design (Cursory)

*        Refactoring (Cursory)

*        Design Patterns (Cursory)

*        Automated Testing Frameworks (Cursory/Moderate)

*        Test Driven Development (Cursory)

*        Utilizing Events and Delegates in .Net (Moderate/Strong)

*        Manipulation of core ADO.Net objects (Moderate/Strong)

*        Build Automation (Cursory)

 

**********Please be aware that the length of course days (based on prior iterations of the course) can fluctuate dramatically based on the level of student interaction. It is best to come ready expecting the course days to be no less than 10 hours.************

 

Intended Outcomes

Upon completion of this course students should be equipped with a practical, applied understanding of the following concepts:

 

*        Interface Based Programming

*        Design By Contract

*        Test Driven Development

*        Layered architecture

*        Object Oriented Programming

*        Design Patterns

*        Unit Testing

*        Interaction vs. State Based Testing

*        Dependency Injection