We got rid of the getter setter silliness to be in “constructor land.” ( immutable records from Java 17 )
Function are still not first class citizens, but … they have a working visa now. You can shove lambda anywhere.
It’s still awkward to write functional code
Meh. Recently I’ve been really productive with it and I like the sheer boredom and lack of surprises.
I think something way more radical than "C++ threads but with a built-in concurrent queue" is needed. If the default was to share nothing, and any shared memory had to be explicitly shared somehow, that would be a great step in the right direction. Maybe the compiler could even check that explicitly-shared variables are protected by a mutex; something like how Rust mutexes "own" the things they're protecting and you can't access the underlying object without having the lock.
I love writing lisp, but I hate reading & debugging lisp.
There's a Go code base that a friend and I first wrote 5 years ago and we incrementally update it as we find small bugs because of a system it interacts with that changes. We usually touch it once every quarter. I've had no trouble re-reading the code base and keeping it up-to-date. I can't say the same for a lot of other code bases I've worked in.
Honestly, I suspect the deficiency is on my end. Perhaps I’ve just spent too much time with Lisp and have experienced some professional deformation.