Benjamin Hysell – Software, Projects, and People Rotating Header Image

Steve Yegge

After a little diversion I’m back into my digital reading list:

http://steve-yegge.blogspot.com/

I am not sure how to describe Steve Yegge.  I’ll start with some bullet points:

  • Lately, and sadly, he has been an infrequent blogger
  • Plug in your laptop before you start reading one his posts…you thought I had a few posts that went on and on and on and…I’ve got nothing on Steve
  • Bloody brilliant communicator
  • Insightful comments and vision regarding the industry we all work in

I don’t remember where I found Steve.  I forget if it was Joel’s Reddit feed or if I stumbled across him while on another software related blog, but every time he publishes I clear my calendar for the morning.

“Helen, hold all of my calls, Steve has posted again.”

:: Now, right this second, I don’t have a need for a secretary, and I’m not sure on the Helen part…maybe a Sally, or go another way, how about a Johnson.  I like Johnson, you can really let it rip from your gut…sounds manly.  ‘Johnson, (pause for effect)…Hold all of my calls’. ::

Steve is long winded.

“How long winded is he?”

Long.

However, those who embark and complete the journey will be pleasantly rewarded.

http://steve-yegge.blogspot.com/2008/10/programmers-view-of-universe-part-1.html

A couple of years ago I had a 55-gallon freshwater fish tank running in my living room, and I learned a few things from the experience.

  1. I’m not very good at keeping fish.  Towards the end of the experience every morning I awoke to a few less living fish and a few more dead fish.  Emotionally keeping fish can be very difficult.
  2. I never kept Bettas like Steve, but could relate to the heartbreak he had at the end of his post.  I think my algae eater died in the same fashion as his Betta.
  3. You can’t play catch with a fish…I confirmed through the experience of owning fish that I’m a dog person.

:: It didn’t take a tank full of fish to make me realize I was a dog person, but it’s always good to have confirmation. ::

Steve’s post is a classic post, referencing a non-industry related event to make a pointed statement about software and the world of computers.

Not all of his posts are downers.

http://steve-yegge.blogspot.com/2008/10/universal-design-pattern.html

Any post that references Godel, Escher, Bach: An Eternal Golden Braid is ok in my book…as Steve states:

Get yourself a copy and settle in for one of the most interesting, maddening, awe-inspiring and just plain fun books ever written. The Pulitzer Prize it won doesn’t nearly do it justice. It’s one of the greatest and most unique works of imagination of all time.

http://steve-yegge.blogspot.com/2008/09/bellic-school-of-management-training.html

I still haven’t completed the Niko Bellic management-training course.  I’m finding it harder and harder to fire up the Xbox 360 and devote the required hours needed for this management course.  One of these I will re-enroll…

Who turns an M-Rated Xbox 360 game into a post relating to management?  Steve Yegge.

http://steve-yegge.blogspot.com/2008/08/business-requirements-are-bullshit.html

How many times have you had an idea for something, anything?  You know the type of ideas, like the ones Ron Popeil puts up there in late night TV, but rather than creating the next ‘Pocket Fisherman‘ you want to write a complex software system to make your life and the lives of other people easier.

What if there was a website where tenants could pay for their rent with their credit card?

Seems like a good idea, property owners are paid immediately with recurring credit card payments, and tenants get points on their credit card when they pay rent.  I could use a system like this…dealing with checks every month is a major pain in the ass…I could build a system to do this.  I could do it in Ruby on Rails, play in a language I don’t use on a day-to-day basis.  I have server space…this could all come together.

Here is the rub…financial transaction systems are not my passion.  I would be writing something for me, but in an area I know very little about.  This is a case where I might use something like this if it existed, but to build, maintain, and support a system that I’m not passionate about is a recipe for failure.

Steve dives deep into the idea of building business for yourself, in areas you know, and you are passionate about.

http://blip.tv/file/319044/

This video ranks up there with my favorite web videos…his talk is titled “How to Ignore Marketing and Become Irrelevant in Two Easy Steps.”  Ever wonder how Verizon came to be the company they are today?  Steve Yegge answers all.

February Viewpoint eNewsletter

The February Viewpoint eNewsletter was published this afternoon.

Link to the orginal that was sent out in an email.

http://www.viewpointusa.com/newsletter_2009Feb.html

Link to my article on Test Driven Development in LabVIEW Part 3: Using VI Tester.

http://www.viewpointusa.com/newsletter/2009_february/newsletter_2009_febtdd.php

Now that February is done I need to start looking forward to March…the cycle never ends!  :-)

Offline Comments

I’ve received a few offline comments from friends and family about my last couple of posts that I wanted to share and expand upon here.

