Closed riceeatingmachine closed 1 year ago
I'm totally on board with making Operating Systems less rigorous.
The main length/difficulty comes from the OSTEP projects. Otherwise learning so much in-depth C/x86 is not necessary.
Back when I suggested replacing Hack the Kernel in my original RFC, my intention was to replace it with just the OSTEP book and its textbook homeworks (optionally supplemented by lecture videos) and nothing else. This was merged in, but later someone else also added the instructor's university website which has the OSTEP projects. I would consider this to be a significant change, but it was added without an RFC if I remember correctly. (Can't find the commit right now.)
Later in the Update OSTEP prerequisites RFC I tried to argue that OSTEP book + textbook homeworks were enough to fulfill the curriculum requirements. But I was a bit encouraged by the roadmap that was being drawn (though still had my doubts), I was also kind of tired of the whole situation, so I did not push my point too much and went along with it. Palladian had put so much work into it, it felt a bit wrong to reject it.
There are many universities whose operating systems courses don't require lab assignments. There are also some whose do. Usually the most prestigious ones (Stanford, MIT, Harvard etc.) I don't believe that lab/programming assignments are necessary to fulfill our curriculum requirements. I've read through the OS section of the CS 2013 guidelines (page 135) and the only part that requires implementing or programming something is "Implement a simple device driver" which is an elective.
Now I don't really have a big issue with these NPTEL courses on the surface. They seem fine.
My concern is adding yet another operating systems course that nobody had gone through and completed fully to report on it. This was the main problem with Hack the Kernel (almost nobody had done it until me, most were quietly skipping over it). Operating systems is a super tricky subject, where the lack of quality in a resource is exposed only by going through it properly. I took 2 different OS resources and spent well over 6 months on them, so I have some experience. The "Real Time Operating Systems" course mentions "C programming" as a prerequisite. So we don't really know how much time this entails, without taking the course ourselves.
On the surface the NPTEL courses look OK, but a bit low quality (mostly a video-dump). The "textbook" they have seems to be poorly thrown together, with slides copy-pasted into the document. The "assignments" are screenshots of multiple-choice quizzes from the website pasted together into a PDF. OSTEP is of much higher quality.
Another potential issue is that these NPTEL courses have no assignments at all, except a few multiple choice questions. I think that's too un-rigorous. The OSTEP textbook homeworks make you at least write some super basic code or run code that the author wrote for you. It's mostly Python code that simulates operating system concepts or fake/pretend assembly code, but also some basic C code as well. It gives you at least a sense that you're doing something.
I think the solution is extremely simple: we make OSTEP projects entirely optional. (Moving them to Advanced would beef up the Advanced section too much. The 3 Advanced Systems courses are quite long and difficult in their own right.) This side-steps all the complicated C/x86 issues, yet all the hard-work put into the projects is also preserved.
(Having said all that, I think I'm still fine with the NPTEL courses as the "easy quick" option.)
I was able to read the book and do the textbook-homework without learning C or x86 AT ALL. I did not watch any videos, I was unaware of their existence (I don't think his videos are very good, and many of the videos actually cover stuff related to the projects anyway). I still managed to have a solid grasp and understanding of all the operating systems concepts and I believe I met all the curriculum requirements. This took me about 1 month. Not quite as fast as the 40 hours of the NPTEL courses, it was around 80 hours. (Also it's 40 hours of just the videos themselves. If we add the NPTEL texts it adds up to more.)
We are currently saying this:
What this means for you is that if you're under a significant time crunch, or you're just not all that interested in systems programming and OS development, there's no shame in skipping this course and coming back to it later. You could also do only a part of the course (e.g. you might choose to skip the homework and/or projects).
So we just make this more prominent and more official. We say something like:
Reading through the OSTEP book and doing the textbook homework is sufficient to meet curriculum requirements. It should take you 8 weeks, 10 hours/week. Optionally you can watch the lecture videos if you prefer the video format to reading, but they are not as good, and will take more time. (Some of them are related to the optional projects below.)
If you are feeling adventurous and have a lot of time to spare (an additional 10 weeks), you can attempt the OSTEP projects, for which we did the best we could to draw you a roadmap below. They have a lot of prerequisites (very strong C programming and x86 knowledge). But there is absolutely no shame skipping them. If you plan to move on to Advanced Systems, you will have to learn these eventually.
I was able to read the book and do the textbook-homework without learning C or x86 AT ALL.
Was your C background limited only to CS50? Did you find yourself googling the code? Can you tell me a bit more about your experience? I'm looking at the textbook and I find a lot of c programs in it.
Reading through the OSTEP book and doing the textbook homework is sufficient to meet curriculum requirements.
In this case, I do not see why the other things are in the curriculum. I think the big problem with the OSSU currently is that's it's far too long. We are approaching a situation that the courses are so many that they will dissuade people from even starting. If anything can be removed while still meeting the curriculum requirements, I support removing it.
Was your C background limited only to CS50?
Yes.
Did you find yourself googling the code?
No, I did not use Google even once.
I'm looking at the textbook and I find a lot of c programs in it.
Yes, typing and running those programs was extremely helpful. They are fairly easy to understand. Moreover the book spends a few short chapters explaining the relevant C libraries such as the Thread API.
Also keep in mind that I'm quite strong in immutable/functional programming, and I struggle a lot with mutable/imperative programming. Throughout the curriculum I think I used a debugger maybe 3 times.
In this case, I do not see why the other things are in the curriculum.
After my Hack the Kernel RFC, it looked like this:
Courses | Duration | Effort | Additional Text / Assignments | Prerequisites |
---|---|---|---|---|
Operating Systems: Three Easy Pieces | 10-12 weeks | 6 hours/week | Homework Lectures Supplement | algorithms |
It should be clear that the book and its homework is the intention here. I think the problem is the "Supplement" link... I should have never added that! :facepalm: Goddammit. It was pointed out during the RFC and others asked it to be included.
About a month after that, the links were replaced because someone found a different U Wisconsin course page with a more complete look that had everything in one place. After that commit it looked like this:
Courses | Duration | Effort | Additional Text / Assignments | Prerequisites |
---|---|---|---|---|
Operating Systems: Three Easy Pieces | 10-12 weeks | 6 hours/week | - | algorithms |
I didn't notice this at the time.
After that, I guess people must have assumed that the OSTEP projects are mandatory (or decided to add the projects? or didn't check very thoroughly? or didn't understand how much more prerequisites are added by the projects?). I hadn't done the projects myself at that point. But some time later I noticed people asking for help on them. So I went along with it and decided to help out. So we wrote "all the other things."
All "the other things" are for the sake of enabling someone to do the projects. That's all. The book does not require them. Even with the calendar on Prof's course page, it's quite confusing how to go through the material, how to match the reading, videos and projects with each other, in what order. There are also many hidden requirements that U Wisconsin students have but our learners don't. So that's why we wrote up "all the other things." (Once again, it's extremely difficult for someone who hasn't personally gone through the material to understand why.)
In contrast, the book is completely self-contained, linear and straightforward. The book is free but also sold as hard-copy, and is intended to be used alone, without the projects. The book does not require any of "the other things."
I think the big problem with the OSSU currently is that's it's far too long. We are approaching a situation that the courses are so many that they will dissuade people from even starting. If anything can be removed while still meeting the curriculum requirements, I support removing it.
I agree overall. I'm also in favor of removing things. (For example when those Software Construction courses were discussed, I voted for "remove without replacement" but some replacements were added again later. The ones you recently opened up an RFC about.)
However our curricular guidelines are a huge document covering a ridiculous amount of stuff. I'm guessing that most universities don't cover a significant portion of it. We are probably covering way more than the average university. Looking into all the details of the guidelines, and all the details in online courses/resources, and making a sound judgment on what is covered, what is enough etc. takes a ridiculous amount of time and patience. Anyway, this is a broader, more general discussion. Let's stay on topic.
I don't have a problem removing the OSTEP projects from the curriculum. We can still link to the "projects guide" in some other way. Again, to be fair, we are currently saying "it's OK to skip this course and come back later." But I guess nobody reads it! Reading is super hard.
But there is a weird situation going on. You're probably not aware since you don't hang out on Discord much. Many people find OSSU and our Discord server through OSTEP alone, and they are primarily interested in doing the OSTEP projects. These learners usually don't go through the parts of the curriculum leading up to Operating Systems, and they are OK with spending time learning C and dealing with the difficult projects. (A somewhat similar thing applies to Nand2Tetris and CS50.)
They are fairly easy to understand. Moreover the book spends a few short chapters explaining the relevant C libraries such as the Thread API. Also keep in mind that I'm quite strong in immutable/functional programming, and I struggle a lot with mutable/imperative programming. Throughout the curriculum I think I used a debugger maybe 3 times.
Hmm, in that case it would make sense to just have the textbook and get rid of projects or make them optional.
I think it would be best for learners if we meet the curriculum requirements with the minimum possible work. As you pointed out, most people were silently skipping HtK. Why? Probably because it was too long/hard.
Assuming the OSTEP book can be read without learning C from a textbook or spending time on x86, it would be a big upgrade to the course to just have the book (it's better than the NPTEL stuff, so we won't need a quick and dirty option).
All "the other things" are for the sake of enabling someone to do the projects. That's all. The book does not require them. Even with the calendar on Prof's course page, it's quite confusing how to go through the material, how to match the reading, videos and projects with each other, in what order. There are also many hidden requirements that U Wisconsin students have but our learners don't. So that's why we wrote up "all the other things."
I don't have a problem removing the OSTEP projects from the curriculum. We can still link to the "projects guide" in some other way. Again, to be fair, we are currently saying "it's OK to skip this course and come back later." But I guess nobody reads it! Reading is super hard.
I am in support of this change as well. I'm not certain that the projects belong in the curriculum in the first place. For all the computer science topics, we can find more indepth topics with lots of assignments, but we just want to meet the curriculum. We can move stuff to the advanced section (or build some kind of "degree with honors" section for people who want to go extra deep.)
However our curricular guidelines are a huge document covering a ridiculous amount of stuff. I'm guessing that most universities don't cover a significant portion of it. We are probably covering way more than the average university.
I agree. I think it distracts from core CS topics by having too many fringe topics (like haskell, prolog, etc). I asked some of my friends who are computer scientists from normal university and they aren't taught these things. I'm not saying we should do what other unis are doing, but there are many places where the curriculum can be cut while meeting all the core CS requirements.
As a sidenote, I took your advice on the Math for CS and I'm solving every problem in the textbook. I'm done with a third of the textbook - took about 180ish hours to get here. Should take about 300-400 hours to complete the rest of the textbook. I don't mind doing this if you think it's a good idea. Do you have any advice regarding this?
But there is a weird situation going on. You're probably not aware since you don't hang out on Discord much. Many people find OSSU and our Discord server through OSTEP alone, and they are primarily interested in doing the OSTEP projects. These learners usually don't go through the parts of the curriculum leading up to Operating Systems, and they are OK with spending time learning C and dealing with the difficult projects. (A somewhat similar thing applies to Nand2Tetris and CS50.)
I'm not sure if we should alter our curriculum to cater to non-OSSU students.
algorithms
I see this is a prerequisite for OSTEP. Is it actually required for the textbook? I'm not done with Algorithms (still doing math for cs). If it's not required (I read in one thread that it wasn't), I can extend the time for this RFC and read OSTEP now and see if I'm able to do it. Then we'll have some more empirical knowledge on whether learning C is necessary or not.
I think the solution is extremely simple: we make OSTEP projects entirely optional. (Moving them to Advanced would beef up the Advanced section too much. The 3 Advanced Systems courses are quite long and difficult in their own right.) This side-steps all the complicated C/x86 issues, yet all the hard-work put into the projects is also preserved.
Reading through the OSTEP book and doing the textbook homework is sufficient to meet curriculum requirements.
If you plan to move on to Advanced Systems, you will have to learn these eventually.
the book is completely self-contained, linear and straightforward
If the book is self-contained and sufficient for Core CS, but you need the projects for Advanced Systems, wouldn't it be better to put the projects in Advanced Systems? Since the idea is to do everything in Core CS, but not everything in Advanced CS
Assuming the OSTEP book can be read without learning C from a textbook or spending time on x86.
Yes, that's what I argued in my Hack the Kernel RFC.
I'm not certain that the projects belong in the curriculum in the first place.
As I said, some universities have it, some don't. The universities that DO have it, don't have some of the other stuff in our curriculum. These choices are usually made based on historical or bureaucratic reasons, depending on the availability/interest of faculty to teach it.
But the guidelines do not absolutely require it (as far as I can read). Palladian's argument was that, OSTEP textbook homework was more of a "check your understanding" type and not good enough for proper mastery of OS subjects, and the projects were the real deal, and they were doable. I guess it could be argued back and forth. If you read the discussion here initially I was against it, but eventually I gave in. So I'm going back a bit again, after seeing people's difficulty with it. In his defense though he did write "feel free to skip it for now..." so I think that's fair. The main issue is that PEOPLE DO NOT READ! I feel like we could put a gun to people's heads and they still would not read. Reading is just too hard.
I see this is a prerequisite for OSTEP.
It's not. Someone must have written that there, to give some vague description (I loathe the "Prerequisites" column in general).
Is it actually required for the textbook?
There are a few scheduling algorithms but they are explained in the book. You don't need to have taken Core Theory.
I can extend the time for this RFC and read OSTEP now and see if I'm able to do it. Then we'll have some more empirical knowledge on whether learning C is necessary or not.
That's great! You do need to have some C understanding but it's not too bad. Consulting Modern C a bit here and there should do it.
The rest of your points go into more general curriculum-wide discussion so I'll hide them under a button not to distract from this topic:
If the book is self-contained and sufficient for Core CS, but you need the projects for Advanced Systems, wouldn't it be better to put the projects in Advanced Systems?
Sorry I'm having difficulty explaining what I mean.
I meant that, the prerequisites for the OSTEP projects (like x86 assembly and lower-level C programming) will be covered in Advanced Systems. But it's not a simple, 1-1 replacement like: "move these prerequisites from here to there."
They will be covered in a different, more complicated context (not an old operating system like xv6
but more modern, and not specifically kernel programming), and in a more technical, demanding and difficult way, with TONS of other stuff going on. Whereas the context in the OSTEP projects presents you a much simpler, isolated version. (It's a bit like going from Nand2Tetris to OSTEP; if you haven't done N2T you'd have a much harder time in OSTEP.)
So it might be helpful to be familiar with them ahead of time. So for those who already plan on moving to Advanced Systems, it might be a decision to put in the work earlier and get the experience with OSTEP to make their time in Advanced Systems easier, or just do it all in Advanced Systems with more time spent and higher difficulty instead.
Also I meant to imply that, there might be people, who might want to to OSTEP projects but not Advanced Systems. There might be people who want something in between just reading OSTEP textbook and going all the way to Advanced Systems.
Also I meant that, it might be argued to move the OSTEP projects to Advanced Systems as a "we recommend you do this first" way, it can also be argued that it beefs up the Advanced Systems too much.
Systems is just too difficult!
:relieved: I think that explains it, I hope?
I think it makes more sense to move the projects to advanced than to make them optional in core. People can do as much or as little of Advanced stuff as they want. Moving the projects to Advanced puts them in the optional section where they probably belong, and then anyone who wants to do just that and not Computation Structures can, and anyone who wants to do both can, and anyone who wants to do neither can, and everything is consistent. And Computation Structures is technically just one university course anyway, Systems is just hard. And it's kind of just hiding it by putting it as optional in core and then telling people in advanced to do the optional core stuff
Placing the projects in Advanced is not a good idea; it will create too much of a time gap between a learner's first encounter with OSTEP and their later encounter (if they go through the curriculum linearly). It would be best for them to do the projects while everything is fresh in their minds to solidify their learning and commit them to long term memory better. Advanced Systems will throw so much more new technical knowledge at them. It's best to keep it in the Core as optional for those who plan to move to Advanced Systems.
The other issue is that, it doesn't work as: "read the OSTEP book in its entirety, and do its textbook homeworks; then afterwards do the projects." (Sorry if that wasn't clear before.) If you look at our current guide, the book and the projects need to be matched week by week, chapter by chapter: you have to read some of the book, watch some of the videos, and do a project, and repeat. So a learner would pick only one of the two approaches: just the book+hw (if they don't plan on Advanced Systems), or start with the current guide from the very beginning (if they plan on Advanced Systems).
I hope that clarifies it.
Just to give an idea of what I'm trying to say, here's a draft. This is basically a slight re-write of what we already have (which already says "feel free to do only the homework and skip the projects" but I guess NOBODY READS THE DAMN THING):
First, we should be frank: it's really hard to find a good self-contained online course on operating systems. OSTEP is the best resource we've found so far. Taking the time investment and the high difficulty into consideration, we came up with 2 options for you.
If you don't have too much time, or you're just not all that interested in systems programming and OS development, then the first option is for you. It's around 80 hours, and covers all of our curriculum requirements (don't worry, you won't be missing out on anything!). This is the logical option for most people.
The second is significantly longer (around 200 hours) and challenging, but it's incredibly valuable if you plan to go seriously into Systems Programming and you plan on taking our Advanced Systems section later. This involves learning very serious C and x86 assembly, and delving deep into kernel programming.
NOBODY READS THE DAMN THING
Hahahahah, maybe we should add a TLDR at the top.
Something like:
If you don't plan to go into Systems/OS Programming: Just read OSTEP and use [This C Book] for reference if you can't understand a C program. You need to do the first half of CS50 first or any other course to learn the basics of C.
If you plan to go into Systems/OS Programming: You need to read OSTEP, and learn Advanced C [NN King/Modern C] and x86 to solve the OSTEP projects.
Full Version:
...
Yeah... giving LESS details might be better :rofl:
I really liked your draft @spamegg1 ! It's very detailed and informative. I don't think anyone will have any doubts what to do and what not. Personally I would like a rigorous course and I am looking forward to take this course. And this nice draft just makes my personal planning much easier. It also helps me prepare mentally for the upcoming material. I haven't really read the guidelines to comment on the issue, but if someone asked me, I would probably opt for a more rigorous version with projects. This is coming from a guy who is interested in systems though.
The University of Wisconsin students taking the course that follows the OSTEP book will usually have already taken this computer systems course from what I understand: https://pages.cs.wisc.edu/~gerald/cs354/Spring18/
Their systems course follows K&R and then CSAPP, so they will have had a fair amount of exposure to C and some Assembly. The Wisconsin students are assigned the OSTEP projects in pairs and have TAs for support, neither of which OSSU students would have the benefit of.
The problem that I had with OSTEP was figuring out what study to undertake to have the C programming skills necessary to do the projects. In the end I did about 60hrs of work between K&R and Learn C the Hard Way. I attempted all the projects and found it challenging and there were a couple that I couldn't complete 100%. I did some past exams and the textbook homeworks for the course too. In the end I spent 215hrs on OSTEP excluding the time learning C. Taking this course was a big undertaking, but I do feel like I learned an enormous amount from taking it and consider it a core part of what I've learned from working through OSSU.
The textbook was excellent in my opinion. If there's one thing that had to be taken out to make it shorter, I'd vote for the xv6 projects. I think they're just quite difficult to do working solo on your own home setup.
@MartinOvington Agreed, your experience seems to closely match the "long and difficult" option in my draft above, and your suggestion seems to reflect the proposal I am making here. Thanks for the useful comment.
It's good to see convergence around a solution. Spamegg I like your proposal. I have some opinions on the exact language to clarify that skipping the xv6 projects should be the default. I'll be able to draft something next week.
I figured I would deposit my two cents as someone who finished OSTEP minus the file system checker XV6 project that didn't include the test images.
The book is extremely well written and relatively easy to digest given the subject matter. The concepts learned from the book inform my decision making on a daily basis even though I don't do systems programming. This course, along with Nand2Tetris and CSAPP, formed the basis for how I conceptualize computers and therefore make me much better at programming them than I would be otherwise.
Some of the projects are fairly brutal, but they also gave me critical experience working with a large and obtuse code base. Nothing else I encountered in the curriculum gives this, and I do think it is extremely valuable for professional development. These projects also helped cement the principles from the book in my brain. I imagine I wouldn't remember too much from the course without them.
I looked back at my GH, and it seems like I started Modern C on August 25, 2021 and made my last commit to my OSTEP repo on Nov 30, 2021, so between learning C, doing part of CSAPP, and OSTEP, I spent roughly 300-360 hours working on this course total.
From the discord, it seems like a lot of students get hung up on prepping for OSTEP, since most of the prerequisites are self guided.
While I agree that the XV6 projects probably should be optional, the pre-XV6 projects are not that difficult, pretty fun, and highly educational. In addition, I have heard from multiple of my friends who are CS grads that they did similar projects in their coursework.
I also want to thank Spam and Palladian for all the work they have done to make this course more accessible. It truly is appreciated.
Update: End of 1 month period.
We are yet to receive drafts from @waciumawanjohi so increased the RFC period to 60 days.
Problem: The current recommendation for Operating Systems is really long. Students are required to learn C, x86, and then Read OSTEP.
This probably comes out to 200 hours if you solve some C problems and implement the code in OSTEP? If someone studies 10 hours per week, this is 20 weeks dedicated to just one topic.
Duration: 60 Days.
Background: Operating systems is a topic that you either use all the time, or barely use at all. In this case, some people might benefit from a shorter, less rigorous alternative if they are relatively sure they will go in a field that doesn't depend too much on OS knowledge.
I've been scouring the internet and I found NPTEL (National Programme on Technology Enhanced Learning) which contains a lot of computer science courses from The Indian Institute of Technology - the highest tech universities in India. Think of it like OCW for the IITs. They are generally though to be high quality courses in India, and this is the best university here. The downside is that there are not many practical assignments on NPTEL unlike their university counterparts.
NPTEL has a few operating systems courses that are video only (the big downside of which is that there are not programming assignments.) However they are short and appear to be self-complete.
Operating System Fundamentals [30 hours] and Real Time Operating Systems [10 hours] by IIT Kharagpur can be used as less rigorous options for Operating Systems for students who do not wish to devote 200 hours to C+x86+OSTEP.
Proposal:
Alternatives: