About a month ago Jean-Paul Boodhoo announced a contest that he was sponsoring.  The contest idea centered around the idea of developing passion in others around you.  I have an immense amount of respect for JP having met him at ALT.NET Seattle.  When the contest was announced I thought I'd put in an entry as I enjoy the journey passion for my craft has taken me on with others.  Here is my entry in its entirety:

While I'm not quite sure that my entry will be legal - a bit on that in a second - I would still like to share my story.  As for the legality of my entry, the rules clearly state "Must be working full time as a software professional (not a student)" (emphasis mine).  While I am a full time software professional, I must say that I am, unequivocally, a student.  We all are, whether we realize it or not.  The one truth I keep encountering in my maturation as a developer is a bit of a paradox: the more I learn, the more I realize I don't know.  Therefore I approach software development as a student and view my coworkers as students as well.


When I started at my last place of employment I was humbled early and often by my lack of knowledge in areas I thought I knew well.  Rather than being deterred, it sparked a fire in me, and since then I've never turned back.  Being humble and realizing, for lack of better words, how stupid I was, was quite possibly the best thing for my maturation as a software professional.  That spark has matured into a passion that I can best describe as the feeling of a child on Christmas morning, eagerly shaking his sleeping brothers and sisters telling them that Santa has come.  It's the type of knowledge where you share it not to show how much smarter or better you are, but because you are, at your core, excited at the chance to share it with someone else.


Among things like reading blogs, starting a blog of my own, listening to podcasts, I started to teach more. There are a great many people who believe that the best way to learn is to teach others.  I fall squarely in that camp.  I began by timidly teaching a few of the weekly developer trainings that the company offered.  Soon, I was teaching quite regularly and in 2007, I taught more than anyone else in the company.  I focused many of my talks on areas where I struggled and on things I wanted to learn, realizing that if I struggled learning a concept/language/framework, others probably did as well.  In one training session I created an elaborate hands-on demonstration of how events and delegates work.  Participants were given a card stating what they should do when a specific event occurred.  It started innocently with me turning off the light switch and, at it's height, had people walking all over the room, some making marks on the white board, others moving objects around the room, and still others doing various assigned tasks.  I was told later by someone that, "...it was the best training of events and delegates they ever had seen."  That comment was special to me. 


Why do I think I deserve to win this contest?  Honestly, I don't know that I do.  I'm not an "alpha" type, I haven't produced tons of tutorials or webcasts to help the community, and most of you probably have never heard of me.  However, I believe that if you ask current and former coworkers, they would say that I seek to help and mentor others as well as offer myself up to be mentored.  To me, more than having a large internet following, I desire to impact those around me.  Below are two recent such examples.  The first is an email I received a bit after I left my last place of employment:

Hey Tim,

How are you and howz your new work? Hope you have settled down.

Here same as usual , I got to take your big desk J yeeeeee . Josh A is sitting at your place with my small desk.

Hey listen thanks for introducing Rhino mock , I am getting better at it and I like it ….

Usharani Kachegere

The second example is is from a younger developer, Toran Billups, who emailed me one day out of the blue when he saw that I updated my alumni page on our college website.  Toran emailed me innocently one day asking about my work experience.  We started chatting more and more and I provided whatever guidance I could to him.  I have enjoyed my time mentoring Toran, as it's been a bit more focused with one-on-one time.  I've gotten the chance to see him grow in his skill, and more importantly, his passion.  Below are some of his comments about his experience over the last year and a half in a recent chat:

"I think from the moment I 'emailed you' to ask for some 'mentor like advice' you have shown a true passion for software development/learning/etc."

"your words have pushed me to a level I only dreamed of 11 months ago"

"I'm knee deep in TDD and in part because of your words!"

"I just built a house - otherwise ... i would move just to work with you- honestly"

"it's like something happened after talking to you last year ... I never had anyone challenge me like you did"

"but again - without your 'patience' / 'care for others in the community' -- you could have brushed me off with a simple 'newb' comment instead - you took the time (out of your busy day) to help ask the 'right questions'

If you're reading this and you've found yourself losing passion for your craft, family, or faith, don't sit idly by.  Do something, anything, to get back into it.  Do what whatever it takes to reawaken your passion and foster that passion, you'll be much happier person for it.  I wrote last summer on my blog about passion in a post titled "Passion in Programmers", and I believe what I wrote in that post to be as true today as the day I wrote it.  In it I wrote, "Passion in my mind is a key characteristic of being a great developer.  A passionate developer will never stop learning and enjoys the journey of learning and thus is an asset to any team."


 
Categories: Musings | Programming

June 17, 2008
@ 03:05 PM

