Course Staff Application

Introduction #

Are you interested in becoming a course assistant for CS 341? If so, then you are welcome to apply for positions. Although we have specialized roles, there is always plenty of work to do and course staff often work on areas they did not start out doing. For now, please pick one secondary role, and up to 2 primary roles that sound most interesting to you, but do read through all the descriptions!

Roles #

All Staff

  • Lab and Office hours


  • Assignment Development
  • Honors (CS 199-341)
  • Infrastructure


  • Data Analytics and Research
  • Web and Coursebook Development

All positions require dedicated people who have a passion for teaching system programming. Those who submit a promising application will be offered an interview. We also want to be completely transparent about what we look in our applicants. We are not simply looking for A+ students. A good grade is neither necessary nor sufficient to be a good course assistant. We expect everyone on course staff to contribute regularly to Edstem, to help answer student questions. You must have a primary role to be considered and all staff participate in handling Office Hours and Labs, but secondary roles are optional. The reason we have secondary roles is so each member on staff has a few main responsibilities, and can operate knowing that other aspects of the course are being managed by people specifically tasked to do so. This lets each area of course staff get individual attention which enables visible improvements from semester-to-semester.

Things we look for in our application:

  • A passion for teaching
  • Systems programming aptitude (not just an A+ in CS 341)
  • Clear communication skills
  • Work well with students, especially those who are struggling
  • Ability to work well in a team

All Staff #

Lab and Office Hours #

Illinois Computer Science has a wide variety of talent, ranging from those who know as much as our instructors, to those who are still learning to use the terminal. At some point, almost all of these students come to office hours and lab sections to get extra help. Whether it be drawing figures on the white board or stepping through GDB, the fruits of an instructor’s labor are priceless. In fact, few things are more rewarding than helping a student understand and develop a passion for the subject you teach.

In lab section, you will be helping run lab activities, helping students out with the labs, and explaining concepts at a high level. During office hours, we have a team of staff ready and eager to answer student questions. You will be hosting your own round-robin office hours, answering questions and clarifying concepts.

Skills Required

  • Patience and empathy - Most of the time, you can fill the gap in a student’s understanding of the material just by remembering why you struggled with the material and what helped you understand it. However, some students might not get the material even after the third time you explain it to them. You’ll need to be patient and try different methods of explanation.
  • A friendly personality and demeanor - Students will most likely be stressed and upset after debugging for several hours and waiting on a long queue. A lot of this tension is easily alleviated if you approach them nicely. It is important to never appear condescending or annoyed.
  • Communication and teaching ability - Understanding is only half the battle to being an effective teacher. It helps to understand the material well and be comfortable with it, but you must be able to communicate the material well. You also have to be adaptable in the ways you explain things, since how you understand the problem might not be how your students best understand a problem.
  • Debugging - It should go without saying that debugging is a critical skill to have when helping students. Most bugs can be found by effectively using GDB, Valgrind, and print statements. You need to be able to understand edge cases, step through student logic, and narrow the search of the bug. Remember that we do not debug programs, but we give hints to where the program may be going wrong, as well as reinforcing core concepts.
  • Assignment knowledge - Students will mainly come into office hours needing help interpreting the documentation or debugging code. You must be familiar with the assignments before you an help students master them.

Expected Time Obligations

  • Team Meetings (1 hr / week) - It is important for everyone on staff to be on the same page, and for everyone to be present to make key decisions. Meetings also serve as a means for more experienced course staff members to give less experienced course staff members advice.
  • Office Hours (2 or 4 hrs / week) - It should go without saying that as an office hours assistant you will be hosting office hours. This is the time where you will put yourself on the queue and help students.
  • Lab Sections (1 or 2 sections = 1.5-3 hrs / week) - Most lab sections will run about an hour and twenty minutes. You are expected to have read the documentation already and at a high level know how to solve the assignment. In the bulk of lab time, you will be going around helping students with the assignment. At the beginning of the lab, you may do a demo on the projector and explain to the students what they have to do.
  • Edstem (1-2 hrs / week) - It is also important to answer questions on Edstem, since some students are too shy to come to office hours or ask you in lab section. Answering one question well on Edstem can potentially resolve a problem for the entire class.

Primary Roles #

Honors #

If you have a deep passion for systems and want to instill that passion in the course’s one-percent, then this is the position for you. You get to mentor highly talented and passionate students in a semester-long project of their choosing. Note: It is not required for you to have taken CS 341 Honors (CS 199-341) to work on Honors staff.

Expected Time Obligations

  • Team Meetings (1 hr / week) - It is important for everyone on staff to be on the same page. Meetings also serve as a means for more experienced course staff members to give less experienced course staff members advice.
  • Mentoring Meetings (1 hr / section / week) - Student meetings are to make sure that students are keeping up with their projects, and to help unblock them from issues. You wll have 1-3 sections per week.
  • Honors Section (3-4 hrs / week) - The honors section has weekly one-hour meetings, and you will be expected to have two or three one-hour meetings with your assigned groups. The meeting will primarily cover what happened this past week and prepare for the next week.
  • Lecture Development (5-10 hrs / week per lecture week) - You will be helping out prepare and deliver part of a lecture to honors students. This lecture needs to be well-documented, well-researched, and expertly given. Not every Honors CA will be helping out with the lecture every week, but the weeks you choose to teach spike the time spent on development.


  • Mentoring Ability - Students need guidance in the honors section, and it is your job to provide that! You will help students with their projects. Since topics vary widely, it’s useful to be a jack-of-all-trades with respect to system programming topics, and you should have an excellent ability to advise and oversee groups of students.
  • Deep Systems Programming Knowledge - These aren’t surface level lectures. You need to either have or be willing to put in the time to understand these topics at an in-depth level. Think of it like taking an oral examination for a PhD. You need to know the topics you help out with in the utmost detail.

Assignment Development #

Machine Problems and Labs are the meat and cheese of any programming course. These assignments are supposed to be rigorous enough so that students can fully apply their knowledge of systems, and interesting enough so that they have a memorable experience in the course.

Writing assignments involves coming up with a meaningful tasks where students can master the learning objectives. Writing these assignments involves a lot of time spent drafting on white boards and bouncing ideas around. As you are writing these assignments, you will have to ask yourself, “What am I trying to have the students learn?”.

Finally, with any good assignment comes excellent documentation that is clear, concise, contextual, and correct. Also, the documentation should mirror what we are looking for in the autograder. One huge shift you’ll have to get used to is writing code for an assignment must be perfect or near-perfect. Instead of passing our ~30 test cases, you’ll have to be resilient against 300 students’ edge cases.

Skills Required

  • Firm Knowledge of C - Unlike lab and office hours, you will be doing a lot of coding for MP development. It is much harder to write and develop an MP than it is to solve an MP. You will not be provided any utility functions, since you are the one creating them. Everything that was out of the scope of the course is now fair game as a MP developer.
  • Solid Understanding of System Programming - As an assignment developer, you must really understand the things you write, since writing a bug in your MP is equivalent to writing 400+ bugs that get deployed to students. Any race conditions or memory leaks left in the provided code you write will be deployed to 400+ students. In class, you only need to get the test cases working, here you need to make sure that your code is resilient against all test cases, or you will end up with a bug in the assignment.
  • Extensive Knowledge of Linux - As an assignment developer, you will need to be comfortable working in a Linux environment beyond a level that was required as a student. You may need to write makefiles, be prepared for obscure kernel conditions, understand process groups, and so on. Don’t worry, we can teach you many of these!
  • Goal-Driven - You will need to be efficient with your student’s time. You need to set clear learning goals for your students. It is very bad to waste your student’s time with an MP that is not relevant to the material being taught in the course.
  • Team-Oriented - If you don’t mind the buzzword, we have a team of assignment developers that work on each assignment. You will need to collaborate with them in order to get your ideas and code across pull requests.

Expected Time Obligations

  • Team Meetings (1 hr / week) - You will need to meet with the rest of the assignment development team frequently. This is so that everyone is on the same page on what the MP is supposed to teach its students. This is also an excellent time for the team to separate out work for a divide-and-conquer strategy, since you will constantly be up against a deadline. These meetings will also be an excellent time to learn from course staff more experienced than you.
  • Development and Testing (varies) - You will need to develop meaningful assignments, and doing so takes a lot of effort. Even after the team has written documentation and a TA solution, you will need to test the provided code thoroughly. This is to ensure the assignment is solid and understandable, and hopefully catch any potential bugs.
  • Addressing Student Concerns (varies) - It would be a miracle for an assignment to be deployed without a problem, but the chances of this happening is slim to none. The team will have to accommodate for bugs in the provided code and ambiguity in documentation. This is also an important time to take student feedback so that the team can improve the assignment for future semesters.

Infrastructure #

We need a lot of code to support our code. Welcome to infrastructure, where the autograder is developed along with tools and scripts that the rest of the staff uses. You will be working on challenging problems in the domain of distributed systems by working on our course’s very own Broadway-on-Demand auto-grader. We are always looking to add more features, and make this tool easier to use for students and staff.

We have other projects that we are taking off the ground next semester and aren’t directly related to the above, but need help.

Skills Required

  • Programming ability - You will most likely need a variety of skills. A little bit of Web development, and some knowledge of scripting knowledge (Python, shell scripting etc.). You also must have an aptitude for picking up skills independently as projects mature. In addition, we plan the software structures we build, and keep up with maintenance. Imagine this as a good combination of software engineer and project manager.
  • Self-Directedness - Most of the work will be self directed. We will have a few meetings, but you will need to deliver a polished project by coming up with specifications, executing based on the best possible technologies and maintaining the project. You can receive help, but most of the work and success is on your own.
  • Working in a team - Although most of the work is self directed, a few projects involve extensive collaboration either synchronously or asynchronously with other course staffs. You’ll need to make sure that most of your work is readable to people who have not looked at your code as well as explainable at a high level to people who are just trying to understand the project.

Expected Time Obligations

  • Varies by project

Secondary Roles #

Data Analytics and Research #

You will be doing exploratory data analysis, creating visualizations, and mining patterns from all of the data we collect as course staff. This roles is very open-ended, but you will get direction from senior staff members. Past projects have involved creating network visualizations for lab assignment partners, generating lab partners, graphing performance on assignments over time, studying factors that lead to student success in the course (such as commit timestamps, VM logins etc.). You will have the opportunity to work with Prof. Lawrence Angrave on research projects, which will look great on a graduate school application.

Skills Required

  • Programming skills - Python, R, MATLAB/Octave, Scala, and JavaScript are the dominant programming languages in data analysis and machine learning today. Experience with data analysis packages, such as pandas, matplotlib, numpy, d3.js etc. is a bonus!
  • Statistics - Knowledge of basic statistics is invaluable especially if you are attempting to create a model, or estimate a distribution.
  • Research experience - Past research experience, especially if it involved quantitative analysis will be extremely relevant for the tasks you will be performing.

Expected Time Obligations

  • Varies by project

Web and Coursebook Development #

For people interested in web development and technical writing. This will involve updating content on our website on a regular basis, contributing content to and maintaining our coursebook. Our web app suite including grade viewer, Broadway-on-Demand, and lab attendance platform. You will be adding features or fixing issues with these, as part of your role.

Skills Required

  • Programming skills - Proficiency in HTML, CSS, JS is required. Proficiency in LaTeX is recommended to be able to effectively work on our coursebook. Our web apps are built with Flask for Python, and the Bootstrap framework, with MongoDB used for data persistence.

Expected Time Obligations

  • Varies by project