Computer Science from Scratch
Episode Deep Dive
Guest Introduction and Background
David Kopec is a computer science professor at Albright College in Reading, Pennsylvania, where he serves as Program Director of Computer Science and Information Technology. He recently moved from Champlain College in Vermont, where he spent nine years in a similar role. At Albright, David is launching three new majors for Fall 2026: a revamped computer science major, an artificial intelligence major, and a cybersecurity major. These programs aim to blend liberal arts education with career-relevant technical skills, incorporating computer ethics courses and required internships.
David is the author of five books on computer science and programming. His most successful work, "Classic Computer Science Problems in Python," was featured on Talk Python in 2019. His latest book, "Computer Science from Scratch," was released in September 2024 and targets the same audience: intermediate or advanced Python programmers who want to deepen their understanding of computer science fundamentals, whether they're self-taught developers, bootcamp graduates, or professionals preparing for technical interviews.
What to Know If You're New to Python
- Intermediate Python skills required: This episode discusses advanced computer science concepts like interpreters, emulators, and bit manipulation. You'll get more value if you're already comfortable with Python fundamentals like loops, functions, and data structures.
- Focus is on CS concepts, not Python syntax: The conversation explores how computer systems work under the hood - from programming language interpreters to hardware emulation - using Python as the teaching tool rather than teaching Python itself.
- Understanding of basic programming concepts helps: Familiarity with concepts like variables, control flow, memory, and how programs execute will help you appreciate the deeper explorations of topics like Turing completeness and CPU instruction sets.
- CS education vs. practical coding: The discussion highlights the difference between learning to code (syntax and libraries) and understanding computer science (algorithms, data structures, and how computers fundamentally work).
Key Points and Takeaways
Building Programming Language Interpreters from Scratch
David's book starts by teaching readers to build interpreters for simple programming languages, beginning with a language called BF (Brain F***) that has only eight symbols yet is Turing complete - meaning it can theoretically solve any computational problem that more complex languages can solve. This minimal language can be implemented in just 30 lines of Python code, yet it demonstrates the fundamental principles of how all programming languages work. The book then progresses to implementing a Basic interpreter, specifically a dialect of Tiny Basic from the late 1970s that could run on machines with just 2-4 kilobytes of RAM. By building these interpreters, readers gain deep insights into what happens under the hood when they run Python code, demystifying the "magic" of programming languages and building confidence that they could eventually understand CPython's source code itself.
- computersciencefromscratch.com
- davekopec.com
- Brain F*** programming language (educational esoteric language)
- Tiny Basic - late 1970s programming language
The Educational Challenge of AI Tools in Computer Science
Computer science education faces unprecedented challenges with the rise of AI coding assistants like ChatGPT and GitHub Copilot. David reports that in his introductory classes, many students attempt to use ChatGPT to complete every assignment, even basic exercises teaching for loops and if statements. This creates a fundamental problem: students who rely on AI to write code never develop the foundational skills needed to understand or debug that code. The solution isn't simple - it requires winning "hearts and minds" by making students understand how satisfying it feels to truly comprehend how code works, combined with enforcement mechanisms. Some CS educators, including David, have returned to paper exams to ensure students can actually write basic code without AI assistance. The challenge mirrors what mathematics educators faced in the 1970s-80s with calculators, but the stakes are higher because understanding the output is critical.
- github.com/features/copilot
- ChatGPT from OpenAI
Computer Graphics and Computational Art with Python
The book dedicates two chapters to computational art, starting with understanding pixels at the most fundamental level. One project involves taking modern color photographs and converting them to black-and-white patterns suitable for display on 1980s Macintosh computers using dithering algorithms. This teaches not only what a pixel is (just a color and a location, organized as arrays) but also introduces compression algorithms like run-length encoding used in the MacPaint file format. A second chapter features "Impressionist," a program that creates abstract art from photographs without neural networks or machine learning - just a simple algorithm that places vector shapes on screen, positioning them over regions of similar color. Through enough iterations, the result looks like an impressionist painting of the original photo, demonstrating how powerful simple computational techniques can be.
- github.com/python-pillow/Pillow
- pygame.org
- MacPaint - classic Macintosh graphics program format
Building a Complete NES Emulator in Python
One of the crown jewels of the book is a chapter that walks through building a functional Nintendo Entertainment System emulator capable of running real commercial games like Donkey Kong. The NES used a 6502 microprocessor running at just 1.8 megahertz with only 56 instructions, making it feasible to write an interpreter for that CPU in compact Python code. The chapter implements the full CPU and a simplified version of the Picture Processing Unit (PPU) graphics processor, though not the Audio Processing Unit. This project teaches the critical software-hardware interface - how software actually executes on hardware, how CPUs connect to memory, and how graphics processors synchronize with CPUs. While the pure Python implementation runs at only 15 frames per second versus the original 60 fps, it demonstrates all the fundamental concepts, with optimization using Cython or Numba left as an exercise for motivated readers.
Python vs. C/C++ for Teaching Computer Science
There's an ongoing debate in CS education about whether to teach introductory courses in Python or lower-level languages like C++. At Champlain College, David's department kept their first three classes in C++ specifically to give students experience with pointers and direct memory management. However, many schools have moved to Python because of accessibility - it's simply easier to learn than C++. This means more students can succeed in introductory courses and continue in the field. The trade-off is that students don't immediately see low-level memory operations, but David argues this is acceptable. Once students deeply understand one language, concepts like variables, functions, loops, and scope transfer to other languages. Pointers and memory management can be learned later in specialized courses on operating systems or computer architecture. The key mistake self-taught programmers make is constantly switching languages instead of mastering one deeply first.
- C++ programming language
- rust-lang.org
- github.com/python/cpython
The Evolution of CS Majors: AI and Cybersecurity
Computer science education is rapidly evolving to meet industry demands. Cybersecurity started as a single course within CS degrees, evolved into a concentration in the 2010s, and is now a standalone bachelor's degree at many institutions. Artificial intelligence is following the same trajectory - from one intro course in the 1990s-2000s, to concentrations in the 2010s, to dedicated AI bachelor's degrees emerging in just the last five years. Albright College is among the first small teaching colleges to offer an undergraduate AI major, following pioneers like Carnegie Mellon University. The challenge is doing this "the right way" with a firm foundation in computer science and mathematics to ensure durability, rather than capitalizing on the hype cycle with shallow programs. All three of Albright's majors share core CS and math foundations, plus computer ethics and internship requirements to provide real-world experience.
- cmu.edu
- Albright College Computer Science programs
- Champlain College (Vermont)
Developer Productivity vs. Software Efficiency
Modern software development exists in tension between developer productivity and software efficiency. David points out that we build much sloppier software today than in the 1980s because we have powerful computers with abundant memory - developers don't need to optimize every bit of performance. Writing Super Mario Bros. for the NES at 1.8 megahertz in assembly language required hardcore attention to algorithmic efficiency. Today's developers can afford to prioritize rapid development over performance optimization. However, this isn't an either-or choice - it depends on the domain. Run-of-the-mill e-commerce sites can prioritize developer productivity and use frameworks that are "good enough." But 3D game developers still use C++ specifically to squeeze out every last bit of performance. The key is choosing the right trade-offs for your specific application, and library authors increasingly handle low-level optimizations so application developers don't have to.
- Modern web frameworks and development tools
- Game engines like Unity and Unreal Engine
- Assembly language programming
Understanding Binary File Formats and Bit Manipulation
Working with binary file formats and bit-level operations is a recurring theme throughout the book. The MacPaint chapter requires storing pixels as individual bits (1 or 0 for black or white), compacting them into bytes, and applying run-length encoding compression. While anything possible in binary files could also be done with text files, binary formats offer crucial trade-offs: they're more compact and faster to read for certain data types. This represents a classic CS trade-off between time and space efficiency. Modern formats like JSON and XML have risen in popularity because they're human-readable and debuggable, but binary formats still matter for performance-critical applications. Understanding how to manipulate individual bits is essential for low-level work like device drivers, operating systems, and file format implementations.
- Binary file formats and manipulation
- JSON and XML text formats
- Bit shifting and masking operations
- Run-length encoding compression
The Performance Gap: Python vs. Compiled Languages
Pure Python suffers from significant performance deficits compared to compiled languages - benchmarks often show it running 50-70 times slower than C. This reality becomes painfully obvious in the book's computationally intensive programs. The abstract art generator might take 20-30 minutes to complete in Python versus less than a minute in C. The NES emulator runs at 15 fps instead of the required 60 fps. However, Python's performance story is more nuanced than raw benchmarks suggest. In many real-world applications, Python code orchestrates native libraries (Polars, NumPy, TensorFlow) where the actual computation happens in Rust or C. Web applications spend most time waiting on databases or network I/O. The Python core team's focus on performance improvements over the past 3-4 years has yielded real gains - David saw the NES emulator improve from 12 fps in 2021 to 17 fps in 2025 on the same hardware, just from Python version improvements.
- pola.rs
- numpy.org
- Performance improvements in Python 3.9-3.14
- docs.python.org/3.14/whatsnew/3.14.html
The Accessibility vs. Capability Paradox
Python's greatest strength is being simultaneously approachable for beginners and powerful enough for professional work. Unlike some beginner-friendly languages with low capability ceilings, Python allows developers to go surprisingly far with just the language and its ecosystem. The "pip install" (or "uv install") experience makes hundreds of thousands of packages instantly available. This combination - easy to start, hard to outgrow - explains Python's dominance in education and industry. However, there are domains where Python still struggles: native desktop GUI development never took off despite frameworks like PyQt and Kivy; mobile app development remains challenging; and high-performance 3D game development requires C++ or similar languages. The web has become "good enough" that the pressure to solve native desktop development has decreased, though mobile remains a gap.
- riverbankcomputing.com/software/pyqt
- kivy.org
- docs.astral.sh/uv
- 600,000+ packages on PyPI
Interesting Quotes and Stories
"The struggle is not in the way. The struggle is often part of what unlocks your thinking. It's part of what cements the knowledge and makes you feel a true sense of accomplishment. When you're like, I tried this and I couldn't get it to work. But three hours later, I finally figured it out. And I now understand iterators." - Michael Kennedy
"When they start having those aha moments, they want more of them and it spurs on." - David Kopec
"Python itself might feel like magic to a lot of folks. But by the time you get through these first couple chapters, especially through the basic interpreter chapter, you'll start to be on the road to think, oh, you know what? I bet I could dive into the CPython source code with enough additional training and really understand it. It gives you that confidence that this is not just magic." - David Kopec
"Writing NES games in the 1980s was hardcore. You had to be so detail oriented and you had to be so thorough. It's almost like writing spaceship control software type of thing. Not quite, but almost." - Michael Kennedy
"Super Mario was like an incredible accomplishment on a 1.8 megahertz CPU. People had to worry about all these computer science topics in a way that they don't today as programmers, because you had to squeeze every last bit of algorithmic performance out of the machine." - David Kopec
"We end up with inefficient software sometimes because people don't bother to do the algorithms right. We have such powerful computers with so much memory that people don't worry about writing things as efficiently as possible." - David Kopec
"The biggest mistake I see folks who are self-taught make is constantly switch around from language to language. I need to know this. Okay, I got it. Now it's time to learn this. And they're trying to fill all these gaps." - David Kopec
"If you are able to do calculus, which basically every CS degree requires calculus one, you can learn pointers. You'll be okay. You can learn pointers." - David Kopec
"It feels good to make something that can run programs. A lot of people, when they get into computer science, are actually excited about like making their own language." - David Kopec
Key Definitions and Terms
Turing Complete: A programming language or computational system is Turing complete if it can theoretically solve any algorithmic problem that any other Turing complete language can solve. Even a language with only eight symbols like BF is Turing complete, meaning it has the same fundamental computational power as Python, Java, or C++.
Interpreter: A program that directly executes code written in a programming language without first compiling it to machine code. CPython is an interpreter for Python. The book teaches building interpreters for simpler languages to understand this fundamental concept.
Dithering Algorithm: A technique for displaying images with limited color palettes by creating patterns of available colors that visually approximate unavailable colors. Used to display color photos on black-and-white screens.
6502 Microprocessor: An 8-bit CPU from the 1970s-80s used in the Apple II, Commodore 64, and Nintendo Entertainment System. With only 56 instructions, it's simple enough to emulate in Python for educational purposes.
Picture Processing Unit (PPU): The graphics processor in the NES that synchronized with the CPU at a 3:1 cycle ratio. Every CPU cycle required exactly three PPU cycles, representing tight hardware synchronization typical of 1980s game systems.
V-blank Period: The time when a graphics processor has finished drawing the screen and signals the CPU that it can perform updates before the next frame. Critical for game timing in retro systems.
Run-length Encoding: A simple compression algorithm that stores sequences of repeated values as a single value and count. Used in the MacPaint file format to compress black-and-white images.
BF (Brain F***): An esoteric programming language with only eight single-character commands, designed to be minimalist yet Turing complete. Used for teaching fundamental interpreter concepts.
Free-threaded Python: A version of Python 3.14+ that removes the Global Interpreter Lock (GIL), allowing true parallel execution on multiple CPU cores. Can dramatically improve performance for CPU-bound multi-threaded code.
Notarization: Apple's process requiring developers to register their applications before macOS will run them. One of many "gatekeeper" barriers that make native desktop app distribution more challenging than web apps.
Learning Resources
If you want to dive deeper into the topics covered in this episode, here are carefully selected resources from Talk Python Training and beyond that will help you build on what you learned:
Python for Absolute Beginners: If you're new to Python and want to understand the fundamentals before diving into computer science topics, this course starts from the very beginning with concepts like variables, loops, and functions that form the foundation.
Write Pythonic Code Like a Seasoned Developer: Learn idiomatic Python patterns and best practices, including smart use of dictionaries, generators, comprehensions, and slices - the kind of efficient Python coding that makes implementing interpreters and emulators more elegant.
Async Techniques and Examples in Python: Explores Python's parallel programming capabilities including threads, multiprocessing, asyncio, and async/await - relevant for understanding how to optimize performance-critical Python applications.
Python Memory Management and Tips: Understand how Python manages memory under the hood, including reference counting, garbage collection, and optimization techniques for writing more efficient Python code.
manning.com/books/classic-computer-science-problems-in-python: David Kopec's previous book focusing on data structures, algorithms, and AI topics - a perfect companion to Computer Science from Scratch.
Overall Takeaway
This episode beautifully illustrates that computer science education isn't about memorizing syntax or learning the latest framework - it's about understanding how computers fundamentally work. David Kopec's journey from teaching assembly language and C++ to embracing Python as an educational tool demonstrates that accessibility and depth aren't mutually exclusive. By building interpreters that run real programs, emulators that play actual NES games, and algorithms that create art, learners gain something far more valuable than practical skills: they develop confidence that technology isn't magic.
The conversation also highlights a critical inflection point in CS education as AI coding assistants threaten to short-circuit the learning process. The solution isn't to fight technology but to remember that the struggle is the point - those "aha moments" at 3 AM when something finally clicks are what transform someone from a code-copier into a computer scientist. Whether you're self-taught, a bootcamp graduate, or transitioning from another field, understanding what happens under the hood when you type "python app.py" opens doors that no amount of framework knowledge can.
Perhaps most inspiring is David's work building AI and cybersecurity majors at a liberal arts college, demonstrating that the future of CS education lies in combining technical depth with ethical foundations and real-world experience. As Python continues dominating education and data science while compiled languages hold territory in systems programming and game development, the message is clear: master one language deeply, stay curious about how things work, and never stop building.
Links from the show
Classic Computer Science Book: amazon.com
Computer Science from Scratch Book: computersciencefromscratch.com
Computer Science from Scratch at NoStartch (CSFS30 for 30% off): nostarch.com
Watch this episode on YouTube: youtube.com
Episode #529 deep-dive: talkpython.fm/529
Episode transcripts: talkpython.fm
Theme Song: Developer Rap
🥁 Served in a Flask 🎸: talkpython.fm/flasksong
---== Don't be a stranger ==---
YouTube: youtube.com/@talkpython
Bluesky: @talkpython.fm
Mastodon: @talkpython@fosstodon.org
X.com: @talkpython
Michael on Bluesky: @mkennedy.codes
Michael on Mastodon: @mkennedy@fosstodon.org
Michael on X.com: @mkennedy
Episode Transcript
Collapse transcript
00:00
00:04
00:09
00:14
00:18
00:23
00:44
00:49
00:55
00:57
01:00
01:03
01:06
01:10
01:11
01:14
01:19
01:23
01:26
01:27
01:29
01:33
01:35
01:40
01:44
01:48
01:50
01:56
01:58
02:00
02:01
02:06
02:07
02:10
02:11
02:14
02:17
02:18
02:19
02:21
02:26
02:31
02:36
02:41
02:45
02:50
02:55
02:59
03:03
03:08
03:12
03:16
03:22
03:26
03:30
03:35
03:40
03:45
03:49
03:55
04:02
04:06
04:11
04:17
04:22
04:28
04:31
04:36
04:41
04:43
04:48
04:53
04:56
05:00
05:03
05:07
05:12
05:14
05:18
05:24
05:29
05:33
05:39
05:44
05:49
05:54
05:58
06:02
06:09
06:13
06:19
06:23
06:29
06:34
06:38
06:42
06:48
06:50
06:53
06:56
06:59
07:02
07:04
07:05
07:08
07:10
07:15
07:21
07:21
07:22
07:27
07:29
07:33
07:36
07:40
07:43
07:46
07:50
07:52
07:56
08:03
08:08
08:12
08:16
08:21
08:26
08:29
08:35
08:39
08:42
08:48
08:52
08:57
09:02
09:06
09:14
09:19
09:23
09:28
09:32
09:36
09:41
09:46
09:52
09:56
10:01
10:05
10:10
10:14
10:19
10:23
10:27
10:31
10:38
10:42
10:47
10:52
10:56
11:01
11:06
11:12
11:19
11:24
11:28
11:32
11:38
11:43
11:49
11:54
12:00
12:05
12:12
12:17
12:22
12:28
12:33
12:36
12:40
12:45
12:51
12:55
13:02
13:08
13:12
13:18
13:24
13:29
13:33
13:36
13:41
13:47
13:53
13:58
14:02
14:06
14:11
14:18
14:25
14:31
14:37
14:43
14:48
14:54
15:00
15:05
15:12
15:17
15:25
15:32
15:38
15:43
15:50
15:55
16:01
16:08
16:13
16:18
16:24
16:31
16:36
16:41
16:47
16:52
16:59
17:03
17:09
17:15
17:21
17:24
17:27
17:31
17:35
17:40
17:42
17:45
17:45
17:48
17:48
17:54
18:03
18:08
18:15
18:17
18:21
18:25
18:31
18:35
18:41
18:46
18:51
18:56
19:01
19:04
19:10
19:15
19:19
19:23
19:27
19:32
19:37
19:41
19:48
19:49
19:50
19:56
19:57
20:02
20:04
20:07
20:09
20:10
20:11
20:17
20:22
20:25
20:31
20:35
20:39
20:44
20:50
20:56
21:00
21:04
21:09
21:10
21:20
21:22
21:23
21:29
21:33
21:37
21:39
21:43
21:45
21:48
21:55
21:57
22:00
22:05
22:07
22:08
22:11
22:19
22:20
22:22
22:28
22:29
22:34
22:35
22:39
22:45
22:48
22:57
22:59
23:02
23:06
23:09
23:12
23:13
23:13
23:16
23:18
23:19
23:22
23:25
23:29
23:32
23:35
23:39
23:43
23:46
23:50
23:52
23:58
24:03
24:08
24:12
24:17
24:20
24:28
24:33
24:38
24:43
24:46
24:50
24:55
24:59
25:04
25:10
25:15
25:22
25:26
25:31
25:36
25:43
25:44
25:48
25:54
25:58
26:04
26:06
26:10
26:16
26:17
26:19
26:26
26:32
26:35
26:40
26:40
26:44
26:45
26:49
26:49
26:50
26:55
26:58
27:01
27:04
27:06
27:07
27:09
27:10
27:15
27:19
27:22
27:26
27:29
27:30
27:33
27:35
27:35
27:38
27:42
27:42
27:44
27:49
27:55
28:01
28:06
28:12
28:17
28:22
28:25
28:26
28:31
28:32
28:33
28:34
28:38
28:38
28:39
28:40
28:41
28:43
28:45
28:48
28:50
28:57
28:59
29:01
29:02
29:07
29:08
29:09
29:11
29:14
29:19
29:21
29:25
29:26
29:29
29:30
29:32
29:35
29:37
29:38
29:42
29:47
29:51
29:55
29:59
30:03
30:06
30:12
30:15
30:18
30:21
30:25
30:27
30:29
30:33
30:36
30:41
30:44
30:48
30:53
30:58
31:02
31:04
31:08
31:14
31:15
31:19
31:25
31:31
31:36
31:42
31:47
31:50
31:56
32:03
32:05
32:08
32:10
32:14
32:15
32:17
32:19
32:21
32:24
32:31
32:32
32:34
32:36
32:41
32:44
32:45
32:50
32:52
32:55
33:00
33:03
33:08
33:14
33:15
33:20
33:21
33:22
33:23
33:26
33:31
33:32
33:32
33:37
33:41
33:46
33:52
33:57
34:02
34:08
34:13
34:17
34:21
34:26
34:31
34:37
34:42
34:48
34:51
35:03
35:07
35:15
35:21
35:31
35:35
35:39
35:41
35:41
35:43
35:45
35:46
35:51
35:55
35:56
35:57
35:58
36:00
36:01
36:05
36:06
36:08
36:12
36:16
36:23
36:24
36:26
36:27
36:30
36:32
36:38
36:45
36:51
36:56
36:59
37:02
37:05
37:07
37:10
37:11
37:15
37:19
37:23
37:27
37:33
37:40
37:46
37:48
37:54
37:55
37:55
37:59
38:06
38:14
38:20
38:22
38:23
38:23
38:24
38:31
38:31
38:33
38:33
38:39
38:44
38:51
38:56
39:02
39:06
39:11
39:15
39:20
39:26
39:32
39:35
39:38
39:42
39:47
39:49
39:52
39:55
39:57
40:00
40:01
40:06
40:11
40:17
40:22
40:26
40:31
40:35
40:43
40:48
40:53
41:00
41:05
41:09
41:15
41:20
41:25
41:31
41:34
41:40
41:45
41:54
41:59
42:05
42:09
42:23
42:31
42:43
42:45
42:50
42:56
43:01
43:07
43:11
43:23
43:30
43:38
43:42
43:46
43:52
43:58
44:02
44:08
44:12
44:21
44:28
44:38
44:43
44:47
44:54
44:59
45:03
45:12
45:18
45:23
45:28
45:32
45:36
45:40
45:45
45:51
45:57
46:01
46:07
46:12
46:21
46:26
46:31
46:37
46:43
46:49
46:54
46:59
47:00
47:04
47:08
47:14
47:18
47:19
47:21
47:24
47:26
47:27
47:34
47:42
47:45
47:50
47:54
48:00
48:05
48:12
48:18
48:24
48:27
48:29
48:35
48:37
48:38
48:40
48:46
48:50
48:53
48:54
48:55
48:57
48:58
49:01
49:03
49:12
49:14
49:19
49:20
49:29
49:30
49:35
49:36
49:39
49:46
49:51
50:00
50:04
50:07
50:10
50:13
50:15
50:18
50:20
50:22
50:22
50:22
50:23
50:28
50:32
50:35
50:36
50:40
50:41
50:42
50:43
50:44
50:48
50:50
50:54
51:00
51:04
51:08
51:12
51:14
51:15
51:20
51:22
51:23
51:24
51:28
51:32
51:32
51:34
51:40
51:45
51:47
51:47
51:51
51:53
51:58
52:00
52:05
52:06
52:08
52:12
52:19
52:25
52:31
52:37
52:41
52:46
52:53
52:58
53:03
53:08
53:14
53:18
53:24
53:31
53:36
53:41
53:46
53:51
53:55
53:59
54:04
54:10
54:14
54:20
54:24
54:30
54:35
54:41
54:46
54:51
54:57
55:03
55:08
55:16
55:25
55:36
55:42
55:48
55:55
56:00
56:05
56:05
56:13
56:16
56:17
56:17
56:22
56:27
56:32
56:37
56:41
56:47
56:55
57:00
57:06
57:10
57:15
57:19
57:24
57:28
57:33
57:38
57:43
57:48
57:55
58:00
58:04
58:10
58:14
58:17
58:21
58:22
58:25
58:28
58:30
58:32
58:37
58:39
58:40
58:44
58:48
58:53
58:59
59:03
59:05
59:09
59:12
59:17
59:23
59:30
59:34
59:39
59:44
59:50
59:55
01:00:01
01:00:05
01:00:10
01:00:15
01:00:19
01:00:25
01:00:29
01:00:34
01:00:38
01:00:42
01:00:47
01:00:51
01:00:57
01:01:04
01:01:09
01:01:12
01:01:15
01:01:18
01:01:19
01:01:26
01:01:26
01:01:27
01:01:29
01:01:31
01:01:36
01:01:40
01:01:42
01:01:44
01:01:49
01:01:51
01:01:52
01:01:55
01:01:59
01:02:03
01:02:08
01:02:11
01:02:14
01:02:15
01:02:20
01:02:24
01:02:27
01:02:30
01:02:35
01:02:39
01:02:44
01:02:48
01:02:49
01:02:50
01:02:54
01:02:57
01:03:03
01:03:04
01:03:10
01:03:13
01:03:18
01:03:19
01:03:22
01:03:26
01:03:29
01:03:34
01:03:39
01:03:44
01:03:47
01:03:52
01:03:56
01:04:03
01:04:10
01:04:16
01:04:21
01:04:26
01:04:30
01:04:36
01:04:41
01:04:47
01:04:54
01:04:59
01:05:05
01:05:12
01:05:19
01:05:24
01:05:28
01:05:35
01:05:42
01:05:45
01:05:50
01:05:55
01:05:59
01:06:05
01:06:10
01:06:13
01:06:15
01:06:19
01:06:20
01:06:24
01:06:29
01:06:33
01:06:37
01:06:40
01:06:44
01:06:47
01:06:53
01:07:00
01:07:01
01:07:01
01:07:05
01:07:07
01:07:10
01:07:14
01:07:16
01:07:18
01:07:22
01:07:28
01:07:34
01:07:43
01:07:51
01:07:56
01:07:58
01:08:00
01:08:05
01:08:08
01:08:12
01:08:15
01:08:20
01:08:23
01:08:29
01:08:31
01:08:31
01:08:32
01:08:35
01:08:39
01:08:40
01:08:44
01:08:45
01:08:50
01:08:54
01:09:02
01:09:04
01:09:06
01:09:10
01:09:10
01:09:12
01:09:14
01:09:16
01:09:16
01:09:17
01:09:21
01:09:24
01:09:28
01:09:33
01:09:35
01:09:35
01:09:37
01:09:39
01:09:41
01:09:45
01:09:48
01:09:52
01:09:54
01:09:57
01:10:00
01:10:01
01:10:01
01:10:02
01:10:06
01:10:09
01:10:13
01:10:16
01:10:16
01:10:18
01:10:19
01:10:21
01:10:23
01:10:24
01:10:25
01:10:26
01:10:32
01:10:33
01:10:39
01:10:43
01:10:46
01:10:52
01:10:57
01:11:01
01:11:07
01:11:09
01:11:12
01:11:15
01:11:21
01:11:26
01:11:31
01:11:37
01:11:40
01:11:45
01:11:50
01:11:56
01:12:01
01:12:06
01:12:11
01:12:16
01:12:16
01:12:21
01:12:25
01:12:27
01:12:31
01:12:33
01:12:37
01:12:43
01:12:48
01:12:52
01:12:55
01:12:58
01:13:02
01:13:09
01:13:16
01:13:20
01:13:25
01:13:31
01:13:36
01:13:41
01:13:47
01:13:53
01:13:57
01:14:03
01:14:08
01:14:14
01:14:19
01:14:23
01:14:28
01:14:32
01:14:36
01:14:40
01:14:45
01:14:48
01:14:52
01:14:55
01:14:59
01:15:01
01:15:03
01:15:04
01:15:05
01:15:06
01:15:09
01:15:09
01:15:10
01:15:11
01:15:13
01:15:15
01:15:16
01:15:18
01:15:20
01:15:22
01:15:23
01:15:25
01:15:29
01:15:32
01:15:36
01:15:40
01:15:45
01:15:47
01:15:53
01:15:58
01:16:05
01:16:08
01:16:10
01:16:14
01:16:16
01:16:18
01:16:19
01:16:22
01:16:25
01:16:26
01:16:28
01:16:29
01:16:42 And we ready to roll Upgrading the code No fear of getting old We tapped into that modern vibe
01:16:53 Overcame each storm Talk Python To Me I sync is the norm