::Plus I’m excited I know a least two people are reading…damn, now I need to clean up the language, damn, damn, damn…wait…::

The Software Can do Whatever I Tell it to Do

My college friend Andy passed along this recent Dilbert cartoon with this note:

Ben,

I saved this because I experience it all the time when designing

mechanical devices.  Seems to go nicely with your Alan Cooper blog post.

-Andy

dilbert-strip1

I get scared every time I read a Dilbert cartoon that is so close to my own life.  Afterwards I start to wonder about all the other comics I read that I haven’t personally experienced yet.  I then start to wonder if Scott Adams personally has experienced each one of these situations or not, and then I get depressed.  There are a lot of people out there working in engineering in one form or another…one of us probably lives the life of Dilbert, the odds are too good to not have it happen.  What does that one person read and laugh about on a daily basis?

We have Dilbert; we laugh at their life…what gives them a chuckle?  So help me if you say Cathy, no one laughs at Cathy.

Tales from the Interview

Tales from the Interview is actually an on going series posted on TheDailyWtf.com, where contributors write in to share experiences they have had on both sides of the interview, giving and receiving.  Some of these shared stories are hard to believe they actually happen, however like Dilbert above, well, I’ve been depressed once tonight, I rather not think there is a another poor soul out there who has experienced each one of these types of interviews…

I was however asked to share a little bit more on my interview script and where the character of ‘The Jerk’ came from.  I was actually accused of being The Jerk…and I have been, but not as often as some might believe.  The role of The Jerk evolved over time as we more clearly defined the roles of the interview process itself.  In our first couple of iterations, my team and I were rotating roles and often crossing boundaries from role to role.  Through almost natural selection, each one of us slipped into a role that best suited us.  It was actually a very organic transition to a place where we all felt comfortable during the process.

The Technical Interview

I love the interview process…no, no, no, not the part where you are applying for a job, no, heavens no.  I love being on the other side of the table performing the interview and asking the questions.  Being interviewed?  Another topic for another time.

During your career, be it in software or otherwise, you will likely find yourself in a position to interview new people to join your company.  This task is not one to be taken lightly, good talent is hard to find, and making a hiring mistake can be very difficult to correct.  So what is one to do?

I found myself in this situation a few years back.  My team was growing, and we had the opportunity to hire a couple co-op students from the local university.  I had sat in on a few technical interviews before for other co-op students where I was more an observer than participant.  A couple of times during those early interviews when I was asked if I had anything to ask the applicant, I would usually respond with a, “nope.”  At that time I didn’t bring too much to the table.

This time around not only did I want to participate, but I wanted to run the interviews.

What follows is my typical interview “script”.  I call it a script because everyone involved plays a role, including the candidate.  The script metaphor works because we need to follow the same basic outline from interview to interview in order to accurately compare candidates.  My team and I have run this script around 30-40 times as of this post, and so far we have had great results in who we have hired.  Of course, your mileage may vary.

Some may ask, “if you are providing your script, and I interview for you, won’t that be like cheating?”

Yes, yes it would.  If you plan to ever interview with me in whatever company I’m working for in the future and I’m sitting on the other side of the table from you I’ll know you’ve read this post.  You’ll know that I know, and I’ll know that you know that I know.  It won’t be pretty; the tension in the air will be palatable.  We won’t even get to the first question before I jump up on the table and scream “I know!” and you’ll respond, “I’m sorry!” and the weeping will begin.

Actually have it, bring in a copy of this post, I’m not too worried.  This isn’t like having the answers to the SAT.  Nerves, fear, and plain old doubt can cloud an interview…anyone who knows what is coming may be a little more relaxed and give a clearer picture of what they would be like on a regular basis.

The Framework

I hate re-inventing the wheel.  I know others before me have interviewed people for technical positions with great success, ::see Microsoft and Apple:: so there must be lots of material on the web to say how they do it?

There is.

Most of it is outdated.

Most of it is directed at the interviewee.

Except one.

::I’m sure there are others, but if I said, ‘lots and lots of others,’ it would lose the dramatic effect.::

I have taken Joel’s, The Guerrilla Guide to Interviewing, and tweaked it here and there.  Take a minute and read version 3.0, which I linked to above before going on.

All read up?  Good.  Let’s begin.

Hiring Criteria

Simple:

  • Smart
  • Gets Things Done
  • Passionate

Joel covers ‘smart’ and ‘gets things done’ at length in his guide, I won’t repeat them here.  However, I don’t think he calls out how much of a role passion plays in hiring an engineer.  I’ll cover more on passion down below.

The Team

I am an avid believer in having multiple people in the room for interviews; not only does this save time, but everyone will hear the same exact thing.  This is key when comparing notes about the candidate afterwards.  I keep three people on my team, with three different roles.

