What to do with a new programmer / apprentice

My favorite terms for “new programmer” have always been RCG, FNG, or rookie.  A new programmer is like a new puppy, minus the furry cuddly playfulness.  I’m thinking more about the damaged shoes, couch, TV remote and what is that smell behind the couch?

I’ve heard that college will teach you “the fundamentals” and you don’t truly learn your trade until you start a real job.  So, if your team gets a new guy or a college intern, then you are going to be his first teacher in “the real world”.   You are essentially 1/2 kindergarten teacher and 1/2 basic-training drill-sergeant.  Your process for breaking-him-in might have a deep and long-lasting effect on this person’s career and life.  When you truly consider the profound responsibility that is placed on your shoulders, you should feel honored and challenged.

What to expect from the n00b

Maybe this person has had a previous job, but probably nothing like this.  The closest thing would be a job flipping burgers or taking college classes.  Nope, not even close.  So, this person might have some unrealistic expectations about the levels of responsibility, effort, and the work itself.  Yep, the first job that a person takes is usually strafed with CLMs (career limiting moves) and embarrassing mistakes.  So, brace for impact and be on the lookout for these catastrophes so you can nip them in the bud, before they turn into bad habits.  Lay-down newspapers and put breakable things up-high.

Fundamentals of the real world

It is best to start-off with a nice discussion about [how the real world actually works].  However, you need to balance this against delivering a doom-and-gloom sermon that will kill this person’s inner child.  Your best bet is to deliver this message in chapters, spread out over a 3 month period.

Ch 1.  You are getting paid to work and not to f* around.  If there isn’t any work to do, then find something (work-related) to do or you might get fired.  But don’t freak-out.  The less you are paid, the lower the expectations.  Exceeding expectations will probably result in pay raises.  So get busy and start exceeding expectations.

Ch 2.  Work is not always fun.  That is why they PAY YOU to come here.  Oddly, the stuff that is less-fun, tends to pay more, especially if you get good at it.  Being whiney will only make things worse.  So,  be whiney or be successful.  Choose wisely.

Ch 3.  Be tactful and have good manners.  It doesn’t matter how smart you are, DO NOT piss-off the wrong people.  In fact, if you piss-off anyone at work, you are digging your own grave (unless you man-up and fix it asap).  Treat everyone with the same respect as your grandmother and you will do fine.

Ch 4.  The VP thinks that your boss is doing everything right.  So, if you ever disagree with your boss, try using your eyes and ears (and brain) instead of your mouth.  You might learn something important.

Real programming

It is nearly impossible to teach real-world programming without a real-world example.  The stuff that is taught in school will cover 60-80% of what you need to know.  Here are the most important things to teach/learn about programming, after college:

1.  If you don’t get solid requirements, then you will rewrite portions of a program, several times.  Eventually, it will suck the joy out of your life.  So learning how to [gather requirements well] should be your #1 priority.  Btw, it only affects you, so don’t bother blaming anyone but yourself, if you get it wrong.

2.  The first 10% of the project and the last 10% of a project are the hardest parts.  Learn those from somebody with experience.  When you master those, people will call you “senior developer”.  It won’t happen overnight.

3.  If somebody asks you “how long till you’re done”, there is only one correct answer and it is not { “I don’t know”, “Soon”, “It will be done when it’s done, okay”, or some kind of guess }.  Learn how to track your time and give good time estimates.  Commit to doing it well.  Start by learning about “Function Point analysis”.

4.  Comments help-out the next person who uses this code.  That might be you.  If not, don’t build bad karma for yourself.  You will end up paying it back someday.

5.  Ugly hacks are necessary sometimes.  When you find yourself having to make one, please show it to somebody who might be able to suggest a better way.  If that person blesses it, then kudos to you.

6.  Always, always, always remember: Priority #1 = try not to break things.  If you do break them anyway, fess-up (like a man) and get help fixing it. Learn from your mistakes and take a solemn vow to never make that same mistake again.

Our quirky stuff vs. everyone else’s quirky stuff

You and I know that everybody does stuff a little differently.  We also know that this is okay.  You are obliged to explain to the n00b “how we do it here and why”.  It is common courtesy to explain that others may do things differently and that “we” are not infallible, but we would like to be.

Discuss all of the following:

  • Dev and release cycles (the process from end-to-end, people, roles)
  • Coding conventions (what is right, vs. wrong, with examples)
  • Docs (templates and examples)
  • Management and tracking

You probably should expect dumb questions about “why do we do it this way” and “why not a different way” and “wouldn’t it be easier/more-productive if…”.  So please be patient.  Don’t resort to being un-classy or un-professional.  If you run out of patience, the correct exit statement goes like this: “I know it sounds strange.  Please give it a try.  If you really try to give it a chance, I think you will see the benefits.  After you have tried it for a month, if you still disagree, then come back and we will talk about it.”

After a month, you will have regained all of your patience and the new guy will have much fewer dumb and irritating questions.

So, break ‘em in right, set a good example and stay classy.


About Tim Golisch

I'm a geek. I do geeky things.
This entry was posted in IT Psychology, Professionalism. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s