I was generally a good student in most of my undergraduate classes, typically placing in the upper third of the class. Therefore, it was a big shock to me when I received a zero in a thermodynamics midterm exam. I had received low scores in exams before but never a pure zero. It was a very demoralizing experience and there was a real danger of failing the course. I thought I had understood the subject fairly well, and had attempted all the problems in the test with differing degrees of success. The zero seemed to indicate I had learned absolutely nothing! The professor was notorious for setting extremely difficult exams, and this was one of those cases. The only saving grace was that the class average was also abysmally low, although it was not zero. I decided to study harder and much more carefully for the rest of the course and managed to eke out an A grade at the end of the semester. Nevertheless, I still think about this course now and then.
Now I am a professor and I set exams for students. If the class average is abysmally low and several students get zero in an exam, I would find it demoralizing. Either my teaching is awful, or the exam was set too hard. I still struggle with the delicate balance of setting exams that challenge the top students but also allow the weaker students to feel that they that have learned something and that their performance can improve with some extra work. A zero or an extremely low score could be demotivating to a weaker student. (Of course, some students will fail a course and not much can be done about that.)
In standardized multiple-choice testing, there is approach called adaptive testing that allows students with different abilities to be tested at different levels. However, adaptive testing is much harder to administer in a small class, while still ensuring fairness in grading. This is perhaps not an issue for Software Carpentry, where students are not being graded. One could assign tasks with different levels of difficulty to students to challenge them appropriately, or assign a series of tasks with progressively increasing levels of difficulty.