|
CS4414: 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 Ugrad office will move you into the class. 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 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 CS4414 to satisfy the systems requirement? This is a question related specifically to the CS major. The CS major includes a requirement that you take a systems course. For many years, only CS4410 was offered as a way to satisfy the requirement, hence CS4410 was effectively a "required course" that every CS major needed to take. That rule has changed, and the change is retroactive to Fall 2020. CS4414 can be used to satisfy the systems-area course requirement for CS majors. Thus, CS4414 is now available as an alternative to taking CS4410. If you took CS4414 in Fall 2020, and received an acceptable grade, you have satisfied the systems-area course requirement. What about the practicum requirement? Again, this is a question related purely to the CS major. Every student in the CS major must take a 1-credit practical course -- a "practicum" -- in which they are able to show mastery of coding by developing a substantial software system. One of the possible practicum options is CS4411, which is really tied strongly to CS4410. When you take CS4411, you must either have already taken CS4410, or be taking CS4410 simultaneously. CS4414 does not satisfy the systems-area practicum requirement. Moreover, CS4414 cannot be used the prerequisite for CS4411. Thus, if you want to have your practicum be CS4411, you will still need to take CS4410 whether or not you take CS4414. Will my programming (and my object oriented coding experience) be adequate? When a student struggles in CS4414, 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. Proficiency in a programming language includes being able to solve programming assignments (this may entail tasks such as reading data from files, building data structures in some way that corresponds to the input, then executing non-trivial logic, and then writing output). You need the ability to understand such a task without step by step guidance, and must be comfortable designing the solution, implementing it, and testing carefully. So if this doesn't describe you, you just aren't ready for CS4414 yet. For example, you've probably played Sudoku games in the newspaper. Could you write a Sudoku solver in Java, using objects to represent various aspects of the game state, reading the game itself from an input file in a sensible format and then printing the input and the solution side by side formatted to look (more or less) like the "yesterday's solution" the newpaper prints? If you can do this in your favorite language that would be a pretty encouraging indicator that your coding skills won't be a problem. Sudoku won't really test your object oriented computing skills, but if you can solve Sudoku and had no problems in an object oriented data structures class like CS2110, we would take that as "proof" that programming won't be a big issue for you. Beyond that if you've seen classroom material on how languages like Java are compiled to machine code, and understand the concept of global variables, objects on the heap, and objects on the stack, you should be fine. Unlike CS4410, which has very little coding (in that class the coding all occurs in the optional CS4411 practicum), CS4414 really is serious about coding -- we have many substantial programming assignments over the entire semester. If you are a skilled programmer, you won't find these unreasonably hard and they help you come up to speed in C++. But if you are just learning object oriented programming and have never written non-trivial programs on your own, our assignments could overwhelm you.
CS4414 doesn't specify CS3410 and CS4410 as prerequisites because some Cornell
undergrads actually do come in with substantial coding experience and knowledge
of computer systems, acquired through jobs or other classes they have taken.
We are comfortable allowing those students to self-select and enroll in CS4414.
But any student who feels at all tentative and unsure about their coding
abilities should take a bit more time to gain experience before enrolling in
this sort of advanced course. 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 would 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. 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.
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.
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 videos from Fall 2021? Attendence in class is a requirement and we will not approve other modes of taking the course. In fact we sometimes take in-room attendance, and deduct one point per day missed. The attendence rule reflects a Cornell policy. We do have recorded videos, but those are to help people catch up if they miss a lecture for health reasons, but not for routine use. Does industry use C++ 20? The bottom line is that modern industry uses every imaginable programming language. But C++ 20 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++ 20 experience except, perhaps, for candidates to work in their systems development teams. But all of them view C++ 20 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++. If the balance were to shift we would certainly consider moving the course to that language. But for now, we are solidly focused on C++ 20. 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 would
take both. CS4414 is centered on C++
and on effective use of Linux as a tool for problem solving. There is a
big focus on getting the most performance from your system.
CS4410 is about how operating systems work – internals. The main overlap arises in a few lectures that look at concurrency control for threads. 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.
The department is hoping that within a few years, CS4414 will be an option for satisfying that requirement. We cannot predict whether this will actually happen, or when.
No -- the assignments are central to the whole class. CS4414
teaches techniques that you can only appreciate
through hands-on
experience.
Cornell is not permitting us to use Zoom this year. Can I use C++ 23? Yes, certainly. In fact the whole course will switch to C++ 23 in 2025. |