Compare the following two error messages and think about which you would find more helpful.  Then, the next time you are throwing exceptions with messages remember this post.

Error Message from Castle's Windsor IoC libraries:

Can't create component 'ProductService' as it has dependencies to be satisfied.

ProductService is waiting for the following dependencies:

Services:
- JPCycles.Framework.Services.IInventoryService which was registered but is also waiting for dependencies.

ControllerInventory is waiting for the following dependencies:

Services:
- JPCycles.Controller.IInventoryRequestInterpreter which was not registered.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: Castle.MicroKernel.Handlers.HandlerException: Can't create component 'ProductService' as it has dependencies to be satisfied.

ProductService is waiting for the following dependencies:

Services:
- JPCycles.Framework.Services.IInventoryService which was registered but is also waiting for dependencies.

ControllerInventory is waiting for the following dependencies:

Services:
- JPCycles.Controller.IInventoryRequestInterpreter which was not registered.

Error Message from .NET framework:

Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

 
Categories: .NET | Programming | Software

"But you have the source!"

I heard that statement a little over a month ago at the Alt.Net Open Spaces event in Seattle.  It's no secret to those who know the community, that open source technologies are at the very least promoted and in many cases you'll find many open source project committers within the Alt.Net community.  Heck, David Laribee, a founding member if there is such a thing, in a post defined Alt.Net as (emphasis mine):

  1. You’re the type of developer who uses what works while keeping an eye out for a better way.
  2. You reach outside the mainstream to adopt the best of any community: Open Source, Agile, Java, Ruby, etc.
  3. You’re not content with the status quo. Things can always be better expressed, more elegant and simple, more mutable, higher quality, etc.
  4. You know tools are great, but they only take you so far. It’s the principles and knowledge that really matter. The best tools are those that embed the knowledge and encourage the principles (e.g. Resharper.)

The quote, and many like it, came in a session titled "Mature Open Source projects versus first generation Microsoft projects".  The discussion centered around why some (many) developers, managers, and executives feel comfortable choosing a brand-new Microsoft product when a far more mature open source alternative exists.  One the fears surrounding the adoption of open source is the lack of surety that open source project will exist in perpetuity.  One needs to look no further than two projects, NVelocity and NDoc, to find historical evidence of an open source project vanishing.  The main counter-point to that argument, and many others, was the quote above, that with open source, you were never truly left high-and-dry, since you had the source.

It's a noble thought, but really, who wants to manage another codebase in addition to their own?  In fact I turn to open source project many times so I don't have to write my own code.  Why re-invent what someone else has already done and guided to maturity?  The idea that I can compile and manage another, possibly large, and probably complex codebase is hardly a comfort to me.  It wasn't until a few weeks ago that I realize that the open source pundits were correct.

I have been working on a project for the last year that has, as of two versions ago, started using Watin to automate the downloading of a file from the internet.  Watin is a testing framework but is used by many to automate business processes, which is what I use it for.  If you haven't checked it out yet, it's beautifully simple.

Watin provides handlers to download a file, however, the code was hanging at the point where it should've cleared the download.  I looked at every documentation page, blog post, and blog comment I could to see if I was missing something.  My usage was correct.  So I dug in a bit further using WinDowse to find the handle of the button that should be clicked.  As it turns out the handle of the Save button in a FileDownload Dialog changed from 4424 to 4427 in IE7, who would've guessed it right?  Well, since I had the source I went in and made the change, and voila, I'm back in business.

It gave me some confidence that if an open source project does cease, I can pick it up and patch it up.  I still don't want to manage multiple codebases from many different source, but in the end the pro open-source guys were right, "You have the source!"


 
Categories: .NET | ALT.NET | Musings | Open Source Software | Software

May 10, 2008
@ 03:49 PM

imageLast year when I built a new machine I purposefully built the machine with lots of power so that I could have multiple different environments and insulate myself from the loads of crap-ware that inevitably ends up on my machine.

Virtual machines allow me to download and try some utility in a sandbox where I know I can return to a previous state.

I opened one of my virtual machines and saw the screen posted on the right.  If this were on my host machine I think I'd need a new pair of underwear.  I don't have the time to rebuild a machine and so screens like the one of the right scare me.  However that is a virtual machine that had the ASP.NET MVC Framework Preview 2 on it.  So, am I going to try and diagnose?  Nope.  Just create another...it's beautiful.

 

 

 

 


 
Categories: Hardware | Musings | Software | Tools

Yesterday I attended the first ever Iowa Code Camp in Iowa City, Iowa.  This was the first code camp I had ever attended and that fact withstanding, I don't know how the event could have gone any better, it was absolutely flawless.  There were well over 125 attendees and waiting list to boot.

