8 ms·
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#)
- catapart 4y agoRust 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".
- autotune 4y agoYou'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.
- giancarlostoro 4y agoPython is a good choice, not sure if I'd call Go bleeding edge. I'd be more likely to call Rust bleeding edge.
- autotune 4y agoRust 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.
- leethaxor 4y agoRust was beta for many years and started becoming mainstream only 2-5 years ago. Go was in production almost its entire existence, it's specifically a simplified language.
- autotune 4y agoThanks for the additional background info, I stand corrected.
- woah 4y agoGo has always embraced a philosophy of not being on the leading edge
- autotune 4y agoYeah I guess calling it that was a foot-in-mouth moment.
- teeray 4y agoI 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.
- dhosek 4y agoIt 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.
- autotune 4y agoCould 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.
- jakebasile 4y agoPython 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! :)
- JRandomHacker42 4y agoSeeing "Java/C#" makes me think that you might not have taken a look at C# in a while
- giancarlostoro 4y agoComing from Python for 5 years and back into C# there are moments I miss the simplicity of Python.
- lostmsu 4y agoSeeing Java/C# excluded makes me think the person is very inexperienced. Why ask then?
- digitalsushi 4y agoI'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
- mgomez 4y ago> 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.
- jmull 4y agoI suggest: Do "Advent of Code" 2022 using Go as an enjoyable way to start learning the language. https://adventofcode.com 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.)
- throwawaaarrgh 4y agoI 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
- yamtaddle 4y agoIt'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.
- deleted 4y ago[deleted]
- ctvo 4y ago> 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.
- Fire-Dragon-DoL 4y agoSpot on. Experienced devs already know enough languages to cover most sides, so learn the one that fits the job.
- l3uwin 4y agoI would still learn bash and python, but I'd probably not do Java/C# again and learn rust instead.
- gryf 4y agoGo, 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.
- deleted 4y ago[deleted]
- datalopers 4y agophp8
- bithavoc 4y ago* Go for backends * Typescript for Web and Mobile apps
- gwd 4y agoAlso learn SQL. Being able to structure data and write complex queries is a superpower I waited far too long to acquire.
- erdos4d 4y agoOnce 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.
- aristofun 4y agoFlutter, Typescript One of the few modern languages that have my (dev) comfort as one of their priorities. Even if not intentionally.
- ryandvm 4y agoGo 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.
- 8b16380d 4y agoI love python, but thanks for reminding me :/
- deleted 4y ago[deleted]
- the_only_law 4y agoGo 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.
- zorr 4y agoI 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.
- sramsay 4y agoYou would recommend a language below Scratch and a language below COBOL (Kotlin) on the TIOBE index?
- JLCarveth 4y agoHow is a language's ranking on an arbitrary list at all relevant?
- sramsay 4y agoYou may disagree with the way the TIOBE index is compiled, but it's hardly "arbitrary."
- JLCarveth 4y agoIf 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/ https://blog.nindalf.com/posts/stop-citing-tiobe/
- sokoloff 4y agoOP is asking specifically about being highly employable. In that context, popularity is pretty directly relevant.
- Fire-Dragon-DoL 4y agoHigh 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.
- gaws 4y ago> Haskell Who is even hiring Haskell developers for top-tier pay?
- Fire-Dragon-DoL 4y agoI 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
- throwawaaarrgh 4y agoThe 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.
- teeray 4y ago> 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.
- throwawaaarrgh 4y agoCompanies 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.
- flashgordon 4y agoI 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.
- heliophobicdude 4y agoI'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/ https://www.unison-lang.org/ Great summary here: https://jaredforsyth.com/posts/whats-cool-about-unison/ https://jaredforsyth.com/posts/whats-cool-about-unison/
- thelazydogsback 4y agoThanks 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.
- softwaredoug 4y agoI'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.
- michahell 4y agoAs (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
- _448 4y ago> I already started a course on a MOOC / course site Which MOOC is that?
- xnorswap 4y agoI'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.
- sokoloff 4y agoIf 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.
- ryandrake 4y agoI'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?
- uhtred 4y agoIn 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.
- _448 4y ago> 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 https://webtoolkit.eu
- robust-cactus 4y agoElixir 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
- ithrow 4y agoJavascript on the backend too, why dable in two languages/ecosystem if one can equally get the job done? (for many use cases)
- dzink 4y agoI’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.
- trilobyte 4y agoRust, 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.
- ithrow 4y agoIf I had to pick one of the three, it would absolutely be Python for ubiquity. Except for browser programming.
- Nikolas000 4y agoGolang, Elixir or Rust
- deleted 4y ago[deleted]
- tarokun-io 4y agoRust 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#.
- ghstcode 4y agoI’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.
- patatino 4y agoTypescript and rust pretty much covers everything. Also a lot of jobs and I think increasing a lot in rust
- tmm84 4y agoIf 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.