The Lead – The Lead runs the show.  They are the ones who ask most of the questions, they take care of meeting the candidate at the door, and pacing the interview.

Number 2 – Number 2 drives smaller sections of the interview, often focusing on schooling, prior projects, and prior jobs.  As the interview gets going The Lead and Number 2 will often tag team back and forth on the different sections of the interview.  Having a Number 2 in the room is a great stress relief to The Lead as they can chime in with clarifying questions if The Lead misses something and give The Lead a chance to gather their notes and not talk the entire time.  Where The Lead runs the overall structure of the interview, the Number 2 fills in with a supporting role.

The Jerk – The Jerk plays a key role during the ‘writing code’ section of the interview.  Their job: challenge the candidate and see how they react to adversity during the interview.  The Jerk is charged with asking the pointed, hard questions during the coding phase of the interview.

Typically, I like to have everyone on the interview team be full time developers who buy into the interview process, i.e. we have all discussed the format of the interview beforehand and we all know our roles.  There is nothing worse than getting into an interview and appearing like no one knows what they are supposed to do next.

The Time of the Interview

Have The Lead meet the candidate in the foyer/reception area/whatever you have available and walk them back to the conference room.  Typically during the walk I try to make some small talk, “How’s the weather outside”, etc.  The goal is to try to get the candidate as relaxed as possible given the circumstances.  The last thing you should be doing is walking silently with a look of contempt on your face.  This person may become your new co-worker; try to make them feel welcomed to your company.

The Introduction

Introduce everyone on the team and thank the candidate for coming in today.  I like to layout the format of the interview so there aren’t any surprises.  A typical format will be:

  • Talk a little bit about yourself, your passions.
  • Dive into past work experiences, or for co-ops classes and projects
  • The whiteboard question(s)
  • Any questions for us the interviewers
  • Talk about the company

A couple of points about the format:

  • We never say how many questions there will be at the whiteboard.  Ever.  Normally we have a very easy one, and a very hard one.  There is no point going into the hard question if the candidate cannot pass the easy question.
  • Always close by talking about the company and how great it is to work there.  I don’t care if this candidate thinks the CD-ROM drive is a place to hold your coffee cup and you know you are never going to see them again-you sell your company!  This will likely be the last thing the candidate will remember as they leave your office, and I would like to leave them with the thought of, “Wow, that was a tough interview.  I hope I did well because I would love to work there.”  At least if they do not get an offer letter they can tell their friends how cool your place is to work and not create any ill will.

Talk a Little Bit About Yourself

The key, get the candidate to relax, get them talking about something they are experts on, themselves.  This is a great place to ask the softball questions, such as:

  • Where do you see yourself in five years?  It doesn’t have to be work related.
  • If you could get out of bed every morning and be living your dream job what would you be doing?
  • What do you read on a daily/weekly basis to keep up to date in our industry?

All of these questions are those horrible open-ended type questions that don’t have any real answer, but they serve a key purpose.  Get the candidate talking and try to get them to not feel as stressed about the interview.  Out of this section you will likely learn what they are passionate about, if anything, if they have any vision for the future, and what they do to hone their craft.

There is nothing worse than having someone come in and go, “I don’t know where I want to be in five years.”  Really?  No idea?  None?  Living on a beach, write a couple of books, anything at all would suffice for this question.  I’m looking for a spark of personality, what are your interests, are you passionate about anything?

Passion is one key indicator I have found when hiring engineers.  Show me someone who has zero passion for anything and I’ll show you an unproductive engineer.  Show me a guy who is passionate about his family and I’ll show you a person who writes solid, robust code so he can leave at the end of the day to spend time with his family, and not be called in on the weekend to fix sloppy code.

Asking about their dream job again attacks their passion.  Do they love writing LabVIEW VI’s that talk to hardware or are they hardcore Ruby on Rails developers at heart.  These are key things to know if you are trying to hire a SQL DBA.

Lastly, our world is changing so quickly, we need to stay on top of what is going on out there if we hope to be viable in this industry 10, 20, 30 years down the road.  Learning if your candidate has a passion for their craft, and a desire to hone and refine it, for me, is a key hiring point.  If you are going to stop learning the second you see that offer letter I’m not interested.

Work / Project Experience

I like to have Number 2 take the lead here and drive this section.  During the intro and the open ended questions section he has had plenty of time to review the resume, listen to the first few answers, and craft a few questions based on those answers about the candidate’s past roles, and in the case of co-ops, classes and project experiences.  Again, this section is fairly open ended with the goal to get the candidate to talk about a subject they know the most about, themselves.

