Because One Computer is NOT Enough!!

I’ve always been a tinkerer.  The classic child who took things apart, and put them back together (with the obviously unnecessary parts left out).  I’m old enough that I got to play with tube radios and televisions, which had clickable dials by the way.  Telephones and typewriters (with actual mechanical keys) were some of my favories.  I had the radio shack “25 in one” electronics experimentation kit, with those spring clips to connect the wires, and I dream t of being able to purchase a Heathkit computer to assemble.

Roll forward about 30 years…

In recent years, I’ve rediscovered my passion for hardware, having been a code slinger for a good part of the past 3 decades.  My reignition got started with an Arduino.  That was great because it’s a tiny little board, with just enough processing power to blink some LEDs.  You can understand the whole thing, including how to flash a firmware onto the thing.  But that got me to thinking, and experimenting.  Now I have a hardware closet that looks something like this:

Arduino, Teensy, Netduino, JeeNode, MapleSTM32 Discovery,  GumStyx,

There are quite a few others in this low end category, scattered amongst the digital entrails of my workshop, but these are probably the most popular.  These all have a least a couple of things in common.  You can hold them in your hand, they can be powered from a battery, they are under $300, and often under $50.  I use them variously to do anything from just blink a few lights, to powering some piece of motorized equipment.

It was not long ago that the computer industry was highly concerned with solving the problem of a computer for every child for under $100.  Nowadays, with general purpose tablets rapidly approaching that price point, it no longer seems like a particularly hard problem to solve.

Recently, I’ve been delving into a new class of hardware.  More powerful than most of the microcontrollers, but almost equally tiny:

These have a few things in common.  They roughly fit in your hand, they’re all roughly capable of running near 1GHz, and they all have substantial amounts of RAM available, typically from 32Mb to 1Gb.  Probably most importantly, they all run one form of Linux or another.

Between the microcontroller based units (Gumstyx is in its own category), and these beefier machines, cell phones, and various other devices, the world is rapidly becoming littered with computational power, almost like dust.  Soon enough, anything big enough to hold a small watch battery and some double stick tape is going to be a ‘computer’ with the intelligence and connectivity of what you would have considered to be a desktop machine just 5 years ago.

This makes for an interesting dilemma for me as a programmer.  In the past, I could almost just pick a ‘platform’ and go with whatever dominant tools were on that platform.  For the better part of the past 20 years, this often meant Wintel, and probably Visual Studio.  This particular pony culminating with C# at the height of its power.  In more recent years, Linux/GCC has been the platform/toolchain of rising importance.  Even more recently, it’s been the Apple/XCode, and Google/Java combinations that have been gaining in importance.

What’s a programmer to do?  I want to play on all these different platforms, and I recently wrote up what my ideal environment might look like.  Truth be told, a modern day programmer, who wants to be able to ply their trade on multiple fronts, needs to be poly-environmental.  You need to know JavaScript, as well as a bit of ARM assembly.  Knowing C/C++ will always be a good thing.  You need to know C#, and Java, HTML 5 (Canvas, CSS, WebGL), as well as Node.  You need to know about OpenGL/ES/EGL/VG, and everything about software based radios, 3G, capacitive touch, H.264 encode/decode, and a ton of stuff in between.

Is it possible?  Not if you are locked into a traditional mode of development where you “pick a platform” and ride it for the significant part of a decade, doing nothing more than fixing bugs in stuff you wrote a decade ago.  If you want to be a modern day rennaisance programmer, you need to pick up a few of these different environments, hardware plus toolchain, and get to programming!

As I’ve said before, the software and hardware worlds are colliding.  When a ‘router’ fits in the palm of your hand, you’ve got a net node component, which is inseparable from the software that runs on it.  It’s just a piece of software, that has physical form.

When an entire computer fits into a form factor roughly the size of a stick of gum, you’ve got the makings of ubiquitous computing, which makes you ponder not just parallel programming, but massively distributed cooperative processing environments.

When you’ve got all this compute power, in the palm of your hand, for less than it costs to take a family of 4 to dinner at Denny’s, you’ve got a world of possibilities and new skills to learn.

I really enjoy working in this world.



Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s