One condition is that the you get quick feedback about your decisions. For example, if a surgeon makes a mistake then blood splatters. In programming, if you make a syntax error the compiler immediately complains. However, a design mistake might only bite you months or years later. That is a big obstacle for developing an intuition. However, if an apprentice programmer makes a design mistake. His master can give quick feedback.
I can imagine that the lack of such feedback not only results in slower learning. It might mean the non-apprentice programmer is unable to ever acquire an intuition for design no matter how many years of experience.