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 that we created during the winter break based on your feedback and private posts.
But first, speaking of feedback: EPFL in-depth evaluation are now open for CS-214 (this is later than other courses to not overlap with our internal polls. They are available on the overall Moodle homepage after logging in (but before opening the CS-214 page) and in the EPFL app (note: this is different from the CS-214 detailed poll!). These evaluations are critical for next year’s students, so… please submit your in-depth evaluations! (You will need to do so before you can access some of the additional training materials.)
Exam contents
The final lasts 2h45 minutes, on a computer. It consists of a collection of exercises and mini-labs similar to the ones we’ve solved in exercises and labs throughout the semester. The exam will be a longer than most people can complete in 2h45 — this way if there’s something you don’t know how to do, you can still get a good grade. (Some of you got scared by last year’s final grade distribution: keep this in mind if you look at it! Your predecessors did very well in the end.)
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 are not allowed to 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 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).
-
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
The best way to prepare is to revisit the materials that we’ve already given you. The syllabus is now complete, so I recommend going through it week by week, and checking off all the concepts, topics, and exercises. Then:
-
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.
In addition: 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.
Additional materials
Some of you requested additional materials to train, so we have produced three sets of additional materials to help you. All of these are completely optional: we made them because some of you asked. If you are confident on the corresponding topics, you can skip all of these! Note that some of these are not visible on Moodle until you fill in the EPFL eval (or until you click the box saying that you did so… but please do fill it!)
-
First, last year’s final exam problems:
- Fall 2023 Final Exam (note that the exam was intentionally too long to complete in the allocated time, to let you focus on the topics you’re best at).
-
Second, a new exercise set and a new lab, on the two topics that came up the most often in student feedback and private Ed posts:
- A new exercise set on data structures
- A new lab on futures (linked to on Moodle)
-
Third, some additional miscellaneous resources:
- Two more callbacks:
- Find, with lazy lists (linked to on Moodle)
- Boids, with parallelism (linked to on Moodle)
- Two new 🔥 exercises:
- Two more callbacks:
We recommend that you attempt to do the futures lab (Gitstats
) with only SBT. Turn off Metals, don’t use worksheets, don’t rely on auto-completion, and disable in-editor error highlighting (I promise, it’s quite feasible! That’s how I did the webapp engineering lecture, for example). 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!
Conclusion
Good luck with your studies, and with your other exams! If you found this guide useful, please do submit the in depth evaluation! Your comments are extremely valuable for designing the next iteration of this class (and for my own annual career evals 🥺).
You can take the poll here: https://moodle.epfl.ch/.