Recommend me a programming language

I’ve been working with a Javascript (+ TypeScript) + Java + SQL stack for the last 10 years.

For 2024 I’d like to learn a new programming language, just for fun. I don’t have any particular goals in mind, I just want to learn something new. If I can use it later professionally that’d be cool, but if not that’s okay too.

Requirements:

  • Runs on linux
  • Not interested in languages created by Google or Apple
  • No “joke languages”, please

Thank you very much!

EDIT: I ended up ordering the paperback version of the Rust book. Maybe one day I’ll contribute to the Lemmy code base or something :P Thank you all for the replies!!!

bungle_in_the_jungle ,

Python seems to be a staple for as long as I can remember and it looks like it’s still gonna be going strong for a good while yet!

I’m thinking of taking the dive and finally learning it myself soon.

henfredemars ,
@henfredemars@infosec.pub avatar

Packaging solutions kinda sucks, but we’re about to get a JIT in the main CPython so that’s exciting.

Kushia ,
@Kushia@lemmy.ml avatar

When I used to work a lot with Python the packaging solutions available were the bane of my existence. I hope they’ve gotten better by now…

notnotmike ,
@notnotmike@programming.dev avatar

Python is especially great for quick scripts or PoCs. I’ve been using it a lot lately to prototype some things and it just makes it a breeze

Main complaint is the snake_casing convention. By far my least favorite

GBU_28 ,

Hah I love snake case.

I also love python for distributed micro tasks and data pipelining

pkill ,

I am the only person that feels like snake casing belongs in declarative stuff, data serialization etc. (SQL, protobuf, JSON, YAML…) while camel case elsewhere?

GBU_28 ,

I don’t hold any of that, I just find it the most readable for me.

zik ,

Python’s become very widely used in industry - it’s definitely a plus when looking for jobs these days. TIOBE now says it’s the most popular language in the world.

ebits21 ,
@ebits21@lemmy.ca avatar

Great for prototyping and quick scripts.

That and such rich set of libraries for anything you want.

krash ,

If you decide to take the plunge, I highly recommend the programming course on mooc.fi.

bungle_in_the_jungle ,

Hadn’t heard of that, will check it out for sure. Thanks 🙌!

krash ,

Anytime. Their discord community there is very active and helpful. If you’d like help or feedback without getting muddied by discord, feel free to inbox me.

matcha_addict , (edited )

I have a couple of suggestions based on what you want!

Ocaml: A good intro into functional programming

The languages you’ve used seem to be primarily imperative style. Ocaml is not commonly used in the industry (with some exceptions), but it has a vibrant small community, and more importantly, because it’s a functional language, it will be different enough from what you know. Even if you don’t use it in industry, it will teach you a lot that would be hard to learn using non-functional languages.

Ocaml is a compiled language, with a very fast compiler and very good type system.

Scala: the only semi-mainstream language that blends OOP and proper functional programming well.

Although scala is mostly a functional language, it still has most of the gestures of imperative OOP languages like Java. It is also far more mainstream than ocaml and has used in industry.

Scala also runs in JVM like Java, and thus gives you access to most JVM libraries.

Rust

Intro into low level programming Other answers spoke enough about Rust so I won’t dive here

Zig

similar to Rust in low-levelness, but less mainstream, better C interop, and other interesting differences

Raku: the result of 15 years of programming language design

Raku, formerly perl 6, was almost redesigned from the ground up to resolve complaints of perl 5. It has a very interesting design, with a gradual type system, a blend of functional and OOP paradigms, plus interesting syntax features like sigils and grammars.

There are many interesting languages out there. I could talk forever about this, but I’ll leave you with the above. I personally would recommend ocaml if you’re interested in functional programming or care about performance. Otherwise, Raku, since its very interesting but doesn’t perform well (Raku’s VM is still immature and under development).

YIj54yALOJxEsY20eU ,

Ocaml is going to be my next learn for fun language forsure! I’m getting sucked into the functional paradigm hole. The option/result types in rust have made working in languages without them much worse.

ericjmorey ,
@ericjmorey@programming.dev avatar

Coming from JavaScript, they may enjoy using ReScript instead of Ocaml.

matcha_addict ,

I tried to give OP languages that would be reasonably different from what they know already, so that its more fun (imo).

However I didn’t know of ReScript, so I gotta check it out.

msage ,

I’m sorry, but as someone who was paid for Perl 5, I have trouble seeing the appeal for Raku.

The first thing they should have done was nuke Perl from the orbit. Instead they built on top of the magic variable hell.

So no thanks. PHP is much better.

matcha_addict ,

No worries :)

technom , (edited )

I can recommend Rust - I’m training a few people on it.

And a pure functional programming language like Haskell or Scheme, if you don’t know what functional programming is, or are not comfortable with it. Functional programming needs a different mental approach to traditional (imperative) programming paradigm. Some of the more modern languages like Rust, JS and Python incorporate a lot of functional programming constructs. So it makes sense to learn them.

