Last week I was writing up report cards for an Introduction to Programming class I taught recently. In addition to their academic performance, students at my school are assessed on courtesy and respect in every class they take. I noticed something interesting as I was compiling scores for the class: these were the highest courtesy and respect scores that I had ever seen for a whole class.
At first I started second-guessing myself. Maybe I was seeing my students through rose-colored glasses, because I had enjoyed working on programming every morning with them. But when I asked what more I could have wanted from students in regard to how they treated themselves and others, I couldn’t think of much. Students had taken themselves more seriously, asked each other for help more consistently, offered help more readily, and treated school resources with more care than in any class I’ve seen. Students chose to work straight through normal break times, and worked into their lunch period on a regular basis. When I mentioned these scores to other staff, they nodded their heads immediately and said they had been noticing a different classroom culture throughout the session. What was it about programming that brought out the best in students?
Programmers are smart
Everyone knows that programmers are smart, and you have to be smart to learn programming. This means that anyone who begins to learn programming begins to feel smart. I am careful not to inflate students’ perceptions of their skills. In fact, I spend more time helping students understand how much they have left to learn if they want to work as a programmer, than I do congratulating them on how much they have already learned. Students respond well to this, in the same way that people respond well to Zed Shaw’s Learn Python the Hard Way. Young people value honest assessments of their skills and knowledge as much as they desire praise, if it is offered in a supportive way that helps them understand how to reach their goals. People are also looking for accessible intellectual challenges more than we often realize. People who feel smart, without having their egos falsely inflated, tend to treat themselves and everyone around them better.
Some parts of the Joel Test are really good for schools
I share the Joel Test with students to let them know what kinds of things will be expected of them if they want to pursue programming professionally. It’s also a nice reality check for students who have learned a little HTML and started to call themselves a programmer. I could give students a similar set of expectations, but having an external set of criteria such as the Joel Test speaks much more clearly to students. They come across as professional expectations, rather than just my classroom rules.
A few principles are more relevant to an introductory programming class than others. For example, programming students deserve a quiet working environment. This should be true in all classes, but having this listed as an explicit working condition for professional programmers carries much more weight than just hearing me as a teacher tell students to work quietly. Offering the right tools for learning to program makes students feel respected intellectually. In this class, this was as simple as letting students program in Linux, while most students in other classes use Windows. Every student in the class enjoyed using Linux. Most students were surprised to find that the internet runs on Linux, and they loved the chance to work in an environment other than Windows.
Everyone in programming class uses source control. At first this is just numbering files, but I introduce git as soon as students begin to create programs with more than one file. Even the practice of numbering files gives students more control over their work. Students make comments such as, “I could actually do this with my Word files in other classes, couldn’t I?” This growing sense of professionalism that students begin to develop makes them treat the equipment itself differently, and puts them in a position of helping students in their other classes use computers more effectively and more efficiently.
Students like the clarity of working from a spec in programming class. One common source of confusion in school is students simply not understanding their assignments. This simple issue leads to a fair amount of the minor behavior issues that contribute to a less respectful school culture than we would like to see. Working from a spec provides a clear process to avoid that confusion. Students are required to read their programming assignment, and then write a brief comment at the beginning of each file, explaining what that program is supposed to do. This process clarifies understanding before students begin to code, setting them up for success when they begin to code. This clarity helps students stay focused throughout a class.
Students love code reviews
To give students a sense of what it would be like to work in a professional programming environment, I instituted daily code reviews. I was not sure what students would think of sharing each other’s work on a daily basis, so I was pleasantly surprised to find out how much they enjoyed it. The more advanced students loved it because they got to show off their work, and got feedback on big-picture issues and syntax-level details. It brought out user-interaction issues that are difficult to sort out on your own, and helped keep all the pieces of programming in perspective. Students who were working more slowly also enjoyed code reviews, because they got positive reinforcement and could rely on the expertise of students who had already completed the programs they were still working on. At the end of the session, some students actually wanted more code reviews, and asked if we could do daily presentations in other classes as well. As much as students enjoyed code reviews, they did not want them to take too long. This made students want to be respectful and courteous to each other from the beginning of each class.
Students love beginning to identify as hackers, in the appropriate sense
One of the first things I teach every new student who is interested in technology-related fields is the correct meaning of the word hacker. Very few students know this meaning, and most of them make the same old comments about friends “hacking” each other’s facebook accounts, and people breaking into systems. I have no ear for this, and walk away from any student who goes on about it. But most students are curious about the actual meaning of the word, and are fascinated by stories such as Richard Stallman getting frustrated at not being able to hack his printer at the MIT lab, and learning about sites like Hacker News. As students begin to engage in the positive aspects of hacking, they feel connected to a really strong intellectual culture. Most students are not really hackers, and they become comfortable hearing that. But they start to understand what it would take to be one, and they begin to develop a sense of what it takes to excel in any field, technology-related or otherwise. The common understanding of what a hacker is centers around disrespectful behaviors; real hackers are quite respectful of themselves and others.
What does all of this mean? For one thing, we can always use more arguments for why programming classes should be offered in public schools. The positive impact of programming classes on school culture is not mentioned very often. Of course, you can’t just teach any programming class and expect students to treat each other well. You need teachers who get hacker culture, and who can communicate it effectively to students. Finding and keeping those teachers is an interesting challenge in itself.
It also means that the hacker culture has much to offer in terms of what good education looks like. Many of the best practices of the software development world carry over to education as well. There are many lists of guidelines for effective schools, but it is helpful to be able to look at school culture from a perspective outside of the insular world of education. It turns out that looking at education from the perspective of a well-run software development environment is a particularly effective way to spot inefficiencies in the school environment, and identify ways to improve it. Many of these improvements directly impact the level of courtesy and respect that students show on a daily basis.
I look forward to teaching more programming classes, and finding ways to bring meaningful aspects of the hacker culture into the school environment.