Education

Posts about teaching programming and computational skills, pedagogy, instructor training, lesson design, educational research, Software Carpentry, workshops, curriculum, student learning, and assessment.

2026-05-30How to Not Be Wrong About AI
2026-03-30Project Status
2026-03-26Feasible
2026-03-26Penguin Geography
2026-02-08104 Days
2026-01-28Four Traditions Revisited
2026-01-18If Not Lessons, Then What?
2025-10-25Cognitive Pollution
2025-09-12Searching for Closure
2025-08-21Things I'm Looking For
2025-08-15Productivity Workshop Ideas
2025-07-19Workshops I Want
2025-04-12Research Threat Models
2025-01-26Human Connection
2025-01-11Fairness
2025-01-11Edinburgh Winter Talk
2025-01-10Grades
2025-01-09Managing Conflict
2025-01-08Division of Labor
2025-01-07Forming Teams
2025-01-06Making Decisions
2025-01-05Air Time
2025-01-04Meetings
2025-01-03Time Management
2025-01-02Crunch Mode
2024-12-28Being a Great Teacher
2024-12-14How It Will Be Used
2024-11-18Milner on Invention
2024-10-11How to Be Interviewed
2024-08-21Teaching Workshop in September 2024
2024-08-12Tutorials I Would Like to Attend
2024-04-27Building Tech Together
2024-04-19And Now to Lead
2024-04-07In Search of Balls and Sticks
2024-03-15Thinking About Lessons
2024-03-01Why I Draw
2024-02-26My Adventures with Certificates
2024-02-21A New Metric
2024-02-03First Draft of SQL Tutorial
2024-01-31Lesson Log
2024-01-24Working Backwards
2024-01-13What's the Scratch of the Social Sciences?
2023-12-12Ultracrepidarian
2023-12-11Meetings, Interruptions, and Power
2023-11-13Replacing Make
2023-11-12Software Design Homework
2023-11-01How to Reach the Unconverted?
2023-09-09An Approach to Motivating Coding
2023-08-20Teaching Workshops for Rainbow Railroad
2023-08-13I Don't Know What to Think About AI
2023-08-10Language and Library Features for Teaching
2023-07-20Explaining Code
2023-03-04The Only Features I Need
2023-02-26Provenance Revisited
2023-02-13Soup, Then Prayers
2022-12-29The Fourth Tradition
2022-12-28Ways to Explain Code
2022-12-18Sessioncasting
2022-12-14Teaching in the Third Dimension
2022-12-04I Want a Memory Diagram Generator
2022-11-18Debuggable Explanations
2022-11-13The Notebook Not Taken
2022-10-29I Don't Know What to Teach
2022-10-29Learning Objectives for Teaching Workshop
2022-10-26Software Design Homework
2022-10-02Empirically Minimal
2022-09-24The Least Assholish Person
2022-08-14Empirical Software Engineering Vignettes
2022-08-11Slides for Teaching Tech Together
2022-05-08A Language for Teaching
2022-02-01What I Would Change in Lox for Teaching
2022-01-16A Cacaphony of Explanations
2021-12-26Effort Estimation
2021-09-07Managing Research Software Projects Workshop
2021-08-18Software Design Webinar
2021-08-05Software Design Rules
2021-07-18What Everyone in Tech Should Know About Teaching and Learning
2021-07-17Software Engineering's Greatest Hits
2021-05-17Two Books
2021-04-17Choose Your Own Adventure
2021-04-17You Say Dumbing Down, I Say Inviting In
2021-04-08Lesson Maps
2021-03-30The Fourth Tradition
2021-03-27The Ghosts in the Debugging
2021-01-18Good Enough Teaching
2021-01-17The Page Is Not The Lesson
2021-01-03Concept Maps
2020-11-20Management Skills
2020-11-02A Lightweight Process for Lesson Teams
2020-08-08A Better Learning Platform
2020-08-04Research Educators
2020-07-19Slither.io, the Two Sigmas, and Customer Support
2020-04-06Teaching Code Review
2020-03-30SIGSOFT Influential Educator Award
2019-12-31Correlations
2019-12-23Empirical Examples
2019-12-13Synchronous Online Active Classes
2019-11-25How I Teach Today
2019-09-05How Do You Tell?
2019-09-04TidyBlocks Webinar
2019-08-22Finally Real
2019-08-14Research This!
2019-08-10Exoplanets
2019-08-08Documentation Types
2019-08-05Computational Science Education (1996 edition)
2019-08-03Teaching Online
2019-07-27Doing Good and Getting Paid
2019-07-15Is This a Notional Machine for R?
2019-07-07Deskilling Learning
2019-06-24Chapter Summaries
2019-06-15Ten Quick Tips for Delivering a Programming Lesson
2019-06-06ICER Acceptance
2019-05-26Active Teaching
2019-05-04In the Classroom
2019-05-03Shorter Lines
2019-04-27From Textbooks to Notebooks and Back
2019-04-24Ten Quick Tips for Reviewing Lessons
2019-04-20Leading Questions for Creating a Learning Commons
2019-04-17Learning Curves
2019-04-16What Docs When
2019-04-12Python Flash Cards
2019-04-12Ten Quick Tips for Creating an Effective Lesson
2019-04-10What Docs and When
2019-04-06Bootcamps
2019-03-31Concept Maps
2019-03-30Online Teaching Setup
2019-03-30Curriculum Roadmap
2019-03-21Twelve Weeks, Twelve Tools
2019-03-20Educational Paramedics
2019-03-12Reviewing Lessons
2019-03-07Learning to Program
2019-02-20Is Code-Along Formative Assessment?
2019-02-11Examples Wanted for Code Review
2019-01-30Why I Teach (Revisited)
2019-01-10Leadership Training for Open Science
2018-12-30Harper: Lesson Discovery and Aggregation
2018-12-27Use Case Maps Revisited
2018-12-20PETE, PRIMM, and Monsters
2018-12-19Fourteen Percent and a Change of Direction
2018-12-17Thirteen Percent and Counting
2018-12-16Speaking of Accessibility
2018-12-13A Story Line Game for Teaching
2018-12-12Twelve Percent of a Plan
2018-12-06Analyze That! Very Preliminary Results
2018-12-06Three Courses
2018-12-02Learning from McMaster
2018-12-02OER Landmines
2018-11-30Lesson Installation
2018-11-29Teaching as a Telenovela
2018-11-28Augmenting Error Messages
2018-11-16Non-Standard Evaluation in R
2018-11-05Abstraction and Comprehension Continued
2018-11-03Abstraction and Comprehension
2018-11-01Twelve Questions
2018-09-18Teaching Ethics
2018-09-05Analyze That!
2018-09-04Two Courses
2018-08-28Two Abstracts for Two Audiences
2018-08-07Three Terms
2018-07-15Teaching Tech Together
2018-07-05Performance Curves, Curriculum Design, and Trust Revisited
2018-06-20End-User Teachers
2018-06-14One-Day Workshops
2018-05-13Rules for Teaching
2018-04-28Version 3 Feedback
2018-04-12Is This a Notional Machine for Python?
2018-04-01Yaks
2018-04-01The Undergraduate Software Project Guide
2018-03-23Where Does This Come From?
2018-03-20Comments Sought on the Plan for Version 3 of 'How to Teach Programming'
2018-03-17I Can't (Quite) Teach JavaScript
2018-03-16Seven Ways to Think Like a Programmer
2018-03-16Chariots
2018-02-18Teaching Programming in the Wild
2018-02-14'Analyze This!' for CS Education
2018-02-13Workshop Benefits
2018-02-12More Dagstuhl
2018-02-10My Dagstuhl
2018-01-26Assessing Competence
2018-01-15Ten Simple Rules for Being a Good Educational Research Partner
2018-01-15Procedural versus Declarative
2018-01-13Educational Bibliography
2018-01-09Teaching Statistics in the 21st Century
2018-01-07Book Club
2018-01-03Teaching Tech Together Toronto: January 2018 Meetup
2017-12-30Wanted: A Workable Lesson Competition
2017-12-27Explanation-Oriented Programming
2017-12-17Teaching for Learning
2017-12-15What Does Peripheral Participation in Data Look Like?
2017-11-24Common Misconceptions
2017-11-20Data Science for Software Development
2017-10-21Change Strategies
2017-10-21Making Maintainable Lessons
2017-10-16Exercises for Teaching Programming
2017-09-08Bridge and Evolution
2017-05-31How to Teach Programming (And Other Things)
2016-10-23Programming as Theory Building
2016-09-23Teaching Programming to the Blind
2016-09-21What I Wish I'd Read
2016-09-12Collaborative Choral Software Exegesis
2016-08-19Ten Ways to Turn Off Learners
2016-08-04Etsy for Teaching
2016-08-02Heuristic Evaluation for Novice Programming Systems
2016-06-10The Superbug in Education
2016-04-29Why Teachers Don't Collaborate on Lesson Development
2016-02-16A Counterpoint to Collaborative Lesson Design
2016-02-07Come a Long Way, Got a Long Way to Go
2016-01-13A New Book from Mark Guzdial
2016-01-09What the Data Says About Novice Programming Mistakes
2016-01-09Change Strategies in STEM Education
2016-01-03A Data Programming CS1 Course at the University of Washington
2015-12-28Maybe I Actually Am An Engineer
2015-12-15Educational Engineering
2015-11-20The Morea Framework
2015-11-15CourseSource: A(nother) New Hope
2015-10-09Teaching in the Large
2015-09-28Thinking About Teaching
2015-09-13How Teaching Knowledge Is Transferred
2015-09-01Better Teaching Practices
2015-07-18Top 10 Myths about Teaching CS
2015-07-01Pushing Back
2015-06-21Research-Based Course Design
2015-06-17Get More Done in Less Time
2015-06-13Eroded Away
2015-06-12Learning in Both Directions
2015-05-25A Few Articles on Education
2015-05-24ICSE 2015
2015-04-22The Paradox of Learning Objects
2015-04-13The Future Then and Now
2015-02-09Plot This
2015-02-02Nouns and Verbs
2014-12-02What About MOOCs?
2014-11-06You Should Read Juha Sorva's Thesis
2014-11-04A 'Joel Test' for Grassroots Programming Groups
2014-10-20Beautiful Lessons
2014-10-02A Better Software Engineering Course
2014-09-04Building Better Teachers
2014-03-14You and Jimi Hendrix
2014-03-14Is Learning at Scale Just Another Name for Ubiquitous Surveillance in the Classroom?
2014-02-09An Online Peer Instruction Tool
2014-01-19Why Not a MOOC?
2014-01-07Mental Models and Vicious Circles
2013-10-23A Simple Exercise
2013-03-01Alternative Teaching Models
2013-02-10Why Don't I Just Go Ahead And Frame That Debate In A Way That Guarantees I'll Win?
2013-02-03Features and Scope in Open Courseware
2012-12-23Computer Science Curricula 2013
2012-11-19The Tool (I Think) We Need To Do Peer Instruction Online
2012-11-19Who Wants To Build a Faded Example Tool for the IPython Notebook?
2012-11-13Pre-Assessment
2012-11-05Who Decides?
2012-11-02I'd Like an Argument, Please
2012-10-26Counting to Five (or, A Plan for Online Tutorials and What's Wrong With It)
2012-10-25Prime Numbers, Biologists, and Data Visualization
2012-10-21Why Teaching People to Program Is Hard
2012-10-04USV's 'Research' on Online Education: Well, That's Depressing
2012-09-30The Real Hard Work
2012-09-26Computational Thinking and Ice Floating in Bathtubs
2012-09-12Patterns Wanted
2012-09-04Not Really Disjoint
2012-08-29A Problem With Badges
2012-08-21Two Solitudes (talk)
2012-08-15Is This Really Necessary?
2012-08-14Applying Pedagogical Principles in This Course
2012-06-25If You Want to Teach, Isn't It Only Fair to Learn a Few Things First?
2012-05-24Everything You Need to Know About Standardized Testing
2012-05-24No CT Without PL
2012-05-23Alone and Misunderstood
2012-05-11Teach Teachers What They Use, Teach Kids Where They Are
2012-04-28Stop Me If You've Heard This One
2012-04-17GitHub for Education
2012-04-09…Which Is Wrong
2012-04-03Maybe That's Why
2012-03-22Two Questions After the Audrey Test
2012-03-18Informed Choice and the Audrey Test
2012-03-16What I Learned From My P2PU Course
2012-03-15The Audrey Test
2012-03-10An Observation
2012-03-09What's the Model, Kenneth?
2012-03-04Performance Curves, Curriculum Design, and Trust
2012-03-01Why I Think 'YouTube for Textbooks' is a Bad Idea
2012-02-22What Deep Thoughts Look Like
2012-02-15And Speaking of New…
2012-02-10Audrey Watters on Software Carpentry
2012-02-09Comparing Software Carpentry to CS Principles
2012-02-02Bullshit, Appropriation, and Technology in Education
2012-02-01On Algorithmic Thinking
2012-01-29Learners and Their Needs
2012-01-29A Browser-Based Programming Tool That's Better Than Many Desktop Tools
2012-01-27Work As Though You Lived in the Early Days of a Better Nation
2012-01-17Our First Challenges
2011-12-31The Fire Last Time
2011-12-24Organizing Instruction and Study to Improve Student Learning
2011-12-07How to Teach Webcraft and Programming to Free-Range Students
2011-12-02Iron Triangles Are Great—Everyone Should Have One
2011-12-01Direct Reports and Self-Directed Learning
2011-11-30Good News and Bad News
2011-11-18Accessible to All?
2011-11-14Here's What I've Learned So Far
2011-11-08The Ladder of Abstraction and the Future of Online Teaching
2011-10-06Insufficient Purity Considered Harmful
2011-08-25Three Paradigms (or, Why LLC Should Teach Javascript)
2011-08-18Spelling, Fairness, and JavaScript
2011-08-17Demos Reinforce Errors, and Confusion is Good
2011-08-08Introducing Programming a Different Way
2011-08-04Computing in Physics 101: What We're Doing Wrong
2011-07-15The Finger Is Not The Test
2011-07-12Grown-Up Languages
2011-06-12If You're Going to Teach an Undergrad Intro to Software Engineering…
2011-06-07Blueprints Are Not Architecture
2011-04-26Competence
2011-03-24A Better Way to Teach Programming to Scientists
2011-03-16Graph Layout, Models vs. Views, and Computational Thinking
2011-01-20MIT Rethinking OpenCourseWare
2011-01-05We Are the Frogs
2010-12-28Falk and Dierking's 95% Solution
2010-12-02Programmer Competency Matrix
2010-12-02Dr. Tae is Full of Crap
2010-10-19Peter Norvig on Python
2010-10-08Yes, We *Can* Design Languages for Human Beings
2010-08-25Three Rules for Supervising Student Programming Projects
2010-08-05Python in CS1 is Growing Fast
2010-07-28Mark Guzdial on Software Carpentry
2010-06-29The Violas of Programming
2010-06-18People You Don't Want On Your Team
2010-06-16Is Live Coding Worth It?
2010-06-16A Voice from the Back of the Room
2010-04-12More on Instructional Design
2010-04-12Professors *Can* Teach Open Source
2010-04-12On the Failure of Inquiry-Based Teaching
2010-04-07How Do You See Maps?
2010-03-30Why Do Students Cheat?
2010-03-26Online Delivery
2010-03-26Instructional Design
2010-03-15Master of Science in Applied Computing
2010-03-13Something That Won't Be On The Final Exam
2010-03-03More on Computational Thinking
2010-03-02What We've Learned
2010-02-02Before We Get Too Excited About Online Education…
2010-01-25CUSEC 2010
2010-01-22CUSEC
2010-01-15We're Apparently Still Not a Science
2009-12-30Osmosis is Just a Fancy Name for Failure
2009-12-27Taking Notes
2009-12-11Open the Hatch
2009-11-11Following Up on the Toronto Innovation Showcase
2009-11-05Toronto Innovations Showcase
2009-11-05The Greatest Failing of High School Science
2009-10-21Should Modeling Be Part of This Course?
2009-10-09Two More From Mark Guzdial
2009-09-29To Read Is To Learn
2009-09-26Why Don't Students Like School?
2009-09-21Want to Go to MIT?
2009-09-15First Gov 2.0 Class
2009-09-08Why I Teach (Part 3)
2009-08-31Different Weights, Different Answers
2009-08-30Discussing the Balance
2009-08-25Our Experiences Switching to Python
2009-08-21City Data Projects
2009-08-15Evaluating the Usability of Programming Languages
2009-08-15Anonymizing Student Data
2009-07-16We're *Supposed* to Be a Little Old Fashioned
2009-06-25Mondays This Fall
2009-06-01Guido van Rossum reviews 'Practical Programming'
2009-05-12Error Handling
2009-05-12Suitable for High School Students
2009-05-09Making Is Thinking
2009-05-05'Practical Programming' Is Available
2009-04-14Jon Udell on Computational Thinking
2009-04-09GSoC Stats: The Last 10% Is The Hardest
2009-03-22What I'd Like To Do Next
2009-03-19Keywords Speak Louder Than Words
2009-02-18Papers
2009-02-02Theory vs. Practice: Shall E'er the Twain Meet?
2009-01-14Making Up Grading Schemes
2008-09-18Risk Budget
2008-09-08Start of Another Academic Year
2008-08-12Winter Grad Course Evaluation
2008-07-24Fall Courses
2008-07-07Consulting Course Fall 2008 Needs You!
2008-04-07Always Outnumbered, Always Outgunned
2008-03-30Old Dogs Are Suspicious of New Tricks
2008-03-15SIGCSE Day 3
2008-03-14SIGCSE Day 2
2008-03-13SIGCSE Day 1
2008-03-12On My Way To SIGCSE'08
2008-03-06A Student-Oriented Software Development Process
2008-01-21I Wasn't At CUSEC This Year…
2007-12-15Prepping for Next Term
2007-11-06Measurement
2007-10-25Today Was More Fun
2007-10-02Doomed to Repeat It
2007-08-07How I'm Doing
2007-07-14ITiCSE'07
2007-07-12User Interface Jam Session
2007-06-26A Thumb on the Scales
2007-06-12Software Games
2007-06-06Java Ecosystems for Python Programmers
2007-05-22Teaching Software Architecture
2007-05-12Half Empty, Half Full
2007-04-15Jorge Aranda on OLPC
2007-04-12One Laptop Per Child
2007-04-01Knowing Where You Are
2007-03-28Pictures from the Competition
2007-03-26Engineering Strategies & Practice Team Wins Award
2007-03-25New Software Engineering Courses at U of T
2007-03-12What I Missed Most by Not Going to SIGCSE
2007-02-07Research in Action: W00t!
2006-09-23Turnitin and Translucency
2006-09-18Taking Intellisense to the Next Level
2006-09-14CASCON Workshops
2006-09-04Step 3: Your Daily Routine
2006-08-31Step 2: Analysis & Estimation
2006-08-30CSC49X: Figuring Out Where the Goalposts Are
2006-08-14ITiCSE'06 Readings
2006-07-18The Camel's Humps Are Very Popular
2006-07-09Reorganizing Our Software Engineering Courses
2006-04-13Online Marking Grant
2006-02-15Entry-Level Requirements Engineering Revisited
2005-12-27New Year's Schedule for Software Carpentry
2005-12-05Guidance on Running Undergraduate Software Projects
2005-12-02How Do You Want to See Source Code?
2005-10-02Buckley's and Jalapenos: Just Say No
2005-05-15Navigating Source
2005-04-29You and Your Research
2005-03-25Fasten Your Seatbelts
2005-03-15Pythoneers at SIGSCSE
2005-03-11Code reviews
2005-02-09Good Writing vs. Bad Writing
2005-01-16Canadian Undergraduate Software Engineering Conference
2005-01-05Why Python?
2004-12-30Why I Teach
2004-10-12Blogging vs. Venting
2004-10-08Ant + Eclipse = More Pain
2004-10-08Oh, You Mean You Wanted It to *Work*…
2004-10-07Ant + Hibernate = Confusion and Pain
2004-09-16The Art of Cutting Corners
2004-09-13Guards! Guards!
2004-09-01Tasks for the Fall
2004-08-18Filters, Performance, and Priorities
2004-07-23Preparing for the Next Round
2004-07-21Up and to the Right
2004-06-26Code Reviews
2004-06-26Bottom Up and Top Down Meet