Hopefully the first two sections will give you an insight into the candidate, their personality, what they have done in their past jobs, and their goals for the future.  This is the warm and fuzzy feeling you might have on a first date as you sit down to get to know someone.  However, once this section is over the real fun begins.

The Whiteboard

The whiteboard is single handedly the scariest piece of equipment ever invented for a job interview.  It’s big, it’s blank, and a whole mess of code is going to be written on it.  As The Lead, it’s your job to relax the candidate before they get up to the whiteboard.  I will often say:

“Ok, lets get you up to the whiteboard for a coding question.  I know you are not at your desk with your favorite compiler; the whiteboard compiler is very forgiving.  It doesn’t care about semi-colons or perfect curly brace placement.  “

“We also know you don’t have Google at your fingertips in here.  For this interview, we’ll be your Google.  If you have any questions you would normally ask Google, ask us.”

“We care about how you are thinking about the problem at hand, we want to hear your process of how you are going to solve the question.”

This preamble sets the stage for the whiteboard in that:

  • I don’t care what the code looks like, as long as the candidate can explain it and it resembles some sort of programming language.  Writing out sentences ’read in input from user’ will not work, I need to see how you would go about doing that, but I don’t care if you miss a semi-colon in the process.
  • I expect people to know a fair amount about the position they are applying for, but if something escapes them that they might use Google to look up I don’t want that to stall the interview.

“The question: Given three integers write a function that will tell me if they form a right triangle.”

::Anyone who has read anything I’ve put out in the past couple of years should recognize this question as one I have used a bunch of times for many, many articles, examples, and even a code challenge for the Viewpoint eNewsletter.::

Simple, yes?

Actually for such a simple question we have seen dozens of methods to solving it.  And here is the key, by this point, we, the interview team, know which ones work and which ones don’t.  We know the caveats of each solution, and if you walk into my interview knowing how to solve this question and whip off an answer in five seconds, we will still have much to discuss.

This question is the heart of the interview.  As simple as it may seem watching someone solve it tells you a lot about how this person will work out if they are hired.  What am I looking for?

  • Questions.  The way in which the question is asked is incomplete.  What do the sides represent?  Are they lengths of the sides?  Coordinates in a plane?  Can the candidate ask for clarification in a situation where all of the information isn’t initially given?
  • Ability to ask for help.  Assume they have asked the question, “What do the sides represent?” and you further go onto explain they are the lengths of the sides of the triangle.  Maybe the candidate doesn’t remember the Pythagorean theorem.  I like to see the candidate ask for help.  At least if they are spinning their wheels for a minute or two and then ‘come up for air’ and ask for help it is better than dead silence for the next 20 minutes.  Likely we have all encountered areas where we needed to ask for help, I’m looking for people who know their limitations and are not afraid to ask.
  • Coach-ability.  This is huge.  If you provide direction how well does the candidate take it?  Do they take it in stride?  Do they fight you on it?  Their reaction based on a suggestion will provide loads of insight into what it might be like to work with the candidate on a daily basis.
  • Ability to take criticism.

To this point I have been silent on the subject of The Jerk.  During the whiteboard section of the interview is where The Jerk shines.  Likely the candidate will pound out an answer to the question above, its time for The Jerk to put the code through its paces.

First question from The Jerk: “Are you happy with the solution?”

Now to be clear, The Jerk shouldn’t be ‘a jerk’ when posing these questions.  However, ‘technical hard-ass’ might be more fitting.  The Jerk asks the tough questions, The Jerk is curt and to the point…not quite the ‘good cop, bad cop routine’, but something close.  What this does is allow The Lead and Number 2 to observe what happens when the candidate encounters an adversarial character.  How will they react?  Do they flip out yell expletives and storm out of the room?  Or, can they handle the pressure?

The Jerk also nails the candidate on other questions that are often not thought about:

  • What happens if I run 0, 5, 5 through the application?
  • What about -3, -4, -5?
  • What about max int?

Or if the candidate solved the problem perfectly there is always:

“There is something wrong with your solution.”

How the candidate responds to this will likely make or break the interview.

  • Fits of screaming and crying…probably a no hire
  • Diplomatically explains to The Jerk that no, the function is correct and here is why…hire that person on the spot.

If someone in a situation like an interview can diplomatically explain why The Jerk is wrong and they are correct, in such a situation where there is a clear imbalance of power and they don’t resort to name calling, this is a very clear sign into how this person is going to work out.

If for some reason the candidate doesn’t grasp what a right triangle is, or doesn’t take direction, or sets the table on fire while doing the whiteboard question, this is where we would have them sit back down and wrap up the interview.  This is why we never say how many questions will be done at the whiteboard.

Our second question, “Build me a function that calculates n!”.

