“Art allows people a way to dream their way out of their struggle.” — Russell Simmons
My first real language was Pascal. My first few programs were written in Basic, but even then it felt like a toy language. Many of the techniques that I learned from Basic applied directly to Pascal though — control structures like loops, conditional statements, operator precedence and so on. Just like mathematics is built upon fundamental axioms like the Well-ordering principle, programming is built upon these fundamental techniques. They’re constant, they don’t vary from language to language.
Layered on top of the axioms you can find the more advanced techniques like list comprehensions, structures, functions, and objects. In one sense, we are forever indebted to these little ideas because they pave the way for abstraction — which is just a fancy word for solving a specific type of problem with some code, then bundling it up so that you can apply the same solution to that type of problem whenever it comes up again (e.g. sorting a list).
But in another sense, a very real sense, this all really sucks. On top of a fine and well-designed language, vendors and open source communities construct whole hosts of class libraries and SDKs each with their own naming conventions and usage patterns. Out of this comes an interesting incarnation of the 80/20 principle — while negotiating the learning curve, a programmer might spend only 20 percent of his time learning a new language syntax and how it applies the same axioms she uses in other languages, and I would guess somewhere near a whopping 80 percent of the time mapping out the new class libraries involved.
If you want to iterate over an array summing up all of the integers it contains, it’s pretty much the same whether you’re using C, C#, or Java. If you want to scale an image to half of its original size, the method of doing this varies greatly between Microsoft’s .NET family of languages, Adobe’s class library, and Apple’s Cocoa. Add to this the fact that these class libraries are in a state of constant evolution, such that knowledge of what was valid 2 years ago may be completely useless now, and you start to get my point.

It’s extremely frustrating. There has to be a better way. This is just one of things about our craft that absolutely needs to improve in the future.
Tags: agile, api, development, programming, software