I code for fun.
When I was quite a bit younger, it was pretty early in the era of personal computers, pre-PC revolution. I’ve been pretty clear about how much I loved my Commodore, so I won’t drone on and on about that here (you may breathe a sigh of relief now, but this post reads well with the theme from M.U.L.E. or better yet, a remix of Outrun playing on your headset). Back then, our personal devices – Walkman, early (and crazy expensive) scientific calculators, and…umm.. well crap, there wasn’t much else of interest to carry around other than rubik’s cubes and rabbits foot keychains... anyway, back then, those devices were fixed, you couldn’t really enhance them unless you wanted to start soldering boards.
They were limited by what a small number of designers and engineers thought they should do -- that was the extent of their capabilities.
It’s not like you could write a codec and suddenly your walkman could play DAT cassettes.
Even if you did do some soldering, the possibilities were pretty limited. Later, when I was finishing up high school, programmable scientific calculators that ran a tiny version of BASIC started appearing, but they were limited and (let’s face it) supremely dorky – carrying one around was pretty much an invitation for people either to kick you across the schoolyard, or follow you around like a lost puppy, hoping you’ll cough up the math homework answers before 6th period.
It was easy to get in to programming because for programming, you basically had just computers. You could go super deep on a single platform and form factor. However, the experience was very limited by that fact.
Programming was a sit-down desk-oriented hobby, and if you wanted to show someone what you had done, you either had to hook up ye old 800 pound VCR to the C64 video output (loved that) and bring a tape to show your friends, or drag people over to your computer so they could nod and pretend they understood just how much effort you just expended to make that ball bounce around the screen. Sometimes *gasp* you would just print all the stuff out on beautiful fanfold (crinkled and half-separated on one side from jamming, of course) and show people your printouts. Sometimes you’d upload stuff to a BBS, but there was no always-on internet connection to use to show people what you’ve done, and screenshots weren’t exactly friendly to 300bps modems.
So, it was fun. You programmed for computers, often just for the sake of doing it. The stuff wasn’t portable, so you were forced to stick to the bedroom/den/basement/dungeon or wherever you coded.
Today though, it’s a different story. It seems like everything and everyone is coming out with APIs and SDKs for their devices. You can code for pretty much all the devices you’d care to. In fact, if you manufacture or run something useful as a device or web site and don’t have an API or SDK, you severely limit your product growth as 3rd party and consumer-written apps are killer (iPhone and Windows are both proof of that).
Virtually every phone we carry can be programmed. Initially you had Java and C++, later .NET and with the iPhone, ObjectiveC (and MonoTouch/.NET). With the Android you can do pretty much whatever you want to the OS, assuming the carrier hasn’t locked you out, and with the upcoming Windows Phone and rumors of Silverlight on same, we can all build some awesome apps. You can write code for something in your pocket, carry it around and make use of it in the supermarket (not to buy brussel sprouts), club, whatever.
While most of those devices are computers in all but name, we’ve also got netbooks for dirt cheap that are as small as a hardback book, a third as thick, and weigh even less. They’ll run most modern operating systems and let you code on them using just about whatever you want. It’s your whole development studio or design portfolio, and fits in a purse (or, umm, a man purse, I guess, not that I’d know <g>)
Back when I actually had time to play video games on a console, it was all a closed system. There were hacks to create your own trusted cartridges without paying royalties and signing huge contracts with the console vendor, but it was a real chore to find the info and program the chips. Today, if you want to write games to run on your Xbox, all you need is .NET and XNA and membership to a very open creator’s club. It encourages exploration and experimentation, and helps provide a huge audience of people to try out your stuff.
The developer community makes it better.
We have microcontrollers like the Arduino, robotics like Lego Mindstorms, watches that run micro frameworks, desk phones with full computers embedded in them, smart panels, programmable homes, and now an ebook reader (Kindle) that too has an SDK so you can write your own casual games or whatever else you want to run on it. No one bought the Kindle thinking it was a development platform, but Amazon has decided to make it into one, make it far more useful than just a book reader. It will break out of the world of product designers and engineers and grow in directions perhaps unconsidered by the manufacturer.
Entertainment centers are as programmable as desktop computers (assuming DRM and “trusted paths” don’t get in your face), and today’s equivalent of the walkman (Zune etc.) can run most any code you throw at it. Zune will even let me run my .NET code using the same development environment and libraries as the Xbox.
The proliferation of developer-friendly devices is a bit like Mozart waking up one morning and finding out that anything can be an excellent musical instrument as long as you tell it the notes to play – no other artists required.
Or perhaps more appropriately, it’s like my kids just found out they can color on any wall they want.
That’s awesome :)