It has been a hectic semester developing a new CS1 course, but now that the semester is over, it’s time to go back and figure out how I can improve. This post will be the first of three planned posts on this topic, which will follow backwards design by first looking at the goals, then the activities, and finally the concrete changes to be made. In this post, I want to revisit the goals I had listed in the syllabus and assess whether they are valid and complete. The goals will then serve as the context for understanding the teaching evaluations and for assessing the success of the course.
The syllabus for the course has this short list at the beginning:
At the end of the course, you should be able to:
- write small (if not always efficient) programs of your choice
- participate in computational research
- solve real-world problems using programming
- learn a new programming language after some experimentation
I still find all of these goals appropriate, despite the wiggle room in defining “small” programs and in the “some” amount of experimentation. I would say “small” here is on the order of 100 lines of code, which is enough to do some significant work even with a little fluff in the code. As for learning a new language, I don’t think it would be unreasonable for students to gain basic knowledge of a new language in two weeks, as long as they avoid memory management or data structures. I have not tried to measure either of these metrics directly, but writing out the specifics gives a better idea of what the goals were.
Similar ambiguities exist with goals #2 and #3, but my first reaction is that these two goals are ambitious. Goal #2 was one of the driving motivations for redesigning the computer science curriculum, and refers to non-computer-science research where students might need to modify or adapt existing scripts. Depending on the complexity of and documentation for the scripts, I would again put a two-to-four week time frame for this task, with additional time if the script is in a new language.
The difficulty of goal #3 depends on the scale of the “real-world problem”. The thinking behind this goal is that solving real-world problems is the behavioral proxy for identifying information structures – to decide when a collection is needed or when defining classes is a good idea. In other words, this goal tries to measure computational thinking. Again, I don’t expect the solutions to be elegant, and will likely have copied-and-pasted code instead of loops. Goals #2 and #3 would be a stretch for a portion of students, but I think they are valuable for communicating high expectations.
In sum, the goals that I listed are slightly vague but seem reasonable for CS1. A harder question to answer is whether the course should have additional goals. One approach is to consider my implicit goals when I wrote the homeworks and labs, most of which require finding and understanding documentation as well as debugging. These might be better called “skills” than goals, although the difference is blurry. There were more explicit lessons about the pitfalls of computer science as well, such as the representation lab. While the idea is important, I am less inclined to call it a goal as much as a cautionary tale. A final non-goal that my thoughts continually return to is that of building a community around computer science. Again, I am unsure whether this is a goal – at least, it’s not a learning goal for students to “achieve”, but a side-objective for me as the instructor.
Setting these pseudo-goals aside, are there goals that I am missing? What are the general learning goals of CS1 anyway? In their model curriculum, the LACS consortium lists the following:
- To introduce students to two distinct problem-solving paradigms: functional programming and object-oriented programming.
- To introduce students to the mathematical tools and foundations of computer science.
- To instill in students an appreciation for the interplay of theory and practice in computer science.
- To make students think about the ethical and social issues of the software systems they build.
I find it curious that these goals are phrased as the instructor/course acting on the student, and not as students taking action. Despite my previous disagreements with the LACS model curriculum, I have no strong objection to these goals. My only complaint is that these are even less precise than the goals I adopted. Since these goals seem to be about course content, I will not concretize the goals.
Next week, I will evaluate the degree to which my course has achieved both my four goals and the four goals from LACS.