One of my goals early on that I often attribute to my lengthy resume of development languages was to learn two new ones every year. This achievement may seem like an unrealistic goal. However, it is not as hard as it looks. Learning a new language can take months, but it does not have to. When you stick to the core language and practical applications, it can all be done along with your typical workload.
The Beauty of Utilities
The best way I have found to get to know a new language is to write an application with it. Not necessarily a big, full-featured one, a utility can often be a great start. Think about what most utility programs contain as part of the functionality. There is a central execution section, use of the compiler (or interpreter), interfacing with parameters, some simple logic, and output of some sort. When you have those, you also can say you have written an application in the language.
The full extent of the language is not going to be experienced in such a little application, but, between you and I, that is only a matter of syntax. Once you have the core features of an application under your belt it is easy to build on those skills.
Our Baby Is Always Pretty
One of the better aspects of building a tool for our personal use is that we do not need to perfect it. We can live with a complicated or ugly interface, and the functionality is adequate, if limited. This makes our applications a perfect playground for learning a new language. We can do things like adding a menu item that is only there to execute a snippet of code or create a button that generally would be ridiculous to include.
Once you have an application up and running to any degree, it is a great place to work on extending your knowledge. In fact, some of the best tools for learning languages over the years have been Frankenstein applications. These are applications where I started with something simple, a few features, and added to it as I learned. The result was not user-friendly or intuitive at all. Instead, it was a mishmash of menu items, controls, forms, and seeming roads to nowhere that became a repository of things I had tried and learned with that language.
The Goal of Learning a New Language
Once I had that base application in place, it provided somewhere that I could quickly answer the question, “how do I do X in this language?” In the end, is that not all we need to know about any language?