Sunday, September 30, 2007

What is a Computer Programmer?

Not terribly long ago, someone asked me what I did for a living. This person knew that my title is Software Engineer, and that I call myself a computer programmer, but didn’t know what I actually spend my days doing. Unfortunately, I couldn’t give a good answer immediately. Obviously I need to work on my elevator pitch. So, what does a computer programmer do anyway?

Computer programming is a complex, largely mental activity, which has elements of math, science, and art so how should I explain it? I can’t just describe the actual writing of software. That’s not all of what I do. Heck, with tasks like requirements gathering, design, documentation, and communications involved, the actual writing of programs is not even the majority of it. Plus, the physical artifact that we produce is called “code” and nobody outside of the field knows what code is anyway. Talking about tools is an even more labyrinthine dead end. The myriad environments we use to design, write, find and diagnose defects, and produce documentation for the software don’t tell the whole story either. Not to mention that attempting to describe them to a lay person leads to conversations dying under the weight of a thousand acronyms. Simply speaking about my current task also doesn’t tell the whole story. Programmers change tasks often as we complete things or discover (or are told about) defects. Even within a given task there are layers upon layers of smaller tasks.

Actually, I’ve read something that defines a computer programmer as a creator of layered abstractions. That’s both fancy and accurate, but it doesn’t really tell you anything. The Wikipedia definition (at the time of this writing) is nicely circular: “A programmer or software developer is someone who programs computers, that is, one who writes software.” So a programmer programs, and a software developer develops software. There’s no help for me there. The Software Engineering Body of Knowledge defines software engineering as “...the application of engineering to software.” Hmm. With all these circular definitions floating around, perhaps I should step back and look at the individual words involved instead of the term as a whole. Us programmers call breaking a big problem down into discrete steps “decomposition.” It’s not as smelly as the name might imply...

The first part of computer programmer is the computer. What is a computer exactly? Originally, computers were people hired to do math calculations. The technology that we now call a computer was first known as an electronic computer. Thus a computer is a machine for doing math. Folks that don’t know the internal working of a computer may find that to be ridiculously simple, but it’s totally accurate. Even your fancy modern PCs are nothing more than glorified calculators with some special attachments. One of the most fundamental things about computer programming that can separate those-who-can from those-who-can’t is a grasp of the implications of everything going on inside the computer being simply numbers. And the numbers aren’t even that complex. The physical machine can’t handle anything but integers within a certain range. It can’t do more than the most basic arithmetic and logical calculations. Most computers can’t do much more than add and subtract, multiply and divide, compare two numbers to see if one is greater than the other or if they are the same, and move numbers around. However, the average computer can hold and manipulate quite a large quantity of numbers. And it can fiddle with them very, very quickly. This gives us a place to start when thinking about what programmers do.

We’ve already read that a computer programmer programs a computer and figured out what a computer is, but what’s a program? This time around Wikipedia is a bit more helpful: “A computer program is a collection of instructions that describes a task, or set of tasks, to be carried out by a computer.” That seems simple enough, but the devil, as always, is in the details. If you think about the things you do with your computer, you may notice something. Things like checking your e-mail, looking at digital pictures, reading Schlock Mercenary on the Web, or writing rambling ‘blog posts don’t sound much like basic integer math do they? You need computer programs to tell the computer how to do those things. In fact, you need layer upon layer of computer programs, all slowly building up abstractions to transform trillions of numbers being shuffled around into “send an e-mail to my aunt.” Thus, computer programmers are the ones who create the instructions for the computer that allow it to bridge that gap.

What do I do for a living you ask? That’s a very good question! I help design and build the instructions that allow machines that are only capable of doing very simple math very quickly to be used for all sorts of practical applications. It’s an interesting and rewarding field to be in...

Sunday, September 23, 2007

Notable News

Finally, there has been some interesting news again, after quite a long dry spell.

First up, there's the bizarre case of people who visit a crater in Peru becoming ill. Nothing conclusive is really known about the crater. The speculation makes it either a meteor impact or an explosion caused by an upwelling of an underground gas pocket. I expect to see that this will become the plot of a horror movie any day now.

Second comes the "watchdog" report out of England that shockingly claims better, more interesting teaching leads to less truancy.

And finally we have a modern take on the 60's era space technology: the nuclear-pulse drive. The idea was basically (very basically), to replace the conventional combustion of rocket fuel with fission bomb detonations in the engine nozzle. The idea was never used for a real ship. It seems the basic concept may have some new non-nuclear legs with the idea of using magnetic compression to trigger explosions . The claim is that the drive can generate the same thrust as the Shuttle main engine with an order of magnitude more efficiency.

Monday, September 17, 2007

Pondering the Meaning of the 'Blog

Back in 2005 when I started this little experiment, I had this to say about what I intended.

So what exactly does one put for their first weblog post? Should this have been a manifesto staking out my claim to be an expert on some particular subject? Perhaps I could have written an elegant missive espousing my own personal philosophy? Maybe it should have been a detailed and well-sourced critique of the spread of yellow journalism.

Well, the first post isn’t any of those things because this ‘blog isn’t any of those things. I may touch on all of the subjects above, or I may spend hours writing about the wacky exploits my proverbial neighbor’s doctor’s cousin’s cat. See, it's all what I'm thinking about. Or just what looks shiny over in the corner.

Welcome to my bit-stream of consciousness. Swimmers beware, there are no life guards on duty…

As you can see, I didn't have much of a goal at the time. That will change, but only if I can make the time to actually create content. There's no way I'm guaranteeing good content.

Sunday, September 16, 2007

The New Digs

After using Bloglines as my posting location for a while, I decided it was time to take a step upward in 'blog functionality. Say hello to Blogger. I'm going to be re-posting some old posts for a time, perhaps with some additional commentary. Hopefully, it will help me get used to how Blogger works. I'm also going to be playing with the look of things for a while before I settle on something permanent. So for my long-time readers (both of you), thanks for following me through the move, and for any new readers, bear with me for a while to get a feel of what the subjects are around these parts.


As always, the posting schedule will remain erratic, and it will be somewhat infrequent as I sink writing time into figuring out Blogger templates and such.

The 'Blog is Moving

My post frequency has dropped off lately, but not much has caught my eye in the news and I've been busy with other stuff. Among those other things was taking a hard look at my "work" flow for these writings. I've decided to move to Blogger as a hosting solution. I want to thank Bloglines for being an excellent feed reader (which I will continue to use) and for getting me started in the web writing world. I have long-term plans using the capabilities of the new platform (and by long-term, I mean it's probably going to take me forever to get things set up and prepared), so please bear with me during the transition time. And if I haven't mentioned it recently, thanks for reading!

From now on, swimmers in the Bit-Stream will have to paddle over to:
http://bitstreamofconsciousness.blogspot.com/