> Ironically, I've found that using weaker tools can help with complexity. It's hard to write a complicated C program because it can't do very much.
I can't say I agree with this assessment.
> Ironically, I've found that using weaker tools can help with complexity. It's hard to write a complicated C program because it can't do very much.
I can't say I agree with this assessment.
Biggest example I've seen: wanting to use Java for a web server where a 10-line node server did wonderfully. Or similarly, wanting to use async/await in Rust when threads are more than sufficient.
Sometimes I think we make our problems unnecessarily complex by chasing efficiency perfection.
Unnecessary complexity is largely caused by software developers who are currently in the middle of the bell curve of experience, who think that programming computers is all about finding the most clever way to solve a problem, usually by utilizing the most advanced language features they've learned about and/or by making systems as generic as possible, as opposed to writing instructions for the computer to operate on data as simply and efficiently as possible.
In my experience, every good software developer goes through an "adolescent" phase where they get caught up in doing things as "cleverly" as possible, completely blind to the unnecessary complexity they're creating in the process. There may be somebody out there who has avoided this phase of learning the craft, but if there is, I haven't met them. Part of me thinks that "getting it out of your system" is an important part of learning to get better at the craft.