Again, allow The Jerk to drive the questioning, asking why they did their answer iteratively vs. recursively.  If the candidate nails the first question often times this question is used after the interview to separate the good from the best.

Any Questions for Us?

After the question(s) at the whiteboard we start to bring the interview to a close.  The Lead normally asks, “Do you have any questions for us?”  At this point one would hope the candidate has a few questions, what do you do here, what is it like to work here, etc, etc.  Open up and share as much as you can with the candidate without violating terms/agreements/etc.  These questions often roll into:

Talk About the Company

“Always be closing” or rather “Always be selling your company”…what you are about to relay to the candidate will stick with them as they walk out the door.  Does your company do really cool things?  Let them know!  Do you have monthly company meetings where food is provided?  Let them know!  Does everyone have an office?  Let them know!  Do you work on really cool cutting edge projects?  Let them know!

I would like to have every candidate walk out the doors going, “Wow, cool company.  Even if I don’t get an offer there I’m going to tell my friends how tough an interview it was, but how much fun it would have been to work there.”

The last thing you want to do is create any ill will on the part of the candidate as they leave to tell their friends and peers.  In such an interconnected world why spread a seed of ill will for no good reason other than an interview that didn’t result in a job offer?

The Walk

Thank the candidate for coming in when there are no more questions to be asked and walk them back to where you picked them up.  Give them a timeline of when you expect to make your decision, hand them a business card so they can ask any follow up questions if they think of any and bid them a good day.

Walk back to the conference room for the final vote.

The Final Vote

The final vote is simple; it’s a ‘hire’, ‘no hire’ vote.  Snap decision, and there is no ‘maybe’.  One ‘no hire’ in the group results in a ‘no hire’ result.  Each one of you had a different vantage point for the interview, and if you all can’t agree to hire the candidate they are likely not the best person for the job.  As I said, there is no ‘maybe’, or ‘maybe, but not for doing X’.  What if they are hired for another function, and that function goes away and the only thing for them to do is ‘do X’, now you’ve hired the wrong person, and you are stuck with them.

Where the ‘hire’, ‘no hire’ gets tricky is if you have three candidates who you would all hire, but you only have one position.  Right after the interview it is best to rank everyone for the position and keep the ranking updated after every interview.  At the end of the interview process you will have a nice list of candidates that you can then make offers to, and if one of them refuses you already know who you are going to hire next.

In Closing

There are a few items in technical interviews I hate with a passion.  Avoid adding these to your interviews at all cost:

  • Brainteasers – An example – given 9 dots on a piece of paper connect them all with four straight lines.  Brainteasers are not good interview questions, the only thing they will tell you if someone gets one right is that they are good at brainteasers, they don’t tell you if they are good programmers.
  • Fact questions – Any question that normally would be looked up by any given programmer isn’t a great question.  Do you care if you candidate has memorized a bunch of useless facts about QBASIC and now they can regurgitate them?  I don’t.
  • Illegal questions – I am not a lawyer, but I’m sure your HR department can brief you on all the questions you cannot ask during an interview.  Understand these types of questions before conducting an interview.  I’m talking race, sex, religion, all the major mostly common sense items most people wouldn’t ask.  Again, I am not a lawyer, so check with your HR department before proceeding.

I hope that using these guidelines will help you conduct your next technical interview and find a person who is smart, gets things done, but has passion for their job and career.

Alan Cooper

Next up on my digital reading list:

http://cooper.com/journal/

Alan Cooper is one of my software heroes.  Actually now that I think about it I don’t have any other software heroes, so by default he is my software hero.

::insert you are the wind beneath my wings::

He had me at hello…ok I need to stop, my wife may actually read this one-day and I’d rather not freak her out.

I found Alan Cooper while strolling through Channel 9, a website hosted by Microsoft as part of the Microsoft Developer Network.  Channel 9 hosts all sorts of videos, most of them from inside Microsoft focusing on new innovative technologies produced by the Redmond giant.  However, one video caught my eye:

http://channel9.msdn.com/posts/Charles/Alan-Cooper-Questions-after-his-keynote/

I’ve shared this video with most of my co-workers, and by shared I mean I sat them down, wired their eyes open, and insisted they watch it until they memorized it.  That was one wacky causal Friday…

Cooper hit home one fundamental truth for me in that video…to paraphrase: users do not know what they want so it is our job to tell them.

In a world where we developers are dependent on our customers this is a very bold statement.  This view of the world has empowered me to stand up and shout at the top of my lungs, “Your desire to have pictures of puppies and unicorns on the user interface is a horrible idea, and I won’t stand for it anymore!!!”

