This list was originally authored by a friend who has been learning programming for some time (tuningmind)
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:
- Head First Programming (book, for pay: amazon, python 3)
- After you've done Head First Programming, you can continue with Head First Python (book, for pay: amazon, python 3)
Followed closely by:
- Udacity CS 101 (online course - free online, python 2)
These three do the best job of explaining WTF when you're just starting out:
-
When I had questions about specific built-in functions, my favorite resource that I could understand was Python in a Nutshell 2nd ed (book, for pay - amazon); Now I just google my questions and usually wind up in StackOverflow, but when I started out, I couldn't understand the answers there enough to use them, so that's what this book was great for.
-
For understanding basic concepts of computer science, I also liked An Introduction to Python (aka The Art and Craft of Programming) by John Lusth - (book, free pdf)
-
For general familiarity of the commands, Learn Python the Hard Way (book, free online); although I thought this approach was annoying, I have to admit it did help me get familiar with 'messing around.'
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:
- Practice as much as possible
- 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.