It's a question that is evergreen, but especially prevalent at the turn of the year: what skills should I learn this year?
It's not just programming languages either, there are a slew of areas of life where skills are desirable but you wonder how to go about it or whether it's worth the effort.
And if there's anything I've learned it's not "should I learn it" but "how much does it cost to learn it?"
💸 Cost of starting
Some skills are more expensive to pick up, and wondering whether you want to spend a lot without even knowing if you'll be sticking with it is a reasonable reason for pause.
For example, if you wanted to pick up a musical instrument skill, there's the outlay of buying or renting said instrument upfront. To learn piano, you need regular access to a piano for practice, and those things don't come cheap, and going all the way to a practice hall every time can quickly curb a beginner's enthusiasm; so it's fairly reasonable to um and ah about it. But if you wanted to pick up an instrument with a piano-layout keyboard (albeit limited), you could probably manage a melodica and see if the layout works for you - it's cheap, it's portable, and a lot of beginner piano theory and tutorials apply to it.
Conversely, there are skills which cost little to get started with - cooking certain types of foods if you already have a stove/oven, or take up drawing (pencils and eraser, and a stack of A4/letter paper is easy to come by), and then you can just scour youtube for a variety of tutorials - try drawing chibis to start with?.
Similarly there are many options and approaches for learning foreign spoken languages, ranging from free (apps and meetups) to pay-for (courses) or even specialization (degrees) which you can approach little by little as you find your feet.
Last year I took up foraging and fermenting, and whilst there was a little cost in books (I have many now) and jars (I just bought some more the other day), it was mostly a cheap outlay for a set of skills I take great joy from today. Mostly, gaining a reason and actual pleasure from heading out into the woods, even on a rainy day.
It's not just about computers - anything you can do to spend time away from the screen is immensely important for your continued good health to come back refreshed 🌲
💻 What Programming Language?
But back to dev talk. What programming language is worth learning ?
I'll cut to the chase and answer this: ⭐ any you feel curious about ⭐ . If you can set aside 30min in any given day, or every other day, you'll get enough of a flavour of a language to decide whether you want to pursue it. Heck, dedicate an hour to the language and its base systems, and if you're already mad at it after that, just stop, and uninstall.
Because, with very few exceptions, getting started with a new programming language is near zero cost, in monetary expenses at least. Aside from the time you need to set aside, if you already program, you have the required equipment and skill to just launch into it.
Sure, it may pay to read up on the languages that have piqued your interest upfront, and once you've done that you will probably have a good idea which ones you do want to dedicate an hour to and which are already just outright not a fit for you.
And if you come away with a shortlist thinking "this one or that one or the other," I would wager that the obvious answer should be: all of them , in sequence.
✂️ Narrowing Down
It also helps to know what kind of ballpark use case you are aiming for. My use case requirements are
- command line
- ideally, compiled
- preferably without external runtime requirements
My other use case (as a separate effort) is
- back end for simple websites/apps
- simple/minimal build and hosting requirements
- good standard library/reduce external dependencies
Last year I doubled-down on Zig, as idiosyncratic as it is to me coming from scripting languages (and very much because of it), and I am pursuing Go as well, as a nicer middle ground.
Between what I have experienced from C and Zig, I am not even considering C at this point anymore. Maybe later, but I do not see the benefit, given my language selection as it stands. I had a quick look at Kotlin from afar (perusing how-tos and videos, and simply reading a quick install guide) and decided I had no interest.
For web, PHP was also on the docket for a short moment, but I don't feel I want to go there yet; I feel more relevance looking first into Django and Flask before I return to PHP (I used to do php3 projects, way back when...). Gleam and Scala run on dedicated VMs and whilst in a production setting that's not a problem, I do want to make applications that can run on free-tier hosting, which PHP has had the advantage since the 90's ...
🔨 Mini-projects
Once you get past the first hour of each language, I reckon there will be some you'll think "nope, I'm done here" - and that's fine. That's the whole point of this in the end. After which you're left perhaps with one or two languages that remain contenders for Your Next Thing. What next?
One of the questions I've heard from a couple of friends repeatedly is, "how do you even choose a side project?" My take is, what's a thing you wish there was a program for? What's the simplest thing that program would do?
I live on the command line, so this question is usually easier for me, barring having to do more complex things (I don't (yet) do media processing, or have need to do rich GUI stuff). But I do often want to say organise and deduplicate a few reams of photos or MP3's (my backup drives are in disarray since forever and I need to wrangle them to sensibility...) , and I am often wishing websites would publish and list their content sensibly (web scraping and RSS feed corralling comes to mind).
Try to think, how would a command line program do 80% of what you need to do? Or for GUI projects, how would you get the thing done with a couple simple widgets and buttons? And take it from there.
Aim to scratch a particular itch 😖, reduce the feature set to minimum 🔪, and have at 💪.
(As an example dump: I am currently trying to rewrite my bash-builder project (extending the lenker), I have a tarball-dependencies project inspired by Zig's build.zig.zon
file, did an /etc/os-release
reader for something simple, and pondered a PATH
management utility . For web stuff, I have a player registry I ideated once when thinking about cross-server stuff for Luanti, but I have yet to properly sit down to. All of which I will likely try revisiting in various languages as the need arises.)
📋 What languages for me this year?
If you really want to see a language list from some nobody on t'interweb, here's where I'm at -
Last year I had a stab at:
- 🦀 Rust - ❌ rejected - just too unwieldy to the value it would bring, to me
- ⚡ Zig - ✅ retained - low level but just straightforward enough, so far as I have been able to see
- 🎯 Dart - 🤔 to revisit - specific to GUI/app writing, not yet having a use case
- 🦫 Go - ✅ retained - good balance of being accessible and being machine-code compiled, for CLI use
- ☕ TypeScript - ❌ rejected - very not a fan
This year I intend to:
- Continue with Zig and Go - I want to gain familiarity with a systems programming language, and a systemsy language that still has some extra fluff.
- Reignite my Lua skills with Love2D, and maybe return a little bit to Luanti
- Get more hours into Django (yeah not a language, but furthering my Python mastery)
🎉 Voila
It's a relatively low cost to entry to try out a programming language when you already have a computer and an Internet connection, and well worth sinking an hour or two each into multiple languages and trying to understand why they work the way they do, and what new ways of thinking they can bring to you.
It's not "should I try X or Y" but "I've tried X and I've tried Y - how much more time shall I spend on each?" ⏲️
Top comments (3)
I am just wondering why you didn't like typescript?
I would look for a functional language like Erlang or F#. To familiarise you more with the functional programming mindset.
Language like Python has functional features, but being restricted to that mindset makes you think how to improve code in other languages.
I used Clojure to check out functional programming because at the time I was learning Java. And it was one of the hot new languages.
You should learn Python. It is so powerful and using the DiscoForge module you can make Discord bots really quickly