- Verify the Bug and Determine Correct Behaviour.
- Stabilize, Isolate, and [Reproduce].
- Estimate [Likelihood of Probable Causes].
- Devise and Run an Experiment.
- Iterate Until the Bug is Found.
- Fix the Bug and Verify the Fix.
- Undo [Unwanted] Changes.
- Create a Regression Test.
- Find the Bug’s Friends and Relatives.
My changes/clarifications are shown within square braces. Trust me, read the full post. Each step is explained in detail.
“For this you keep a lab notebook. Everything gets written down, formally, so that you know at all times where you are, where you’ve been, where you’re going and where you want to get. […] Sometimes just the act of writing down the problems straightens out your head as to what they really are.
The logical statements entered into the notebook are broken down into six categories:
- Statement of the problem.
- Hypotheses as to the cause of the problem.
- Experiments designed to test each hypothesis.
- Predicted results of the experiments.
- Observed results of the experiments
- Conclusions from the results of the experiments.
“The real purpose of scientific method is to make sure Nature hasn’t misled you into thinking you know something you don’t actually know. […] One logical slip and an entire scientific edifice comes tumbling down. One false deduction […] and you can get hung up indefinitely.
As a programming instructor I help students when things go wrong with the applications they’re writing. Because of my experience with the types of apps they are coding, I’m usually quick at spotting the source of the bug. Pointing out these bugs may fix their immediate problem, but it does little to correct the error in logic that led to the bug. Perhaps before coming to me, students with buggy source code should work through steps 1 through 4 from either of these lists.
If I were to mandate this for my classes, I’d have to add a step zero:
Be Prepared to Learn From Your Mistake.
New programmers are often quick to blame the language or framework they are using when their code doesn’t work. I still catch myself thinking “IT isn’t working” when I encounter troublesome bugs in my code. However, experience has shown me two things:
- My tools are rarely the source of my problem.
- If I’m not prepared to accept responsibility for my bugs, I’m doomed to repeat them.
- Errors vs. Bugs and the End of Stupidity.
- Rubber Duck Debugging
- Zen and the Art of Bugfixing.
- Stand Back. I’m Going To Try Science.
Bike! - A short film about biking in Winnipeg.
We’re all part of the club
Whether you see life in pedals and spokes
Or, you’re just out for a Sunday ride
It’s about freedom
It’s not revolutionary
It’s human powered
You’ve always been a cyclist Keep moving
I teach computer programming in the Business Information Technology program at Red River College. Following the lead of Jody Gillis, another BIT instructor, I have added self-assessments to my student assignments.
What is self-assessment?
I ask my students to grade their own assignments using the same process I use, a weighted grading rubric. My rubrics are a collection of project requirements and instructor expectations. For each assignment a self-assessment is completed and submitted along with the project source code.
More often than not, the students assign themselves full marks with little reflection on their work. I need them to buy into the process, to see the value in it.
Why I want my students to value self-assessment.
Each week I introduce my students to new coding techniques. They must practice these new skills to learn them. Since each new set of techniques builds on skills acquired in the weeks before, a student’s ability to assess what they know and what they don’t know is essential. Insert “house of cards” analogy here. ;)
Practice Makes Better
To integrate more practice time into my courses, I’ve split assignments into two types:
- Take Home Assignments. Five or six a term. Individual work. Assessed by me and self-assessed.
- In Class Coding Challenges. One a week. Students can work together. Self-assessed only, but no formalized rubric.
The coding challenges provide an opportunity to experiment, to make mistakes, and to learn from direct experience. My gut feeling is that the better my students are able to self-assess these challenges and assignments, the better they will be able to direct their own learning.
My gut also tells me that my students are self-assessing once they believe no further work is needed on their assignments. I have to do a better job of explaining that self-assessment should be used throughout the development of their assignments, allowing them to reflect on and improve their code as they go.
More reading: Self-Assessment Does Not Necessarily Mean Self-Grading
The audio lectures I’ve been enjoying this month.
Physics and Philosophy: Arguments, Experiments and a Few Things in Between
University of Oxford
Exploring links between our scientific and philosophical understanding of the world. Six 10-25 minute discussions on “the nature of space and time, the unpredictable results of quantum mechanics and their surprising consequences and perhaps most fundamentally, the nature of the mind and how far science can go towards explaining and understanding it.”
University of Oxford
An eight-week chronological view of the history of western philosophy delivered by Peter Millican to first-year philosophy students. Thirty-three 10-20 minute lectures.
Teaching and Learning
- What I wish I had known about teaching when I started - Frédéric Mégret - McGill - iTunes (track 1)
- Teaching for Learning - Jennifer Summit - Stanford - iTunes (track 37)
Other audio lectures I have enjoyed:
I read eighteen books this year, two more than in 2011. This was a comfortable number of reads. For the most part I bought the books second hand or they were given to me. Two of the books were read on my Kobo, the rest were deadtree.
Books Read in 2012.
Shown in bold: where I bought the book, or who I got it from.
- Imperial Earth - Arthur C. Clarke [Value Village]
- Alligator - Lisa Moore [Dad]
- Solaris - Stanislaw Lem [Grace Hospital Sale]
- The Ruby in the Smoke - Philip Pullman [Grace Hospital Sale]
- Galapagos - Kurt Vonnegut [Value Village]
- The Hunger Games - Suzanne Collins [Mom]
- The Hunger Games
- Catching Fire
- Henderson the Rain King - Saul Bellow [Value Village]
- Freedom - Jonathan Franzen [Sister]
- A Song of Ice and Fire - George R.R. Martin
- A Game of Thrones [Alan, coworker]
- A Clash of Kings [kobo ebook]
- A Storm of Swords [kobo ebook]
- The Naked Sun - Isaac Asimov [Value Village]
- Lives of Girls and Women - Alice Munro [Value Village]
- Wake - Robert J. Sawyer [Grace Hospital Sale]
- Reality is Broken - Jane McGonigal [Library]
- The Skull Beneath the Skin - P.D. James [Value Village]
No duds again this year. I am especially thankful to Arthur C. Clarke for introducing me to Pentominos.
- The Confusion - Neal Stephenson [Amazon]
- The Annotated Turing - Charles Petzold [Amazon]
- Eloquent Ruby - Russ Olsen (Re-Reading) [RRC Desk Copy]
In 2012 I listened to 23 hours of lectures across two courses. Most of these lectures were heard while running or walking with Acelyn in her stroller in various parks around Amsterdam.
I cannot recommend these enough, both for the content and the delivery by Sandel and Kagan. Both courses are available for free in audio or video format.