Now, normally when I’m having this conversation with my clients I have already ripped off my shirt Hulk style and I’m standing on the conference room table.  I then proceed to take down the projector that is hanging from the ceiling, you know…to make a point.

Actually, Alan Cooper doesn’t advocate we bring an uninformed opinion to the situation; rather, we need to work with our clients to identify who is going to be using our software on a daily basis.  If we design our software for the people who are going to use it, they will likely enjoy our software and want to use it.  This sounds like a fundamental, day one CS 100 idea, however it is rarely taught that we should design products for the people who are going to use them, and not just ourselves.

This type of design is known as Interaction Design.

I have strived to incorporate many of Alan’s key ideas, such as:

  • Interview people who will be using the product, find out their goals, motivations, desires and abilities
  • Develop personas given the data gathered from the interviews.  These personas will help shape the product and prevent the all too common argument about ‘the user’.  There is no more ‘user’, the persona has a name, a family, and hobbies outside of work.
  • Fully defining our users in the form of personas prevents developers/managers/clients from taking a person using the system and having them perform all possible system actions.  Since personas are well defined we can say, ‘the new feature you want to add for our main persona isn’t a good idea because our persona doesn’t have the skills to use this new feature.’
  • Take the personas and define what ‘done’ looks like.  This involves designing scenarios where the personas are using the system and defining the workflow the personas would use to accomplish their goals.  These workflows can then be taken at the end of the project and executed by real users to ensure the product does what it was defined to do.

I will more fully explore using Alan’s personas in a later post.

Give me a minute to hawk Alan’s books,  The Inmates Are Running the Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity.  Inmates is the book you read and then give to your boss so they understand what you are trying to accomplish.  Alan’s other book About Face 3: The Essentials of Interaction Design tells one how to actually go about and implement his ideas in a project.  I highly suggest both books be added to your bookshelf along with his company’s blog to your RSS reader.

Coding Horror!

Next up on my digital reading list:

http://www.codinghorror.com

I believe I found Jeff Atwood’s blog through Joel’s Reddit feed.  Jeff’s articles kept popping up and I found my self always clicking through to read his articles.  After much deliberation I finally decided to add his RSS feed to my Google Reader.  Jeff has a very easygoing tone and relaxed style to presenting his ideas that I believe create a relaxed atmosphere around his articles.

Jeff is not without his detractors, me being one of his detractors, I should know.

I am finding he will drastically oversimplify a complex idea and then proceed to base his conclusions on the oversimplification, for me, leading to what I believe is the wrong conclusion.

A few articles I believe Jeff was off the mark:

XML: The Angle Bracket Tax

Understanding Model-View-Controller

As with all bloggers, check their facts and don’t take every entry as gospel.

A few of my favorite posts include:

Hardware is Cheap, Programmers are Expensive

My father would have cringed reading that article…he learned his programming chops on the original IBM PC.  My grandmother and grandfather both worked for IBM and were likely the reason we became an IBM household.  What is the easiest way to obtain a brand new, first ever PC?  Forget waiting in lines; know someone who works for the company.

::Actually, I have no idea how the launch of the IBM PC went, if they were hard to obtain or not.  I do remember being told we obtained one the year they were released.  My grandparents are not opposed to waiting in lines though.  I was called up in college by my grandmother asking me if I wanted a Sony PS2.  She and my grandfather waited in line overnight to get one and asked if I wanted it the next day.  They are more hardcore than me…the longest thing I have waited in line for is the Top Thrill Dragster at Cedar Point::

My father wrote all of the software he ever needed to run his practice in BASIC on that PC.  He even bought a compiler for BASIC from IBM.  His main application was so large he had to remove all of his comments so it could compile and run.  My father knew about resource constraints while programming and worked very hard around each problem he encountered.  It was this hard work of finding out how to squeeze every last drop of performance out of a computer that made him adverse to just throwing hardware at a problem to fix it.

::The main application my father wrote for his practice and other ancillary applications he used for diagnostic purposes were impressive for their day and time.  Some even to this day exceed what is currently available in the field of veterinary medicine.  Sadly, my father passed in late 2006 and we never had a chance to sit down and rewrite his code together like we planned so many times to do.::

Avoiding The Uncanny Valley of User Interface

Jeff explores why one needs to be cognizant of not only whom one is writing an application for, but also where the application is going to live and run.  Don’t try to make a web app that looks just like a desktop application.  If you do, people will expect desktop like performance…an expectation even the best web programmers will find hard to fulfill.

Your Favorite NP-Complete Cheat

This article raised the ire of many of Jeff’s commenters, but having not thought about NP-Complete problems in a very long time this article was a great refresher back into the subject.  I am a huge fan of not ‘re-inventing the wheel’, and any tool that I can get my hands on that allows me to say, ‘”Listen, this problem you want me to solve is impossible because it is very much like these other problems that 100s of people have also said are impossible,” is my kind of tool.  Turn on your best Yoda voice here, lazy not I am, practical I very much to be.

