2025-10-11
State of Opinion - Programming Languages - Autumn 2025 Edition
Table of Contents
As I’m juggling languages often there are those which I like more or less and it fluxuates over the period of time. I figured out it might be good idea to…
2025-10-11
State of Opinion - Programming Languages - Autumn 2025 Edition
Table of Contents
As I’m juggling languages often there are those which I like more or less and it fluxuates over the period of time. I figured out it might be good idea to put on (virtual) paper why I find language attractive.
It’s completely subjective but not entirely uneducated, and hey, feel free to argue!
Favorite
Languages I’m the most excited about and would like to write in everyday, even if it hurts (sometimes).
Go
Yes. Go [1]. It’s a stupid language for a stupid people. I’m a stupid person ergo - I like Go.
It has footguns but I’ve seen worse (yo, Perl, wassup?!). It’s main strength is that it always feel productive. The main downsize, on the other hand is that it’s not specialized in anything and one could even say “boring”.
I love the tooling and ecosystem. I could bet my toaster and coffee machine have official Go SDKs. That’s how blowing mind ecosystem size is.
It also has a great community support, is very stable, well researches and business wise it’s a good decision language. Some say that if you say “Generics are useless” you’ll find a Go Developer in your fridge!
Cuelang
Configuration languages. I’ve seen them all. JSON, YAML, TOML, Dhall, Jsonnet, the one which looks like Malbolge [2] but written by someone trully evil.
And yet, I stand my ground that if you want configuration for your sweat and blood tainted system to work properly, you go for Cuelang.
If you need to generate 30x30x30 test cases permutation, you go for Cuelang.
I like it so much that every single time I see a JSON or YAML file I first import it to Cuelang and modify there.
There are 2 big downsizes:
- Documentation sucks (like, you need to go back and forth to understand what is happening, and it still isn’t complete)
- Some features are underdeveloped (I’m talking to you, Cue tasks!).
I’ve been doing plenty of stuff with it. It’s great to preserve consistency while being easy on fingers (write smart, not hard!). But that brings me me to the third downside: difficulty.
I’ve been using Cuelang for >1 year and it’s still not uncommon to get this “wtf?” moment. Even then I convert all my configs into the Cue, because it’s just… better.
CLIPS
Ok, I thought to not tell anyone but I just can’t hide it anymore. CLIPS is f*%#1ng amazing! [3]
It’s a forward-chaining-rule-engine that integrates well with C and is fast as hell. It has Lisp syntax, and is more of developing system from minimal set of facts based on rules. You can remove facts, transform them as system develops.
E.g. you have set of snacks and set of kids. First rule would be to remove snacks that give allergy to any kids. Poof, some snacks are gone from the fact pool. Then you ellect those who everybody loves (if any) and if selection isn’t robust enough - calculate hate points and choose the least hated.
I’ve been using it for around a 2 months and it allows stuff much faster in Prolog.
Main downside? Speed of normal kind of processing. E.g. tokenizing a file. Sure you can make a C language extension, but that requires you to use…
Zig
Nah, just kidding. You can use C (and probably should), but then…
Zig [4] is awesome.
Now I know what cool kids say “hurr durr, but what about (memory) safety, Rust is much better”.
Maybe it is, but sometimes better doesn’t mean … better?
I think everyone reasonable know that we should be dropping at least one meat meal a week and drive electric vehicles, but sometimes there’s this need to actually hear V8 engine starting. Yes, it’s silly reason, yes it’s bad choice, but some of us are punks and cowboys and pirates and we’re not ashamed of that.
That’s Zig. It’s just plain fun. Allocators? I was afraid of allocators, and today I just go “pffff” allocators. I find unnatural joy at seeing raw bits and bytes of my program.
It has many flags but comptime is just… I’ve seen comptime. In fact if you squint hard enough Lisp macros ARE comptime, but they are nowhere as elegant and pure as Zig comptime is.
And after all that fun you get SPeeeEEeeEeeeeEEEEeeeeeeEEEeeeEEEeeeeeeEEEeeeEEEEeeEeEeEeEeEeeeeeed..!
(Almost joking aside) in summary:
- Zig is raw
- Quicker to write in that C
- Still C
- Speed.
- Compilation Speed.
- Ever wondered how the bits look like?
- Plays well with CGo (making it much less painful).
Promising
Languages that didn’t get to Favorite list but could make it in the next edition. It doesn’t mean it’s new, it just I didn’t pick it up earlier
C
Thanks to latest work on Emacs I’ve started appreciating C.
It’s still dumb language that I had to use in school, but now I understand it better (Thanks Zig!). It’s a lot of work to make it work correctly, but it’s not half that bad. It’s simple to grasp and simple to work on.
Unless you have a behemoth of software to work with. But yes, it can crash in unexpected ways. Just do yourself a favor and wrap new projects in Buck2 [5]. You’ll thank me later.
Haskell
I remember when I said that Haskell stinks of PhDs. But hey, I changed my opinion. That’s what editions are for right?!
After couple of months of experience with OCaml I stumbled again on Haskell and it’s actually quite usable. stack, ghcup and friends make experience even better than the one OCaml [6] has..
Also I find syntax, while similar, somewhat more elegant than OCaml [6]’s and LiquidHaskell’s [7] with refined types makes me hope that I’ll be finally able to express what I want.
So how it’s different than OCaml:
- I found some types that are hard to implement in OCaml but they’re relatively easy to implement in Haskell
- Tooling is easy
- LLMs are quite good in explaining unclear construct (as my friend said - they were taught on guaranteed-compilable code).
- It has considerate amount of libraries that can provide special capabilities, like Turtle [8], Shh [9] or Logict 1.
Downside:
- There’s still a lot of theory behind it. In fact - I have dozen of books that I read in parallel.
- Vocabulary is bloated in idioms
Still learning it though and my head feels like a bookcase recently, but it’s fun. IMO fun and efficiency should be the driving factors for personal products but also for job seeking.
Souffleé
Datalog compiled to running in parallel C programs! CAN YOU FEEL THE EXCITEMENT!?
It’s really really nice, but on the other hand it’s more about the data set. Want to do something funky with files you need1 to read JSON file? Read data from database directly? Your on your own pal.
Today I have more C skills (and Zig skills) so I might try, but I don’t have a lot of use for it. IMO Souffleé is best fit for heuristic troubleshooting on large systems. Compilation to C and running in parallel is great because you could distribute binaries to distributed system and gather the results without actually connecting to system.
I’d connect it to Zig just to be able to compile to multiple architectures though.
False promise
Languages that would be favorite if…
Prolog
I still love logic programming but I feel that when it comest to Prolog it’s just a lost case. Everytime I want to do something smarter I drown in DCG or other feature that I probably don’t need. SWI is great, but I couldn’t get FFI to work, and I’m not sure how I’d even deploy it.
It’s fun to do some stuff, but probably going for Souffleé or maybe Haskell’s Logic Monad (or Ichiban Prolog in Go, if I really need the system) is the way to go. Probably better option would be…
On top of it, no one knows Prolog. If you leave Prolog behind people will despise you.
So in the end, probably either go for Smart People Language (Haskell) or go for Datalog to bruteforce search in solution scope (Souffleé)
Mercury
I wish it’d be more popular. It’s really nice: like a Haskell and a Prolog had a child (so somewhat better than Prolog) but then:
- Popularity is abyssymal
- There supposedly are companies that use it, but they keep it low profile
- It’s very boilerplate heavy
- Still it’s neigh impossible to constraint example Year type to 1900..2100
I found few bugs in my code with Mercury when toying with it thanks to determinism declarations and it makes DCG stupidly simple, but I don’t think it’s there yet.
The boilerplate to move forward which isn’t something I enjoyed much, especially when doing exploratively coding (e.g. I knew that solution would return multiple results but I had one in test set so Mercury demanded either more data in testset or adjusting function declaration2. Maybe in couple of years, but judging by its age it’ll probably never happen.
Perl
Perl, oh, Perl, how I wish you’d be still relevant. I know that Perl is ok, it probably still takes part in some sysadmin works but probably you’re better of with Python (especially since uv is doing really really really great job), TypeScript or just go for Go.
It’s old and consistent and I know it’s not quite obsolete, but I cannot say it’s relevant either.
Left behind
Languages that I used at some time and just decided that aren’t for me
Clojure
Great language, cool features, love channels, love queues and async and all that transclusiodyncepusiom, great JVM integration and scripting through Babashka. I moved away for two reasons:
- It always took me too much thought to put something nice (even though final result was terse)
- I just don’t have enough use for it - e.g. metadata passing with the data itself is a great idea, but I can’t imagine any solution I’d like to make using it
I’d still recommend it if someone asks though. And ecosystem deserves praise for keeping Datalog alive.
Rust
****Puts the armor on****
Rust takes too much of my time. That’s it; I said it.
I don’t like when languages require me to rewrite half of my code because I changed something. With Go I can make quick changes that span across multiple files in a jiffy. With Rust? I make architectural decision that takes DAYS to develop.
Quoting my friend who (similar as me) does contracting: it’s great when people look for how much code you wrote but not if you want to get feature done.
I share the sentiment. I’m also dont-look-at-the-explosions more kind of guy more, so it doesn’t align to my persona very much. It still is a great language and worth checking out.
Ruby
Ruby is fine (even great) it’s just after couple of years there was nothing I found exciting in it. I heard it’s faster now (and it was slow when I moved on), so maybe not a problem anymore but it’s just behind me today.
Elixir
I found Elixir to be a death by 1000 cuts. It’s the same reason I left PHP behind years ago - at some point it’s not about solving problems but about struggling with weird design decisions and annoyances of the language and ecosystem.
I could write a book about those 1000 cuts, but I don’t think there’d be any audience for it and also I found community somewhat hostile to non-aligning ideas, so no thank you, gonna skip on that one.
In short: It’s just not worth my time. Sidenote: This doesn’t apply to Erlang.
Bland
Languages that I feel are okay, but there’s nothing interesting about them or they leave funny after-taste
Python
I still have bad aftertaste after Python2/Python3 fiasco. There’s uv right now which is great for scripts and whatnot (but the same can be done with Haskell and stack), but still after so much time with immutable structures working with Python feels off.
There’s Starlark variety which is somewhat better (especially if you work with Buck2 [5] or Bazel [10]) in that area, but then you gain some and lose some.
Also, a lot of code is written in a weird way and I grew to dislike whitespace-based code structures. It’s OK, I can write somethng in it, but almost always there are better choices (FOR ME!).
TypeScript
Do you have sometimes this feeling that you need to wash your hands after using some tool? I have this with TypeScript. I don’t know why but in my mind it’s “slick”. Maybe that’s a corporate grease Microsoft puts on on it or weird form of fanboyism or the fact that it feels like you should go VSCode or Nothing on it. I can’t put my finger on what is wrong with it it, but I just don’t get any pleasure when working on it.
Honorable mentions
Language that I worked with for some time, worth checking out but not worth expanding on details in this post
- Erlang [11] - Elixir, but better (oh, and also check LFE [12]
- OCaml [6] - I tried to model specific thing, I failed so I moved on
- Nim [13] - it’s an interesting language but I dislike the syntax
- TLA+ [14] - temporal modelling language - really cool but with limited use in most places
No, please, no
- JavaScript - Port that to TypeScript ASAP
- PHP - I’m still traumatized by PHP4
References
[1] “The Go Programming Language.” https://go.dev/.
[2] “Malbolge,” Wikipedia, Sep. 2025.
[3] “CLIPS: A Tool for Building Expert Systems.” https://clipsrules.net/.
[4] “Home ⚡ Zig Programming Language.” https://ziglang.org/.
[5] “Buck2 build system.” https://buck2.build/.
[6] “OCaml Language Homepage,” OCaml. https://ocaml.org, Oct. 2025.
[10] “Bazel Build System.” https://bazel.build.
…or needed to, maybe it has developed since then ↩︎ 1.
There’s third way - loosening compiler requirements through multitude of flags, but then it’s the same non-typed programming all over again ↩︎