Last updated on
Final exam study guide
Hi all,
Congrats again on completing a full semester of CS-214 — you’ve all gone a long way! Now the last step is the final exam. This post is to help you prepare: a reminder on the shape the exam will take and what topics it will cover, some tips on how to study, and some additional materials.
But first: EPFL’s in-depth evaluation for CS-214 has recently opened (this is later than other courses to not overlap with our internal polls). It’s available on the overall Moodle homepage after logging in (but before opening the CS-214 page) and in the EPFL app. These evaluations are critical for next year’s students, so… please submit your in-depth evaluation!.
Exam contents
The final lasts three hours, on a computer. It consists of a collection of problems similar to the ones we’ve solved in exercises and labs throughout the semester. The exam will be slightly longer than most people can complete in 3h — this way if there’s something you don’t know how to do, you can still get a good grade.
You will have access to Scala documentation, the lecture notes, the exercises and their solutions, the labs and your own solutions to them, and any other materials we’ve uploaded to the CS214 Moodle page or posted on the course website. Other materials are banned; they will be either blocked or monitored. You may not upload additional materials to Moodle in preparation for the exam.
Everything that we’ve seen in starred exercises, in lecture, or in labs is on-topic for the final. This includes topics covered in the second half of the course, such as futures, contextual implicits, monads, etc. There are two exceptions:
-
You will not be tested directly on version control, as it was already graded in the unguided lab (we don’t want you to struggle with command line issues in limited time; we hope the lectures were useful and we encourage you to train on your own and use Git or other VCSs in your future classes, but there won’t be points for Git on the exam). We do expect you to know the basics, though (including cloning from a Git bundle!).
-
You are not expected to know how to use Stainless. Proofs and code-reasoning are on-topic, but the Stainless tool is not.
How to prepare
Revisit course materials
The best way to prepare is to revisit the materials that we’ve already given you:
-
If you did poorly on the midterm, start there! It will be hard to do well on the final if you haven’t mastered the concepts that we tested in the midterm. Review the solution that we posted and your own mistakes and redo the exercises on your computer.
-
For topics that you feel you don’t understand very well yet, I recommend an active review of the lecture recording: watch carefully, and make sure that you don’t let anything slip. It can be helpful to do this in pairs, so that you can discuss unclear points and help answer each other’s questions.
-
For topics where we posted companion code, following the lecture along with the code is most useful (e.g. the signal processing lecture has a detailed writeup with all the code and some additional exercises).
-
For topics that you are already reasonably comfortable with, I think it’s best to skip the lectures and instead invest in studying the exercises and labs, especially the ones you found hard. A good way to train is to ask yourself how you may have written better code: revisit your old exercise and labs solutions with what you know now, and think of what may have been done differently. If there were parts you remember finding very hard, redo those.
The syllabus is now complete, so I recommend going through it week by week, and checking off all the concepts, topics, and exercises, for every week. I mean this literally: print it out, and highlight or check off everything, page by page.
Know your tools
In addition: make sure to know your tools. All of you have experienced that advanced tools like the IDE (VScode / Metals) and worksheets can be brittle: we won’t be able to help you on the day of the exam if they crash, and it shouldn’t matter to you. You must be able to fix these issues yourself, and to work with only SBT if needed. “Metals/VSCode didn’t work” will not be a valid reason to get your grade re-evaluated. Familiarize yourself with the troubleshooting guide and the computer-exam logistics now, if you haven’t yet.
Additional materials and previous exams
Once you’re done studying, we suggest exploring the following materials.
Start with this additional callback, focused on laziness:
Then study previous-year exams. We recommend attempting them in real exam conditions: set enough time aside, and work on them in one go:
- Fall 2023a (20m reading + 2h thinking and coding)
- Fall 2023b (20m reading + 2h thinking and coding)
- Fall 2024a (in-person dry run: 30m reading + 2.5h thinking and coding)
- Fall 2024b (online dry run: 30m reading + 2.5h thinking and coding)
We recommend that you attempt all of these without advanced IDE features: use only SBT. Turn off Metals, don’t use worksheets, don’t rely on auto-completion, and disable in-editor error highlighting. This will force you to make sure that you are not thrown off if you encounter IDE or worksheet issues during the final.
Beyond these, you could consider reading the scaffold code that we provided in labs (for example the implementation of the webapp library!), doing practice problems on engineering interview websites, exploring some of the many suggested unguided callbacks, and even extending your own webapp!
Final exam solutions
Do not read a problem’s solution before solving (not just attempting!) that problem. Reading a solution provides very little value if you haven’t come up with your own solution first. If you’re stuck on a problem, either redo relevant exercises, or ask for a tip on Ed.
I understand, I'm just here to check my solutions
Really?
Really.
Great! And did you submit the in-depth evaluation poll?
Yes!
Really?
Really!
Thanks! Here are the exam solutions.
Conclusion
Good luck with your studies, and with your other exams! Please remember to fill in our course poll