Gareth B. Davies
All courses
Tech & CodingSolid introRated 8/10

Learn How to Learn Coding Faster: Object-Oriented Programming in Python

By Gareth B. Davies

Alvin Wan · Research Scientist

Intermediate89 min
Learn How to Learn Coding Faster: Object-Oriented Programming in Python thumbnail

Two parallel toy simulations, ice cream trucks and light switches, turn abstract OOP vocabulary into something you can actually debug.

New to Skillshare? Your first month is free, enough to take this course at no cost.

Two toys, one paradigm

The course's structural gimmick is also its best feature: nearly every concept gets coded twice, once in an ice cream truck order system and once in a home light switch simulator. A class definition, a constructor, an attribute assignment, an inheritance override, each appears first in the ice cream world, then again in the light world, often followed by a bonus variant (a deluxe truck that gives away a free scoop, a light that flickers or times out). Repetition with variation is a legitimate teaching technique, and here it does real work: by the third or fourth time a viewer writes def __init__(self):, the syntax stops being the point and the underlying idea, that a constructor runs code the moment an object is created, starts to stick.

The arc is deliberately staged in four phases: the OOP paradigm itself, abstraction, inheritance, then a more advanced pass at inheritance covering mixins and composition. Each phase opens with a no-code concept lesson using plain analogies (a class is a "template," an instance is a "serving you can eat") before dropping into repl.it for guided, type-along coding. That separation of concept from syntax is a smart choice for the intermediate-in-name, beginner-in-practice audience this is actually built for.

Where the real value sits

The strongest material isn't the core lessons, it's the three "Mystery" bonus lessons, which dramatize actual bugs rather than abstract warnings. The method resolution order lesson deliberately constructs a diamond inheritance conflict (class C subclassing both A and B, where B also subclasses A) and lets the viewer watch Python refuse to resolve it, rather than just being told MRO conflicts exist. The fragile base class lesson is even sharper: two methods, hi and hello, are innocuously refactored to call each other, which triggers a live "maximum recursion depth exceeded" crash. Seeing the failure happen, then reasoning backward to the cause, teaches a debugging instinct that a slide full of rules never would.

The abstraction lesson's repeated refrain, watch for redundant code, treat it as a signal you are bypassing your own class's contract, is a genuinely useful heuristic that transfers well beyond this course.

The course is honest about its own limits. Composition gets explicitly deferred as "more nuance than helpful" for this format, and polymorphism and encapsulation are named but not developed. That's a defensible scoping decision for an 89-minute class, but it means the "Object-Oriented Programming" in the title covers roughly half of what a computer science course would call OOP. Anyone coming in expecting encapsulation, interfaces, or design patterns will find the coverage thin.

The pacing assumes comfort with basic Python (variables, functions, if-statements) but not with classes, which is the right target audience, though it narrows who benefits. A developer who has already written a single class in Java, C++, or even prior Python work will find the first half largely redundant, since the pace is built for someone encountering self for the first time. For that specific beginner, though, the dual-example structure and the mystery-bug lessons make this a genuinely efficient way to build real intuition rather than memorized syntax.

The standout

The three linked mystery lessons, especially the fragile base class demo where two methods call each other into infinite recursion, teach debugging instincts that most OOP tutorials skip entirely.

What you will learn

  • How to define a Python class with a constructor, methods, and instance attributes
  • The difference between a class and an instance, explained through a template-versus-serving analogy
  • How to apply abstraction by routing all state changes through methods instead of touching attributes directly
  • How to build inheritance hierarchies, override parent methods, and call super() to reuse parent logic
  • Why multiple inheritance can throw a method resolution order error and how to avoid it
  • How mixins and composition solve cases where a strict is-a hierarchy breaks down, like the circle-ellipse problem

Best for: A self-taught coder who already writes basic Python functions and loops but has only ever organized code as scripts, not classes.

Skip it if: Anyone with prior exposure to classes in another language, or anyone wanting encapsulation, polymorphism, or design patterns covered in real depth.

Engaging TeacherHelpful ExamplesOrganization of LessonsClarity of Instruction