i always felt like tackling a new language each year sounds like a marvelous resolution ( in theory ), except for that fact that ( in practice ) it is just WAAAY too time consuming / fatiguing.
It certainly takes some time, but I donāt spend more than maybe 1-2 hour per day reading books, watching talks, tinkering with the language and digging into the wider ecosystem/community.
To be clear, Iām by no means proficient or even effective with all of these languages. What I find interesting is to get a high-level understanding of the languages and how they compare; their unique features, strengths and weaknesses, etc. Broadening my horizon. Reducing unknown unknowns.
anyway, when you say that you managed to pull if off more often than not over the past 8 years, i am thinking KUDOS! ( ā¦just out of curiosity, may i ask what languages you picked? )
I sat down yesterday and tried to list them all from memory the first time⦠Iām sure I forgot something and probably got the order wrong. To my surprise, it seems like there are more languages than years! I realize now that Iāve only spent a couple of months with some of these languages for a particular purpose, so I wrote down the context/my main motivation for checking them out at the time.
Here is the list:
PHP - Quick and dirty websites (mostly WordPress) for various āfriends and family projects.ā You know, when someone asks āHey, could you make a website X for me?ā
Python (for work) - Pipeline tools for MMORPG asset baking for Windows, XBos and Playstation. Game server deployment orchestration. Later, data science/machine learning.
C/C++ (for work) - Huge and old codebase for proprietary client-server MMORPG game engine and 3D real-time rendering engine for DirectX and OpenGL. Games targeting Windows, XBox and PlayStation.
C# (for work) - Developed suite of proprietary desktop tools for game content creation. The tools were used by game designers to create NPC behavior, in-game items and loot system, skill systems, etc. Replaced a bunch of legacy tools written for Microsoft Access in Visual Basic. Later, worked on bespoke web applications (.NET MVC) for banks internal compliance processes.
Lua (for work) - Scripting language for game designers (embedded in C/C++ game engine). We also created an in-house IDE (written in C# .NET) with āIntellisenseā-style auto-completion, etc. for game designers and scripters who had previously been using an old visual programming tool we made.
Ruby (for fun) - I dabbled with some web apps with Rails, hoping to replace PHP/WordPress at first. Wrote some simple language-learning scripts for to help my wife learn Norwegian. We also considered embedding Ruby into our game engine at some point, but opted for Lua instead.
Objective-C (for fun) - Got interested in developing apps for iPhone (prior to the advent of Swift). Read a bunch of the āNerd Ranchā books, but never actually made any apps except some ātoy projects.ā
Classic ASP (for work) - Worked for a company who had a legacy CMS written in it⦠that had many active customers who we wanted to keep. Eventually replaced those sites with PHP/WordPress.
XSL (for work) - Pre-processing/re-formatting/layout of physical books prior to printing. Whoever thought is was a good idea to code in XML must have been a self-masochist.
Common Lisp (for fun) - Was gifted with a copy of āLand of Lispā and absolutely loved it. This was also my first ārealā experience with a functional programming language.
JavaScript (for work) - Working on SPA-application for bank compliance processes. Long story short: It was painful. I never want to touch JavaScript again in my life if at all avoidable, especially on the server-side (Node.js is an abomination). Prototypal inheritance is kind of cool, though.
Scala (for fun) - I enrolled in the course āFunctional Programming with Scalaā with Martin Odersky on Coursera. Tried to force myself to complete the course, but I eventually dropped out. The language seemed extremely verbose/complicated and the course material was way over my head at the time.
Erlang (for fun) - My interest was peaked by a former coworker years ago, when we considered rewriting parts of our MMORPG game servers from C/C++ to Erlang, primarily due to insidious memory leaks and race conditions. I put it off for a long time due to the alien syntax. Some years later, I challenged myself to learn this language because of its āweirdnessā and I absolutely loved it. The low-level support for processes and message-passing (actor model implementation) is superb. The āhappy pathā-style coding with pattern-matching also makes for very terse and readable code.
Elixir (for fun) - Really liked Erlang, but the syntax was rather exotic. I wanted to see what Elixir brought to the table. I really like Elixir and itās probably my favorite language so far. The community is fantastic.
Clojure (for fun) - Interest was peaked by a friend Put it off for a long time because I am (was) allergic to the term āJVM.ā I eventually swayed to check out some talks because I love Lisp. Rich Hickeyās talks blew me away and convinced me to take the plunge. Iām really enjoying it so far!
These languages are currently on my radar for possible future exploration:
R - It seems to be very useful for data science and machine learning with ātidyverse.ā My day job is data science/machine learning and some of my peers are raving about R. It also looks more āLispyā and functional than Python, which I enjoy. I also like the wholistic development environment with R Studio.
Elm - Iāve heard many people raving about Elm in various communities, especially in the Elixir community (prior to the advent of Phoenixās Live View). It also seems to be a hot topic in the Clojure community as an alternative to ClojureScript. I would prefer to keep it all in the same language.
Rust - Looks like itās shaping up to be a āsafer C/C++.ā When I was learning Erlang/OTP and Elixir, I kept hearing about interop with Rust for computationally heavy aspects through NIFs, etc. I suspect Clojure could fulfill the same need. Nevertheless, I suspect Rust will see an adoption surge.
F# - The algebraic type system looks neat and clean for domain modelling. Iāve watched several of Scott Wlaschinās talks on functional programming and he uses F# for his examples. Thereās something very appealing about the composability of algebraic type systems.
Swift - Really like what Iām seeing with āSwitch for TensorFlow.ā Chris Lattner is doing a fantastic job on this. I would also like to be able to develop native apps for iOS. Learned Objective-C some years ago, so Iām also curious to gauge the difference in experience for iOS app development.
Go - Their deployment story seems amazing with just a single artefact. The language itself seems a bit āboring,ā but its adoption rate looks promising. Google seems to be committed to it as well, but who knows⦠maybe theyāll drop it at some point. They seem to have a tendency to drop things.
Haskell - I like the idea of static typing in general, and its type system looks great. I tried learning it some years ago, but couldnāt grok it. It felt too āmathematicalā and impractical. Still keeping an eye on it from a distance. It doesnāt seem like Iām smart enough to use Haskell
I should also mention that I have spent most of my career as a technical project manager/team leader; not as an engineer. This also meant I was moved around a lot between different teams and projects, and thus exposed to many different technologies. As I do not have a university degree, I felt the need to learn to ākeep upā with my teams, understand the code and partake in the conversations.
Edits: Expanded a bit and fixed some typos.