Skip to content

CS128

CS128 (Introduction to Computer Science II) is the second programming course in the Computer Science core curriculum, and covers fundamentals of object-oriented C++ programming.

Who Should Take the Exam

The CS128 proficiency exam is not for the faint of heart. It is considered to be the most difficult proficiency exam available. If you are already experienced with modern C++, you may be able to pass the exam. Otherwise, to pass the exam, you will need to learn modern C++ and basic data structures, and be able to implement solutions to programming problems quickly. You should only dedicate large amounts of time to studying for the exam if you have very aggressive (two years or less) graduation plans.

Also, note that the next course in the CS core, CS225 (Data Structures), has prerequisites of both CS128 and CS173 (Discrete Structures), so to get a benefit from skipping CS128, you must also pass the CS173 proficiency exam.

However, like all proficiency exams, there is no penalty for failing the CS128 proficiency exam, so if you're on the fence, take the exam.

Content Covered

A list of topics tested is available on the CS128 Proficiency Website. In recent semesters, CS128 has stopped covering several topics on this list, which students can probably ignore when preparing for the exam:

  • cpp-httplib library
  • nlohmann::json library
  • SQLite ORM
  • HTTP servers

Exam Format

The exam consists of a number of short-answer questions followed by 2-3 programming questions, which are at the level of weekly Machine Problems (MPs) in the course.

How to Prepare

Programming questions comprise the majority of your score, so you should focus on practicing C++ programming:

  • Implement common data structures (singly linked list, doubly linked list, binary search tree, vector) using raw pointers and smart pointers. Make sure these implementations use templatized containers that follow C++ best practices.
  • Practice implementing algorithms using the C++ standard template library (STL) and lambda functions, making sure you understand the lambdas you write.
  • Use the Catch2 library to test all the code you write.

Short-answer questions are programming-related, so the knowledge you gain from practicing programming should be enough to prepare you for short-answer questions.

Life After

If you pass the CS128 proficiency exam, it means you're a very strong programmer. CS128 will be very easy for you, so you should continue to CS225 (Data Structures), which will likely be easy for you too.

If you don't pass the CS128 proficiency exam, don't take it as a reflection of your skills: the exam is considered the most difficult proficiency exam. Your efforts to study CS128 material before the semester will still pay off, and the course will generally be easier for you than for students learning C++ for the first time.