Ask HN: Experienced devs, what language would you learn today?
74 comments
> Experienced devs, what language would you learn today?
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.
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.
Spot on. Experienced devs already know enough languages to cover most sides, so learn the one that fits the job.
I would go for either Rust or Kotlin.
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.
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.
Interesting, I was going to come here to say the exact same thing. Rust if you need the performance/low level features, Kotlin if not. I think Kotlin's niche overlaps with Go but just so much more pleasant to use, I really wish it were more popular.
+1 to this and mostly because I'm getting more interested in more formal functional programming after 20+ years of mostly working with OOP - and both of these allow strong FP without requiring hard commitment to it like with Haskell
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).
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).
You would recommend a language below Scratch and a language below COBOL (Kotlin) on the TIOBE index?
How is a language's ranking on an arbitrary list at all relevant?
You may disagree with the way the TIOBE index is compiled, but it's hardly "arbitrary."
If you are using a popularity contest to choose your tooling you are choosing your tooling incorrectly.
Also it seems it would be helpful for you to read this: https://blog.nindalf.com/posts/stop-citing-tiobe/
Also it seems it would be helpful for you to read this: https://blog.nindalf.com/posts/stop-citing-tiobe/
OP is asking specifically about being highly employable. In that context, popularity is pretty directly relevant.
Yes, I would and if you want to use the TIOBE index as a guide you can use the following reasoning to justify the choice:
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.
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.
Go if you just want to build stuff that deploys reliably and has good performance. It's a simple language with good enough standard library that you don't end up requiring one of those "mother of all frameworks" (e.g. Spring). Downside is the boilerplate can be excessive at times.
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.
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.
Go seems really popular now and a lot of jobs that pique my interest seem to involve it. I’m not a huge fan from what I remember (ofc I haven’t really used it before it’s mainstream success) but I’ve considered if it’s worth picking up.
[deleted]
I love python, but thanks for reminding me :/
Also learn SQL. Being able to structure data and write complex queries is a superpower I waited far too long to acquire.
You've basically whittled the options down to Python. It's still an extremely popular and reliable language, not to mention relatively readable, and in use at the enterprise level. If you are feeling like you want to be on the bleeding edge you can give Go a try as well, not quite in use as much but still quickly gaining traction and no need to deal with endless packages that you need to install on each system.
Python is a good choice, not sure if I'd call Go bleeding edge. I'd be more likely to call Rust bleeding edge.
Rust was initially released July 7, 2010, Go was released around November 10, 2009, so if we are just looking at that they are actually on roughly equal footing. My understanding is Rust and Go are for mostly different purposes though depending on what your goals are as a dev, like Rust is more for systems level programming whereas Go is for developing portable application binaries with a focus on performance.
I think “bleeding edge” is measured more by mind share than by release date. For example, Ruby was already 9 years old when Rails came out in 2004. That was when it became bleeding edge.
Don’t feel that way—You made people think about the life cycle of languages and it fostered some interesting discussion. That’s what we’re all about here, so you did good :)
It might be my experience level/background at play here, but I’ve been seeing a lot of openings that are either requiring or desiring Go.
Could be different for application devs vs the infra work I do as a SRE. I just know during the last couple of months when I was job searching Python was a common denominator in a given tech stack and a safe bet. Go was a nice to have for the more forward thinking out there.
Python or Go if you want to have the easiest time finding a job. I'd probably pick Go among those two even with its vaguely OO design just because it's so much easier to deploy.
Clojure if you want to have a harder time finding a job but have more fun doing it! :)
Clojure if you want to have a harder time finding a job but have more fun doing it! :)
Go, Python. That all I do now. Quite frankly everything else is just pain.
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.
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.
High employable: JS
High earning: Haskell, Clojure, Scala, Ruby, COBOL, whatever Stackoverflow suggests?
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.
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.
> Haskell
Who is even hiring Haskell developers for top-tier pay?
Who is even hiring Haskell developers for top-tier pay?
I didn't notice the formatting was broken.
I don't know, I remember reading on Stackoverflow they are well paid though.
Haskell is used in finances though
I don't know, I remember reading on Stackoverflow they are well paid though.
Haskell is used in finances though
I'll stray from the others and mention Unison Lang.
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/
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/
Thanks for the pointer -- looks like (OCaml/F#)++ with an effect system and some other niceties. I guess I'd rather go that way then enter the Scala effects mire.
There are some obvious issues I didn't see up front (unless I missed them) -
- How do content addressable fns and their codedabase integrate w/git (seems like it really has to for the time-being)
- The usual: What's the execution model & perf characteristics?
- I see it's written in Haskell, but don't know if it's interpreted or further transpiled, etc.
- Debugger? Interop?
- Type and efficiency of GC
- Impl. of collection types - simple conses vs. HMAT or r/b trees, etc.
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.
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.
Elixir is the one for me, but I just can't kick JS/TS since I'm so productive with them.
Elixir is functional, has a great concurrency story, great for real time networking, great open source community with awesome libs
Elixir is functional, has a great concurrency story, great for real time networking, great open source community with awesome libs
As (mostly) a web app developer writing Angular and Typescript (but having worked with ActionScript, python, a bit of Java and meddled around with c++)
definitely Rust! I already started a course on a MOOC / course site
definitely Rust! I already started a course on a MOOC / course site
> I already started a course on a MOOC / course site
Which MOOC is that?
Which MOOC is that?
Rust, Python, Javascript gives you a broad spectrum of experience and you can probably adapt most of that to 90% of the other languages you'll probably run into.
If I had to pick one of the three, it would absolutely be Python for ubiquity. I believe the thing that makes someone confident and capable in a language is writing a lot of code, and Python makes it really easy to explore a broad range of problems-domains which means you can follow whatever interests or whims you have which will hopefully encourage you to write more code.
If I had to pick one of the three, it would absolutely be Python for ubiquity. I believe the thing that makes someone confident and capable in a language is writing a lot of code, and Python makes it really easy to explore a broad range of problems-domains which means you can follow whatever interests or whims you have which will hopefully encourage you to write more code.
If I had to pick one of the three, it would absolutely be Python for ubiquity.
Except for browser programming.
Except for browser programming.
I'd learn C# and avoid the "extreme OO" approach.
You can write C# in an almost functional style if you prefer, it's a very flexible language.
You can write C# in an almost functional style if you prefer, it's a very flexible language.
The current trends are Python, Go and Rust. Go is going to fade away when Google dies, but Rust will still be here, and Python will too unless there's another language that takes its share. (Python inherited its position from PHP, and Perl before that) And vendors keep churning out JS tools so that'll be a safe bet for a while.
> Go is going to fade away when Google dies
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.
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.
Companies abandon tech all the time. If anything is certain it's that no software lasts very long. Where's all the companies choosing Ruby for their new projects? Or PHP, or Perl? Most tech stacks come and go. Only a very few last a long time. When a project is led by a corporate steward, and the steward leaves, so does the majority of its users. People just flock to what's popular, and Go was only ever popular because of a celebrity programmer and Google's gravitas. The projects using it will become legacy or sunset, and people will pick up something else, the same way it happened to other languages as Go arrived.
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.
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.
[deleted]
Rust or Go. I've been eyeing them for a while, but never got to writing any code with them. They look amazing.
I'm very good with JavaScript and TypeScript (7+ years of experience, full-time, both back and frontend). I absolutely love them. The freedom to mix functional and oop is amazing. And no awkward verbosity like Java.
I don't like requiring the NodeJS runtime in environments I don't control — it's ok for servers I own, not ok to ask users to install it so they can use a lib/app I made. There are tools to "statically-link" NodeJS projects now, but I haven't tried them yet.
I've been working exclusively on Linux for the past 6 years. Wouldn't look back. Did Mac for a few years, didn't like it. The hardware is superb, but the UX is not optimized for software development. Windows is not an option unless doing C#.
I'm very good with JavaScript and TypeScript (7+ years of experience, full-time, both back and frontend). I absolutely love them. The freedom to mix functional and oop is amazing. And no awkward verbosity like Java.
I don't like requiring the NodeJS runtime in environments I don't control — it's ok for servers I own, not ok to ask users to install it so they can use a lib/app I made. There are tools to "statically-link" NodeJS projects now, but I haven't tried them yet.
I've been working exclusively on Linux for the past 6 years. Wouldn't look back. Did Mac for a few years, didn't like it. The hardware is superb, but the UX is not optimized for software development. Windows is not an option unless doing C#.
I'd wish I knew golang. My fortune100 employer is going all-in on kubernetes control plane solutions and I'm twiddling my thumbs as a shell script guy.
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
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
I suggest: Do "Advent of Code" 2022 using Go as an enjoyable way to start learning the language.
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.)
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.)
It's very easy to pick up. The parts you might find weird are mainly:
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.
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.
> I'd wish I knew golang.
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.
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.
I mean... it's not that hard to learn. Start a project this weekend, pick it up two hours a week, you'll be a wizard before you know it
Typescript and rust pretty much covers everything. Also a lot of jobs and I think increasing a lot in rust
Seeing "Java/C#" makes me think that you might not have taken a look at C# in a while
Seeing Java/C# excluded makes me think the person is very inexperienced. Why ask then?
Coming from Python for 5 years and back into C# there are moments I miss the simplicity of Python.
I’ve never made more money before than I do currently with Go, Python and Kotlin.
I guess it depends on what you are trying to achieve.
In general, it would be more beneficial to learn supporting topics like building distributed systems, database internals etc than purely just another language.
I guess it depends on what you are trying to achieve.
In general, it would be more beneficial to learn supporting topics like building distributed systems, database internals etc than purely just another language.
If I were to pick it would be Elixir or Lua. Lua because it can be used as an embedded language and it is pretty fast for an interpreted language. Elixir because I have written tiny scripts in it and was impressed that even though it wasn't the fastest looking way of doing stuff it didn't impact the speed on the machine I was using (a low spec NUC). I feel like Elixir has the potential to keep growing and Lua is certainly a language that can get stuff done or can be embedded as that last bit that probably can be scripted instead of compiled.
I’ve been a solo founder working in Go on a growing startup and my code shipping speed is faster than ever. I’m now increasingly also doing Python for generative AI backends and more reactive front-ends than vanilla JS (Svelte, maybe Vue trying to avoid the overhead of React), so front end work and mobile work are also relevant. Rust seems to lower developer productivity too much for production ready work, so staying away from it unless massive throughout is necessary - go is plenty performant if you watch your memory footprint.
More and more larger companies are seeing the benefits above and Go is gaining ground.
More and more larger companies are seeing the benefits above and Go is gaining ground.
Rust and SQL.
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".
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'd like to ask the same question with #2 reversed: Let's say someone has never done web programming at all, frontend, backend, full stack, half stack, smoke stack, doesn't even know what those things mean. They're old school C++ programmers or embedded devs or something. Now they want to learn how to build a modern web app in 2022. There are so many languages and frameworks. Do a web search on how to write a web app and the whole lot of the different options will show up. Where do they start, and which obsolete ones can be skipped?
In that scenario I'd recommend learning javascript, react/redux, and css. And also SQL if they haven't worked with it.
Why? They'd probably be fine with the server side aspect of web development (writing an API or whatever), in any language. So concentrate on the browser stuff, for which react/redux is still the most in demand.
Why? They'd probably be fine with the server side aspect of web development (writing an API or whatever), in any language. So concentrate on the browser stuff, for which react/redux is still the most in demand.
> They're old school C++ programmers or embedded devs or something. Now they want to learn how to build a modern web app in 2022.
Start here: https://webtoolkit.eu
Start here: https://webtoolkit.eu
I am extremely fortunate (like I assume most of the HN crowd) in being good at people picking and learning languages with reasonable ease (serious that was not meant to be a humblebrag but sure) depending on the use case.
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.
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.
Flutter, Typescript
One of the few modern languages that have my (dev) comfort as one of their priorities. Even if not intentionally.
One of the few modern languages that have my (dev) comfort as one of their priorities. Even if not intentionally.
If you want to maximize employability, I'd say Javascript.
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.
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.
I'll be honest and whatever brings me some level of personal joy
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.
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.
Once you know how to program picking up a new language is just a matter of doing a project or two in it. Just go see what jobs are interesting to you and learn the language/framework they want over a weekend or two.
[deleted]
Javascript on the backend too, why dable in two languages/ecosystem if one can equally get the job done? (for many use cases)
I would still learn bash and python, but I'd probably not do Java/C# again and learn rust instead.
* Go for backends
* Typescript for Web and Mobile apps
* Typescript for Web and Mobile apps
Golang, Elixir or Rust
[deleted]
php8
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#)