Lifehacker has collected a lot of "learn to code" resources that are especially helpful to new learners. But if you've already done a little coding or taken just a couple of courses, and you want a more thorough education in both theory and practice, start with the site Teach Yourself Computer Science.
Workers manning the ENIAC. Photo: US Information Agency
You could maintain an acceptable career by just learning what you need as you go, say the makers of TYCS. But if you get a full CS education, you'll have better job security and the capability to work on important, world-changing projects. If you want to help build wildly successful startups such as WhatsApp, or make major contributions to open-source projects, you'll need a deep, wide and structured knowledge of computer science. TYCS, which was written by the faculty of the a la carte Bradford School of Computer Science, offers a self-taught curriculum, which they present as an alternative to a university CS degree.
The curriculum is built around a series of textbooks and videos, most of them free online. There's a recommended order of study, and a total recommended study time of 900-1800 hours (23 to 45 full-time weeks). The course catalogue explains why each topic is important, and names the best resources. For each textbook or other resource, TYCS gives some insight into its style and function, and tells you when to skip some chapters. For example:
The canonical introductory text [to languages and compilers] is Compilers: Principles, Techniques & Tools, commonly called "the Dragon Book". Unfortunately, it's not designed for self-study, but rather for instructors to pick out 1-2 semesters worth of topics for their courses. It's almost essential then, that you cherrypick the topics, ideally with the help of a mentor.
TYCS takes a "Great Books" approach, curating a selection of classic, high-quality resources. "You don't need yet another '200+ Free Online Courses' listicle," TYCS says. What you need is context around the very best resources. And context is what you're here for: To learn the theory behind your practice, and to learn what you haven't yet practised, so you're ready for an ambitious and challenging career.