Logic is core to software development. We refer to algorithms—the step-by-step instructions we give computers—as "logic."
While programming languages have simplified the process of instructing devices to do our bidding, and indeed people can be trained to perform rudimentary programming tasks in a matter of weeks, mastery comes only to those with years of training and practice to not fall into the trap of unintentionally writing flawed logic.
Being able to write good, solid, efficient code... that is to say, to express the logic clearly is an acquired skill. Learning a programming language requires intelligence; anticipating how it can be used effectively (and really, as importantly, being aware of how it can be used ineffectively) requires wisdom... and that deeper awareness seldom comes from a book. Sure, a few tips and pointers—perhaps codified as best practices—serve to keep the novice from making the most obvious mistakes, but the master has far deeper understanding and can extrapolate from past experience to know what might be perilous, and what should be more safe.