A few critical differences exist between graphic design and coding that make learning on one’s own less straightforward than learning to write code.
With code, there are correct ways, wrong ways, preferred ways, deprecated ways, and ways that involve choosing between acceptable options. There’s some of that in graphic design, but in far more ways, no cut-and-dried answers exist.
In graphic design, there’s the added slippery, nebulous complexity of aesthetics and whether or not the design is appropriate for the job at hand. There’s no such thing as a code validator for graphic design, nor can it be checked in a web browser to see if everything displays correctly.
Graphic design is, in some ways, akin to writing a novel or composing the score to a movie. There’s a big, grayish, multi-dimensional continuum between what most people would agree is good and not so good. Does the typeface work? Is the color too dark? Is the personality appropriate? Does it evoke the right emotions? Are there unintended connotations? Is it boring? Is it too loud or too passive? Is there too much tension, or is it too easy-going and forgettable?
I could go on, but there’s no book, no online tutorial, and no one opinion that will give you definitive answers on any of these kinds of things. Instead, it’s a matter of practice, evaluation, adjustment, critical analysis, mistakes, failures, successes, soaking in various opinions, and developing an increasing level of intuitive sensitivity based upon all these things over many years.
I won’t say that learning design is any more or less difficult than coding, but I will say that the learning takes place differently. And that difference doesn’t lend itself to something along the lines of Codecademy.