This was an enjoyable and interesting course. The TAs were friendly and helpful. They answered questions quickly on Ed and held weekly office hours (though not many people attended them) to answer questions live or to discuss questions posed on Ed. Overall, the course filled in a lot of gaps in my knowledge of compilers though there is still a lot more depth to the material than what was explored in the course.
I'd recommend this to anyone interested in the subject, though if you took an upper level (4xxx level) compilers course you may not find it as satisfying. If you only had a lower level compilers course in your undergraduate program or none it will introduce you to the subject or expand your understanding.
The course consists of a four-part project, four homework assignments, and the final exam.
Exam:
For me, this is the weakest part of the course. It is one cumulative final exam with material drawn from all the readings, homework, and lectures. This made studying for it difficult as a lot of material was not fresh in mind after wrapping up the project. Studying the homework assignments helps a lot but there's still a lot of material to review.
I'd suggest that they split this material across the semester with multiple graded quizzes or exams to make it easier to prepare or at least reduce its weight in the final grade.
Homework:
The homework assignments were challenging but followed the book and the lectures. Three weeks were available to complete each set which was enough time. Don't procrastinate on them, they can be tedious if you do them entirely by hand and you may need to reread some of the book or rewatch lectures to understand the tasks. They also overlap with the projects for their release and due dates. Try not to focus on the homework to the exclusion of the project, it'll eat up your time. To prepare better for the exam, I'd suggest reviewing the completed homework assignments every few weeks.
Project:
The project is completed in either Java or C++. I chose C++ as I have more familiarity with it (professionally, academically, and for hobby programming).
Each phase of the project was given three weeks except for the last which ran for five weeks. I tracked my time and spent about 10 hours on the first phase, 20 hours on then next two, and 30 on the last phase. Those weren't perfectly focused hours, but a rough upper bound of how much time each took for me.
As mentioned in other reviews, no starter code was supplied. At some point they provide an ANTLR grammar file that can be used instead of your own in case you had issues creating it in Phase 1. However that's just barely enough to get started on the later phases. Each phase builds on the prior phases so the structure of your code is important. Poorly structured code will make the next phase harder.
The ANTLR book is a good resource, but it is slightly outdated. It will lead to subtle errors or grammars that don't work if you rely entirely on the book, check out the online documentation for more current documentation.
They offer unlimited submissions to Gradescope, I recommend taking advantage of that. For Phases 2 through 4 I leaned heavily on it to test my code and incrementally develop my solutions. I got my program working and then refactored it using Gradescope and a local test suite to verify my changes didn't break anything. This helped a lot in Phase 3 and Phase 4, I didn't have to change my old code except for a few edge cases that hadn't been caught in earlier testing.