Skip to content

Instantly share code, notes, and snippets.

@lahwran
Last active November 19, 2018 19:46
Show Gist options
  • Save lahwran/6429c7817849a2feff11 to your computer and use it in GitHub Desktop.
Save lahwran/6429c7817849a2feff11 to your computer and use it in GitHub Desktop.
Programming learning resources

This list was originally authored by a friend who has been learning programming for some time (tuningmind)

Programming learning resources

Note: Many books may be available from a nearby public library. Check there as well!

These two are about the best I've seen for starting from scratch:

Followed closely by:

These three do the best job of explaining WTF when you're just starting out:


For practice problems to work on to help me drill the concepts I'm learning I liked Think Python: How to Think Like a Computer Scientist   (book - free pdf - free online - book on amazon), although one of the more interesting chapters required the installation of a clunky turtle-based gui that I needed a lot of hand-holding to get running. The rest of the book would be useful without that though, as most books I've seen do not provide enough opportunities to practice, and once I got turtle installed, it was fine to work with.


I don't remember any of these giving a really good basic description of the basic layout inside a computer, things like how the memory is laid out and what, at a physical level, is happening when you write various commands. There are lots of places to get too much information about that, which is confusing. I got this straight from asking (lahwran) questions, primarily, which then made sense of the various comments on the subject in the other books. In particular, I did not understand what bash is.

Once I got that, though, my favorite reference for understanding the basics of bash is Sams Teach Yourself Shell Programming - (book, for pay)


I also did spend some time perusing Computer Science Illuminated by Dale and Lewis (book - for pay) for basic familiarity of what's happening inside a computer, although I would have preferred something like this that was much briefer. Also, for the concepts behind what's going on, I love (though have only perused) Code: The Hidden Language of Computer Hardware and Software - (book - for pay) which demonstrates the ideas behind binary, and builds up from concrete examples like blinking flashlights to do morse code with your buddy at camp.


  • Also useful is Coursera Introduction to Interactive Python from Rice University - (course - free online) which shows how to do event-driven programming, and also has lots of great PRACTICE and great documentation. It does, however, go too fast for someone who has never programmed before, so it's not something I would want to start out with. The practice problems they have, in addition to the assignments, have a particularly helpful organization as well as being plentiful.

  • For editing, I started out using Sublime Text (commercial - free indefinite evaluation - for pay $70), until the 'buy me' messages were balanced by my comfort in navigating bash.
  • To learn vim, the vim tutorial - (application, comes with vim) was a great introduction, followed by
  • vim-adventures.com - (half-finished online game, free so far)
  • I also often used the vim cheatsheet - (poster - for pay)
  • note from lahwran: vim is not the only option for very advanced editors; vim and emacs are approximately peers, and which you use should depend on what the people around you use, because they'll be able to help you - not some moral assignment of superiority such as people who use one or the other will often give you.

It took eight months of dabbling amongst all of these to get to where I can now answer most of my questions by googling.

Last but not least, two concepts particularly have helped me get this far:

  1. Practice as much as possible
  2. Any time one source gets confusing, switch to another one, since they all seem to underestimate how much practice is needed before moving forward, or to miss some fundamental idea that it didn't dawn on them they needed to emphasize; but they don't usually all overlook the same things. It was important to never think that I had to master a particular book before going on to the next one, if I sensed that the authors had missed something I needed to understand. In fact, that's why this list is as long as it is.

There are many others I consulted to one degree or another, but these are the ones I think I used the most.


Note from lahwran: I'd also add to #2 that any time you can ask a human a question, do so. Don't wait for an answer, but do ask, because if you get an answer it will usually be better than a book.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment