Ask HN: Experienced devs, what language would you learn today?
Question for experienced devs looking to stay fresh and relevant (and highly employable!)- if you were looking to pick up a new (new to you, not necessarily a new language) programming language today, what would it be?
Some constraints:
1. You want to work in a Linux environment
2. Your experience so far is in full stack web stuff (you enjoy back end more)
3. You dislike the tediousness of ExtremeOO languages (Java/C#)
74 comments
[ 4.6 ms ] story [ 127 ms ] threadClojure if you want to have a harder time finding a job but have more fun doing it! :)
ghost edit: I could change my original response because employers often find my HN posts because of my login, but honestly, I'd rather just be honest
You can start learning today. I picked up Go by porting my backend web projects written in different languages over, but my next task is to convert all my custom shell scripts into CLI tools using Go.
https://adventofcode.com
It starts tomorrow, I believe (also previous years are available). A new puzzle is released each day (until Christmas I think). You can use any programming language you like to solve them. The puzzles start pretty simple but get very good as it goes along.
You can race other people but when you're doing it for the purpose of learning a language, I'd take time to explore the language.
Personally, I'd complete each puzzle without looking at anyone else's solution, and then compare to solutions from others, hopefully you can find solutions from some experienced Go programmers. Since you'll understand the problem really well, you'll be able to focus on the different language decisions they made. Well, you do need to be a little careful, because people will use shortcuts that are fine for this but would be horrible in code you don't throw away.
(You might be able to tell: I'm intending to do this myself, with rust.)
1) The OO model (composition-over-inheritance, and the syntax may be a little unfamiliar)
2) Slices
3) Goroutines/concurrency
4) I guess multi-return and idiomatic error handling deserve a mention, though they're so minor and super easy to understand that they're not really like the other entries on this list.
... but if you can devote 2-3 hours to reading the official manual for each of those topics and working through an exercise or two for each, congrats, you're ready to work productively in Go. Maybe 20 hours total, at the outside, to get comfortable enough to use it productively. Possibly closer to 10. Assuming some prior familiarity with other similar-family languages, that is, which most developers have.
The language that was required by the company I'm joining.
Experienced devs assumptions:
- Basic familiarity and can read the popular languages already (Java, TypeScript / JS, Python, Go, Rust, ...)
- If not the above, correct it. Spend a weekend getting up to speed on Rust syntax. When you're going through open source code and see something you don't understand, look it up.
So what's missing? Idioms, best practices, avoiding foot guns -- actually writing production code. This is on the job training since doubtful you'll get any of it with a hobby project by yourself without helpful code reviews.
I’ve been using python for about 20 years. That has longevity. Go has the same feeling around it.
I’ve got nigh on 20 years of c# experience and it has been nothing but pain and misery so yeah, stay away. I’m sure I’ll annoy everyone with this but wait until you’ve got to lug along and fix a project with three deprecated Microsoft frameworks in it after one of their schizophrenic direction changes. I spent more time delivering churn than ROI on .Net.
* Typescript for Web and Mobile apps
One of the few modern languages that have my (dev) comfort as one of their priorities. Even if not intentionally.
Python is easy to develop with, but the packaging situation somehow only ever gets worse. I don't recommend it for large projects that have to support multiple platforms.
Rust because it's a systems/native language and seems to be the go-to language for new projects that would have been started in C++ some years ago.
Kotlin because it's a nice modern language that can be used both on the frontend (Android and lately some iOS and Desktop, sometimes even web) and on the backend. Yes, it's a typical OO language that inherits some of the "ExtremeOO" properties from Java but it fixes some of Java's (former) issues as well. Having the whole Java/Maven library ecosystem available is also a big plus in my book.
Also it seems it would be helpful for you to read this: https://blog.nindalf.com/posts/stop-citing-tiobe/
Rust is the spiritual successor for #2 (C) and #4 (C++), while Kotlin is that for #3 (Java). All three of those are showing their age and in a downwards trend.
I've only heard good things about Rust and it seems to have all the LTS needed to actually improve life over C
Honestly I think something like LISP with a different CPU/GPGPU architecture is probably the future, or maybe a better way to say it is, we probably need computers to be more like lambda architecture than we have now if we want to fully utilize the power of large data architectures (I'm avoiding the term AI in purpose here).
Personally I'd study clojure to get exposure to new things. Already studied Elm, Elixir and Haskell for FP, ruby, php, c#, java for OOP, go and c for imperative, I think clojure would be an interesting addition.
Who is even hiring Haskell developers for top-tier pay?
I don't know, I remember reading on Stackoverflow they are well paid though.
Haskell is used in finances though
No way. There is way too much capital invested in Go projects at companies and open-source for that to happen. You would see a fork happen before Go would disappear.
The languages that have lasted the longest are just institutional. Java is for enterprise, C/C++ is standards-driven and has many vendors and core use cases, ASM is just a basic requirement. Python is only popular because it's for scripting, and JS because it's the only thing for browsers. Go has no niche. Oh, you can statically compile it? Not new. Concurrency? Not new. "It's easy"? Not new. There are entrenched languages that can take up all its use cases quickly. Rust is quickly becoming the new C, so that will last basically indefinitely, probably. But Go has no future after Google.
One language I have been wanting to pickup for a while but haven't had the time is rust. The specific use case for me is high performing (with safety), mostly synchronous execution, and reasonable ease of use inside another web framework. My use case is something like building a rust version of tree-sitter.
It's a whole new everything but has yet to prove itself useful for production code.
Its promises, if they pan out, could change how we design data-intensive applications. Its idea about code and data as content-addressable can help simplify some distributed workflows.
https://www.unison-lang.org/
Great summary here: https://jaredforsyth.com/posts/whats-cool-about-unison/
A strongly-typed pluggable effect system like this should really replace in a more structured and powerful way what Python does today, which is really just to proxy out to efficient external libs (often written in native code, like Numpy or various AI engines, etc.) If Python is used for actual compute, you're adding several 0's to your runtime.
So I'm curious if Unison is of that ilk, or can be used dependency-free for CPU-intensive (and in my case, non-numeric) workloads.
Rust teaches you how to architect (memory management, async handling), SQL teaches you how to query (set theory, computational efficiency). Once you know those two things, everything else is just "translation".
I'm experienced enough, I don't care a ton about the applicability. I don't need to stress financially if its going to be marketable. If its interesting and fun, I would be interested in learning it.
definitely Rust! I already started a course on a MOOC / course site
Which MOOC is that?
You can write C# in an almost functional style if you prefer, it's a very flexible language.
If you want to maximize enjoyability, for me the choice is clojure.
Advent of Code starts tonight; pick a language and try it on the AoC problems. The first few are usually extremely easy/straightforward and they ramp up in difficulty throughout the month.