Learn using videos, interactive exercises, and in-depth articles in math (arithmetic, pre-algebra, algebra, geometry, trigonometry, statistics, calculus, linear algebra), science (biology, chemistry, physics), economics (microeconomics, macroeconomics), humanities (art history, civics, finance, US history, US government and politics, world history), and more (including computer science principles)!
Second, Keybr.com measures your keystroke dynamics and collects comprehensive typing statistics. For example, it measures your typing speed for each individual key, and uses this data to generate random words putting emphasis on the weakest key. The more troubles you have with a particular key, the more you will be typing it. It means, the generating algorithm will put that letter in every word in the next generated lesson. Your typing skills are re-evaluated after every completed lesson, and the next lesson will be adjusted accordingly.
Take a few minutes (or a day) to think about the reasons—the real reasons—why you want to learn a programming language. Be honest with yourself. Are you trying to learn the barest minimum to score a promotion? Are you looking to make a big career change? Do you want to create the next greatest app? Thrill your roommates by programming your various smart devices to do something awesome?
As a self-taught programmer, you might also benefit from books that offer broader advice on the profession. You’ll improve your thinking and habits, traits you can apply to any language you decide to learn. Steve McConnell’s 900-page Code Complete: A Practical Handbook of Software Construction (2nd Edition) is considered the definitive guide for best practices, with data-backed advice on everything from project design to debugging code.