You Might Be an Amateur Programmer and Not Even Know It

I've noticed a trend in the programming industry. I never had a way to really articulate it properly until I read Wicked Problems Righteous Solutions, written by Peter DeGrace and published in 1990. The book predominantly covers the struggle of the waterfall development process during the 90's (not exactly a current events manifesto, I know). That aside, the book has an excellent excerpt that explains exactly what I have struggled to articulate.

The idea that I'm about to present was initially conceptualized by Henry Ledgard, and further explained by Peter DeGrace in his book (referenced above).

The idea is this: think of someone you hired to install tile in your house, or a painter you contracted to paint. What about those specific craftsmen says 'Professional' or 'Amateur' beyond their credentialed backgrounds and red-lettered work trucks? The answer is simple: the Professionals are organized, communicate regularly, and go above and beyond, Amateurs do not. Now, the term "Amateur" here sounds condescending, but it's not meant to be. Its a state based in two orders: the persons' mindset, and secondly, what they physically can or cannot do. This concept also extends to programming, where we encounter the two types: Amateurs and Professionals.

In addition to the Amateur and the Professional types, there is a third type, verbosely named 'the Amateur Who is Called a Professional'. This third type has four subsets that are worth mentioning.

The content below reflects my own expansion of Henry's ideas.

Pa1 - Amateurs who think they are Professionals

Examples of this subset are 1) recent graduates of college and 2) those that have been programming for a very long time.

I frequently deal with folks in this subset and can usually put this name-tag on them in their initial interview. It's 'that guy (or gal)' that can't figure out complex problems. He/She doesn't understand the end users' experience and thinks firefighting bugs are a way of life. He could also be 'that guy' that has been coding in single language for 10, or 15+ years. He's been in the industry so long that his raises come from switching positions or a cost of living adjustment (COLA). Now, 'that guy' is making close to, or over, six-figures. He considers himself both a professional, and an expert. But after hiring 'that guy' you soon realize he's not worth what he makes. A more appropriate title that is more aligned with his skill level is junior, or at best, an intermediate level, programmer. In my opinion, folks in this particular type are the most dangerous and difficult with which to work. 

Pa2 - Amateurs transitioning into Professionals

In my experience, this is where the bulk of the current programming population live. These folks are working their way to the goal of a becoming a Professional. They are constantly learning and they understand that they are not at the Professional level in neither skill, quality, or output.

Pa3 - Professionals who are really Amateurs

This person was promoted, but not for their programming skills. Maybe they were good with people, and promoted for their benevolence or altruism. They gained advancement for reasons other than their programming prowess. Now, they are Professionals but are really Amateurs when it comes to their programming skills.

Pa4 - Professionals who have become complacent by not staying current with their skills

You know who these folks are when you talk to them. They still code, but in an old language. They don't learn new things. They program the way they've always programmed because it's the only way they know how. Maybe they were Professionals at one time, but they no longer are. Refusing to learn new things, or not caring enough to, is a red-flag. 

9 Characteristics of Amateurs vs Professionals

Below are some bulleted characteristics of the 'Amateur' and 'Professional' types that I've have adapted to our modern, agile world. 

Amateurs vs Professionals

  • Assumes that the user is just like the programmer VS Never assumes user knowledge
  • Sees anomalies as a way of life VS Designs include "unusual cases"
  • Considers a review a nuisance VS Welcomes reviews
  • Continually fire fighting bugs after a release VS Releases programs with no known errors
  • Writes documentation last VS Writes documentation first (TDD, BDD anyone?)
  • Codes exactly as was told VS Asks clarifying questions and codes what works best
  • Doesn't like to be accountable & wants to work in a silo VS Open to being accountable and regular check-ins
  • "Gets on" with the job VS Works with a concern for future and larger systems
  • Writes code for the computer VS Writes code for the human being (end user)


'The Professionals' work reflects the standards of his training, understanding, and concern about the quality of his work. He is reflective, and senses the essence of the user and their environment, to the benefit of the client. The Amateur lacks these qualities._

Under which of the three types do you fall? Are you the 'Professional', the 'Amateur', or 'the Amateur who is _called_ a Professional'?