Lately I have been researching projects, papers, and ideas around implementing new programming languages. It’s a very interesting topic (to a geek anyway). I started off about a month ago with very little knowledge of the subject other than basic lexing / parsing / evaluation schemes (i.e., not much more than a basic compiler course would teach you). But then, it happened. I stumbled upon the work of Ian Piumarta for the Reinventing Programming project at Viewpoints Research Institute and I was hooked! (You can find most of his work on his website: http://piumarta.com/. In particular, check out the colas papers!). His work is fascinating and very informative. It really made me stop and look at programming in a different way, and then trudge through the vast amounts of information available on the web for this topic.
After diving into the informational side of things, I really wanted to get my hands dirty with some code. I searched and found a number of small programming language projects which are implementing some of the ideas which I had been reading. These projects include TinyRuby, Potion, IO, and Lua. I downloaded the code to them all! Soon it was very clear to me that it is much easier to understand the details when you start out observing small projects. (I had, at first, dove into the internals of Python, which is much more robust and confusing. While Python is one of my favorite languages, the CPython internals scare me.)
So, where am I going with all of this? Well, I’ve always believed in the concept of “don’t re-invent the wheel”, as in, don’t build something that has already been built. But, I also believe that you cannot really understand something in depth until you have immersed yourself. Once you are “in over your head” you learn a lot in a very short amount of time. And for this reason, I’ve started a new project to stretch my brain muscles. While I don’t really have much detail at this time, I’m sure that I will be talking about it in the future.
In the meantime, download the source code to a small project which is working on something that interests you. (Whether it be web frameworks, file systems, databases, etc). Dive in, immerse yourself, and learn something new! Also, rest assured that it’s OK to “re-invent the wheel” if the purpose of re-invention is to learn more about “wheels”.