Archive for the ‘Professional Development’ category

Colossal Failures

March 2nd, 2010

One of my favorite television shows is Mythbusters.  It’s not that I’m enthralled with the myths themselves, but the engineering required prove the myths correct or incorrect (“Confirmed” or “Busted!”).

Recently, I ran across a session by Adam Savage talking about Colossal Failures.  Here is the video if you have an hour to kill (really the first 30 minutes is all you need to listen to), or just skip ahead.

(If you can’t see the video above, please view in your browser and not in an RSS reader)

This video is inspiring for me.  Adam talks about two instances where he took on a task where he bit off more than he could chew.  First, he talked about having to build a baseball throwing machine for department store display.  The store was under tight restrictions, and gave Adam less than a week to design, build, and implement this system.  Adam didn’t succeed due to dozens of unforeseen issues.

Second, Adam talked about having to build a set complete with a talking ATM.  He ran into tons of issues, and didn’t have anything done for the first day of filming.  He was asked to go home, and then several days later was asked to come back to get a verbal flogging from the crew.

What does this mean to us?

Failing is a method of learning.  Failing is a bit of a subjective term.  If you’ve made a mistake, you’ve failed.  Some failures are easier to rebound from than others.  However, failures are worth it if you learn something from them.

Adam learned that while he does good work by himself, the common trait of both his examples was that he didn’t ask for help.  Some jobs are too large for a single person to take on by themselves.  Keep a good network around you of people you trust and respect.  These people can be lifelines in the most frustrating times of a project.  Don’t have a network?  Look for a community event in your area.

How have I failed?

I’ve walked into several situations where I had no idea what I was doing.  Being a younger developer, I don’t have the experience as someone with 10 or 15 years experience.  In my current shop, most projects are on the shoulders of one or two developers.  With any project that has come across my path, I’ve picked them up and ran with them the best I could.  As Adam said, I was “making it up as I went.”  I made several poor decisions that seemed good at the time.  When I discovered they were bad decisions, I took immediate steps to fix them.  Never leave a bad decision for someone else to clean up.  Step up and accept them, and then proceed to make it right.  Adam talked about providing money back to his customers.  He accepted his failures, and wanted to take steps to make it right (even if it meant giving up part of his pay).

Preventing Failures

Keep a support structure.  Join a user group or visit a code camp.  Keep learning.  Surround yourself with people smarter than you.  Listen to their advice (but take all advice with a grain of salt).  One person will sometimes succeed, while a team will never fail.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

Leaving It Better Than You Found It

January 26th, 2010

When my wife and I bought our house back in April, one of my pet projects has been to renovate the room over our garage.  I knew buying the house that it would be a lot of work, partly because the previous owner didn’t know what he was doing when finishing a room.  I’ve spent the last week and half sanding, mudding, and fixing all the walls in this room.  While sanding some dried mud tonight, I had a thought about how this experience was a lot like building software.

When building software, you’re not sometimes lucky enough to build a system from the ground up.  Normally, you’ll inherit code from developers who have been hacking it for years.  I related this to me working in my room.  I inherited a poorly maintained room.  The joints weren’t level with each other and the mud of the wall wasn’t smooth.  The person doing the work took no pride in the work being done.  The ceiling was also a “hacked” popcorn ceiling.  I say hacked because, instead of using a hopper, the person slung dry wall mud onto the ceiling giving the illusion of popcorn.  The illusion failed though because it looked horrible.

Fast forward to my work in the room last week.  I had to go through and scrap all the excess mud off the wall.  Each wall and joint had to be sanded, and mudded again in order to level everything.  I’ve spend hours of time trying to reverse the effects caused by performing the job incorrectly.

What does this have to do with software development?  Think about when you’re working on a bug in a piece of code, and it’s your first time looking at this code.  How the previous developer left the code is how you’re going to inherit it.  You might have to spend hours undoing the work of the previous person in order to get the code to a state it can be worked with.  Hacks might have to be removed and properly implemented.  Hours will be wasted that didn’t have to be.

When working on new code, do yourself and future developers a favor and leave the code in a state where it can be easily picked up and worked on.  If you’re working on existing code, try to leave it in a better state than it was when you found it.  In the long run, time will be saved, code will be more secure, and a developer will say fewer curse words.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

The Zen of Free Labor

June 1st, 2009

Lets rewind back two years ago.  I was a fresh software developer of our college.  The major problem plaguing college students is that they do not have any practical experience.  How do you obtain practical experience?  You need to work!  You need to make the mistakes you need to make to become a productive professional.

Out of college, I knew exactly one programming language proficiently: C++.  Proficiently is probably a poor choice of words.  I KNEW C++, but I KNEW enough to make simple decisions and get the job done the best way I could.  My first (technically second, but we won’t go into that) professional job was all C#.  I didn’t know C#, but I knew enough C++ to become very comfortable with C#.  In fact, one week after starting the job, I was adding new features to the project I was assigned too.

However, I knew that I needed to expose myself to a several different technologies.  My wife and I took a trip to Nashville and visited with some friends of ours. One night, I was having a discussion with my friend about his hobby, photography.  We had ended up on the topic of him putting up a web page for all of his photos to sell.  I thought it was a wonderful idea, and volunteered to build the site for him.  The caveat was that I would do the site for free, seeing as how I needed to build up my skills in ASP.NET.  He would pay for hosting, etc, and I would build the site for him.

