Learning Python Programming • Fabrizio Romano & Naomi Ceder • GOTO 2025

Author Fabrizio Romano discusses his decade-long journey writing "Learning Python Programming," detailing the book's evolution from GUI-focused content to command-line applications. He explores the controversial but ultimately beneficial introduction of typing in Python, the role of AI as a powerful tool for developers, and the critical importance of nurturing junior talent rather than replacing them with AI, emphasizing the enduring need for fundamental programming skills and human expertise.

3 min read
Learning Python Programming • Fabrizio Romano & Naomi Ceder • GOTO 2025
source: https://www.youtube.com/watch?v=Yi-Kv882umU

In a conversation with Naomi Ceder, Fabrizio Romano reflects on his journey authoring four editions of “Learning Python Programming” over the last decade. This process has been a significant personal and professional challenge, reinforcing the discipline required to see a large-scale project through to completion and offering the reward of positive feedback from readers who have launched their careers with the book.

Evolving Content: From Scripts and GUIs to CLIs

A significant change across the editions has been the shift in focus from graphical user interfaces (GUIs) to command-line interfaces (CLIs). Romano notes that the initial inclusion of a GUI chapter felt increasingly outdated as most modern user interactions occur within a web browser. The precious real estate in the book was better used to serve the daily needs of developers.

He draws a clear distinction between scripts and CLI applications:

  • Scripts: Often one-off pieces of code, sometimes with hardcoded values, designed to perform a specific, immediate task like a database migration. They are not typically built for robustness or repeated use by others.
  • CLI Applications: A more “grown-up” version of a script. They serve as a professional interface to a more complex system, featuring proper argument parsing (using frameworks like argparse or Typer), help flags, and are designed for reusable, frequent use.

This evolution also involved bringing on a co-author, Heinrich Krueger, for the third edition. This collaboration introduced a new level of rigor and a fresh perspective to the content, improving explanations and leading to new chapters on CLI applications and Python packaging.

Adapting to Python’s Evolution: The Case of Typing

Romano candidly discusses his initial resistance to Python’s type hints, a sentiment shared by many long-time Python developers. The initial reaction was that it “ruined” the language by adding syntactic clutter to otherwise clean function signatures.

However, his perspective evolved as the benefits became undeniable:

  • IDE Integration: Type hints enable modern IDEs to provide intelligent autocompletion for object methods.
  • Code Clarity: They clarify the expected shape and form of function parameters without needing to consult tests or documentation.
  • Modern Frameworks: Type hints are the foundation for powerful frameworks like FastAPI and Typer, which use type inference to simplify development.

While acknowledging that the syntax can still be complex, he now sees the trade-off as worthwhile, especially when building libraries for others. He advocates for a pragmatic approach, suggesting that if typing becomes overly complicated for dynamic code, it’s better to keep it simple.

The Rise of AI and the Future of Coding

Romano views AI as a tool, akin to a knife—its value depends on its use. He finds it incredibly effective for accelerating development in areas where he is less expert (e.g., React, Docker), saving hours of reading documentation. It also serves as an excellent starting point for research.

However, he strongly believes AI is not yet ready to replace developers. Creating robust, stable, and scalable applications requires a depth of knowledge and experience that AI currently lacks. Guiding an AI to produce quality code for a complex system requires the expertise of a seasoned developer.

A primary concern is the trend of management viewing AI as a direct replacement for junior developers. Romano calls this a “very myopic move,” arguing that today’s juniors are the senior engineers of tomorrow. Without the hands-on experience of struggling with code, debugging, and understanding architecture, there will be no one with the necessary expertise to guide the AI tools of the future. He stresses the importance of using AI responsibly while continuing to learn and “stay fit” in fundamental programming skills, much like one goes to the gym despite having cars for transportation.

Share post

Stay In The Loop! Subscribe to Our Newsletter.

Get updates straight to your inbox. No spam, just useful content.

Recommended for You

Designing Claude Code

Designing Claude Code

Anthropic’s Meaghan Choi and Alex Albert explore the design philosophy behind Claude Code, discussing its terminal-first approach, the evolution of developer workflows in the age of LLMs, and how agentic coding empowers both engineers and designers.

Codex and the future of coding with AI — the OpenAI Podcast Ep. 6

Codex and the future of coding with AI — the OpenAI Podcast Ep. 6

OpenAI's Greg Brockman and Thibault Sottiaux explore the evolution of AI-powered software development, from the first coding sparks in GPT-3 to today's GPT-5 Codex. They detail the concept of the "harness," the rise of agentic coding, breakthroughs in automated code review, and how AI agents capable of running for hours on complex refactoring will reshape the future of engineering.