CSC 453: Compilers & Systems Software
Working with a Group for the Programming Assignments
Motivation for Groupwork
Group work skills are desired in industry and academics, but students often dread working in groups [Student culture vs group work in computer science, Student satisfaction with groupwork in undergraduate computer science : do things get better?]. In compilers working with a group helps in that the group can become a study group to help understand concepts, groups often write better code that is easier to understand and read, working with a group exercises skills such as effectively breaking up a larger problem and sharing a repository, and practically a group can help with the amount of work involved in writing a compiler In this class, the programming assignments that build the compiler will take most of your time to complete, and it really helps to share some of this work with others. Often in compilers, initially learning the concepts such as how to add a new token to the lexer takes a bit of time. However once you know how to do it, the repetition of doing it for every token is best shared with a group.
Groupwork Logistics
You may choose to be in a group of any size between 1 and 5 people. No matter what size group you are in (yes even those who decide to work by themselves), at least one week before PAx is due you will need to fill out the group declaration form (coming soon) AS A GROUP.
Groups cannot change once the group declaration form for a particular programming assignment has been filled out. However, you can change groups for each PAx.
Each group will only submit one assignment and the README will need to repeat who is in the group. The grade for the assignment becomes the PAx grade for each member of the group. Each PAx is only 3% of the total course grade. If things go poorly in your group, your overall grade will not be impacted much and you can figure out a new group for the next assignment.
The programming assignments are primarily intended to be learning experiences. Each student will still have to understand all of the concepts, and how their group compiler works. Eight-five percent (85%) of the course grade is due to individual assignments and exams.
Suggestions for Breaking Up the MeggyJava Compiler Project
Here are some ideas for breaking up the programming assignments:
- We strongly recommend that each group member focus on all parts of the compiler that need modified for a single programming language feature at a time. This way each group member learns how to add any needed new tokens to the lexer, new grammar rules to the parser, new elements to the AST, new type checking rules, and new code generation for a feature. We will discuss in class and/or discussion section how this might work in terms of code.
- Group members could have different roles such as lexer implementer, parser implementer, type checker, code generator, tester, and code reviewer.
- Each group member could do the assignment on their own and then the group could pick the best one based on how well each one passes test cases and might fare in the peer reviews.