The first exposure to college-level coding for most students at UVM happens in the Introduction to Programming course (Computer Science 1210). For some, the prospect of learning to code is exciting and full of creative possibilities, but for others mastering the fundamentals of a complex new language governed by unforgiving rules can be a bit intimidating.
Computer Science Senior Lecturer Clayton Cafiero welcomes these two possible receptions for learning programming in the textbook he recently authored specifically for the course, An Introduction to Programming and Computer Science with Python. At nearly 400 pages, the textbook was an ambitious undertaking—especially considering that, from conception to publication, the process took less than a year.
The book's journey to publication is as unique and unexpected as Cafiero's own journey to the University's classroom. As an undergraduate at Dartmouth College, Cafiero took only two math courses and had little exposure to computer science. That changed early in his career when he took a job as a market analyst, spending much of his time processing complex spreadsheets.
"I got frustrated with these spreadsheets—feeling there's got to be a better way to crunch all those numbers," Cafiero said of his experience. "And so, I started writing some programs on my own, self-taught, and realized that this was something I really enjoyed doing."
Encountering ample opportunities to improve his workflow through coding, Cafiero taught himself several programming languages until, eventually, he launched his own business creating advanced publishing platforms for equity research firms in Manhattan. In 2010, Cafiero moved with his family to Vermont when his wife was hired as a lecturer in UVM's Department of Romance Languages and Linguistics (now part of the School of World Languages and Cultures).
The move rekindled a desire to return to school—this time focusing on computer science. "And so, I'm thinking, let's do something crazy. I've been writing code for all these years and taught myself a dozen languages. Maybe I should take a computer science course," said Cafiero. "Here I am, 54 years old, and I enrolled in my first computer science class —Professor Byung Lee's Data Structures and Algorithms course at UVM."
While balancing his classes and work deadlines, Cafiero found himself hooked on computer science, ultimately joining the department’s master's program. "My studies explained some things that, intuitively, I was doing over the years, but now I had a theoretical understanding of what was going on that enriched my experience as a programmer," he said.
Before graduating, Cafiero was approached by department chair Chris Skalka to help teach some sections of the Introduction to Python course under the tutelage of Professor Jim Eddy. It was an experience that would change his life. "I had a ball. I never knew I wanted to be in a classroom. But as soon as I was there, everything made sense," said Cafiero. "I found that I was able to help students overcome their challenges, that I was able to help students overcome their fear of something technical."
After graduating, Cafiero spent a year teaching computer science at St. Michael's College before Skalka lured him back to UVM to be a senior lecturer in the College of Engineering and Mathematical Sciences.
In preparation for his first semester teaching CS1210, Cafiero realized that the existing textbook did not sync ideally with his approach to teaching Python. Created in 1991 by Dutch programmer Guido van Rossum, Python is one of the world's most widely used computer programming languages. Python is a versatile, general-purpose language well-suited to beginners because of its readable syntax yet robust enough for advanced applications like data science, robotics, and machine learning.
Of particular concern to Cafiero was the existing textbook's lack of fluency in idiomatic Python, saying, “When you are learning a language, you want to learn to speak like a native. You don't want to learn clunky, word-for-word translations—there are idioms. The same is true in programming languages.”
He was also alarmed by the price of the textbook for students—especially considering the doubts he had about the book's structure. In the weeks leading up to the fall 2022 semester, Cafiero developed a bold plan to replace the textbook with new content that he would draft in advance and post online.
"If I'm not going to have a book, I need to supply the students with the information in another way. I wrote the content and provided it in advance so that students could understand the new programming features that we were going to study that week.," he said. "The intention was never to write a book, but about six weeks into it, I realized—Oh, I'm writing a book."
Writing a chapter of the textbook each week and releasing it online a few weeks in advance of each class, Cafiero found himself with a rough draft of the book by the semester's end. During the spring semester, he further refined the material and augmented it by adding exercises, footnotes, and references.

The prospect of producing a textbook customized for Introduction to Programming was eagerly supported by Skalka who recognized the potential for the text to better standardize the curriculum of the hugely popular course. Computer Science enrollment at UVM has experienced explosive growth with the number of students in the program more than doubling during the past decade alone.
As a prerequisite for not only computer science but other STEM disciplines as well, CS1210 regularly sees several hundred students enrolled during a single semester. As a result, the course is offered in sections to better accommodate the volume of students. This semester, for example, there are nine sections of the course being taught by a corps of instructors.
“It is critical to maintain consistent learning outcomes across all these sections because this class is a prerequisite for many upper-level courses,” said Skalka, who added, “Clayton's book is a fantastic way of achieving that because he's now collecting the curriculum in one place, in a very deliverable format.”
When structuring the book, Cafiero was careful to create scaffolding that allows students opportunities for comprehension checks to consolidate what they have learned before proceeding on to the next topic. As a result, he found the textbook’s initial chapters to be the most challenging to write as they provide the foundation for everything that follows.
"It's all designed in a very methodical way. Theoretically, the reading feeds the comprehension checks, which feed the exercises done in class that lead up to the labs that prepare the students for the homework," he described. "The process is called spiraling up. You are revisiting the same concepts again and again at a higher level and with greater depth.”
Skalka praised the book’s accessibility saying, “I think one of the reasons why the book is so effective is because Clayton spent a lot of time thinking about how to effectively communicate ideas in a way that is easily processed without being overwhelming.” Skalka added that the reception to Cafiero’s textbook among both students and instructors has been consistently positive.
In turn, Cafiero credits Skalka and his colleagues in computer science for their support and inspiration during the production of the book and its subsequent use as a classroom text. "It really is true that the book would not exist without them,” he remarked.
Cafiero elected to make his new textbook open-source and provides a free PDF version online. For those who prefer having something more tangible, the book is available in printed form at the UVM Bookstore and is sold for the cost of production plus the store's overhead—less than $14.00 per copy. The book has proven popular among the 380 or so students who have enrolled in CS1210 this semester, selling out three print runs with Cafiero estimating about 20% of the class electing to purchase a physical copy.
Cafiero acknowledges that the book continues to be a work in progress and has developed a novel way to identify errors and correct them. "I offer a bonus point bounty to my students for every defect they find, up to three a semester," he said. "It encourages students to read carefully and early—I only give the bonus point to the first person to report the defect and provide a correction." So far, he has collected about 20 corrections and has developed a system that automatically publishes the book edits in parallel to PDF, his website, and to Brightspace.
“I think of it as a way of making yourself a little more human,” Cafiero said. "A student knows they might lose points if they get something wrong. It's only fair that I should give something back if I make a mistake. That's my way of opening the door to that whole idea that the instructor is not some infallible sage preaching from the mountaintop."