Codecademy has gotten some press about their Code Year project to teach you to write code, i.e., software. It doesn’t seem to be aimed at people on the typical computer science and engineering track but rather as a a basic literacy skill for anyone.
I forget sometimes I didn’t set out to be a programmer. I’d written some web pages that were simple documents, and knew they were lacking compared to “real” web sites where you could search, order a book, or buy an airline ticket. So I bought a programming book, found a small project to use it on at work, and the rest of my career fell in to place (eventually).
As a programmer, I have a different (better?) idea of the value of the technology we deal with daily in modern life.
Here are some examples. You can probably think of ways to dispute the particulars, but that’s why they’re examples, not proofs. (There’s my programmer-mind searching for discrete logical results again, forgetting that my blog audience has analog brains and doesn’t think in one’s and zero’s….)
Example #1: Twitter
Twitter is tremendously popular. I use it and it’s a lot of fun. I think a lot of people think it’s some amazing technology. It’s actually kind of tricky in that way: character limits, coded abbreviations, URL shorteners and hashtags all seem very technical. In fact, this originally turned me off to Twitter; I’ve lost count of the number of times in my career I’ve made a field longer or modified an app to take advantage of a higher-bandwidth connection, and Twitter was doing completely the opposite! Now I think people are attracted to the game (just like some programmers try to write the shortest program possible,) even if it’s cryptic to the point of being a novelty. Twitter isn’t some great technical advance; it’s really pretty simple: a couple web pages and a couple tables that any professional developer could implement, at least in its basic structure. What makes Twitter one of the leading social media platforms is not technology, but that millions of people use it. This may even make it more valuable as a business: lot of valuable users, without having to invest a lot in technology. (Admittedly scaling up to its current size is, as programmers like to say, non-trivial.)
Example #2: Netflix
On the other hand, Netflix seems simple. What could be simpler than watching TV? But parts of Netflix rely on some very sophisticated technology. Computer scientists competed for a million dollars over the best algorithm to recommend movies. Video compression and reliable streaming are hard. If you can invent a better video compression algorithm, you can probably get rich. We take it for granted that we can watch Netflix on almost any device (and we get angry if we can’t), but building native streaming players that enforce DRM (whether or not you want to) on multiple platforms and making them work well enough to compete with cable is very hard. Of course, Netflix does other difficult things like negotiating with movie studios. But I think a least part of the reason I pay for Netflix every month (and use Twitter for free) is that they have a lot more value in their technology.
Example #3: Verizon vs. Vonage and MagicJack
Vonage and MagicJack want you to think that they have some innovative new technology that can save you money. Maybe they could save me money, but from an engineering standpoint, I find them odd. When I pay my phone bill (well, FiOS bill) to Verizon, I can (barely) justify the expense knowing they maintain a huge physical infrastructure requiring real estate, trucks, union salaries, miles of expensive copper wire and glass fiber. I could plug a Vonage or MagicJack device into my Verizon Internet connection, but I’d still be relying on Verizon’s real estate, trucks, union salaries, miles of wire, etc. and my voice would get turned into the same bits on fiber either way. Any difference is a result of politics and commercial issues; there’s no fundamental technical reason these services should save you money.
So, have I convinced you to make learning to program your New Year’s resolution?