Lately Jeff has been distracted with a new venture he and Joel started:

http://stackoverflow.com/

For my money, this is the site for programming questions on the Internet.  Think of the site as a combination wiki/forum where questions are asked and answered.  The most popular answers get pushed to the top for easy reference.  I’ve been using StackOverflow to answer my day-to-day questions that pop up at work, with amazing results.

Follow me on StackOverflow from my profile

Check out the official blog for StackOverflow

Lastly, listen to their podcast.

January Viewpoint eNewsletter

Checkout the latest Viewpoint eNewsletter we published last week:

http://www.viewpointusa.com/newsletter/2009_january/newsletter_2009jan.html

This issue contains part 2 in my series on Test Driven Development in LabVIEW:

http://www.viewpointusa.com/newsletter/2009_January/newsletter_2009_Jan2.php

I love being the senior editor of the Viewpoint eNewsletter, and aim to talk about the production process in an upcoming post.

Joel on Software

My next entry for my digital reading list:

http://www.joelonsoftware.com/

Joel’s been writing a blog since December 1999, I only know this because I went back through his archives and read every single one of his posts.  Madness?  Not quite, but close.  I forget exactly how I stumbled upon Joel, but once I read a few of his articles, I was hooked.  Go back and start at the beginning of his posts, or rather, read the best of the best; they are listed in a column on the right hand side of his site.  A few posts I continually go back to:

The Guerrilla Guide to Hiring.  I have based my whole interviewing technique off of Joel’s guide, (with a few tweaks… I’ll talk about my interview technique in a later post).  This is a must read if you are doing the interviewing, and is even a better read if you are sitting on the other side of the table.  Its almost like cheating, you know what they are asking you and why.  Don’t take me for one of those to game the system, however I always like to be prepared.

Honestly, if you were gaming the system an interviewer worth anything should be able to pick up on the fact you knew a little too well what they wanted to hear.  And if they didn’t notice the fact you were gaming the system I’m not sure you would want to work for that company.

Talk at Yale Series, parts 1 – 3.  I always like to know a little bit about who I am following/reading…take a peak into their past, see if their values match up with mine.  I use the same strategy when I invest in Mutual Funds.

::I like to think I’m a bright guy with decent values…and given unlimited time and energy to do my day job and trade stocks I think I could manage my own mutual fund.  Thus, I want to find someone who thinks like me, and they have the time to concentrate on the stock market.  So far this strategy has worked…well except for this whole recession thing going on right now.::

Know thy blogger and learn from their past.

Can Your Programming Language do This? This is a hard-core article about computer science, but Joel breaks down the concept of functional programming and why you need to know/understand what it means.  Once you grasp the concepts you now know enough to create your own Google.

I plan on citing Joel in a few of my upcoming posts, so take some time, go back, and catch up on his past works.

Go a head, I’ll wait.

Dilbert – He Isn’t Just for Engineers Anymore

For my first post of my digital reading list, I present you Dilbert.

I know what you are thinking…

Oddly drawn characters, situations you never find yourself in:

::unless you are an engineer, in which case try and feel for those who do not participate in our profession::

http://dilbert.com/strips/comic/1994-08-27/

And really, who could enjoy:

http://dilbert.com/strips/comic/2008-12-28/

Unless you are an engineer.  Sure, you could stretch your mind, put yourself in our shoes, but who has the time?  And who wants to work that hard while reading the Sunday comics?

Dilbert doesn’t even work for all engineers.  Its true, its true.  He is not everyone engineer’s cup of tea.  Sure, we can all commiserate about how painful Calc 102 was, but we can’t all agree on Dilbert.

I’m not going to lie, not every comic is a home run, even for a self-professed fan:

http://dilbert.com/strips/comic/2008-11-16/

That comic is currently number one on the all time best comics list.

What I want to draw you attention to is not the comics, but  Scott Adam’s blog.  Try out a few of his past posts, or rather check out my current favorites:

The subjects Scott chooses to delve into fascinate me.  Every day is a new surprise as Scott jumps from finance, to exploring the human condition, to the just plain funny.  Reading Scott’s blog will not provide you the next whiz-bang idea to present to your boss, but rather, Scott’s blog provides great insight on how to communicate ones own thoughts to the masses.

Scott has a natural, easy-going style that allows him to take his complex ideas and effectively present them to me.  I rarely find myself noodling around the same types of idea’s Scott has, i.e. what defines a friend, but I always walk away from reading one of his post feeling richer for the experience.

