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!!!
These come to mind:
- Elixir to expand the way you think about problems (and maybe your career).
- D to bring familiar conveniences closer to the metal.
- C to understand (and maybe contribute to) a vast ocean of existing software.
- Python for development productivity.
Download GODOT and learn the scripting language and the shader language. Make a game! Or at least neat shader art.
Bonus answer: Csound. Make funky noises with code.
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.
I recently picked up Rust, still a beginner, but it’s very nice. And the compiler errors and tips are top. Since I used only Python before, Rust is my first compiled language and I’m glad it was Rust. Options and Result’s are also something I appreciate tbh. Other than for AI, simple stuff and maybe prototypes, I would use Rust over Python. Definitely recommend it. The borrow checker is a pain in the ass though. I’ll also be using it later for embedded systems when I become more fluent with it. I am also currently making a big project with Rust that I haven’t been able to do with Python.
C# is a great choice.
Incredibly versatile language and should be an easy jump from java.
My two cents: I strongly agree with this. We just deployed an intranet blazor server app running on Linux (don’t know which distro) and apache (we might switch to nginx soon). It works very well and we had to write less than 100 lines of JS (mostly for file download and upload) One of my workmates was hired one year ago and at the time he didn’t know anything about .Net stack. Now he is mostly autonomous and he loves .Net and blazor in particular. Obviously YMMV.
Bundle size is my only complaint with blazor, has to send the .net runtime in webassembly to the client.
Aside from this, C# on the browser is an absolute joy to use. I’d use for everything if I could.
You are talking about Blazor webassembly, I am talking about Blazor server side, which loads as fast as a “normal” website.
Server side Blazor has other caveats, that’s why I specified it is an intranet project, where server side Blazor fits very well. Anyway, at the moment, Microsoft is still putting effort in polishing both type of Blazor hosting model.
This is not our first Blazor intranet web app and some of them are running in production for one year more or less.
It is really a joy to program using Blazor, especially if you need cross tab/browsers/device/user real time communication, which comes almost free thanks to underlying SignalR channel.
Ah you mean Razor then. Blazor lets you run C# in the browser, but Razor is the one that needs a server and streams changes to the client using signalR.
I know Microsoft didn’t get this right with naming and you got caught in the trap but there are 2 (actually 3) ways of hosting Blazor.
I also see that this confusion won’t help OP choose Blazor over some more coherent dev environment hehehehe
C
IMO Zig obsoletes C in the way that go and rust tried to do. Personally, I would advise anyone to not learn C; or even start a new project in C, for that matter.
Since you already know Java, you could jump straight to C++ with Bjarne’s book “Programming - Principles and Practice Using C++”: https://www.stroustrup.com/programming.html
You can then move to more modern C++ with his other book “A Tour of C++”: https://www.stroustrup.com/tour3.html
And then if you’re curious to know how software design is done in modern C++, even if you already know classical design patterns from your Java experience, you should get Klaus Iglberger’s book: https://www.oreilly.com/library/view/c-software-design/9781098113155/
In parallel also watch the “Back to Basics” video series by CppCon (see their YouTube channel: https://www.youtube.com/@CppCon , just type “back to basics” in that channel’s search bar).
Learning proper C++ should give you a much better understanding of the hardware while the syntax still remains elegant, and you get to add a new skill that’s in very high demand.
I see you mentioned JS, but not TS. If you haven’t tried TypeScript, you 100% should! It helps a lot at scale.
Also, I really do recommend Rust. It’s pretty awesome having the errors actually make sense, and it’s not as complicated as the hype makes it out to be (until you get into async rust lol).
As others have mentioned, C# is also awesome.
We do use TS as well, yes!
Rust is definitely a language I’m considering. Syntax looks a bit scary, though!
Rust syntax is totally fine really. It often feels like writing python
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.
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.
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.
Packaging solutions kinda sucks, but we’re about to get a JIT in the main CPython so that’s exciting.
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…
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
Hah I love snake case.
I also love python for distributed micro tasks and data pipelining
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?
I don’t hold any of that, I just find it the most readable for me.
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).
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.
I love C#, but F# is also super fun and worth checking out.
DotNet is closest to Java, but hang on to your hat: the state of C# is at least half a decade ahead of Java, if not a full decade. It’s sophistication will make Java use feel like banging rocks together. DotNet Core can now run on all three primary platforms, and with some careful work, you can write a single program that can compile down to each platform and carry along its own required binaries, no pre-install of any framework needed.
My second recommendation would be Rust. Stupidly steep learning curve, but an absolutely game-changing one where safety and security is concerned. It’s my next objective, personally speaking.
Any other language I could recommend starts getting into speciality purposes, which makes general use more difficult or even wholly inappropriate.
For example, if you are dropping into DotNet for business applications, I would also recommend diving into F# for that functional goodness for building complex business rules and data handling. But building an entire app in F# can be jamming a round peg into a square hole under many circumstances, it’s appropriateness envelope does not cover as many cases as C# does. You want to use C# for boilerplate/frameworks, F# for the core bits where it is going to shine.
Learnyouahaskell.com is a good way to get started with Haskell. I’d recommend that as best for your mind expansion mission.
PHP is a really fun language syntactically and has a surprisingly good built-in library.
As a PHP Dev: Please avoid PHP unless you have to use it.
I know it’s fashionable to shit on PHP but it’s significantly better than it once was… it’s honestly like a cleaner python that lets you use brackets.
Cleaner python? Hahaha that’s hilarious