This was almost two years ago, and the site still remains undone.

So what happened?  Life happened!  Paying jobs happened!  Of course its a great idea to say that you’re going to do something for free to help someone else.  What happens though when you need to mow the yard?  Stay late at work?  Get sick?  Spouse gets sick?  The first thing you drop is the project you’re not getting paid for.

Fast forward to a year ago.  I volunteered to work on my church website.  Same scenario.  I wanted an avenue to build on top of the ASP.NET skills I had, and I figured working on my church website was the best way to do that.  The difference between this project and the first was that I needed the input of several people in order to make any progress on the site.  When you’re not being paid, the people you’re doing the job for aren’t as quick to respond to emails as they would if you were charging per hour for their response.  This site will be done, but it’s taken several months longer than it needed too.

What’s the moral of the story?  You need work to show off in order to get more work.  Offer to do a free project every now and then.  Use it for experimenting with new technologies.  Don’t allow the project to get too complex.  You don’t have time for that.  Get it done as soon as possible.  If you let it go for too much longer, you’re never going to complete it.  That is, of course, you have more will power than I do.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

Richmond Code Camp 2009.1 Recap

April 28th, 2009

Another Richmond Code Camp has come and gone, and I really believe this was the best one yet.  I did something this year that I’ve never done before at another code camp, and that was hang out in the Open Spaces area.  My first experience with an Open Spaces room consisted of myself and another person being the only people in the room.  Let’s just say it wasn’t what I was expecting.

However, Alan Stevens was the facilitator for the Open Spaces section at Richmond Code Camp.  This was one of the most greatest experiences I’ve had in my professional life.  In the morning, our group started with 6 people, but in the afternoon it was standing room only.  The unstructured, but structured format of Open Spaces really gave me a chance to listen to people with different experiences talk about technology in a way I’ve never been exposed to.  I’ve changed my way of thinking on issues, had methodologies I’ve been following re-enforced, and I’ve picked up new concepts.

I would say though that the proper way of having an Open Spaces section is to make it an all day thing.  The major problem with my first Open Spaces experience was that it was a single session during the day, and not its own dedicated track.

My session went very well.  I had a packed room (about 30-40 people I would guess), which contained 75% students.  I was surprised to see that the students were of varying ages, from 20 to 50.  It’s good to see people getting into the industry (or revamping their skills) at these community events.  I’ve told people on more than one occasion that I’ve gotten more of an education at user group meetings and code camps than I did in college.  The truth is you’ll learn a lot more about what the direction of the industry is by listening to and hanging around industry people.  Professors in academia don’t have a clue.

A few of the speakers and attendees went out to dinner after the Code Camp.  These are the hours that I really wish would never end.  I’ve made so many good friends who share the same passion for their craft as I do.  I just don’t see that same passion in my day job.  People do what they need to do and go home.  Why learn the latest and greatest when there is no pressure at work to do so?  User groups and code camps are great way to revitalize yourself.  I really need to start bringing actual work with me to these events, because that’s when I really have the urge to code.

NoVa Code Camp is right around the corner.  Sign up today and be revitalized!

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

Road to Certification

March 26th, 2009

When I was in college, I worked for an IT shop.  I went around and fixed machines, and did the basic tech support type of stuff you expect to do when you’re in school.  However, I knew that I definitely didn’t want to do tech support for the rest of my life.  I started learning about the system administration side of the house, and what I could do to progress my career in that direction.  Essentially, that lead me to certifcations.  In this case, it was the certification route for Windows Server 2003.

A MCSE, or Microsoft Certified Systems Engineer, in Windows Server 2003 is a HARD certification to get.  Essentially it’s a group of 7 tests.  You have to earn another certification along the way (MCSA, Systems Administrator).  I studied hard, and lived in 2003 virtual machines.  My goal was to learn the material as well as I could, and prove myself as a professional.  Eventually, I passed my 7th test and earn my certification.  This was a personal achievement of mine, because there were *several* collegues of mine who could barely pass the 2nd test.

I look at certification as a double edge sword.  A good majority of people with certifications are paper professionals.  They’ve been able to read and study the material, and retain it long enough to pass a test.  These people would look good on a resume.  “Oh you have a MCSE, you must be a great person to hire.”  Later, we discover these people have no clue what they’re doing as they have never used any of their information except for answering questions on a test.

I graduated from college with my Computer Science degree and moved into the development field.  The knowledge obtained from earning my MCSE has helped me in many situations, even if its simply describe to my system administrator what my needs on the network are.  Since all my work has been .NET centric, and I’ve been heavily involved in the .NET communities, I decided that I wanted to go from my application developer certifications.  While the track isn’t nearly as extensive as my MCSE was, I’m looking forward to learning something new with each test.

For those interested in the test I’m studying for, it’s the 70-536: Application Development Foundations (or .NET 101).  Luckily, I’m starting this journey at the same time as my good friend Joel Cochran.  I found it was very important to have a “study buddy”, or someone to keep you on track and to bounce questions off of.  You’re 200% more likely to pass with a study buddy than not having one.

What certs do you have?  Any recommendations to other people going for their certications?  Let me know if you love them or hate them!

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)
Get Adobe Flash playerPlugin by wpburn.com wordpress themes