Chris Sutton tagged me yesterday asking how I got started with programming. So here it goes.

How old were you when you started programming?

I suppose I first started with my TI-86 in physics class making text based adventure games.  After that it was HTML and building a website on geocities (remember them?).

What was your first programming language?

HTML, if you count that, otherwise Pascal.

What was the first real program you wrote?

I wrote a small portion of an application in VB6 for a local paper company while I was an intern in college.

If you knew then what you know know would you have started programming?

Yes, most definitely, and would kick myself for not taking advantage of the abundant resources and time while in college.

If there is one thing you learned along the way that you would tell new developers, what would it be?

First, have passion for your craft.  Second focus less on languages and specific technologies, but instead focus on principles and core fundamentals.

What’s the most fun you’ve ever had … programming?

In college I wrote my own compiler for an honors project and I used to stay up every Thursday night and program in preparation for a Friday morning meeting with my advisor.  About 2am I'd make a run to the local grocery store and buy some Mt. Dew and a box of Nutty Bars.

I'd like to hear from:


 
Categories: Musings

July 9, 2008
@ 09:13 PM

Many people use open source tools, whether its NUnit, Nant, Rhino, or log4net in their professional lives.  If you use any of these tools, when was the last time you donated time and/or money to any of the open source tools you use?  That's what I thought. 

I was recently watching the Hibernating Rhinos from Ayende Rahien and I wanted to thank Oren.  Right there on the Hibernating Rhinos page it reads:

donate

I wanted to donate.  Perhaps because the videos provided so much guidance from one of our industries finest.  Perhaps because I've met Oren and generally think he's a good guy.  Regardless, I donated some money.  Not much, but some.  Something to say, "thank you, I appreciate this.

Curious if other donate, I emailed Ayende to see what revenue, if any, his video series has generated.  I wanted to know well the community was supporting a popular training tool.  Here's the stats, lifted a few moments ago.

image

So how much has Oren received from this video series?  Guess.  Seriously.  $125 since September 2007.  From the stats above there have been 242,610 downloads of the videos. That breaks down to .000515 per download!!!  As a community that's quite pathetic.

From here on I've resolved to donate a dollar any time I download a free library or webcast where a donate link is presented.  Why $1?  In all honesty it is something I can commit to.  I download and use a lot of tools, so I don't want ongoing cost to hinder me.  $1 is a token to say thanks, acknowledging the work that's been put into the product.  I would challenge you to make a similar commitment for the tools you use.  Let's show the author(s) of these tools/libraries that we do appreciate the work they do!


 
Categories: Musings | Open Source Software

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: