The Students Developing Software Team

One of the best (and most fun) parts of this job is the opportunity to work with students to accomplish incredible things. I manage the Students Developing Software (SDS) team, which maintains four ongoing software projects, with the bulk of development done by students. I've included brief descriptions below; if you're a student interested in joining the SDS team, please take a look at the Applying for a position section at the bottom of this page.

SDS Logo

SDS Team Goals

  1. Develop and maintain high-quality software used for undergraduate education in the Department of Computer Science.
  2. Provide undergraduate students the opportunity to work on large-scale software projects and to develop technical, communication, and organizational skills, and self-efficacy.
  3. Build a student community that is supportive, inclusive, and fun. A community in which we all feel comfortable taking risks and making mistakes, because we trust each other to be invested in everyone's success and well-being.

Projects

MarkUs (GitHub)

MarkUs is a web application that allows students to submit work and TAs to mark and annotate that work electronically. MarkUs simplifies and streamlines the administrative tasks surrounding assignment grading, making it easier for TAs to give high-quality feedback, and instructors to review the grading while it is in progress. It is used by several courses within the Department of Computer Science and by a few other departments at the University of Toronto. This project was started by Karen Reid in 2008.

Courseography (GitHub)

Courseography started as an afternoon doodling a graph to display prerequisite relationships for the courses in the department, and has grown into two interactive web tools for helping students navigate program, course, and timetable information to select their courses. This project would not have been possible without the immense work of Ian Stewart-Binks, an undergraduate student in the department who worked with me in the initial phase of this project.

PythonTA (GitHub)

PythonTA (or PyTA for short) is a Python program which uses static code analysis to help students find and fix common coding errors in introductory Python courses. Python already has great static analysis tools like pycodestyle and pylint, but these tools do not necessarily have the most user-friendly format. PyTA has two central goals:

  1. Statically identify common coding errors by using existing linting tools and building custom linters (e.g., as pylint plugins).
  2. Present beautiful, intuitive messages to students that are both helpful for fixing errors, and good preparation for the terser messages they will see in their careers.

This tool is currently used by thousands of students each year in CSC108, CSC110, CSC111, and CSC148.

Since its creation, PythonTA has since expanded to other forms of code analysis and dynamic instrumentation to support learners, including: assertion-based runtime checks of type contracts and function preconditions; producing loop and recursion tracing tables; and visualizing control flow graphs.

Rough Memory Models (GitHub)

This project is a Javascript library that creates memory model diagrams for Python code, in the style of our first-year computer science courses. We have used this project extensively in the CSC110/111 Course Notes.

This project owes its creation to three Computer Science undergraduate students: Shannon Komguem, Mimis Chlympatsos, and Utku Egemen Umut.

Applying for a position

I accept students of all levels of experience and interests for joining the SDS team, including first-year students! A central part SDS's mission is to give students the opportunity to work on a larger-scale software project than they typically see in their first- and second-year courses and one-shot side projects. Most of my students join the team on a volunteer basis, committing 8-10 hours per week to working on one of these projects. I do sometimes accept senior students to work on one of these projects for course credit through a CSC494H1/CSC495H1 CS capstone course.

If you are interesting in applying for a position, please submit an application to me by email at david at cs dot toronto dot edu that contains three documents:

  1. A cover letter explaining which project(s) you're interested in working on and why, and what you hope to learn from this experience.
  2. Your unofficial academic transcript (from ACORN).
  3. A resume.

I recruit new students for each school semester (Fall, Winter, Summer), and expect a commitment for the full semester. All positions require in-person attendance at weekly meetings. Students are welcome to stay on for more than one semester, and plenty choose to do so! I typically accept applications one to two months before the start of each semester, and review applications and conduct interviews one month before the semester.