My ability to follow his sometimes rather arcane trains of thought is a credit to his writing style, a style I hope to learn from and incorporate into my own writing.

My Digital Reading List

At Viewpoint we do a yearly performance review to assess how the past year went, and to look forward to the next.  Around February we get together and bring in one’s direct supervisor, the director of engineering services, and a partner to discuss this last year’s performance, and set out goals for next year.  Being a direct supervisor, I’ve been on both sides of the table, performing reviews for my guys and being there for my own review.  I actually really enjoy the review process…a subject I plan to dive into in a later post.

I joined Viewpoint right out of college, and throughout those first couple years of my employment I flirted with the idea of going back to college and getting an advanced degree.  I remember in my second review I actually had two partners in the room discussing my future when I brought up the idea of going back to school.  The questions started immediately:

“What do you want to study?”

I was prepared for this, you don’t just go walking into a room ready to throw out you want to go back to school and not have a ready made answer, “I’m thinking of getting a masters in Computer Science/Electrical Engineering/Computer Engineering or possibly get a MBA.”  An MBA?  Yes, I threw out there I was interested in getting an MBA…now ask me what I was going to do with a MBA, go a head, I know you want to.

“What do you want to do with an MBA?”

Um…Um…Damn.  I’ve got nothing.

I had spent a good bit of time researching advanced degrees and realized that the courses needed for an advanced Computer Science, Electrical Engineering, or Computer Engineering degree did not really interest me.  In my day-to-day activities at Viewpoint I didn’t see where they would really fit in either.  For me and my career path, they seemed to be just certifications that I may never really use unless I went back out on the open job market.

An MBA on the other hand, now that had appeal.  With a MBA I could…I could…you know, I really couldn’t figure out at the time what I would do with an MBA.  I had gotten it into my head that the ability to manage the business end of the software business would serve me well, and the only place I would be exposed to that kind of training would be while obtaining an MBA.

However, the real reason I wanted an advanced degree…I needed to continue to learn and hone my skills.  Prior to joining Viewpoint I spent four years in college, now that I was out it was my belief that in order to continue to learn I needed to be back in school.

Plus I was scared of the box.

During the summer of my junior year I had a co-op at Keithly Instruments and saw first hand what happened as you aged in this business and you chose not to keep your skill set continually evolving and up to date.

You end up in a box.

They actually put you in a box in the back of the office; there is a ceremony and everything.  They place you in a huge cardboard box, cut out a few holes for air and to run network cable, and there you sit until the next downsizing.  The nice part about being in a box during a downsizing is that packing up your things is very easy-they are already in the box with you.  No fuss, no muss.

I saw a few engineers at my time in Keithly who lived in ‘the box.’  They decided at some point in their careers they had learned all they needed to learn and they almost actively refused to learn anything new.  They had mastered a set of skills and were going to run those skills right into the ground.

Actually living in the box isn’t such a bad place to be.  People from all over come to you and ask for advice, you are, after all, most likely the ‘subject-matter master’ with all sorts of knowledge about whatever it is you chose to learn.  It is often the case you have hundreds of hours with your knowledge, its been battle tested time and time again.  It withstands criticisms.  No one questions you anymore.  You are The One.

However, over time fewer and fewer people will come and seek out your advice.  After all, technology changes and more than likely what you know has been improved upon with a new tool, language, and/or system.  Hell the worst-case scenario is what you mastered back in the day is now being taught to freshman in college in a 100-level course.  Once those kids reach the job market your job is less and less secure.  Entry-level salary is likely 10x less than what you are making.  Oh and by the way, they are too new to have found a box to move into.  They’ll do your job and three others with the energy they have.

Pack up your things, no wait don’t bother, they are already packed with you in your box.

I vowed to never, ever find ‘a box’.

At the time of this review I believed more schooling was the only answer.  Get an advanced degree and stay on top of the industry.  I shared my thoughts and the story of what I saw at Keithly with the partners that day.

::Trivia Question: What company bought the company where the partners used to work before they formed Viewpoint?  Hint: It rhymes with Teithly Tnstruments::

That day I was told by one of the partners:

“Formulate a plan on what you would like to accomplish if you went back to school.  But, reading and staying on top of the industry may serve you better.  We are like sharks, if we don’t continue to read as they swim we will die just like they do.  College isn’t cutting edge, there is a wealth of knowledge out there right now, for free too.”

That day I started reading anything and everything I could get my hands on.  Initially, my reading list was not all that impressive; I read Slashdot, but not much else.  Over time I believe I have developed a fairly impressive daily reading list that I will be sharing here in the next couple of posts.  If I’ve missed someone please feel free to add them to the comments section I’ll check them out and hopefully add them to my list.