I attended sessions on Java/Hibernate, Inversion of Control, Mocking and .NET Performance Tuning. I enjoyed Derik Whittaker's talk on mocking as it's something I've been into for the last few months.

Talking to other attendees it was very obvious that others enjoyed themselves as well.  The feeling was that the materials presented were things we can take into work tomorrow.  And that is what a code camp is all about.

Thanks to Chris, Javier, Greg S. Greg W and the many others who helped make yesterday a success, you guys set up a wonderful event!


 
Categories: .NET | CRIneta

April 27, 2008
@ 06:26 PM

I've just come off a whirlwind few weeks.  The largest change is my departure from Geonetric, a health-care content management system (CMS) software maker, and moving to J & P Cycles, a after-market motorcycle parts dealer.  A week an a half ago I also attended a Get Motivated event here in Cedar Rapids.  I was particularly interested in hearing/seeing Zig Ziglar speak, as I'm a big fan of his books/audio.  Then last weekend I attended the Alt.NET conference in Seattle.  Then this weekend I went to a workshop on investing.

Being around the type of company at these types of events (whether technical, motivational or other) really inspires one to be better.  At the Alt.NET conference I had a chance to sit with a small handful of developers at the TypeMock sponsored dinner.  Sitting among the likes of Roy Osherove, Jeremy Miller, Dru Sellers, Oren Eini, and Steven "Doc" List and realizing that these guys are masters of their areas is really quite inspiring.  Just listening to the talk of IoC containers and mocking frameworks (with two mock framework authors) is something one cannot put a price tag on.

On the plane ride back, it was evident in fellow attendee Chris Sutton that he was inspired the way I was.  I've since spent the evenings cracking open books that have been collecting dust for some time and rereading them (Chris is doing the same since watching his Twitter account).  At the same time I've been working to shut the TV off, not entirely but the mindless time I spend in front of the tube has got to go if I aspire to be on the level with these programmers.

I've spent the better part of this post talking specifically about Alt.NET but Alt.NET really was just one of the events in which I interacted/saw inspiring people.  These past two weeks have been quite a kick in the pants.  I would encourage readers of this post to question themselves about what you're improving yourself on whether it's your coding, your golf game, investing foundations, or some other hobby.  My eyes have really been opened lately to the vast number of winners out there and the vast number of mediocre people.

Don't be mediocre, better yourself, starting today.


 
Categories: ALT.NET | Musings | OT

April 27, 2008
@ 05:44 PM
I'm the type of developer that makes the top half of developers possible.


 
Categories:

April 19, 2008
@ 11:04 AM

From the moment we got here it's been so absolutely incredible.  We (Chris Sutton and I) arrived in Seattle about 11:00 and met up in our hotel lobby with a few guys and went off to lunch.  The subject of mocking came up and got into an interesting debate with the guys about mocking, among which was Roy Osherove.

I'm generally a nobody, but that's not how it feels here, everyone comes here to learn from others, so it actually tends to be a great group of developers.  Yesterday afternoon I was chatting with Udi Dahan, Greg Young, Drew Sellers, and Evan Hoff about event driven design.  I'm amazed that when surrounded by many celebreties in our community that they are really just like us (Roy O is the most down to earth guy).

The open spaces format is interesting, people get up and say what they want to talk about and then we figure out what will be talked about.  Some topics from Friday evening were mocking, agile scaling with teams, distributed design, and javascript testing, just to name a few.

A highlight was talking in a small group with Martin Fowler and Scott Hanselman about languages and the importance of finding good code to learn from.

All in all, I'm so far impressed and the conference really hasn't begun.  From the time people showed the conference began, despite it not officially beginning until 6:00 last night.  After the conference everyone went out to eat and this morning people are gathering for breakfast.

Ultimately one cool group of people that I'm proud to be a part of.

 


 
Categories: .NET | ALT.NET

March 10, 2008
@ 11:51 AM

The new Resharper seems to favor the "var" keyword and I don't understand why.  Is it some performance benefit?  To me, if you know the type, then write it as such.  Consider the following:

Person p = new Person("Tim", "Barcz");

Resharper doesn't like this and suggests the following:

var p = new Person("Tim", "Barcz");

Why?  Just because you can do something, I don't think you should.  Maybe my brain hasn't shifted back to a var world yet, but the second snippet is less readable than the first.  To me it's a case of Don't Make Me Think.  With "var", I now have to stop and think, even for a second, what type is being returned.


 
Categories: .NET | Musings | Software

Congratulations to the 15U Navy team for your work this weekend and winning the Springville tournament, Sarah and I are very proud of you guys!

team2


 
Categories: OT