Learning Python and the Power Of Constraints

Hey there,

When I was 15-years old I'd set my mind on becoming the world's greatest guitarist.

I was already a huge nerd at the time—so one beautiful Sunday morning I sat down for a few hours and mapped out a learning plan for this endeavour.

My ingenious plan to turn me into a virtuoso guitarist looked like this:

"Here's a stack of CDs from bands that I like. I’m just going to rotate through these 5 different genres every day and practice for a few hours. That’ll give me maximum exposure and I’ll be able to rock it out in no time."

Come Monday, off I went and bought a nice stack of practice books and magazine lessons for the top 20 blues, jazz, and metal songs I liked.

Pretty sure I also threw in some 16 minute Pink Floyd solos for good measure...

I dragged home the haul—and without even knowing how to fret a basic power chord, I dove into lessons for these wildly differing styles.

And, guess what happened...

Two months later I had made exactly ZERO progress and was ready to give up the guitar altogether. Whoops.

Looking back, I know now what doomed my "ingenious" plan to fail:

Practicing all these different styles of music at the same time confused my brain and mixed up my muscle memory.

All this "mental context switching" didn’t help. It just added overhead and made sure I spun my wheels aimlessly.

Here's why I'm telling you this:

It's easy to make the same mistake when it comes to learning Python.

There's no point denying it—modern software development is super complex.

And it's getting more complicated by the hour...

What looks like a relatively clearly skill set from the outside, turns into a fractal topic as soon as you look closer:

Setting up a development environment, grasping the basic syntax of the language, knowing standard data structures and algorithms and when to apply them, understanding Git and source control, TDD and writing automated tests, designing programs for maintainability, ...

(Taking a deep breath here.)

... learning how to organize your source code, error handling, what frameworks to use and when, interacting with PostgreSQL and MySQL databases, object-oriented programming, static code analysis, Django, Flask, web applications, APIs, design patterns, linters, code coverage, continuous integration, ...

Whoa, buddy.

There's simply A TON of stuff you need to pick up—and it get's more difficult if you try to cover it all at the same time.

If you find yourself in that situation, my advice would be to keep "mental context switches" at a minimum.

Don’t repeat my mistake by trying to learn blues, jazz, and metal at the same time.

It’s too easy to get frazzled and to lose motivation that way. It can drag your learning progress to a halt.

Instead, I found it helps to deliberately limit your choices. Putting some constraints in place will help enhance your creativity and focus:

Concentrate on getting good at one programming language (e.g. Python.)

Learn how to set up and work with just one database (e.g. PostgreSQL.)

Learn how to use one web framework (e.g. Django.)

Use one source control tool (e.g. Git.)

And so on.

Focus on each thing you add to the mix exclusively for some time. Solve problems with the tools and techniques you already know.

Let things settle a bit before you start working on a new skill. It's tough, but I know you can see through it and succeed.

Good luck, and...

Happy Pythoning!

— Dan Bader

Older messages

Video subtitles & transcripts now available on Real Python

Thursday, August 27, 2020

Hey there, I've got a big update to share today... Real Python video courses now have full subtitles and transcripts! I think this is going to do a lot for accessibility and making your favorite

New Python tutorials on Real Python

Saturday, August 22, 2020

Hey there, There's always something going on over at realpython.com as far as Python tutorials go. Here's what you may have missed this past week: A Practical Introduction to Web Scraping in

How to write regularly for your programming blog?

Sunday, August 16, 2020

Hey there, When I published my programming blog at dbader.org for the first time in 2012 it felt great. I was happy with the "programmer art" I had created for the website layout, and I was

New Python tutorials on Real Python

Saturday, August 15, 2020

Hey there, There's always something going on over at realpython.com as far as Python tutorials go. Here's what you may have missed this past week: Pass by Reference in Python: Background and

New Python tutorials on Real Python

Saturday, August 8, 2020

Hey there, There's always something going on over at realpython.com as far as Python tutorials go. Here's what you may have missed this past week: Customize the Django Admin With Python In this

You Might Also Like

Import AI 399: 1,000 samples to make a reasoning model; DeepSeek proliferation; Apple's self-driving car simulator

Friday, February 14, 2025

What came before the golem? ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏

Defining Your Paranoia Level: Navigating Change Without the Overkill

Friday, February 14, 2025

We've all been there: trying to learn something new, only to find our old habits holding us back. We discussed today how our gut feelings about solving problems can sometimes be our own worst enemy

5 ways AI can help with taxes 🪄

Friday, February 14, 2025

Remotely control an iPhone; 💸 50+ early Presidents' Day deals -- ZDNET ZDNET Tech Today - US February 10, 2025 5 ways AI can help you with your taxes (and what not to use it for) 5 ways AI can help

Recurring Automations + Secret Updates

Friday, February 14, 2025

Smarter automations, better templates, and hidden updates to explore 👀 ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏

The First Provable AI-Proof Game: Introducing Butterfly Wings 4

Friday, February 14, 2025

Top Tech Content sent at Noon! Boost Your Article on HackerNoon for $159.99! Read this email in your browser How are you, @newsletterest1? undefined The Market Today #01 Instagram (Meta) 714.52 -0.32%

GCP Newsletter #437

Friday, February 14, 2025

Welcome to issue #437 February 10th, 2025 News BigQuery Cloud Marketplace Official Blog Partners BigQuery datasets now available on Google Cloud Marketplace - Google Cloud Marketplace now offers

Charted | The 1%'s Share of U.S. Wealth Over Time (1989-2024) 💰

Friday, February 14, 2025

Discover how the share of US wealth held by the top 1% has evolved from 1989 to 2024 in this infographic. View Online | Subscribe | Download Our App Download our app to see thousands of new charts from

The Great Social Media Diaspora & Tapestry is here

Friday, February 14, 2025

Apple introduces new app called 'Apple Invites', The Iconfactory launches Tapestry, beyond the traditional portfolio, and more in this week's issue of Creativerly. Creativerly The Great

Daily Coding Problem: Problem #1689 [Medium]

Friday, February 14, 2025

Daily Coding Problem Good morning! Here's your coding interview problem for today. This problem was asked by Google. Given a linked list, sort it in O(n log n) time and constant space. For example,

📧 Stop Conflating CQRS and MediatR

Friday, February 14, 2025

​ Stop Conflating CQRS and MediatR Read on: m​y website / Read time: 4 minutes The .NET Weekly is brought to you by: Step right up to the Generative AI Use Cases Repository! See how MongoDB powers your