Earlier quoted context omitted.
> you learn on the job by getting your hands burnt. That's how it works in new fields where there's no good theorical foundations yet. I think OP is asking if we already know how to avoid getting hands burnt in the first place, as in many other fields of engineering where you don't just learn on the job and get yourself burnt a few times.
This is why I think "software engineering" is more of a creative field than a "hard engineering" one. More akin to painting or singing. You need practice in order to improve solving problems in the real-world, you can't just read up on it and become better than people who've actually implemented useful things in real scenarios.
I believe not long ago, medicine was like that. Clearly, things can, and should, become more standardized and that will not in any way encumber the creativity that is also a big part of our field.