In fall 2014, as two colleagues and I were readying ourselves to teach CS1 (in spring 2015), we decided to revamp the course, in the aim to reduce attrition (a long-standing problem in this intro course). Since then, I have revisited it several times: once funded by Google, and since spring 2017, funded by UTEP’s STEM Accelerator initiative. Often, I am asked what I did in this course. In this document, I leave out the details of all changes (I may address this in another document) to focus on the major changes I put in place.
Over the years I spent planning and teaching CS1301 (originally CS1401), I have made several changes, including moving from a paper textbook to an online one where homework could be tracked and graded, using videos for students to watch outside of class to allow more time in class for in-depth discussions, proposing two types of labs (small vs. challenging), etc. However, these were not the main changes I effected on this course and on my teaching style. The real changes were in my teaching philosophy and its application.
First, let me start by saying that professionalism is an important skill that, I believe, students should demonstrate or acquire in my class. This includes completing the assigned work, on time, coming to class, on time, etc. Needless to say that my standards were challenged… And not because my students were inherently unprofessional, but because they mostly could not demonstrate it.
When I started teaching CS1 (I had taught it previously, but many years before and had, it seems, forgotten about this problem), it struck me that our students were struggling so much outside the classroom. In this course, many of the students are in their first semester at the university, fresh out of high school; some are still high-school students; many have to work outside of school; some have families that depend on their help, on their incomes on occasion; some combine all four. As a result, it was almost impossible for some to meet deadlines. Now, that’s a problem when grades decrease as days of lateness increase. That was my first challenge.
Challenge #1: How to evaluate my students if the evaluation process in place (namely, grades with deadlines) acknowledges their struggles and not their skills?
This led me to reconsidering deadlines. However, after an unfruitful attempt at limiting the number of deadlines for labs to 3 in total during the semester (to be discussed in a later document), I had to come back to more frequent ones. I had to stick to them at least in labs because there is a lot of value for students in our ability to share solutions of labs. Without deadlines, we can’t release solutions. I found that overall my students needed deadlines. Most being new to college, they needed a structure, not necessarily to follow it strictly, but to guide them. “Plans are worthless but planning is everything” [D. Eisenhower].
Challenge #2: How to reinforce or instill professionalism in students who face incredible amounts of struggle outside class? How to deal with deadlines?
Faced with the conflicting situation in which students need deadlines, but they find it difficult to meet them, and I do not want to set rules I won’t follow, I had to figure out how to proceed. I made professionalism one of the skills I expect my students to have demonstrated by the end of the semester, understanding that things happen, some deadline won’t be met, but I will look at their performance globally, not locally.
In doing this, I acknowledged my students’ struggle concretely. Not that I was oblivious to it previously, but I had not concretely accommodated such trying situations as our students face. Pushing further in this direction, I now make it a point to never assume the worst of my students. Assuming that it is their choice not to work makes a bad conversation starter. On the other hand, I find offering help unconditionally and assuming that the students are motivated, just not available, much more effective in actually providing meaningful help. I called this approach the Kind Approach. It turns out that it is called kind discipline, as in the work by J. Winkler, M. Walsh, M. de Blois, J. Maré, and S. Carvajal, titled: “Kind Discipline: Developing a Conceptual Model of a Promising School Discipline Approach”, in which they preach positive school climate, empathy, and accountability.
However, going back to deadlines and professionalism, I needed to communicate this to my students. Since I was going to consider professionalism a skill to be demonstrated globally rather than locally, I looked at all skills (all outcomes of this course) this way as well. What if I took a kind approach on these as well? What am I assessing when a student struggles with a concept most of the semester but performs perfectly at it at the end of the semester? Should I assign a C for average performance (from very bad to good)? Or should I rather acknowledge that the skill(s) have been mastered, hence justifying an A or a B? I wrestled with this thought and opted for assessing the acquisition of skills rather than the process of acquisition of skills. I have moved to a competency-based assessment scheme. This, I must say, is the realization of a seed, planted in my mind a few years ago, when I was fortunate to attend the presentation of Carol Dweck (from Stanford) on Growth Mindset at the annual 2014 NCWIT Summit.
I believe that, in addition to my students’ potential struggles outside the classroom, their different backgrounds, preferences, learning styles, etc. affect their learning pace and thus their performance. Moving to a competency-based assessment allowed me taking into account these differences.
Two more challenges originated from this change.
Challenge #3: If I am going to assess my students globally, I need to offer them opportunities to demonstrate their skills (all skills…) all semester long…
In order for the students to be able to demonstrate their growth, or simply that they have acquired a skill that was “covered” several weeks prior, they need to be given opportunities to demonstrate this skill. I also believe in repetition. Topics should come back several times during a semester, in different contexts, so that students can eventually make sense of them in a more general understanding. To address this, I reorganized and redesigned my course in layers (an “onion-like” course). I cover each topics twice during the semester, at different levels, and after the second time covering a topic, I keep using it (and testing it) until the end of the semester.
Challenge #4: Students need to know their grade. Competency-based grading is not great for that.
A serious challenge I faced was the need of my students to know their standing in the class. A very legitimate concern of theirs, I must admit. Now, being new at this competency-based approach, my natural answer to their concern would be: “Don’t worry, you may experience struggles right now, but you can definitely improve and pass this class, if you practice more on X, Y, or Z”. Or, “currently, you have mastered this list of skills, but you still need to work on this other list of skills”. I was in sync with the “You have not mastered X yet” type of approach gleaned from Carol Dweck’s work. However, that was not, in my experience, what the students wanted to hear. My assessment of the situation is that my students, having dealt with grades since early grade school, needed this compass. I decided that I would provide that to them, with a disclaimer. So I continued to provide, in my syllabus, a “compute your final grade” section with information about how much each type of grade (exams, homework, quizzes, etc.) “weighs” in the final grade for the class: very traditional indeed. And I made sure to communicate that this WAS NOT the way I would compute their final grade (explaining my competency-based approach) but that if they used those weights, they would end up with a baseline grade (some sort of a worst-case scenario). So far it has worked in the sense that students understand the rules: the weights help them understand their worst-case standing in the class, and I can then communicate with them their needs in terms of skills.
Now, aside from the above challenges and approaches to face these challenges, I made yet another significant change in my philosophy. This last change was motivated by the following challenge I also faced in my CS1 course:
Challenge #5: How do I better engage my students and build a stronger sense of mastery in them?
Students starting their study of Computer Science face many hurdles. Gender bias and stereotype threats are part of these. The stigma around math is also very present (it contributes to adding to the gender bias). Misconceptions about computer science (even among those who are choosing it as a major) can be damaging to the students’ performance: for instance, CS is hard, or it is too formal. Students sometimes struggle with their perception of their own problem-solving abilities. These are only examples of what students face. However, all of these contribute to a lower sense of mastery of the topics in this course, and hinder their motivation to succeed or to push themselves in this major.
My main target was the students’ sense of mastery. I am a strong believer that students know a lot, coming to my class. Most of what I aim to teach them is problem solving (in a clear, structured way, called an algorithm) and all of my students are skilled problem solvers (all the more the ones facing so many struggles). I redesigned my course to put emphasis on the fact that they knew so much already. I always start the semester with “I am not going to teach you much, you already know most of what we are going to cover!” Although I strongly believe in this statement, the aim of it is mostly to provoke thoughts. I want the students to start thinking of themselves as skilled individuals, not empty containers waiting to be filled with knowledge. I claim that I mostly help them put a name of their skills and organize them, so that next time they need them, they will know where to find them. As a result, I now devote about a quarter of the semester going over the whole set of topics to be covered in the class, but in the context of my students’ life: how do these topics relate to their lives? How and where have they dealt with them before? How did they do when that happened? How can they put these skills to practice again in slightly different situations? Etc. This aims to connect the topics covered in my course with real, meaningful experiences. As we do that, we put names on them (algorithms, conditionals, loops, etc.), which they might not be familiar with, but by then, they know what they mean. We then spend the rest of the semester covering these topics once again in another (possibly more technical, involving code and structures) and then the whole semester in context. I learned recently that this approach falls in the category of asset-based teaching.
As I keep teaching and practicing this new philosophy of mine, I hope students also start adopting a kind approach towards their professors (my next battle will consist in breaking the student/prof barrier) and shifting their views from grades to skills, to life-long learning. Although the kind approach is only one element of my change, it encompasses it all. I see the other two main changes (on competency-based assessment and asset-based teaching) as results of this kind approach.
- Concretely, how do I put this in place?
- How would this approach translate to other courses, not just the intro to CS?
- Going through my laundry list of changes in CS1: for better, … and for worse…