Weekend Study
I’ve been flailing about the internet with excessive ADD trying to decide what to learn next. These are really exciting times to be a software developer / computer scientist. There are so many development fads, languages, frameworks, and methodologies to keep up with. There are hundreds of high quality dev-bloggers to read, so many fascinating concepts to digest. Burp.
It’s an industry where you really have to keep practicing and learning to stay even remotely relevant. To learn a new language or framework is a large investment in time and mental energy, and the industry is quite hard to predict. What looks like a promising and popular new language one day can evaporate into yesterday’s fad.
What to learn? What to study? What to build? Python? ECMAScript? Scala? Ruby? Objective-C? Erlang?
Two interesting trends is that a lot of modern languages all seem to be evolving towards sharing a lot of common features. For instance, I haven’t done any serious amount of functional programming since I was in university. A lot of languages are now mixing in functional programming features. Even Java will be adding closures.
Functional programming is of particular relevance to the second interesting trend that is going on. The microchip industry has reached a practical limit and we are no longer seeing huge leaps in clock-speeds. Instead we are seeing more and more cores packed into each chip. The trend for the next while will be more and more cores instead of faster speeds. What this means is that as a programmer, you can’t rely on your single-CPU program to get faster on newer machines. But you will be able to speed things up if you can write your program to divide it’s work up over many cores in parallel. Functional programs lend themselves to natural parallel execution.
It’s widely considered very difficult to write multi-threaded programs. I don’t disagree, however, I’ve always enjoyed it. I get a big kick out of tackling multithreaded programming issues and squeezing out that parallel performance. A lot of researchers are struggling to design a new language that will make it easier to write parallel programs in our multi-cored future.
So I’m still not sure what I want to really dive into. The other problem is that I need a good project. Without a significant problem to solve, I can’t really choose a good language to learn, and I can’t truly learn it without using it to solve a non-trivial problem. Now if only I had a small, but cool {radio-astronomy|bioinformatics|cognitive science} project to solve….
you should try computer graphics / visual effects…