Don't teach your kids to code. Let them be kids.

I've seen more and more of a push lately to integrate programming into children's development.  The idea is a bit abhorrent to me, which may surprise you as I am full-time software developer.  Understanding what it means to be a software developer is paramount to understanding why it may or may not be a good idea to push children into that line of thinking.  This is because software development changes how you view everything around you, for better or worse, and therefore at least a cursory knowledge of who software developers are is required. 

Throughout my career I've had the opportunity to observe many different types of professional developers and gain some insight into common traits they share.  To dumb down the myriad of professionals I've worked with, I could lump them into 3 types, as follows.  Understand that the labels below are stereotypes and will probably not fit perfectly a single developer out there, although I suspect they might hit close to home for more than a few.

Three Types of Software Developers in the Modern Era

The Day-to-Day'er 

This guy doesn't care too much about what he's developing, just that it pays the bills.  There is little to no passion or creativity in his work because he lives outside of work, and only comes to work to get paid. 

No judgment about this guy because there is a lot to be said about valuing the things that make you most happy in life (family, etc.), most of which are found outside of work...except that this type of developer is a pain in the ass to work with.  He cannot be assigned tasks that involve complex problem-solving nor creativity.  He cannot be expected to create a self-contained module that 'just works' because he's thought of every scenario.  He must be lead by the hand in nearly every line of code that he writes.  In my opinion, this type of programmer is useless in today's world, but he does exist.

The Master of Balance 

This guy does not solely define his identity with his job, nor outside of his job, but he seeks a balance of work and life at all times.  The rarest of developers, he knows that that balance does not come easily or naturally and he will be buffeted by demands on either side, at all times.  Sacrifices are made sometimes at home, and sometimes at work to maintain that balance, but above all else he knows that he works to live, and does not live to work. 

His life is not all about getting ahead professionally, nor is it about spending all of his quality time with his family.  An honest day's work for this developer is met with an equally honest and earnest effort in the home, or other interests outside of work.

The Balanced programmer has passion at work, but will not sacrifice 'after work' time to pursue that passion, to an excess.  When time at home permits, sure he'll bring his work passion home, but otherwise there is too much to do after hours already that most work and home passions must be controlled.  This means he prefers that things be done the best way, that complex problems can be solved (although maybe not as swiftly as the Unhinged Programmer) through him, that he can exert a great deal of creativity on the job, and that he is passionate about what he does.  Or not, if what he is currently doing is more mundane (let's face it - sooner or later, part of every job incurs the mundane).

While undeniably the most valuable of the three main types, the level of immediate value is requisite with the developer's skillset (which can wildly vary).  He is reliable as far as work output is concerned. If you find a balanced developer that is also brilliant, you have hit the jackpot in your recruitment search.

The Unhinged 

There's actually two types here: one that absolutely loves to program above all else for programming's sake and one that is undeniably brilliant at programming but also loves to program for programming's sake. 

Either way, the unhinged programmer is a type of person that sacrifices personal relationships for their passion about software development and, with the second sub-type, has an undeniable tendency to look down on everyone else around him.  Humility and great skill seldom walk in tandem, and that seems to be even rarer among brilliant developers.  Managers will lift them up on their shoulders and parade them as the saviors for their product.  Peer developers will reverence them with a continuous stream of questions, and they will be the go to for any real and lasting problem solving that needs to be accomplished.  They are at times the reason that a product is released, but also can become the reason that a product is forever stuck in beta land.

There are two main problems I have observed with the unhinged:

They are unreliable.  They tend to flame out once whatever it is has been resolved, and have difficulty approaching another problem with the same level of brilliance.  They tend to be ruled by whatever grabs their passion, and not what makes the best business sense.  What they do is not necessarily what will be best for the company nor the product, but what sparks their interest the most.  They are, essentially, passion junkies.

They are nearly impossible to collaborate with.  No matter what problem is presented, the proposed solution(s) are never good enough unless they think of them.  They tend to have very strong opinions about what and how solutions are coded, and those opinions are treated as laws rather than personal preferences (e.g. spaces or tabs?).  The unhinged are best left to themselves in a silo, but that is only rarely appropriate for software products.  Most products require a tremendous amount of collaboration from many different areas of the business (including customers) and the unhinged just cannot be bothered by all of that.

NOTE: You may think me harsh in labeling these people as 'unhinged' - in no obscure way indicating a mental imbalance in their psyche - but I think the label is actually quite accurate.  These people tend to be anti-social narcissists, the worst kind of friends, even worse lovers, and contribute to society only for their own self-interest, even while contributing to many open source projects online.  

Back to the point...

Bringing up these three generic types of software developers leads me to my point about introducing kids to coding at an early age, although in a roundabout way.  If our goal is to get kids to just love coding, then we are lining them up to become anti-social, unhinged developers when they get older.  Kids should be involved in kid stuff, at all ages, developing their gifts and talents along the way, and if they happen to land in the glorious land of software development when they mature, I would hope that we have striven for the balanced programmer in them, and not the brilliant but unapproachable unhinged one.  A child's development is so myriad and so complex that I would hope we allow as much diversity in that development as possible.  If a child has a predilection towards software development, of course don't stand in their way, but also make sure to develop other areas, especially an understanding and love for healthy personal relationships, something that cannot ever be coded or machine-learned. 

At the end of the day, we all need each other to be happy.  I personally have tried to the very extreme to disprove this reality, but I learned some years ago that even though I don't understand it, I must still accept that I need other people in my life to truly be happy.  In fact, the more people I have in my life, the greater the potential for my happiness.  I have walked the unhinged programmer's path for a time, so I am bashing myself as much as anyone else in this article.  I had to learn for myself that personal relationships are important (argh!), and I'd better reorganize my life and my priorities around that idea or I will set myself up for life failure.

It's taken some time, sacrifice, and a lot of personal growth and change, but I can say that I have steered away from the unhinged towards the balanced developer, and my life is all the better for it.  I have four wonderful kids and while I show them from time to time what I do for a living, I have not given much credence to STEM or other educational programs that can encourage unhealthy priorities and perspectives in them.  There's so much beauty and wonder in the world and only the tiniest fraction of it can be found staring at a computer.































Comments

Popular posts from this blog

35x Improved T-SQL LevenShtein Distance Algorithm...at a cost

The hidden workings of __doPostBack - Full or Partial Postback?

Facing Death...dum de dum dum