Discover how to enhance Systems Programming assessments and boost learning objectives.
Articles
June 27, 2024

Course Spotlight: How to set up a Systems Programming course

In 30 seconds...

Learn all about what it takes to set up an engaging and effective Systems Programming course, with insights from CS Undergraduate Director, Kevin McDonnell, from Stony Brook University. We discuss assignment types, engagement tips and more!

Designing a systems programming course presents unique challenges and opportunities. We spoke with Kevin McDonnell, a seasoned educator from Stony Brook University. His course structure and pedagogical insights offer a compelling blueprint for educators aiming to navigate this field.

Understanding the Course Structure

McDonnell's course at Stony Brook encompasses two critical components: systems programming, and computer organization and architecture. The overarching learning objectives are designed to equip students with foundational skills, such as the ability to:

  • Determine the Machine level representations of primitive and structured data types.
  • Determine the correspondence of program constructs written in C and in Assembly Language.
  • Implement non-trivial algorithms and both static and dynamic data structures in the C.


"These are the main things that we emphasize," McDonnell explains. These objectives not only underscore the importance of low-level programming proficiency but also emphasize the practical applications in real-world system development.

Assignments and Assessment Strategy

The course contains five assignments: four in C, and one in Mips Assembly language. Kevin starts by covering the basics of C, moving on to pointers and dynamic data structures, and ending with Assembly, so students have some exposure to low level programming. Assessments are predominantly formative but take place over the course of two weeks. These larger projects give students the opportunity to grasp the content of the course.

Craft effective computer science courses with CodeGrade today!

How students can master Systems Programming

McDonnell stresses the importance of attention to detail. He explains, “one of the ways that the students will succeed in this class is by being a little bit more attentive and more deliberate in writing their algorithms and testing them. They can't really rely so much on the runtime environment to tell them that there's some logical error in their code.”


Alongside this, using the right resources is another key way for students to progress in this field, especially memory. “It's very easy to just say ‘I’ll just throw another gigabyte of memory at this problem.’ But that's not good programming discipline. A deep understanding of memory management and other system issues will undoubtedly help them to become more successful software developers” he notes.


After students complete Kevin’s course, they can take Systems Fundamentals II. This also uses C, but the focus is on Linux APIs, including making system calls, thread synchronization and more, which is even more complicated. Getting students familiar with C is essential to take the next course. Kevin also uses tools like CodeGrade to give students instant feedback “In fact, that's another reason why I like CodeGrade for giving frequent feedback. In the past when this course was entirely in assembly language we would have students make a small mistake and wind up with a zero for the assignment.”

With continuous feedback, Kevin can administer more unit tests to give students more practice opportunities, something that is essential to master programming.

How to engage your students

Kevin employs a variety of strategies to keep his students engaged and motivated. One effective approach is asking questions that challenge their understanding, especially when it comes to a computational problem or a bug in some code. Also, he noticed that students are always interested in discussing assignments in class, which can help address any issues.


Another technique comes from exploring the ‘why’. Why is it important to know how systems are working? Why is this a valuable skill to have? Demonstrating this value to students gives them a sense of purpose to their learning. This can be particularly important for required courses, especially when there is a lot of interest in other areas (there are subjects other than Artificial Intelligence!).


Kevin also creates unique assignments, another great way to capture the attention of students. Authoring assessments gives educators the opportunity to incorporate students’ interests directly into their learning. Including humor goes a long way too!


In introductory courses, Kevin uses peer instruction, which he is looking to bring into his Systems Programming course. Peer instruction is a teaching method where the instructor gives a brief lecture, followed by a question related to the topic. Students first answer the question individually, then discuss their answers with peers. After the discussion, they submit their answers again. This process encourages collaborative learning and deeper understanding.


These approaches not only make the material accessible but also cultivate a deeper appreciation for the intricacies of systems programming.


How can educators prepare for their course?

Kevin gave some great advice for any educators starting their teaching career. “You're constantly working against lots of short-term deadlines, so a high level of organization is really important”, he explained.


If you can master organization, you have more time to engage your students, another area that Kevin suggests educators to keep in mind. Learning a new subject, especially one as different (and frustrating) as programming, can be intimidating. Kevin notes that teachers should “try to be as approachable as you can for the students so that they're encouraged to come to office hours when they need help”.


These insights underscore the importance of creating a supportive learning environment conducive to both academic excellence and professional growth.


Conclusion

Designing an effective systems programming course requires a delicate balance of structured learning objectives, innovative teaching methods, and robust assessment practices. Kevin McDonnell's approach at Stony Brook University exemplifies these principles, offering a comprehensive framework that prepares students for the dynamic challenges of modern computing.

Continue reading

How to automatically grade SQL assignments

Learn how to set up SQL assignments with CodeGrade for efficient assessment and feedback.

Course spotlight: Empowering Scientists at University of Michigan

Discover how Sarah Veatch’s scientific computing course at the University of Michigan equips students with Python programming skills to solve real-world scientific problems.

Join our AutoTest V2 Webinar: More Efficient Grading!

Join our AutoTest V2 webinar on October 31st to discover faster grading, instant feedback, and customizable assignments in CodeGrade.

Our LTI Advantage Certification from 1EdTech!

CodeGrade is now LTI Advantage certified by 1EdTech, offering secure and seamless LMS integration with features like single sign-on, automated grading, and streamlined data sharing.

Sign up to our newsletter

See how CodeGrade can transform your courses today!