Note: I originally wrote this post over half a decade ago but have just gone through and rechecked/updated the links. The graphic shows some sources (thinking about you, Google+) that no longer exist, but I figured the concept itself was still valid enough to leave it. This post is not about networks per se but it points a small portion of the deeply networked coding sites on which we've all come to rely since the advent of the Internet -- Mark in December 2021
For the beginner coder, there are lots of different paths to programming proficiency. Some people will start with college courses, boot camps, or books. But it’s easy to lose your way, running out of time or patience as you struggle through the dense undergrowth of learning possibilities. This might provide a bit of guidance for those willing to generalize the lessons in finding their own paths.
To one degree or another, of course, all learners are going to blaze the path that best meets their unique needs, and a linear representation like this one can never do justice to fact that many people will engage in a lot of these activities simultaneously (e.g., have a book going while taking a MOOC and playing a Python-learning game). So feel free to devise other paths. We all learn from one another in this area. Below I have elaborated on resources available to travelers along the pathway suggested above.
At one time, I created a primer I was calling Quick and Quirky Python 3, but I’ve since removed it since I needed to refine it. But there is an assortment of other sources. One nice one is How to Use Python: Your First Steps. Another (perhaps overly) succinct work is Patrice Koehl’s Python Primer. There’s also Crash into Python, although I think that’s geared toward people who know how to code but are new to Python. I also like A Beginner’s Python Tutorial, and After Hours Programming is useful. In addition, there are various Python tutorials (which we’ll discuss below) that could be viewed as primers.
Resources for Kids (or the Young at Heart)
A growing number of sites allow beginning programmers to build code by dragging and dropping “blocks” (or other visual widgets) rather than manually writing text-based code. These do not necessarily use the Python language, but they are a place where beginners of all ages (but especially children) can go to get a feel for how to code. Among them are MIT Scratch, Code.org, and Google Blockly. There’s a blurred boundary between these types of sites and sites that teach via gamification, which I will discuss below.
Online and/or Interactive Tutorials
There are a lot of very nice Python tutorials online, so there’s no way to cover them all here (see the end of this post for more on sources). I really like TutorialsPoint as a non-interactive but clearly written and organized tutorial. It’s also pretty comprehensive. Another good one is the Non-Programmer’s Tutorial for Python 3. As for interactive tutorials, the ones I’ve used most are Codecademy, How to Think Like a Computer Scientist, and LearnPython. There are also a lot of nice video-based tutorials. I urge you to search YouTube and find those most applicable to your needs. The video-based tutorial I’ve used most is Nettuts+’s Python from Scratch, partly because there is prose as well as video.
Where to begin? For my money, the best place to get a user-friendly list of them is Invent with Python Bookshelf. Another good list can be found at the official Python website. As for individual books, some of the best ones online are Byte of Python, Dive into Python 3, How to Think Like a Computer Scientist (also an interactive tutorial), Invent with Python (actually a series of books), and Learn Python The Hard Way (also a tutorial) are all good. For beginners, I also recommend Head First Python.
Virtually anything on the Internet can serve as an online reference, so this is a catch-all and poorly defined bucket. But what I’m really referring to are the references you go to when you have a specific question about Python. Very often, you start just by plugging your specific question/subject matter into Google (or your search engine of choice) and seeing what comes up. Quite often, you’ll wind up in StackOverflow, where both beginners and experts have gone (and still go) to ask questions and have those questions answered by various Python programmers. It’s invaluable. Because this has been going on a while, your question has usually already been asked and answered before. When Web searching, you may also wind up in an online tutorial of some sort, whether it’s in the official Python documentation or something like TutorialsPoint.
With the advent of iTunesU and MOOCs (for massive open online courses), there’s now a plethora of university-level online courses that teach Python. In fact, since Python has become the introductory language of choice at universities, the average Python beginner has access to an embarrassment of riches in this area. A beginner could, of course, start with one of these courses as his or her first stop on the way to learning to code. My experience, however, is that it helps to go into those courses with at least a little knowledge about Python. That way, you can focus on the broader concepts (such code efficiency and the various types of algorithm) rather than scrambling just to keep track of Python vocabulary and syntax. I have had most experience with Hands-on Python (particular good for beginners), Udacity’s Programming Foundations with Python, and MITx: 6.00x Introduction to Computer Science and Programming. I like them all, but there are plenty of other choices available these days, including a number from Coursera.
Game-based learning is not just for kids, though some game-based Python learning experiences are geared that way: e.g., CodeCombat, Codingame, and Code.org. Other games or gamified challenges are more geared toward adults. Among them are Checkio (with which I’ve had most experience and can recommend), PythonChallenge and the pretty-darn-serious Exercism.io. The great thing about Checkio and Exercism.io is that A) you must do a lot of practical coding to make headway, and B) there are opportunities to interact with other coders and (at least for Checkio) get a good look at how good programmers solved the same problems as you just did.
Online Community Q&A
You can join Python communities, such as those on Google+, and ask your questions there. You’ll often get quite a few knowledgeable responses in just a few hours’ time. The same can apply to StackOverflow, which is not only a great reference but a great online community. There are also communities attached to online tutorials, such as those at Codecademy. And there are services such as Codementor where, for a fee, you can connect with “experienced mentors for instant help via screen sharing, video, and text chat.” There are also Internet Relay Chats devoted to Python.
Meetings and Hang Outs
Then there are virtual communities where people “hang out” while studying, discussing or reading a book together. One option for this is Codebuddies. There are real, face-to-face communities as well. Many cities now have makerspaces/hackerspaces where people congregate to make stuff, teach one another to code, and otherwise fly their geek flags. There are also meetups and user groups in which people come together just to discuss programming in Python. And there are a number of Python-focused conferences in a given year.
Intermediate Books and Blogs
Once you’re past the rank beginner phase, there are many books and blogs geared to intermediate levels of Python knowledge. Among the not-strictly-for-beginners books I have on my bookshelf are the (very heavy) Learning Python by Mark Lutz and the (less heavy) Python Cookbook by David Beazley and Brian Jones. The former is a soup-to-nuts manual and the latter is great for teaching you how to write in a more Pythonic, elegant way (something I’ve not yet mastered). Online is the book Problem Solving with Algorithms and Data Structures Using Python, which provides the kinds insights into algorithm writing that are seldom in books for beginners. And the official Python website has advanced books “for when you don’t want gentle.” There are also higher level blogs such as Pythonic Perambulations once you get past the beginner phase.
Write Real Code
Writing useful code is the best learning experience of all. There are lots of ways to do this. If your employer is already paying you do write in Python, then problem solved. But even if you’re not a paid programmer/developer, there are plenty of other opportunities to write “real code.” For example, you can write your own app or game, or code up a raspberry pi project, or get involved with a Github project. The truth is, there are nearly an unlimited number of ways and reasons to write your own code, from competing in a coding challenge to helping a non-profit produce the code it needs to run its business. The world is your coding oyster.
Note: Featured image is from Andrew Cattoir (Lake Mead National Recreation Area). See https://commons.wikimedia.org/wiki/File:Scenery_at_Bluffs_Trail_-Las_Vegas_Bay_Campground(802dd631-e46a-46e5-92dc-b1a6915a61ce).jpg