Same can be said of engineers.
Same can be said of engineers.
If software developers would stick with tried-and-true tools instead of inventing new frameworks to solve the same old problems and immediately obsoleting the "old" way of doing things each time, we'd have much less legacy code and likely would be much better at estimating software development tasks, and wouldn't have to solve the same problems over and over again.
However, your last point is not valid because you're under the fallacy we ever got the framework problem "correct". Who is to say that Django is better than RoR or visa-versa? Software is still a very new craft; you can't say that about masonry. Actually your fallacy stems even further. You're assuming software is predictable. There's degrees of predictability, but most programming starts out as a trek into the unknown. Sure, you might grab a familiar lamp like [Framework X] to shed light along the way, but really you don't know for sure what you're in for. If you did (or do), then you probably spent an insane amount of time spec'ing everything out perfectly. I have no problem with this, but there's even some dissonance between spec & code and the further out that spec gets, the greater the dissonance.
Software will always be kinda crazy in my opinion, but I reckon we're getting better with these agile approaches that embrace the unpredictability. In the TDD approach, you have to come up with tests first. This can usually give the programmer or architect a much clearer picture than "step 1: build web app" which will transfer over into their estimates.
I am currently developing something very new, and the road to where I want to go is plastered with new concepts I invented. Half of what I need to do is inventing new mathematics as well (in the form of making up new definitions, theorems, and proofs of these theorems) so that I know what exactly my software is doing.
Will a computer one day be able to do what I am doing? I definitely hope so. In fact I'd love to have a computer at my side right now that could prove this freaking theorem I am working on right now. I am pretty sure it is true, but I will need 2 or 3 more days until I am really sure. It would be nice if a computer could tell me in a second if it is true (or not), together with a proof.
I do separate in my mind engineers that can take a blank sheet of paper and create something completely new, and engineers can really only start from something that already is, or a close to what they want, and morph it into something else.