And a lisp - Common Lisp’s popularity is a public secret. Scheme is also fine. This family is homoiconic (program and data are treated more less the same). The syntax is actually very close to its AST. This gives Lisp unparalleled metaprogramming capabilities - mostly through macros. Macros in traditional languages are nowhere near Lisp Macros.

If it interests you, study a stack based language like Forth or Factor. Though they feel very different from Lisps, they have similar underlying properties. And you get more or less the same advantages.

fnmain ,

+1 for Rust, the learning curve can be pretty daunting, but once you’re over the hump you’ll never want to go back

charolastra ,

Agree. The official book is a really good start though, and available for free. doc.rust-lang.org/stable/book/

pathief OP ,
@pathief@lemmy.world avatar

I actually ordered the paperback version of the book. I hope it’s not too outdated compared to the online version, I just enjoy reading in actual paper :P

charolastra ,

The second edition was published last Feb (2023) I believe. I read it on my Kindle, having “flicked through” the online version about 6 months prior, and yeah having it page by page with bookmarks etc was almost as good as paper, but far superior to the web version and I was able to read it cover to cover and gain a lot from it. I immediately then read about 4 other books on Rust! Can recommend “Rust Atomics & Locks” by Mara Bos, and “Rust for Rustaceans” by Jon Gjengset for the next level up.

pathief OP ,
@pathief@lemmy.world avatar

Yeah, I did indeed buy the second edition! Thanks for the suggestions! Cheers.

jaxxed ,

No jokes: pick a language that is in the market, but has a different design philosophy than your background. Your background includes compiled static, and loose scripting, with strong library tooling, so you have diversity there, so a language in which you have to think differently is the right choice.

I recommend:

  1. Rust if you want something safe but that makes you work differently from java
  2. Go if you want a real mental challenge (the coding approach is very different from java)
  3. Lua if you want really see functional programming as a philosophy
  4. Python if you want scripting, and are tired of the web
BatmanAoD ,

Go if you want a real mental challenge

I don’t mean to be rude, but I find this baffling; what do you mean by it? One of the primary design goals of Go is to be simple to learn (this is fairly well documented), and it’s one of the few things I really have to give the language credit for. Rob Pike has specifically discussed wanting it to be accessible to recent CS graduates who have mostly used Java. I have never heard anyone before describe learning Go as a “challenge.”

yetAnotherUser ,
  1. Lua if you want really see functional programming as a philosophy

I’m pretty sure that Lua doesn’t follow functional programming as a philosophy…

dneaves ,

Elm

In short, it’s ruined my expectations of languages. It’s a functional language, like the style of Haskell, and transpiles to html or js (its meant for web). There’s very little that it allows for going wrong, and for things that could fail, it either tells you to port that out to JS and bring it back when you’re done, or you have to handle a Result type or Maybe type.

It sounds strict, yes, but not having to deal with issues later is so nice.

YIj54yALOJxEsY20eU ,

You just added this to my list of things to check out.

liliumstar ,

I would suggest Nim, I had a blast learning it and making a small project. It is not a mainstream language, nor is it a joke language.

nim-lang.org

solrize ,

Learnyouahaskell.com is a good way to get started with Haskell. I’d recommend that as best for your mind expansion mission.

losttourist ,
@losttourist@kbin.social avatar

Give Clojure a go.

It's a modern variant of lisp that runs on the JVM and has deep interoperability with Java, so you can leverage your existing knowledge of Java libraries.

But as it's a lisp, it will have you thinking about problems in a very different way.

abbadon420 ,

Can you name any real world usages for Clojure? I did some lisp once when I was a sprout and loved it, would be awesome to do it on the jvm now that I work with java every day.

losttourist ,
@losttourist@kbin.social avatar

It's a very flexible language so can find a niche almost anywhere. I know of fintech companies that use it extensively for their back end data processing systems, and I've seen some really interesting stuff done with Clojure and Apache Kafka. They're a good fit for each other - Clojure, as a lisp, is optimised for processing infinite lists of things and Kafka topics can be easily conceptualised as an infinite stream of data.

Also, when combined with Clojurescript, it provides a single language that can be used full-stack, so could drop in anywhere that you might otherwise use Node.

But I think one of the best things about it is the way it forces you to re-evaluate your approach to development. It's a completely functional language so you have to throw away any preconceptions about OO and finding new ways to resolve old problems is one of the things that should be a joy for most developers, even if it has no practical application.

maksut ,

IMHO it would fit use cases of java, mostly long running services. But it is a hosted language with different implementations on top of javascript, .net etc. So it might branch out other use cases like frontend dev. It has a small but active community. Although it might be most popular lisp nowadays.

