Advanced Python

Advanced Python

If you know me at all, you will know that I always ecourage thinking over having a knowledge but here I am creating a course on the most theoritical concepts in programming. Understanding OOP, data structures, and algorithms will give you the ability to see what is behind the code; the thinking process that the code creator had. You will be able to see why they structured their code like this or even discover mistakes or ways of improvements.

Also, you should know that I admire learn by doing. In fact, I never understood OOP until I used it to build neural networks in PyTorch or dynamic programming unitl using it for reinforcement learning. So, with no doubt, there will be a lot of practical exercises in this course.

Course Outline

Python Foundations (Refresher)

Lecture 1. Code format & performance
Lecture 2. Pythonic iteration: sequences, comprehensions, and unpacking
Lecture 3. Function arguments & Higher-order functions
Lecture 4. Context managers & exception handling
Lecture 5. Type hinting and static typing (mypy, typing)

Object-Oriented Programming (OOP)

Lecture 6. Classes, instances, and constructors (__init__)
Lecture 7. Instance, class, and static methods
Lecture 8. Inheritance, polymorphism, and method overriding
Lecture 9. Encapsulation, abstraction, and dunder methods (__str__, __repr__, etc.)
Lecture 10. Composition vs inheritance + simple design patterns

Data Stuctures

Lecture 11. Lists, sets, dicts – advanced use cases
Lecture 12. collections: deque, defaultdict, Counter, namedtuple
Lecture 13. Stacks and queues using lists and deque
Lecture 14. Singly and doubly linked lists (custom OOP implementation)
Lecture 15. Binary trees and tree traversals (inorder, preorder, postorder)

Algorithms

Lecture 16. Big-O notation (time & space complexity)
Lecture 17. Linear & binary search + practice problems
Lecture 18. Sorting algorithms (bubble, insertion, merge, quick)
Lecture 19. recursion & backtracking (with memoisation)
Lecture 20. String algorithms (sliding window, frequency maps)

Algorithms II

Lecture 21. DFS & BFS in trees and graphs
Lecture 22. Graph implementation (adjacency list, matrix)
Lecture 23. Dijkstra’s algorithm (shortest path)
Lecture 24. Dynamic programming (top-down and bottom-up)
Lecture 25. Greedy algorithms and divide & conquer

Advance Practices

Lecture 26. Writing testable code + unittest or pytest
Lecture 27. Debugging with pdb, breakpoints, and VS Code tools
Lecture 28. Profiling with timeit, cProfile, and optimising bottlenecks
Lecture 29. Refactoring and code smells
Lecture 30. Review + final project walkthrough