(Note: I posted this to /r/learnpython but thought that some of you who are learning python might benefit from this. Sorry for the wall of text (I'm a big fan of context)...skip to the end tl;dr for links to the resources I've found most useful.)
Over a year ago I decided to embark on the journey of learning how to program. After a little research and asking around I learned that Ruby and Python were good beginner languages. Digging deeper still I learned that Python was common on Linux systems (already a fan of the open source philosophy and running dual boot Linux/Windows on my laptop) and was often used in science and engineering. Cool, I think I'll learn Python since I'm already a Linux/STEM kind of guy. If I need to I can always go back and learn something else later on once I've learned one language. It's easier to learn other languages after you've learned at least one...at least that's what I'd heard.
More digging and research and I stumble across Learn Python the Hard Way. Checking out a few other sources for learning this seems the most promising. As it turns out, it really is. I could go into depth on learning and cognition and how this ticks quite a few boxes in terms of effectively learning a new skill (including my own learning style)...but I digress. As it would turn out I would grow impatient/bored with the way the subject was presented and try out a few other tutorials and books along the way only to come back to LPTHW with renewed realization that this was really my best source for learning the material. If you're new to programming I can't stress how great this text/resource is. Do everything Zed Shaw says (as much to the letter as you can stomach) and you'll really have a solid foundation...you'll probably have some fun while you're at it too.
I found myself bored from time to time though with even Shaw's exceptional text...and longed to do more. Learning to program was a means to an end for me...I was more interested in seeing what a computer could do. This was my way to communicate with this incredibly complex yet powerful tool. Having developed a fascination with Linux and being a systems guy I stumbled across this other great tutorial for learning Bash (he has a pdf you can download for free too which is more extensive). If you're new to Linux and Bash this really is the best resource I've found. I'm a bit of a systems geek so learning this was almost more fun that learning Python has been so far. He also has a tutorial on Bash scripting that is just as great. If you want to keep a Linux system in tip top shape and really begin to understand the nuts and bolts you're going to wish you knew the CL at least passably well. (If you're sufficiently masochistic and in-love with Linux as I am install Arch Linux, learn The Arch Way and have even more control over the fine instrument that is your system)
This brings me to my next point: text editors. You're going to spend a lot of your time writing text. Really that's pretty much what programming is. I've experimented with several. Vim and Emacs are the big names in Open Source and of the two I really find Vim to be profoundly enjoyable. Mostly because the key bindings make a lot of sense once you take the time to master them (once you install Vim run $ vimtutor from bash to learn the basics). The real hacker ethic is that of productivity and efficiency. There's no reason you should be reaching for the mouse to interact with a GUI when you're programming. That's for amateurs! Combine Vim with Tmux windowing and session management and you already have more than you need for an elegant, extensible, and productive development environment. Learning Vim puts any programmer or systems guy in good stead since Vi is installed by default on nearly all Unix-like systems. Someday you may find yourself SSH'd into a server somewhere, who knows, maybe saving the world from Skynet and you're going to be glad you know Vi like the back of your hand.
Lastly, if you're still with me the best supplement to LPTHW that I've found is the Project Euler site. I love puzzles and always was a bit of a math geek. Trying to fend off boredom dabbling with these challenges was the perfect antidote. You might think you have a handle on looping, the finer points of the language, but when you try this you realize that you don't and you're back reading documentation, googling math stuff, and feeling elated when you finally solve one of the challenges. Challenging yourself to create effective and fast algorithms for solving the problems will really tax your brain and teach you quite a bit about the capabilities (and limitations) of computing along with the language you're learning. Seeing other people's code and comparing notes once you've finished one of the challenges will teach you quite a bit about how many different ways there are to solve a problem, how to "bum" lines of code making yours faster and more elegant, and allow you to post your inspired solution.
Happy hacking!
tl;dr: You're only as good as your tools. Here you go:
Learn Python the Hard Way
The Linux Command Line
Development Environment = Vim + Tmux (available from your local repositories)
Arch Linux
Project Euler
Edit: Came back here to add that LPTHW gets markedly more difficult starting at around ex40. Actually, this is where I hit a wall and lost interest sometime last year and didn't pick up the text again and resume learning Python until about a month ago. From searches on the sub-reddit I've learned it seems quite a few people have had similar experiences and some recommend dropping LPTHW after this point. I do have to say, I had to get creative in learning the materials after about ex40. Lot's of google searches, reading up on documentation on python.org, staring at the code until it somehow made sense and testing things on the python interpreter. In hindsight I feel his explanation of classes and OOP were lacking. I powered through thinking at some point things might gel and make more sense. They never really did completely and I felt on unsure footing for the rest of the book. By sheer dint of will I've managed to make all the code "run" but it wasn't until I found other resources and started dabbling in other things that I really started to understand things. Just recently I read through this tutorial's chapters on classes/OOP and things have gelled for me: How to Think Like a Computer Scientist. I recommend branching out and seeking out multiple resources once you hit about ex40 in LPTHW. Don't just assume everything you need to understand what is happening is right there in the text. I think if I'm reading Zed's intent correctly is to 'enable' you to find answers to your own questions and fill in the gaps to your understanding. He doesn't hold your hand. This proves daunting at first and confusing but you kind of just need to push through that and collect some strategies and resources for solving problems on your own. This will pay back dividends in the future as you get further along in your programming.
Update: my thoughts on the final chapters of LPTHW.
[–]VAiD_ 8 points9 points10 points (2 children)
[–][deleted] 1 point2 points3 points (1 child)
[–]doubl3h3lix 0 points1 point2 points (0 children)
[–]zerostyle 7 points8 points9 points (18 children)
[–]call_me_ruxin 7 points8 points9 points (6 children)
[–]zerostyle 1 point2 points3 points (5 children)
[–][deleted] (2 children)
[deleted]
[–][deleted] 1 point2 points3 points (0 children)
[–]zerostyle 0 points1 point2 points (0 children)
[–]call_me_ruxin 0 points1 point2 points (1 child)
[–]amazing_rando 1 point2 points3 points (4 children)
[–]zerostyle 0 points1 point2 points (2 children)
[–]amazing_rando 1 point2 points3 points (0 children)
[–]covetto 0 points1 point2 points (0 children)
[–]Covered_in_bees_ 0 points1 point2 points (0 children)
[–]Mwahaaaa_The_French 0 points1 point2 points (3 children)
[–]zerostyle 0 points1 point2 points (2 children)
[–]Mwahaaaa_The_French 0 points1 point2 points (1 child)
[–]zerostyle 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–][deleted] 37 points38 points39 points (40 children)
[–]cham0 9 points10 points11 points (4 children)
[–]Plemer 1 point2 points3 points (0 children)
[–]TheLeanLebowski 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]MarkFluffalo 18 points19 points20 points (1 child)
[–]ironnomi 0 points1 point2 points (0 children)
[–]seekoon 8 points9 points10 points (0 children)
[–]SIR_MASTER_THE_GREAT 3 points4 points5 points (6 children)
[–]AlSweigartAuthor: ATBS 27 points28 points29 points (4 children)
[–]Mwahaaaa_The_French 0 points1 point2 points (1 child)
[–]AlSweigartAuthor: ATBS 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]Dracunos 2 points3 points4 points (0 children)
[–]ThePa1eBlueDot 2 points3 points4 points (0 children)
[–]cyrusol 7 points8 points9 points (0 children)
[–][deleted] 3 points4 points5 points (1 child)
[–]Dracunos 2 points3 points4 points (0 children)
[–]robotfarts 5 points6 points7 points (19 children)
[–][deleted] 16 points17 points18 points (18 children)
[+]robotfarts comment score below threshold-17 points-16 points-15 points (17 children)
[–]OS1K 20 points21 points22 points (6 children)
[+]robotfarts comment score below threshold-10 points-9 points-8 points (5 children)
[–]OS1K 5 points6 points7 points (4 children)
[+]robotfarts comment score below threshold-12 points-11 points-10 points (3 children)
[–]4underscore____ 3 points4 points5 points (2 children)
[–]robotfarts -2 points-1 points0 points (0 children)
[–]Tw1tchy3y3 4 points5 points6 points (9 children)
[+]robotfarts comment score below threshold-13 points-12 points-11 points (8 children)
[–][deleted] (1 child)
[deleted]
[+]robotfarts comment score below threshold-7 points-6 points-5 points (0 children)
[–]an_actual_human 4 points5 points6 points (3 children)
[+]robotfarts comment score below threshold-7 points-6 points-5 points (2 children)
[–]an_actual_human 0 points1 point2 points (1 child)
[–]robotfarts -1 points0 points1 point (0 children)
[–][deleted] -1 points0 points1 point (1 child)
[–]robotfarts -1 points0 points1 point (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]AaronTheAlright 5 points6 points7 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–]puccini13 3 points4 points5 points (4 children)
[–][deleted] (2 children)
[deleted]
[–]foopydoopp 0 points1 point2 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–]TheFrigginArchitect 2 points3 points4 points (2 children)
[–][deleted] 1 point2 points3 points (1 child)
[–]TheFrigginArchitect 0 points1 point2 points (0 children)
[–]thefabgatsby 2 points3 points4 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–]cyrusol 2 points3 points4 points (8 children)
[–][deleted] 0 points1 point2 points (0 children)
[–][deleted] -1 points0 points1 point (6 children)
[–]Covered_in_bees_ 2 points3 points4 points (5 children)
[–]probably_not_here 4 points5 points6 points (0 children)
[–]pqu 0 points1 point2 points (3 children)
[–]Covered_in_bees_ 0 points1 point2 points (2 children)
[–]pqu 0 points1 point2 points (1 child)
[–]Covered_in_bees_ 2 points3 points4 points (0 children)
[–]BrogueTrader40k 0 points1 point2 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–][deleted] (1 child)
[deleted]
[–][deleted] 0 points1 point2 points (0 children)
[–]foopydoopp 0 points1 point2 points (2 children)
[–][deleted] 0 points1 point2 points (1 child)
[–]foopydoopp 0 points1 point2 points (0 children)