Skip to: Site menu | Main content

Welcome!

Welcome. This page contains information about me and my writing, research, and teaching.

I am an Associate Professor Teaching Stream in Computer Science at University of Toronto Mississauga. I teach Intro Programming, Intro CS, Theory of Computation, Systems Programming, Data Structures, Principles of Programming Languages, Algorithms, Computer Science Education Research, and Operating Systems.

I have a PhD from the Ontario Institute for Studies in Education (OISE) at the University of Toronto in Computer Science Education. My dissertation focused on evaluating Peer Instruction (PI) as a pedagogical approach for teaching CS courses.

My No-Bull Programming Books

My passion is taking everything I know about teaching and learning to create books that put the learner first. This stuff did not come easy to me. I struggled behind walls of math and pseudocode, too. I hope to offer a unique take on many programming and computer science topics. I thank you in advance for your time reading what I have to say. I am grateful for each reader and I truly hope my books can help you achieve your programming goals. Please get in touch if you have any comments or questions (or you just want to talk about the hidden pop culture references... :D ).

Start Competitive Programming

Start Competitive Programming!: Ace the USACO Bronze Competition (with Dr. Zachi Baharav).

  • We're self-publishing this one! We continue to make edits based on reader feedback.
  • Good coaching is expensive. For this book, we've done our best to bottle up a great coach. Let Coach B help you get started with competitive programming!
  • To get better at programming (for your next job interview, personal project, competition), you need to know which problems to solve. Solve problems that are too easy and you won't learn new stuff. Solve problems that are too hard and you may become frustrated due to lack of progress. Let us guide you through the problems we suggest to take you all the way through the Bronze level.
  • Learn the most important categories of programming problems. Modelling problems, search problems, optimization problems, geometry problems (don't run away... NO PROOFS, we promise!), string problems, ad hoc problems -- we've got them.
  • C++ code for all problems in the book.
  • Curated, categorized selections of practice problems, with hints and full C++ code. Python code also provided!

(For Beginners) Learn to Program from Scratch in the Era of ChatGPT

Learn AI-Assisted Python Programming (with Prof. Leo Porter).

Yes, two CS Profs are encouraging and teaching you to use generative AI like GitHub Copilot and ChatGPT to program.

  • Write fun and useful Python applications—no programming experience required! By the end of the book, you'll have coded up two computer games and even a program to guess the author of mystery books.
  • Use the Copilot AI coding assistant to create Python programs.
  • Read Python code and understand what it does. Yep, you'll still have the fundamentals.
  • Learn critical skills like testing (determining whether your program is working correctly), debugging (fixing errors when your code is not working correctly), and problem decomposition (taking a big problem and chopping it into bite-sized pieces that you can ask the AI to write).

Algorithmic Thinking, My Bestselling Algorithms Book

Algorithmic Thinking, 2nd Edition.

  • No nonsense, no math. Learn algorithms and data structures now. Rock your next programming interview!
  • Learn the intricacies of hash tables, recursion, dynamic programming, trees, graphs, binary search, sorting, heaps, segment trees, union-find, and randomization.
  • Become proficient in choosing and implementing the best solutions for any coding challenge.
  • Learn to use programming judges to get immediate feedback on your code.

(For Beginners) Learn Python

Learn to Code By Solving Problems

  • Everything you need to get started with Python. I use this book to teach my Intro to Programming course.
  • Learn to think like a programmer.
  • Write code throughout and get feedback on the code you write. We're using powerful feedback tools designed for competitive programming. (Don't care about competitive programming? No problem!)
  • Use Python sets, lists, and dictionaries to organize, sort, and search data.
  • Design programs using functions and top-down design.
  • Learn about algorithms.
  • Use Big O notation to design more efficient code.

Thanks for visiting. Feel free to email me at daniel "dot" zingaro "dt" gmail "dot" com.