I came upon the word autodidact only very recently, and apart from the fact that The Didact is the name of an awesome character in the Halo universe I thought it was a good way to describe the way I currently feel about learning more about the world of software development.
I consider myself quite a decent software developer (engineer, programmer, hacker, whatever...) but I know there is always so much more that I can be doing and so much more that I can be learning. That's one thing I love about this industry, it's so vast that there's always something out there you can improve your knowledge in.
So I decided to try to find something to work on, in my personal time, to make me a better developer and to expand my problem solving capabilities in general. Following the example of sharpening the saw, I figured doing something that is a bit outside the realm of what I currently work on would be the correct choice in helping me to achieve that goal. It seems these days that everyone is talking about functional programming and (except for using LINQ in .NET) I've not really immersed myself in functional programming yet, so that seemed like a good choice.
So it wasn't too difficult to decide to start working in my spare time with a functional language. But which one to choose? I already work mostly in .NET, so F# seemed like a good choice, but then again that seemed a little too easy and "safe". Therefore I decided to go a little out of my comfort zone, but not too far, and settled on Scala. Being based on the JVM and Java, which is at least recognizable to my .NET experience, this isn't too far of a stretch, but by choosing Scala, I'm doing something that is definitely different, and which allows me to build up some functional muscle.
Finding a Project
The next step was to choose something to actually work on. I find I get excited about a lot of different projects, but then once I get started on them, I find it hard to grind out results in my personal time. My good friend talks about this very problem in his blog. I'm sure I'm not alone in this, and hopefully one day I'll write a series of blog posts about it, because it would be an interesting part of the psychology of developers to explore.
The Fundamentals of Compilers
In an attempt to overcome this, I decided to teach myself the fundamentals of compilers. I never got the opportunity in university to study compilers, as the practicalities of life meant that the course was never available at a time that worked for me, but it's something that always seemed very interesting. Learning about the fundamentals of compilers is also a good choice because it is quite different to my current work, and doesn't require as much fiddly grind work, in the way that building a website or actual product requires (mainly because I doubt I'll ever release it in a way that other people would actuall care to use). My theory is that without the grind work, I'll be able to maintain the "rage" and actually follow this line of autodidact-ism to it's conclusion.
I plan to write a series of blog posts about the fundamentals of compilers in Scala, as I learn both a new programming paradigm and learn about the algorithms involved in compiler construction.
Learning From Others
A large element of autodidacticism, as described on Wikipedia, is the seeking of guidance from experts, and the community. Throughout my journey of learning, I plan to use many resources and discuss them in this blog. A few that I have come across and used early in my journey are:
- The Coursera/Stanford course on compilers
- Modern Compiler Implementation in Java
- The Coursera/École Polytechnique Fédérale de Lausanne course on Scala
- Scala for the Impatient
Don't expect the Scala to be good at first, this is a journey, and I hopefully can only get better with time. I expect initial forays into the world of Scala and compilers to actually be pretty terrible. Hopefully by learning in the open like this, others can also learn from my experiences and mistakes as I fumble my way along the path.
Hopefully, with an audience, this time I will stay the course. I guess that all remains to be seen...