Intermediate to Advanced resources


  • Official Python docs — Python docs are a treasure trove of information
  • Practical Python Programming — covers foundational aspects of Python programming with an emphasis on script writing, data manipulation, and program organization
  • Beyond the Basic Stuff with Python — Best Practices, Tools, and Techniques, OOP, Practice Projects
  • Pydon'ts — Write elegant Python code, make the best use of the core Python features
  • Python Distilled — this pragmatic guide provides a concise narrative related to fundamental programming topics such as data abstraction, control flow, program structure, functions, objects, and modules
  • Pythonic Programming — Tips for Becoming an Idiomatic Python Programmer
  • Python in a Nutshell — use modern Python idiomatically, structure Python projects, how to debug
  • Python Cookbook — complete recipes for more than a dozen topics, covering the core Python language as well as tasks common to a wide variety of application domains
  • wtfpython — Exploring and understanding Python through surprising snippets
  • Pybites Python Tips Book — small, practical pieces of Python code that will boost your knowledge of the language

Python talks


Another crucial aspect in the programming journey is knowing how to write tests. In bigger projects, usually there are separate engineers (often in much larger number than code developers) to test the code. Even in those cases, writing a few sanity test cases yourself can help you develop faster knowing that the changes aren't breaking basic functionality.

There's no single consensus on test methodologies. There is Unit testing, Integration testing, Test-driven development and so on. Often, a combination of these is used. These days, machine learning is also being considered to reduce the testing time, see Testing Firefox more efficiently with machine learning for example.

When I start a project, I usually try to write the programs incrementally. Say I need to iterate over files from a directory. I will make sure that portion is working (usually with print statements), then add another feature — say file reading and test that and so on. This reduces the burden of testing a large program at once at the end. And depending upon the nature of the program, I'll add a few sanity tests at the end. For example, for my command_help project, I copy pasted a few test runs of the program with different options and arguments into a separate file and wrote a program to perform these tests programmatically whenever the source code is modified.

For non-trivial projects, you'll usually end up needing frameworks like built-in module unittest or third-party modules like pytest. Here's some learning resources.

Algorithms and data structures

Design patterns


  • Fluent Python — takes you through Python’s core language features and libraries, and shows you how to make your code shorter, faster, and more readable at the same time
  • Serious Python — deployment, scalability, testing, and more
  • Practices of the Python Pro — learn to design professional-level, clean, easily maintainable software at scale, includes examples for software development best practices
  • Intuitive Python — productive development for projects that last
  • Youtube: Corey Schafer — various topics for beginners to advanced users