Free Your Code

Anyone who has written code over the years invariably has a collection of programs, libraries, and snippets that are strewn about a dozen different computers, hard drives, CDs and maybe even a handful of floppies. The origination of this code may have been school projects, experiments, or the ramblings of a coder mind. Whatever the genesis for this code, the reality is that much of it is lurking in the corners of your digital landscape, like dusty cobwebs hoping to catch a midday meal for a long forgotten creator.

This code can continue to rot and fade into nothingness. Alternatively, this code can be released from its current form and be free. This is my argument for sharing our old code with the world. Put it somewhere everyone can access it. Study it. Review it. Let anyone who has an interest learn from what you have created. I found any number of excuses for not doing it myself: “it’s not done”, “it’s ugly”, “it has bugs”, “it’s my solution”… the list goes on. Sure, we can all make those claims and many more but it still doesn’t change the fact that this code is contributing to the greater good. I’m not talking about code that we’ve written for hire (commercially or otherwise)—That code ultimately belongs to someone else and it is their decision to free it. Don’t underestimate the value of the code that you can free.

Another benefit to freeing your own code is that it will make you a better coder, a better designer, a better architect. The interactions you have with other with regards to your contributions will teach you. Your own expectations of what you write will also rise, knowing that it may receive a lot of attention. I wonder how many unfinished projects, how many ingenious algorithms, and other interesting artifacts lay about this world.

What contributions are you willing to free?

Celebrating Life Through Programming Languages

On the eve of my birthday, I realize that for those of us who program, we tend to get excited when we talk about the programming languages we’ve used over the course of our lives. These languages not only make us laugh at times, but they also give us cause to celebrate and make us nostalgic. We can even measure our own existence by the languages we’ve used—like the growth rings of a tree. I think it’s possible to approximate the age of the coder in question by asking them the first language they learned—and the answer can sometimes give clue to the age of the inquisitor.

My own personal journey started with Apple Basic, and then Apple Logo, followed by Atari Basic, Atari Logo, and then my first “real” language: Pascal. Soon to follow were Modula-2, 68000 Assembly, and DEC VAX-11 Assembly (thanks RIT). Next was C. C was a game changer for me. It was the first time I felt that I had the power of assembly but the convenience of a higher level language. Its terseness was seductive, although punishing at times. I still remember helping various classmates understand the concept of pointers. I guess C forever earned a place in my heart because soon after learning it, I had to write Cobol.

But life continues. C++ was breathing heavily on my neck and was a force to be reckoned with. OOP was not a concept taught formally at the time and the new powerful modes of expression took time to understand and then appreciate—much like wine, the air needs to let it breathe for a while for the full complexity and richness to develop. It was inevitable that Java would be along the path to maturity, but I fought it like an aging hippy fighting the establishment.

The Internet era brought a mixed bag for me, a bit of the new, a bit of the old. Languages such as Perl, JavaScript, PHP, Ruby and Python were also learned. In an sentimental bout I even wrote an Intel 4004 Assembler—not that it was useful, but it certainly was fun to learn the history of this pioneering microprocessor.

Even when I thought I had all the possible languages I would need, I learnt one more: Scala. I appreciated what Scala did for me—it removed the disdain I had for the JVM and made me feel oddly comfortable with a syntax that seems part Java and part C++.

I’ve probably forgotten a few languages—I know one or two are even languages per-se (some horrible report generation language from Cognos) and various scripting languages (Matlab, LUA, etc)—nowadays probably better known as DSLs. What will be in the next few years for me? C#? Objective-C? Go? R? Lisp?

I hope you, too, take a moment to think about the languages you’ve learned along the way. I hope you can laugh at some of them, too, just as I have.