Programming "/>

The theory of Thumbs

18 June 2021 at 5:10 pm

Article image for The theory of Thumbs

Today I came across an old post on Quora by Joe Cassavaugh that really resonated with me - I’m a Thumb! ​Throughout my career as a programmer, I’ve had many opportunities to go into management and climb the corporate ladder. I’ve always said “no thanks” and the reason is simple - I love solving problems and creating things. Some would say that management is some of this too, but I have no interest in the “people problems” that come with executive work.

What separates a great programmer from a good programmer?” is a question that keeps coming up on Quora in various forms. There are many good replies and by some of them, I’m maybe not a good programmer? I mean - the “imposters syndrome” kicks in for most of us, so any good programmer will never call themselves a RockStar Programmer or a Code Ninja?

One reply by Joe Cassavaugh really stood out and you can read the entirety of it here, but this is the gist of it:

I subscribe to the “Thumb Theory” of programmers. There are Thumbs and there are fingers. Very few programmers are Thumbs, and any development organization only needs one (or maybe two thumbs). The rest of the programmers are either fingers, or worse broken fingers.

The following is my list of the characteristics that great programmers seem to have that good and poor programmers lack:

  1. Thumbs do whatever it takes to get the done, and they usually do it in an order of magnitude quicker than fingers (if fingers can get it down at all).
  2. Thumbs remember everything they’ve done and don’t usually have to look up their code (or code they’ve looked at) in order to discuss a problem. (They’ve basically internalized all code they’ve ever written and constantly run the new problems against all the problems they’ve ever solved).
  3. Thumbs read a lot, including systems documentation (especially when debugging something). However, they don’t trust the documentation until they see the code actually working that way.
  4. Thumbs are great debuggers. (It’s because it makes them quicker, and they care about reliability, as opposed to “pushing around the code” until it sort-of works (which is what most fingers do)).
  5. Thumbs question the “conventional wisdom”/fads of the moment. Goto-less programming, OOP, over-commenting, self-documenting code, Agile development, Component Architecture. They don’t prefer any one language over another, because they know it’s “all code” and again, they’ll do whatever it takes to get the job done.
  6. They actually enjoy looking at, and fixing other people’s code. (Fingers and broken thumbs that try to be prima donnas often have NIH syndrome (Not-Invented-Here) and will rewrite from scratch “broken code” at the first chance, instead of finding and fixing it.
  7. Thumbs are both excellent Software Engineers and Hackers depending on the current project/problem their trying to solve.
  8. Thumbs take no prisoners and think about both short-term solutions and long-term ramifications of their choices.
  9. Lastly, true Thumbs will probably never go into management (and if they do they will keep coding on the side (and/or any chance they get)). Basically if a Thumb is not paid-to-code, they will still code on their own.
  10. And really lastly, as soon as a Thumb has a mental image of the solution to a problem, the Thumb wants to code it as soon as possible, not to see if he’s right, but to see how elegantly he can transcribe what’s in his brain into actual code.

And if he’s a bit-twiddle-r at all, he may still be an excellent programmer, but he’s not a Thumb. (A bit-twiddle-r usually has NIH syndrome as well. At best, they are broken Thumbs (that may not know it yet)).

I've worked with a lot of "Fingers" and a few "Broken fingers", so I know the three types he describes here. I would never say that I’m a RockStar Programmer, but I really do identify with what Joe describes as being a Thumb. I’m pragmatic, flexible and love learning new things. Like all things - you are only as good as your toolkit, but by constant learning you get better over time to see what is fluff and what is core to a project. And as noted in #9 - I cannot see myself go into management and yes - #10 is all so true 😊