I don't find challenging problems frustrating. I find unnecessary problems frustrating.
What industries, tools, and languages are the least frustrating to work in?
Do you believe "modern" programming is more mentally ergonomic? Web development, dynamically typed languages, IDEs, co-pilot, etc. Or do you take a more traditional and minimalistic approach?
I understand there will always be an element of frustration and difficulty in any given field, but I don't think the life of a developer has to be as low quality as it is currently.
I love the simplicity of it. Some think this results in overly verbose implementations or error checking, but I don't mind that. I feel like it fits in really well with my way of thinking when I write code. It makes me think about what I'm trying to do before I do it in a way that not all other languages do _quite_ as smoothly and intuitively. It just jives naturally with my way of thinking when I write it.
I also love the test tooling it comes with - it's one of my favorite parts. Not writing tests in Go just seems like a genuine waste. They are a pleasure to write and run. In some languages, writing tests seems like a chore you have to do because you know it's good practice. In Go, I feel like writing the tests as I write the implementation actually helps me produce better code from the beginning. I know that this is not exclusive to Go. I do write tests as I implement in other languages as well and find them useful, but something about the Go way just clicks with me really nicely.
You have to decide your preference on things like type system (runtime or compile time checking?).
Also what are you developing? Web CRUD will be less frustrating in Ruby than C++ for example.
I will bashfully admit I sort of prefer Typescript/Node to C# and Java. It think because JS/TS is a simpler language (Go might be a similar experience).
I have tried Haskell etc. and while fun to do the hard stuff there, I enjoy producing more than understanding complex type systems (libraries mean you can’t avoid the hard part). So I prefer imperative languages with functional features where needed.
All that said, pick one of Python, JS, Ruby, Go, C#, Java for high level stuff anyway and it is much of a muchness they each have their own bugbears and you wont know until uiu get deep into them which ones you will hate the most.
If I had to give a general answer … maybe Java as that gets you on JVM and then you can choose a different language and reuse the Java library skills there. Plus lots of jobs!
If you want to avoid frustrating problems entirely don’t be a programmer. Maybe do programming language research? Or something very low level embedded where you are writing the machine code so there isn’t heaps of cruft between you and what is going on. Real world commercial programming is 90% solving problems that 1000000 other people have solved slight variations on, swearing at the compiler and so on… it is in it’s nature ridiculous! (Like any other job …).
- who needs microservices when you have the OTP framework and gen_servers? - "let it crash" philosophy: supervisors will restart your processes automatically - design fault tolerant systems at the application level with supervisors and OTP applications - design fault tolerant systems at the infrastructure level with Kubernetes - bring the two together with Horde and libcluster - store in-memory distributed state with Mnesia (who needs Redis?) - Phoenix and Ecto for the web stuff