Last Updated: February 4, 2018.
Introduction to this guide
This guide aims to point you in the direction of the right resource(s) for your level of experience with Python – anywhere from total newbie to expert who’s been using Python for years. In my personal learning progression I found it difficult to first figure out where to start with the overwhelming number of options out there, but once I’d figured out a path and worked my way through the basics, also found it difficult to find good “intermediate” topics and projects to work on to grow my skills (everything after beginner just seemed too hard!). I hope this guide can save you that headache or maybe even just present you a single new resource to add to your toolkit.
The focus is on FREE, up-to-date, Python3 resources (any Python2 resources listed will be labeled clearly), and includes video courses, books, podcasts, Python-dedicated websites, meetups/events, online topic-specific-guide/blogs, project ideas, etc. I will also sprinkle in my own tips along the way.
The order of resources below reflects what I view as a “good” way to progress through learning the language (and computer science, if need be), but of course there are a near-infinite number of viable options. I add labels for each resource to give a hint as to when/why you’d want to use each resource, and provide added detail where pertinent. For example, I’ll use the following tags:
- Ease in: A slower-paced resource, which introduces concepts in-depth. If you’re totally new to a topic or struggling with it, this is a resource for you.
- Must!: Self explanatory – this is a resource I personally consider a must-complete. Quickstart variants offer a fast, likely minimalist resource that will cover a whole section of learning. If you want to take things slow or dive deep into a topic, this is probably not a resource for you. Besides a fast start, these resources may be more appropriate if you’re coming from another language (and will be labeled if that’s the case).
- Recommended: These are resources/topics that I’d consider more important than optional, but might overlap with Must! resources or not strictly speaking be necessary to grasp a topic.
- Optional: Resources I’ve found to be helpful (and of exceptional quality) either in filling in the gaps of Must! or Recommended category topics or that are useful topic-specific resources, but that aren’t necessarily essential to learning Python.
If something seems out of date (e.g. a link is dead) or you have a resource that you think should be added (keeping in mind that this is a curated, succinct list), please leave a comment. With that, enjoy the guide below!
Optional: Guide to course platforms
There are a growing number of course platforms, with an ever-increasing number of classes offered. Which ones should you take? Here’s my rank-ordered list of the “top” platforms (though some of my favorite classes aren’t from my top choice) after having taken a bunch of classes [probably too many] from each of them:
- Udacity: The platform focused on learning to “do” stuff. Learn the basics of the language and basic theory, but really classes are each focused on completing a “project” or learning how to do something. For example, the Intro to Computer Science class focuses on building a basic search engine. These classes are great to ease into new tasks or for when theory is getting too abstract/boring. Udacity also offers “nanodegree programs” for a cost, but you can take all of those classes for free. The downside is, they don’t necessarily tell you which classes are in each nanodegree, so you have to piece it together from course descriptions (or rather, you don’t, because I already did for you).
- Coursera: Probably the most well-rounded platform, with classes in a variety of topics and a relatively even mix of theory/practical application. The new (beta) “Learning Path” system is AMAZING – particularly for data science, for which Coursera has the most robust course selection (many from University of Michigan; Johns Hopkins University; Duke, and University of California, San Diego). Note: despite all the classes being free, many will only show an option to start your free 7-day trial or “enroll.” Just click enroll and select the “audit” option to take the class for free.
- edX: A collection of classes from some of the top tier of universities around the world, edX is my go-to for complex theory-based classes. Included in the offerings are MITx (MIT’s improved, updated version of OpenCourseWare), which includes one of my favorite programming classes to-date: Introduction to Computer Science; MITx 6-00-1x (more on this course below). The only reason this platform ranks third is that you often have to wait for classes to “start” – very few are “self-paced” where you can start exactly when you want. The good news is, you can just sign up for a bunch of future ones, and when they become ready, archived versions will be saved on your account forever.
- DataCamp: I haven’t actually taken any DataCamp classes, but they have courses that are well reviewed/recommended by many expert Python users. One in particular, Intro to Python for Data Science, is suggested by the Hitchhiker’s Guide to Python (more about Hitchhiker’s Guide below). DataCamp also has a number of written resources that I have used, and they’ve all been fantastic – I strongly recommend those guides as supplements to other resources you may choose to use.
- Udemy: Not free! That said, you can often find course bundles marked down from say $200 to $12 periodically. My real problem with Udemy is that there’s no quality control. Basically anyone can list a class/series/bundle whenever they want, charging whatever they want. Sometimes courses are great, but a lot of time they’re a letdown (or would be if you paid regular prices anyway).
- Other platforms: Codecademy and Khan Academy are both also popular platforms; however, neither currently offers a Python-specific/focused course. If you’re interested in web development, codecademy has some good resources and if you’re interested in data science, Khan Academy has some good beginner math resources. There are also another dozen or so emerging platforms not reviewed here, if none of the class offerings on the platforms above have what you’re looking for.
- Ease in: Intro to Computer Science (cs101) on Udacity. If the prospect of learning to code still scares you a bit, or you want a class that focuses less on terminology and theory and more on learning how to “do something” then this is a great first class to ease you into programming. This class manages to teach you all the basics of computer science and Python without getting into much theory and teaching you very few terms. More importantly, it gives you an introduction to how to think like a programmer – as important a lesson as any code. It also slowly teaches you how to build something real/cool – a basic search engine. You’ll definitely still struggle at times if this is your first introduction to programming, but in a constructive way, and where you can immediately see “correct” answers afterwards.
- Must!: Select one option from the following list depending on your background/goals:
- In-depth introduction to Python and computer science: One of my favorite programming classes to-date, Introduction to Computer Science and Programming Using Python is a full MIT class offered through edX, and is a modern, revamped version of the courses offered through MIT’s OpenCourseWare platform. Don’t be scared by the MIT name – this class is accessible without any fancy math background, and offers plenty of explanation for each topic (though see our recommended resources to ease your understanding of certain topics). You’ll come out of this class with a broad grasp of computer science topics, terminology, and a solid set of Python skills.
- Quickstart Python for new programmers: Introduction to Python (Udacity ud1110) . I haven’t personally taken this class (one of the few in this list that I haven’t), but browsing through, it appears to do a good job touching on the important introductory points of python, ingraining some best practices along the way.
- Quickstart Python if coming from another language: Crash into Python by Stephen Sugden.
- Recommended: Automate the Boring Stuff with Python (Book; free and paid options). This is a book, with the entire text is provided for free online by the author (though you can buy it here to support/make life easier). Overlaps on the basics with our Must! picks, but helps you do what it says in the title – automate boring stuff. Chapters 7+ are worthwhile reads even after taking an intro course, and great for coming up with sample projects to improve your skills.
- Problem Solving with Algorithms and Data Structures using Python (interactivepython.org). This is a complete beginners Python guide by itself, and of impeccable quality. However, where I really found it useful was sections 5 and on – algorithms (search, sort, tree, and graph). Includes fantastic explanations of the algorithms, real implementations in Python, and pictures/animations illustrating the concepts where relevant.
- Attend your local meetups! Getting involved in the local Python community is a great way to learn, stay focused/motivated, and learn what to learn. For me, that’s ChiPy (Chicago Python User Group), and has exposed me to a number of new topics through monthly talks and their top-notch mentorship program.
- Optional: Geeks for Geeks (basic and easy): A great source for bite-sized introductions to topics, practice problems/brain teasers/puzzles, and interview questions for python and a number of other languages. You can search by language and difficulty, which makes Geeks for Geeks a really handy place to randomly learn new things.
- Jeff Knupp’s blog. One of the best Python bloggers out there in my opinion, Jeff provides detailed, step-by-step walk-throughs of basic and intermediate Python topics. In particular, his blog post on Classes really helped with my introduction to Object Oriented Programming.
- Programming Foundations with Python. While I found this Udacity class to be both annoying and misleading about the depth of what it’d teach you, it is perhaps the most basic and useful introduction to Python classes that I’ve found. If you’re struggling with basics of classes/object oriented programming in general, check this out.
- Learn Python the Hard Way (Book; NOT free). This one gets an honorable mention, but not a firmer recommendation, because it’s exactly what it says it is – learning the hard way. That said, it’s a useful resource for both basics and project ideas (and really not much beyond that). Read more about the book here before buying.
- Official Python 3 Tutorial. Of course there’s always the official docs for learning a language, and the official Python 3 guide is “complete”; however, I personally find it to be a hard way to break into the language.
- The Python Guru. Nice, succinct guide to the basics, with code examples. However, not much explanation and some topics are missing. Most useful for what it calls the “advanced” topics after you’ve completed a Must! option, but generally minimally helpful.
- Learn Python. Similar to The Python Guru in its brevity/purpose, I personally found this site to be minimally helpful.
- Must!: Effective Python (Book; NOT free). This is, hands down, my favorite Python book to date. In 59 “items” it walks the reader through best practices, important tools in the language, and tips for production-ready code. Each item is nice, short, and easy to digest – walking the reader through a real world task, the common way to complete that task, and the better way to do it. Don’t just take my work for this one though – the book’s also recommended by Hitchhiker’s Guide to Python and a few of my fellow ChiPy members as a “Must!” read. The focus of this list still remains on free resources, but this definitely seems worth the $39.99 (or as low as $12 when on sale on Amazon). Learn more about the book here.
- planetpython.org: A very complete feed of anything-and-everything Python (including the top blogs and podcasts). If you follow just one Python feed/aggregator, this should be the one.
- PyCon Presentations. PyCon is the largest Python gathering in the world, and is hosted annually. Events are spread across days and include lengthy tutorials and various talks/presentations for some of the best/brightest in the Python community. Even if you’re not able to attend, you can find videos posted to their website or in channels separated by year on YouTube. Watching these videos (even those from years passed) is a great way to deepen understanding of existing topics, learn about new topics, and keep up on the latest developments of the language/packages.
- Recommended: The Hitchhiker’s Guide to Python (Free online; NOT free Book). While the site is free, I personally found the book to be a helpful resource, and encourage you to consider supporting the author with the bound book: The Hitchhiker’s Guide to Python: Best Practices for Development. This book doesn’t really try to teach Python, but rather offers best practices, tips/tricks/gotchas, and how/when/why to use different tools.
- For WebDev: Full Stack Python
- For Data Science: As mentioned above in the optional platform discussion section, Coursera’s new (beta) “Learning Path” system (requires being logged in to see) is AMAZING – particularly for data science, for which Coursera has the most robust course selection (many from University of Michigan; Johns Hopkins University; and University of California, San Diego). Note: despite all the classes being free, many will only show an option to start your free 7-day trial or “enroll.” Just click enroll and select the “audit” option to take the class for free.
- Optional:Geeks for Geeks (medium): The same resource listed under the basic section, but with more advanced topics.
- Must!: Make a recommendation for what should go here in the comments below!
- Recommended: Fluent Python: Clear, Concise, and Effective Programming by Luciano Ramalho (Book; NOT free). The most useful amazon review describes this perfectly: “As the title and description suggest, this book truly is to achieve ‘fluency’ in Python. It touches on nearly every point of the language that is pythonic, describing not just the how and the what, but the why. This book is definitely not a good beginner book for Python (however, someone extremely well versed in Java or C++ could probably benefit from it, if they relied on more basic information from alternative sources), but I wouldn’t say it’s only for expert users. This book touches on a very wide selection of subjects, from some pretty common Python concepts, like Duck Typing, generators, and function and class decorators to more advanced subjects like abstract base classes, multiple inheritance, mixins, and meta programming. The prose is easy to read and even entertaining. It may be the first programming book I read for enjoyment, and not just reference.” For those of you looking for a preview of the book first, here is a link to a pre-publishing pdf.
- Optional: Geeks for Geeks (hard and expert): The same resource listed under the basic/intermediate sections, but with more advanced topics.
Practice, Practice, Practice [for all levels]
The resources above are all very educational and useful on the way to becoming a Python expert, but without practice putting those tools to work, it’s unlikely that a lot of your newfound knowledge will stick. The best way to practice, in my opinion, is to have your own projects to struggle with, but in case you don’t have any current project ideas or time, here are some other ways to practice your code:
- codesignal.com: CodeSignal (previously Codefights) offers a large number of bitesized coding challenges and competitions within its own easy to use platform. Many of the questions are real technical interview questions from employers, so if you’re looking to break into professional programming, this is a particularly great way to practice.
- hackerrank.com: Similar to CodeSignal, but older, more developed, and lets you complete challenges in many, many languages. I personally find the question prompts and data formats used to be less user friendly, so I prefer CodeSignal, but hackerrank both has different questions and lets you do “tracks” of questions out of order – something that can be appealing if you get stuck/bored with the question you’re on.
- PyBites: 2-4 new Python code challenges are posted each month, along with a review post with solutions. As of December 2017 they also launched their own coding challenge platform.