CS5416: Frequently asked questions (FAQ)

Help!  The course-enroll system is blocking me from signing up!

Just add yourself to the wait list.  Then the CS MEng office will move you into the class, although maybe not the same day.  Don't stress about the enrollment caps shown -- the department often adjusts those upwards during registration.  You do not need any kind of special permission from the instructor, no matter what course enroll may claim in the pop-up window. 

The underlying context is that Computer Science uses a prioritization scheme for large classes. We are forced to use this approach because we have such a large major, and yet our courses are also popular with students throughout the university.  If we don't prioritize, our majors might not be able to get credits required to graduate.  Prioritization allows us to ensure a smooth process for everyone. 

At present the class runs in a bigger room than the demand requires.  Most people (from any major at Cornell, not just CS) should be admitted into the class within a day or two. 

When will I know if I can get in?

We process the wait list continuously over a two week period.  If the class is below the cap, we admit more people.  Once the class  reaches the cap, you may need to wait a little longer.  But don't stress about the enrollment caps shown -- the department often adjusts those upwards during registration.  Also, keep in mind that in most Cornell classes, 15% or so of the students drop the course quickly, so at any given size, a certain number won't stay in the class.  As they drop, seats open up, and you can get in.

The smart strategy is to stay on the wait list, attend the class, and do the homework.  This way you'll keep up with the students who have already been admitted. Contact Megan Gatech in the CS ugrad laboratories if you have additional questions or concerns.  Worst case, you can always sit in on the class as an online audit (Cornell will not all in-person auditing, but all of our lectures and recitations will be available by Zoom).  You do not need permission to attend via Zoom even if you have not yet been admitted to the official registrar list of attendees.

If you join late, we do not offer any kind of accommodation for catching up.  So you are welcome to hang around waiting to get in, but you still need to keep up!

I am a CS Major.  Can I use CS5416 to satisfy the systems requirement?

No.  To satisfy that requirement you MUST enroll under CS4414.

What about the practicum requirement?

No.

Will my programming (and my object oriented coding experience) be adequate?

When a student struggles in CS5416, it invariably turns out that they really weren't very comfortable with object oriented Java programming or some similar language and had relatively little prior coding experience.  Sometimes it turns out that they never took an architecture course (CS3410) or learned topics like programming in C, pointers, memory allocation, threads and synchronization.  We do require that background for anyone enrolling in CS5416.  You are not required to have gained it at Cornell.

How do CS4410 and CS5416 really differ?  Would it make sense to eventually take both?

CS5416 puts more emphasis on the project, and has a larger and more complicated project that uses ideas common on cloud platforms like AWS and Azure and Google Cloud.  CS5416 students learn this content in the Friday session, which is required and differs from CS4414's Friday sessions.

You are not permitted to take CS5416 if you have taken CS4414, so the second part of this question has a simple answer: "No."

How do CS4410 and CS4414 really differ?  Would it make sense to eventually take both?

Although there definitely is some overlap, it is actually a lot less than you might think, and we do expect that students who enjoy building systems might want to take both.  CS4414 is centered on a form of abstraction that views the computing hardware as a tool, and teaches that you can really control "everything" and even do so when code ends up split into more than one module, each running in a different setting.  Our choice of C++ and our emphasis on effective use of Linux as a tool for problem solving are really secondary to this big goal.  There is a primary focus on getting the most performance from your system. 

Thus, you won't need to learn how to build an operating system in CS4414.  The CS4414 student is trying to become a superb developer who uses the hardware and the operating system as powerfvul tools to solve practical problems.   In contrast, CS4410 is all about doing a deep dive and really learning exactly how operating systems work – a deep internals perspective. 

The main overlap arises in a few lectures that look at concurrency control for threads, but those are reduced in length these days because we have started to require CS3410 and it covers that content too.  There is also some overlap when we look at caching strategies.  But this adds up to just a few lectures out of the whole semester.  On both topics, CS4414 is asking “how can we use these primitives safely?” In contrast, CS4410 also develops the underlying theory, how the kernel implements the primitives, and develops rigorous correctness proofs.

Can I take CS4414 without doing the programming assignments? 

No, that wouldn't make sense and we can't permit that.  CS4414 teaches C++, and you really need hands-on experience to learn a new language.  The homeworks are an integral aspect of the course, and our exams include questions about coding in C++.

I don't know C.  Will I be at a disadvantage?

This is a prerequisite (CS3410 is in C).

I really need this class to graduate but I'm not excited about the coding.

In this situation, CS4410 is probably the wiser choice (even if that forces some restructuring of your schedule).  CS4414 is harder than CS4410 because of all the programming assignments, and if you are only trying to get a requirement out of the way, you might be signing on for more work than you realize.  That becomes a formula for falling behind and doing poorly in the class.

The timing of this class is a problem for me.  Can I skip the lectures and just watch the vidoes?

No, not even for the Friday sessions.  Anyhow, old videos from CS4414 and CS5412 will not match the 2025 lectures.  And we won't have new videos available in fall 2025.

Does industry use C++ 23?

The bottom line is that modern industry uses every imaginable programming language.  But C++ 23 is a major programming language, used heavily at Google, Facebook, Microsoft, Oracle and many other big companies that work at the cutting edge.  None of them requires C++ 23 experience except, perhaps, for candidates to work in their systems development teams.  But all of them view C++ 23 as one of the most important "power user" programming languages available today. 

Why not use Rust?

At present, Rust is popular in industry but much less widely used than C++.  We did look closely at Rust and have a lecture on how it compares with C++ 23.  It is not as awesome as people might expect (for example, it is impossible to implement a double-linked list in Rust without using unsafe code).  Our real concern is that Rust blocks you from some kinds of optimizations possible in C++ 23.

I am unable to attend the required recitation in person.  Could we consider streaming it?

You won't be able to enroll if you cannot attend the recitations.  Cornell is not permitting us to use Zoom this year.