These are our classroom practices and our pedagogical approach Computer Science education.


We believe learning to utilize computer science tools is an important way that students connected with and contribute to the world of practicing computer scientists. By learning to use tools that are commonplace in industry, academia, and open-source computer science practice, students are both more conneccted to the culture of computer science and more prepared to take one roles as computer scientists.

Technology Used Across Both Courses

  • Python
  • Atom Text Editor
  • Terminal, including Xcode Command Line Tools
  • git and Github
  • Jupyter Notebooks


The course utilizes a comprehensive meta-cognitive self-assessment as a guide for learning priorities and for learning assessment.

Assigning competence

Create practices by which students are seen as experts.

  • One useful practice that embodies this: when helping people from the queue, follow up helping a student by saying, “It looks like you understand this issue pretty well now. When I see another student having the same problem, may I send them to you for help?” That way, the student solidifies the understanding by teaching someone else, and gets to be an expert at that issue. You can then keep directing students to that expert for days.


It is very important that each student develop as an author of her code.

  • Teachers will never touch a student’s keyboard. Instead, sit with the student and guide her in what to do. It can be helpful to bring another laptop, increase the font size, and type out code for the student to copy. It’s also great to have portable whiteboards or writable desk surfaces, so you can develop pseudocode together that then stays with the student. (The only exception would be if there is some error at a deeper level than the student would be expected to know about, eg incompatible package versions installed.)
  • Students should never look at each others’ code. They may work on problems together, using pseudocode and diagrams. This is going to be a challenge, because pair programming might be very productive during labs and group projects.

Funds of knowledge

The idea that we will look at students as having lots of resources they can deploy in their learning (rather than viewing them in terms of their deficits). This also means we need to let go of the idea that we’re solely in the position of determining what’s worthwhile in CS. Our students are going to create things that are worthwhile and successful on their terms, not ours. We are going to support them, while also being warmly demanding. This is not a radical proposition, especially in CS: It’s such a new field that nobody really knows what CS is or what its boundaries are. If we’re finding ways of working that are effective, thinking about ideas that feel powerful, and making things that feel like they matter, then we’re doing the right thing.

Group Work

Small groups are an important context for high-quality disciplinary talk. When students get to choose their groups, they can take advantage of existing social relationships. However, this can create in equities (the strongest students cluster together) and can also bring social tensions into the classroom.

  • Our recommendation is to always assign seats and groups, change groups regularly (perhaps every lab), and allow students some private input (eg “I really don’t get along with X”).