I’m flying back from Nordic Ruby (my first conference talk in three years; my last one was at Nordic Ruby, too, which made for a lovely continuity). The talk I gave was about the lessons I’ve learned while trying to become a better artist over the past year and a half, and focused on attention as the key concept. At this point, my thought (still early in my practice, but hopefully valid for all that) is that many mistakes in drawing are mistakes of attention — we draw what we think we see, which is very often not what we actually see. We attend to facial features much more than the tops of heads, so many portraits end up reducing the subject’s forehead dramatically. We cannot help but read words when we know a language, so drawing a scene with angled signs becomes a challenge in not drawing letters as if you were seeing them head on, but instead attending to and drawing the actual shapes you see.
Getting better at drawing, then, is in part accomplished by recognizing when our attention is misdirected and forcing it back to the correct spot. You can do this with rules of thumb (“the eyes are the midpoint of the head”), by practicing directed focus (draw this upside-down sketch, so the lines are just lines instead of representations of noses and eyes and fingers), or by consciously directing your attention in ways that avoid the problem altogether (draw the negative spaces), and you can even fix mistakes after your attention fails you, which it almost always will (by the by, my autobiography may just be titled For Love of Erasers)
As I get older, I get more and more convinced that everything I’ve ever been interested in is related to everything else I’ve ever been interested in. I find that mistakes in, say, software development, are also often attentional, and can be fixed with similar techniques. Rules of thumb about method size, naming, and the sorts of parameters you pass around can help. Practicing focusing with tools like exercism (especially valuable because of the feedback you receive from others) can help. Building empathy to better understand where your customer is coming from can help. Starting from user stories or by writing tests, analogous to drawing the negative spaces, can help. Keeping your code clean, modular, and well-factored so that it’s easy to fix bugs when they inevitably arise can help.
Pay attention, especially to what you pay attention to, and you’ll do better in anything you attempt.