If you are not familiar with lisp and aim is having fun while learning new things then clojure will fit nicely. It is so joyful once you get the initial weirdness because it will feel different. You just fire up a REPL, leave it running in background, hook your ide/editor to it and start sending evals. The application grows while it is running. I find the workflow quiet enjoyable.

zygo_histo_morpheus ,

Personally, the language that’s taught me the most to learn has been Haskell. It has a lot of very interesting ideas and a learning curve that plateaus after most other languages. There are several ideas that have trickled down from Haskell to other parts of the programming world and learning about them in the context Haskell is in my opinion better because you’ll learn about them in a context where they fit in with the rest of the language very well instead of being late additions that offer an alternate way of doing things.

Coming from Java and JS, Haskell has a very different approach to a lot of things so you’ll have to re-learn a lot before you get productive in it. This can be frustrating for some but you’ll learn more if you get over that hump on the other hand.

Haskell doesn’t see very much industry use and arguably isn’t very well suited for industrial application (I haven’t used it professionally so I don’t know personally) so it might not directly help you land any new jobs but it is in my opinion it’s a very good way to develop as a programmer.

demesisx , (edited )

I’m a huge fan of Haskell and (for pragmatic purposes) Purescript. Purescript is hard to find much in the way of documentation but it is so similar to Haskell in that the steep learning curve is worth it, IMO. I rarely find a project that I couldn’t accomplish with one or the other or both.

automattable ,

Nothing I have done in my career has given me even close to the benefit I got from learning Haskell. I don’t get to use it professionally, but the patterns I learned to recognize in Haskell are everywhere.

cosmicrose ,
@cosmicrose@lemmy.world avatar

I’ll suggest Elixir. It’s a language that runs on the same virtual machine as Erlang, which has proven to be great for ultra-reliable and excellent at managing many, MANY concurrent processes.

Elixir itself builds upon this great foundation with a syntax similar to Ruby, but entirely functional. It’s a delightful language to read and write.

joelthelion ,
@joelthelion@lemmy.world avatar

Rust, haskell, python, c++ are all interesting choices. I would argue that c# is too close to what you already know to be interesting.

If I were you though, I’d pick a project first, then decide what language makes sense for it.

pathief OP ,
@pathief@lemmy.world avatar

If I were you though, I’d pick a project first, then decide what language makes sense for it.

Certainly the best approach is to use the best language for your project. Right now my project is to learn something new and exciting, I bet when I start learning the ropes I’ll get some ideas!

Corngood ,

This is my favourite list in here, but I’d throw a Lisp in too.

Lisp, Haskell, and Rust should all teach you something new and profound about programming.

joelthelion ,
@joelthelion@lemmy.world avatar

Lisp is the only one I haven’t learned yet 😁

wer2 ,

C or C++, specifically with the use of compiler explorer so you can get a feel for how code actually runs.

Common Lisp or Haskell to get a taste of something really different.

mindbleach ,

C. Plain old low-level “portable assembly” C.

In particular I’d recommend a Game Boy game, because GBDK uses SDCC and is fairly low-bullshit. With scanline interrupts, you have a surprising amount of time to do clever visual effects, flexing the machines one-and-a-half background layers. The machine is sufficiently explained in about forty-five minutes via the Ultimate Game Boy Talk.

(NES is also an option, but - don’t. I say this with my NES homebrew project open in the other monitor. It’s a miracle this thing ever caught on. You need a decent understanding of the hardware, C, and 6502 assembly, just to put stuff onscreen efficiently. And then the fillrate still blows. The Game Boy can blast the whole tilemap in a fraction of a frame if you cheat hard enough.)

If you want more power, the GBA supports C and C++, and that little fucker runs Doom. It’s intended as a super-flexible sprites-and-tilemaps affair, like an SNES with an upgraded graphics chip. (And a downgraded sound chip.) You can scale and rotate dozens of sprites at 60 Hz, atop two scaled-and-rotated backgrounds. Or use fullscreen bitmaps in 8-bit or 16-bit color. (Well, 15-bit.) The homebrew scene for the GBA started before the console even launched, because it has a pretty standard ARM chip and will do anything the Genesis could without breaking a sweat. There was nearly a voxel heightmap version of Banjo Pilot that looked pretty damn close to Diddy Kong Racing on N64.

I recommend C and retro consoles because they’re suited to one another - and they offer control. You are in command of every single byte on these machines. C is the ideal language for that. It offers familiar high-level structures. It supports familiar syntax. But it runs very close to the metal, and if you want to get even closer, it will let you.

MinekPo1 ,

honestly I’ve been working on a side project in plain c , while I usually do c++ with a large amount of c libraries and I can’t say I prefer it . The OOP features c++ gives really feel absent and I really feel like my code could be cleaner with them .

especially as OP is comming from Java , c++ is likely a better option than c

coffee_poops ,

Rust