Core problem solving skills. Debugging, triaging, fault-finding.<p>The thing that makes me a good programmer is my ability to consume a bunch of code, model the program in my head, and analyze likely faulting paths. The <i>code</i> is secondary. Your job as a programmer is to solve problems. Code is just the tool we use to implement the solution.<p>Instead of bashing your head into the keyboard until the bug goes away, take your time to actually understand the bug. Make an effort to <i>grok</i> as much of the program as you can. Draw flow charts and diagrams if you can't keep the model in your head.<p>A related point: understand what the machine is doing and how your code interacts with it. If you're aware of the physicality of the machine, you'll tend towards better and more optimal code.<p>Really you want to learn <i>programming</i>, and not <i>code</i>. Tinker with as many different languages as you can, but don't overly concern youself with advanced features. Learn how to walk into a codebase in an unfamiliar language and immediately start hacking. You'll eventually learn to see the program behind the code. To a good programmer, code is code is code, no matter the language. Really think deeply about the distinction between a program and the code. Again, code is just the tool we use to create a program.<p>Other than that, the single most useful thing you can learn is shell scripting. It cannot be overstated how important and useful bash and powershell scripts are. They are <i>everywhere</i> and most programmers have written countless shell scripts.<p>To sum up: learn the theory and philosophy of programming and computing. You have to build a deep understanding of programming in the abstract before you can apply code. You want to cultivate a <i>talent</i> for programming. Skills come after that, and you pick them up along the way. We are all constantly learning new skills, it's part of the job.<p>A painter does not master the art by studying brushes. A master understands art, composition, colors and can apply that understanding with a brush, pencil, pastel or any other tool. She does, of course, specialize in and deeply understands a small subset of those tools, but she can still produce masterworks with unfamiliar tools.<p>Learn the art, not the tool.