I've noticed a shift in what I teach juniors first. Previously, it'd be coding stuff before anything else. That's now changed to environments, tools, high level design, and small, replaceable parts.
Sure, they make mistakes, but they learn the code patterns and stuff as they go along. Which even if they were to "study" design patterns first, would have had to do anyway. The code stuff has become a side effect of getting stuff done.
This shift has happened organically. I've come to realise that "local architecture" and "cleanliness" doesn't really stand up to the harsh reality of changes. It's been surprising as well, and had I done it intentionally, I'd have found it hard to do.