Go, Learn Go, et al
I've decided to put a more serious effort into learning Go. As a first for me, I plan to try learning this language “out loud” so to speak, by publishing the sketches and test projects I create during that process. I'm not sure if this will have any value long term, but, at the very least it may encourage me to review my work with more scrutiny. If so, then hopefully it will also improve my uptake speed.
As for why I would choose to learn Go next, it's pretty simple and pragmatic. It's a “good enough” language when checked against my preferences and there are a growing number of projects out there that I would like to be able to participate in that are written with Go. It won't be the only language I'm learning short term. Though, I don't know if I will publish my cruft when learning the others, I will be spending time on a few others nonetheless.
I plan to spend some time refreshing my Java knowledge. I haven't had the chance to work professionally with any versions after 1.8 and that's getting to be a problem. So that will be a review effort, mainly to keep up with the changes. I am aware enough of the changes to know that their pace has quickened. I'm excited about that and am hopeful that the attitude of Java-using teams I'm involved with in the future is one where updating the base VM version is far less of a barrier than it has been in the past.
My most “recent” post mentioned learning F#. I hope to spend some time with F# during the holiday vacation as well. Though I don't expect to use it professionally soon, it would certainly be a delight if I was wrong about that. From what I've seen and used so far, F# strikes the best balance between idealism and pragmatism that I've seen in a functional programming language.
I've written production quality code with Scala, but, my sense of how to produce truly idiomatic Scala is weak so that's another area I want to cover some during this time. Scala is an interesting language for me since I can work in it effectively simply by leveraging my Java experience. But, to get the most out of it, there are a number of concepts I need to get more practice with.
And finally, after producing a few projects and sketches with Go, I plan to reproduce them in Rust. I personally think Rust is a much better designed language than Go, but, haven't had the exterior motivation to actually use it in the same way. So while I have my mind in the “lower level” coding space, I may as well take some time to familiarize myself with the another option currently gaining in popularity.
There are so many languages, tools, and projects I'd like to spend time with, and I may not even be able to get to those I've planned already. I am excited and relieved knowing I still have so much interest in this hobby. But also a little overwhelmed at all the various paths I could take and what benefits those paths might bring to the exclusion of other paths. It can be a little frustrating. If I spend all my spare time learning just one tool, do I lose opportunities? If I split my time, do I not learn enough to gain opportunities?
It has long been my belief that learning languages, tech, etc. as you go is the best way to cement the knowledge and avoid wasting a lot of time when solving software development problems. However, having a head start doesn't hurt at all. And now that I'm opening myself up to new job opportunities, having this knowledge “orphaned” from any actual specific project to drive me is becoming more important too.
So, here I come, December. Let's see how much of this I can plow through.