Why I Enjoy Writing Code (i.e. being a programmer)

I remember taking my first programming course while I was serving my second year in the U.S. Army.  I took a course in VAX BASIC at Pikes Peak Community College at Ft. Carson.  Although I think it might have actually been QBasic or some other flavor of BASIC.  All I can remember is that it was very basic introduction to computer programming.  The course consisted of basic data types, control logic, loops and arrays - simple topics to me now, but quite foreign to me at the time.  

Back then I took the course more for promotion reasons than anything else - to get promoted in the army, college courses carry a significant amount of weight for promotion points.  I took it because it was available and it would help me reach my promotion goals.  

Although this was fun I didn't think that I would ever care for programming computers all day long every day.  No, not me I wanted to be out and about being physically active.  Back then, an office job, just sitting behind a computer eight hours a day just seemed monotonous and boring to be quite frank.

Fast forward 20 years and that is what I do with a good chunk of my day - and most of it is not during work hours.  These days I tend to write more code on  my own time than I do at work.  A lot of my job these days has become to guide and mentor developers as well as manage the day to day operations in the creation of software.  I still sling code from time to time and in many cases I fix bugs and defects that I can proudly proclaim.   Most of the time I take dusty code, clean it and polish it.  I fix tough bugs and proudly can say that my work is leveraged my thousands of people around the world. My job is quite fun, although at times hectic. 

In my off times I like to write code as a hobby.  I have probably created more small progams the white house has rooms.   I've written program that help me solve mundane tasks at work. Sometimes I write programs just to get a deeper understanding of how things work - like when I wrote my own mini language parsing framework for my DSL (Domain Specific Language) Feemo.  I also once wrote my own Dependency Injection framework to get a deeper and better understanding of the use of reflection in .Net. 

Currently I have an application that I call Windows Todo to help me keep track of my to-do list.  I use it both at work and at home and it has proven itself quite handy.  I wrote a code line counter that counts the number of source code lines in computer programs. It's has counted the official count of our flagship application that I am currently engaged in (approximately 1.6 million lines). I''ve used that counter in many occasions to count lines of code in many different projects and it has proven itself quite handy and has helped in producing value cost/value metrics.  Until I created the solution, the LOC (lines of code count) for our flagship product was unknown.  I created my own version of Asteroids just to see if I could do it in a windows form with C# dot net and the GDI. These are only but a few examples of the sorts of things that I have created.

I say all of this to illustrate the main point of this post -  to speak about why I enjoy writing code.  I enjoy writing code because it allows me to create.   Writing code allows me to bring life to a computer that would otherwise sit in an idle loop.  For those of you that don't realize it, yes your computer is constantly in an idle loop like a pooch in his mat waiting for a boy waiting to come play with him.  Just like that the computer is sitting idle waiting for a user to run some type of application or another.
Writing code allows me to write things that are abstractions of real world things yet they are nothing more than words written on a plain text file.   It allows me to design structure and behavior. Uh., let's see all living things have structure - a body - and things they do - behavior. So in a way I'm creating life (or at least it feels like it).  I basically bring a computer to life.  The programs looks and behaves exactly as I tell them to.  In many cases it may not be as I intended but it certainly is as I designed them. To ordinary people this may seem like a boring and tedious exercise.  I mean how many people would really enjoy studying something for hours on end to create a simple screen that asks you your name and simply replies "Hello John". 

As a beginner or ordinary person you tell yourself this should be much easier.  Writing software after all is hard, very hard.  It is as hard as anything worth learning.  For anyone to say otherwise would be to lye.  To illustrate this point consider this: a programmer attends school for 4 years and when they graduate, their programming skills are mediocre at best.  They are junior developers that must be constantly guided and coached.  This does not mean they're not smart. Nor does it mean they can't build attractive and functional applications. It simply means that it takes study and practice, lots and lots of study and practice to design well.  A young colleague of mine once asked me "so how long does it take to become good at programming?". My response was "on average about 10 years" and even then that is no guarantee.  He was a little disappointed because he was just starting out.   I asked him not to be discouraged and to keep at it.  Just because you're not great at first does not mean you can't do great things.

As hard as programming may be, it is enjoyable for many reasons.   It may not be as cools as robotics but it's the closest thing to it and actually with all the new open source micro controller hobbyist type technologies it is necessary for that sort of thing.  The only difference between robotics and computer programs is that the outputs go directly to the screen or a file system. Whereas a robot is physically moving and affecting the world around it.

Writing software is fun and quite enjoyable.  There is a significant amount of gratification to see your instructions automated and working in perfect synchronization.  For that very brief moment that your program is done you can say I created that.  I told the computer what to do.  I took my thoughts and an conceptualized them into a working design.  That code has my signature all over, faulty buggy, clean as a well-written prose or somewhat hasty, but it has my signature.  That code is my baby.  The collection of engines, processors, thing-a-ma-jigs that do who knows what what were created by thoughts transported by my fingertips into that computer.  That's a great feeling.

I don't tend to talk about this much to many of my friends because for the most part they are un-interested in this sort of thing.  This post is however dedicated to you (my non-techie friends) and your children.  Technology is at the heart of the information revolution.  It is fun and exciting.  It is only hard when you don't enjoy doing it. It is a great way to make a living with a descent pay.  Sometimes I can't believe that I get paid to do this.  I can only hope that this short post will inspire many of you and your children. 

We currently have a fore casted shortage of engineers, software and otherwise in America. So much so, that we cannot even fulfill them by bringing in citizens from other countries.  We still have many unfulfilled positions all over. 

"Computer Software Engineer is projected by the US Bureau of Labor Statistics to be one of the fastest-growing occupations in the United States through 2016."

I can't even begin to tell you how many unsolicited calls I still get for job opportunities.  I don't take a single one for granted.  Introduce your children to technology and inspire them and chances are they will enjoy it.  They will also secure a good standard of living for themselves.  I hope I have planted a seed of inspiration somewhere in any of you that may be interested in becoming programmers.  Maybe one day you will enjoy programming as much as I do.

Until next time happy coding. 



Popular posts from this blog

Simple Example of Using Pipes with C#

Difference Between Adapter and Bridge Design Patterns

Remote Access to Your Home Desktop Using No-IP