"Automate the Boring Stuff with Python" online course now available!

For the last few months I've been putting together an online course that follows my latest (and free) book, "Automate the Boring Stuff with Python". You can sign up for free (until October 12th) with the discount code BORING_FOR_FREE:

Update: The free code has expired, but this 50% off code will work indefinitely:

Sign up for the Udemy course for 50% off.

The first 15 videos are also freely available on YouTube.

Read More

APIs, not apps: What the future will be like when everyone can code

I've written an article for OpenSource.com called APIs, not apps: What the future will be like when everyone can code, where I write about a coming future where programming ability is in the hands of everyone.


Despite this hype, I do think that coding will become a more widespread and routine skill in the years to come. Programmable technology will continue to pervade more parts of our life, computers will continue to become more accessible to a wider population, and the world will continue to become more complex. Understanding coding (and debugging) will naturally go with it.


These are areas where non-programmers can significantly boost their productivity by learning to code. This is different from everyone becoming a software engineer. When I say learn to code, I don't mean develop software professionally. Almost every adult has a driver's license, but only a minority are cab drivers or NASCAR racers.


Universal coding literacy doesn't increase the supply of web services so much as increase the sophistication in how web services are used. Programming—by which I mean being able to direct a computer to access data, organize it, and then make decisions based on it— will open up not only a popular ability to make more of online services, but also to demand more.

Read More

Further Reading: Intermediate Python Resources

So after reading one of my Python books (available free online here and here), you're no longer a complete beginner and would like to know where to go next. It can be hard to find intermediate-level material: stuff that isn't for total beginners or advanced computer scientists. The topics that you should google for are Python standard library, Python object oriented programming, Python idioms, and popular Python modules.

For a more concrete list of resources, here's my list of recommendations.

Continuing with Python

  • The Python Module of the Week Blog covers many of the modules in Python's standard library with practical examples. The Python standard library has a wide range of handy functions ("Guido's Time Machine" refers to how requests for features in Python would often be met by Guido van Rosum mentioning he had added it the night before.)
  • Python Pocket Reference is a short book intended for programmers who want to learn Python quickly. Now that you know basic programming concepts, this short book is a great way to fill out your Python knowledge and explore some more modules without spending a lot of time.
  • Python 3 Object-oriented Programming is a great resource to learn specifically about classes, objects, and other OOP concepts. My books skip OOP since it isn't necessary to get started coding, but once you've been programming for a while it's a must to become familiar with these topics.
  • Data science and machine learning are hot topics in the job market. Data Science from Scratch and Programming Collective Intelligence are both great introductions to these topics.
  • If you'd like to learn Python well enough to become a software engineer, Effective Python: 59 Specific Ways to Write Better Python provides a nice list of advanced (but effective) topics to read up on.
  • The Python Cookbook has several recipes for getting stuff done in Python. Reformatting text to fixed columns, determining last Friday's date, or using callback functions are all things that are possible with Python, but you don't want to waste time figuring out how to do them on your own.
  • The Hitchhiker's Guide to Python is a brilliant summary of many Python gotchas and idioms specific to the Python language.
  • Problem Solving with Algorithms and Data Structures Using Python is a good computer science textbook to exploring algorithms in a direct, readable text. It's free to read online.

Practicing Your Code-Fu

Moving On to Other Languages

Python is versatile and you can keep going down that path if you choose, but don't feel that you're somehow "not ready" to tackle a new language. If you do want to move on, here's some resources for the next step.

  • JavaScript: All dynamic behavior that happens in the browser is from JavaScript code. If you want to learn to create web apps, getting a basic understanding of HTML and CSS is recommended. The jQuery module is also standard for doing any web app development. My favorite JavaScript books are: Eloquent JavaScript (free), JavaScript and JQuery: Interactive Front-End Web Development, and (once you have some JS experience) Crockford's JavaScript: The Good Parts is the key book to read to understand the language.
  • Ruby: Ruby is a scripting language and similar to Python. It's noteworthy for the Ruby on Rails web app framework. You can try it out online at tryruby.org, and Codecademy has tracks for both Ruby and Ruby on Rails. But since you already know how to code, I'd suggest the Learn Ruby in 20 Minutes page on the official Ruby site.
  • Java or C#: These languages are fairly similar to each other. Java is the more popular one and a mainstay of software engineering jobs. C# is (essentially) Microsoft's version of Java, meant to create Windows applications. I don't have any recommendations as far as C# books, but Java: A Beginner's Guide is a decent intro. There have been plenty of slight changes to the Java language over the years, so you don't want to get a book that's more than a decade old or so.
  • Read More

    Celebrating the Release of "Automate the Boring Stuff with Python" with Discount Codes!

    UPDATE: The promo period is over. These discount codes are no longer valid.

    My latest book, "Automate the Boring Stuff with Python" is being released on Saturday, the 25th! This is a Python programming book for complete beginners who want to learn to code using practical projects. Automate the Boring Stuff with Python will be available online under a Creative Commons license as well, making it accessible to all. (I'm working furiously to finish formatting the HTML version right now! It will be posted to AutomateTheBoringStuff.com)

    No Starch Press has the 30% discount code PYBUTLER that you can use to order the book off their site. You'll get an Early Access copy now (the first 12 chapters) and then the full book on the 25th the full ebook immediately.

    In addition, I've also added 70% discount codes for my other books! These are the max discounts I can give (I don't receive royalties for these sales). Thanks so much to all my readers, I never imagined six years ago when I started writing that I would be here now. :D

    Invent Your Own Computer Games with Python, 3rd Edition FAM5M2RM (Read online, download PDF or ebook)

    Making Games with Python & Pygame 2A5GKQRE (Read online, download PDF or ebook)

    Hacking Secret Ciphers with Python MRLEG3A7 (Read online, download PDF or ebook)

    These discount codes will work for the next few days.

    Read More

    3rd Edition Released

    Download the PDF

    The 3rd edition of "Invent Your Own Computer Games with Python" is now available. The 3rd edition has been streamlined to provide the same content but in 50 fewer pages, making it an easier read. If you've already read the 2nd edition, there's no need to read the 3rd (unless you want to sharpen your Python skills). But for new readers, Invent with Python should be even easier to pick up.

    Buy the 3rd Edition on Amazon

    Read the 3rd Edition online for free

    Read the 2nd Edition

    The 3rd edition is also being used for the translations. Currently the Spanish translation is online (though incomplete). The German and Dutch versions are nearing completion as well.

    Read More

    Translate Your Python 3 Program with the gettext Module

    You've written a Python 3 program and want to make it available in other languages. You could duplicate the entire code-base, then go painstakingly through each .py file and replace any text strings you find. But this would mean you have two separate copies of your code, which doubles your workload every time you need to make a change or fix a bug. And if you want your program in other languages, it gets even worse.

    Fortunately, Python provides a solution with the gettext module.


    Read More