-
Notifications
You must be signed in to change notification settings - Fork 22.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RFC: Add less rigorous options for Operating Systems #1083
Comments
My view on the issueI'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. History/backgroundBack 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. Curriculum requirementsThere 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. The other coursesNow 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. My suggestionI 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. |
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.
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. |
Yes.
No, I did not use Google even once.
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.
After my Hack the Kernel RFC, it looked like this:
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! 🤦 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:
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 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.) |
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).
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.)
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?
I'm not sure if we should alter our curriculum to cater to non-OSSU students.
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. |
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 |
Yes, that's what I argued in my Hack the Kernel RFC.
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.
It's not. Someone must have written that there, to give some vague description (I loathe the "Prerequisites" column in general).
There are a few scheduling algorithms but they are explained in the book. You don't need to have taken Core Theory.
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: Click to expand
That's where we are in a unique position. Sometimes what the universities don't cover are actually shortcomings; we can cover things better than universities. Those courses (Haskell, Prolog, etc.) are not too time consuming or terribly difficult; moreover they are in the Elective section (Advanced). So I'd say, let's not throw the baby out with the bathwater. We don't need to trim everything just by looking at what universities cover. I think Operating Systems is just a particularly extreme exception that is ridiculously difficult. There is simply no way around spending hundreds of hours to learn C/x86 if you want to do kernel programming. Normally it's done in one semester with a class, prof, TAs, lectures, recitations and it's a subject that exposes the limits of self-learning.
Ah OK... 😄 We can relax the elective section to be more "pick and choose based on interest and time". That should do it.
This seems like a personal question, let's talk elsewhere. I'm spamegg#3510 on Discord. (The short answer is that, you are trying to make up for YEARS OF MATH LEARNING that you should have done earlier in your life, so it's actually a small price to pay.)
Well I'm not sure if we should just refuse to help them either... What's an OSSU student anyway? People feel free to skip over things even earlier in the curriculum... there is no oath or covenant between us and the learners. We are also learners on the "same level". |
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 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! 😌 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): Operating Systems: Three Easy PiecesFirst, 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. If you don't plan to go into Systems/OS Programming (or don't have too much time):Read through the free online textbook Operating Systems: Three Easy Pieces and do the homework questions at the end of each chapter. (There is an associated Github repository for the homeworks.) This should take about 8 weeks, 10 hours/week. That's all you need to do! You will need a Unix/Linux system, some basic command line tools, and a C compiler (such as GCC or Clang). On Windows, you can install Ubuntu in a virtual machine, or use WSL (Windows Subsystem for Linux). Mac OS is Unix-like, so it should be OK to use. Question: I see some C code in this book. How much C do I need to know? Answer: You'll need to read and understand some C code in this book. You'll need basic understanding of arrays, pointers and print formatting. You can consult the free book Modern C by Jen Gustadt. The CS50 Manual pages are also helpful to look up functions. You shouldn't spend too much time on learning C. The code you'll read is fairly simple and presented in short fragments. The book helps you out quite a bit by manually introducing many C APIs such as the Process API, the Thread API, and so on. You can type, compile and run the code fragments, and read the corresponding explanations. The book explains them in great detail in a conversational style that's fun to read. You will also write a little bit of C code. Only a minority of the chapters (about 10 out of 50) ask you to write some C code (while the other chapters require you to run provided simulation code and answer questions). These are usually simple, short C programs that imitate the code that was presented in that chapter, with small modifications. If you are getting stuck on these, please don't spend too much time on them. There is a great solution set here. There is no honor code for this, so you are free to use the solutions. If you find yourself spending too much time, feel free to read and understand the solutions instead. Your main priority should be to gain understanding of operating systems concepts, not to master C coding. If you plan to go into Systems/OS Programming, take Advanced Systems (and have a lot of time):Credit goes to palladian IntroductionIf you've chosen this option, then this is the first course in the OSSU curriculum for which you'll need to learn some prerequisites on your own before starting it, in addition to the courses that come before it in the curriculum. You might also run into some issues running the scripts for homework demos and for testing your solutions to the projects (although we hope we've solved most of those by now). That said, if you're able to commit the time required for the prerequisites, we believe the reward is well worth the effort: this course is exciting, interesting, and quite useful for other fields of computer science and programming. One big attraction of this course is the opportunity to see a simplified but fully-functional Unix-like operating system in action and understand the concepts and design decisions that went into it as well as the low-level implementation details. You should either watch all the lecture videos or read chapters 1 through 47 in the textbook (don't worry, the chapters are usually just a few pages long) as well as finish the projects listed below. We also strongly encourage you to do the homework exercises as they're assigned on the course website or in the book chapters; think of these like the "check-your-understanding" questions that pop up in the middle of lecture videos on sites like Coursera or edX. PrerequisitesThis class requires a lot of experience programming in C. You should finish one of the C books listed in the resources below before starting this course; if you try to learn C at the same time as the course material, you're likely to feel overwhelmed. If you haven't used C before, you should expect to spend a lot of time on this; it's hard to predict how long it might take for each person, but a rough estimate might be 8-10 hours per week for 3-5 weeks. You can always learn C alongside another OSSU course or even redo the exercises for other courses in C to gain practice with it. You should also finish both parts of Nand2Tetris before starting this course. OSTEP focuses on the real-world x86 and x86_64 architectures, so you'll have to fill in some gaps in order to translate the concepts you learned in Nand2Tetris to a new architecture. You can do that with the x86 resources below, but note that they all assume you know C, so learn that first. This should take around 6-8 hours in total. Course LinksRoadmapThis course was originally taught as CS 537 at the University of Wisconsin by the author of the OSTEP textbook, so the projects are assigned in the course according to the best times to give UWisconsin students access to on-campus resources like recitation sections and office hours. That means they don't match up perfectly with the material being covered at that time in the lectures or textbook chapters. We recommend doing the course in the following order instead.
Running the ProjectsThis course was originally taught as CS 537 at the University of Wisconsin by the author of the OSTEP textbook, which means that the homework and projects were written with those students as a target audience and designed to be run on UWisconsin lab computers with specific software versions pre-installed for students. We hope this section fixes that so you can run them on other computers, but we haven't tested this on every computer, so if you run into other issues, let us know on the Discord channel and we'll try to help out. In order to run the homework and projects on Linux or macOS, you'll need to have all of the following programs installed:
You will also need to install On macOS, you'll need to install a cross-compiler On Windows, you can use a Linux virtual machine for the homework and projects. Some of these packages are not yet supported on Apple M1 computers, and virtual machine software has not yet been ported to the new processor architecture; some students have used a VPS to do the homework and projects instead. Next, clone the git clone https://github.com/remzi-arpacidusseau/ostep-homework/
git clone https://github.com/remzi-arpacidusseau/ostep-projects/
cd ostep-projects You'll have to clone the mkdir src
git clone https://github.com/mit-pdos/xv6-public src Hints and tips for Projects
ResourcesCPlease don't try to learn C from sites like GeeksforGeeks, TutorialsPoint, or Hackr.io (we're not even gonna link to them here). Those are great resources for other languages, but C has way too many pitfalls, and C tutorials online are often filled with dangerous errors and bad coding practices. We looked at many C resources for the recommendations below and unfortunately found many bad or unsafe ones; we'll only include the best ones here, so look no further! We recommend learning C by working through (the entirety of) Jens Gustedt's Modern C, which is freely available online. This book is relatively short and will bring you up to speed on the C language itself as well as modern coding practices for it. Make sure to do all the exercises in the footnotes! While the book above is our default recommendation, we also recommend K.N. King's C Programming: A Modern Approach as a second, more beginner-friendly option. It has some disadvantages: it's much longer (almost 850 pages), it's not available for free (and copies can be hard to find), and it's not quite as recent as Modern C (but still relevant nonetheless). That said, it has more exercises if you want extra practice, and the Q&A sections at the end of each chapter are filled with pearls of C wisdom and answers to C FAQs. It also covers almost the entirety of the C language and standard library, so it doubles as a reference book. CS 50 doesn't quite cover enough C for OSTEP, but if you've already taken CS 50, you can supplement it with the books above. Additional (optional) resources include:
x86 Architecture and Assembly LanguageNand2Tetris has already introduced most of the concepts you'll need to understand systems and computer architectures, so now you just need to port that knowledge to the real-world (32-bit) x86 architecture. The easiest way to do that is by watching a subset of the lectures from the Computer Systems: A Programmer's Perspective course (or reading the matching chapters in the textbook of the same name). The lectures you'll need are:
Additional (optional) resources include:
xv6You don't need to read anything about xv6 until after you start OSTEP; in fact, we recommend holding off on the xv6-related projects until you've finished the entire section on virtualization. After that, you'll need a guide to walk you through the source code. The xv6 authors provide a book that you can read alongside the source code. There's also a handy line-numbered PDF version of the code with an index to see exactly where each function or constant gets used. However, that book glosses over a lot of the details in the code that you might find challenging, including the advanced C features used, the x86 architecture- specific instructions, and the concurrency aspects (if you haven't finished that section of OSTEP before starting the xv6 projects). To solve this problem, we provide an annotated guide to xv6 that goes over the entire xv6 code and analyzes it line-by-line with explanations of the C features, hardware specs, and x86 conventions used. That means it's longer than the official xv6 book, so you don't have to read all of it (and you can probably skip the optional sections unless you care about device drivers), but you can use it as a reference if you're scratching your head about some part of the code. Also here is an excellent video series walking through much of the xv6 code. MiscellaneousYou'll need a general sense of how Makefiles work in order to use the Makefile for xv6. This tutorial covers much more than you need; just read the "Getting Started" and "Targets" sections and come back to the rest later if you need to look something up (but you shouldn't have to). Additional (optional) resources include:
|
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 🤣 |
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.
|
Update: End of 1 month period. We are yet to receive drafts from @waciumawanjohi so increased the RFC period to 60 days. |
Direct most students to read OSTEP and complete homework. Direct only students specializing in systems to undertake the course projects Resolves #1083 Co-authored-by: Waciuma Wanjohi <[email protected]> Co-authored-by: spamegg <[email protected]>
* Add security courses on a provisional basis. See ossu#639 * Include link to HtDP book and problem sets * Update readings.md * Added link to HW for Intro to Parallel Programming Intro to Parallel Programming's grader is broken, it's impossible to submit programming assignments. It's also impossible to compile and run the code on your PC, unless you own an nVidia GPU. Thankfully some nice folks on Github created a Google Research Colab page where you can compile and run your homeworks (unfortunately the Final Exam is not available and probably never will be). I understand this uses Google's GPU sharing. * Remove dead link * Simplify table of contents * Fix spelling mistake * Links to prerequisites courses added * Move courses to advanced Change the Haskell course suggestion. A big thank you to @aryzach for prompting the switch. Move courses to advanced programming. See Issue. Closes ossu#669 * Move curricular guidelines out of extras. * Clarify that CS2013 is the curricular guidance for OSSU Resolves ossu#679 * Add The Missing Semester Resolves ossu#678 * Replaced Hack the Kernel with OSTEP Implementing the proposal from issue 690: ossu#690 * Add note to Changelog that curriculum is > v8 and < v9. Resolves ossu#674 * Replace LAFF with MIT's OCW Scholar Linear Algebra Resolves ossu#693 * Reflect addition of new Intro section. * Make note more prominent * updated Software Engineering prereqs and added relevant FAQ * Update README.md * Update link to curricular guidelines * Remove link to dead domain * Update link for Compiler Construction * Change Programming Languages Part A Prereq Resolves 716 * How to audit the intro to programming courses Resolves ossu#724 * Updated PROJECTS.md Finished Specialization, using its Capstone as Final Project * Update README.md * Update OS Course Version Resolves ossu#707 * Update README.md * Update README.md Removed LAFF, changed Parallel Programming * Update courses.md Moved Intro to Parallel Programming to Extras * Update readings.md Removed Sheldon Axler's "Linear Algebra Done Right (FREE)" because it is no longer free after the end of July 2020. It was made free temporarily due to COVID-19. * Python for Everyone > Python for Everybody The course, book and website all say everybody instead of everyone. Just a little nit I noticed. * Switch Python for Everybody link Students regularly ask in Gitter how to audit Python for Everybody (Py4E). The instructor of Py4E has created a free version on a standalone site. This has been the alternate link. Instead this should be the main link. * Replace previous Probability course Added a new probability course called Stat110 from Harvard, and moved the previous one to the extra courses page. * Update README.md * Add new question to FAQ Tighten language on some FAQ answers * Rearrange order of FAQ questions * Simplify Intro to Programming Resolves ossu#763 * Raise duration estimate to match Coursera's estimate * Course listing should match course title * Update .gitignore * Use Stanford Database courses Stanford Database courses had long been part of the OSSU curriculum. When Stanford pulled down their platform Lagunita, OSSU had to find a new offering. With the Stanford material back on edX, OSSU should return to this high quality offering. Resolves ossu#718 Resolves ossu#709 * Change chat from Gitter to Discord * Add 'Discussion' header to Core Math and Core Systems * Re-add newsletter link * Remove unnecessary coursework from Advanced Systems. Resolves ossu#772 * Delete reference to cohorts repo. Cohorts repo was closed after an RFC. Resolves ossu#780 * Removed redundant note from Advanced Systems The note was referring to Electricity & Magnetism classes, which were removed. * Update HELP.md A server admin will have to enable the discord widget in the settings for the discord server * Update help.md [#173862703] Authored-by: Waciuma Wanjohi <[email protected]> * Replaced FutureLearn pre-calculus with Khan Academy - To be more consistent with our Khan Academy recommendation elsewhere in the curriculum - also some students expressed confusion with the FutureLearn course * Added link to Interactive Exercises from Kurose-Ross textbook website * Update FAQ language and order [#173862703] Authored-by: Waciuma Wanjohi <[email protected]> * Use Discord Widget [#173862703] Authored-by: Waciuma Wanjohi <[email protected]> * Update math prereq columns * Changed Py4E hours of effort to match OSSU expected weekly effort levels * Removed errant submodule added on prior commit * Prerequisite section mention of high school math links to FAQ * Remove dead link. Resolves ossu#795 * Move the Missing Semester later in curriculum Resolves ossu#778 * Clarify that OSSU is not working in partnership with any org to offer degrees. * Fixed Advanced Systems dead links * Match recommended calc to course listed prereqs https://www.edx.org/course/introduction-to-probability 'Familiarity with U.S. high school level algebra concepts; Single-variable calculus: familiarity with matrices, derivatives and integrals.' * replace dead link Fix for [computer-science/issues/825](ossu#825) * Update Newsletter Address * Add link to completion estimate chart Discord user crokei26#1613 created an initial version of this great resource. A huge thanks to them! * Removed Formal Concept Analysis (fixes ossu#818) - fixes ossu#818 - removed `CUDA` and `GPU programming` from topics (left over from before) * Direct Py4E students directly to the lessons * Switch Math for CS from OCW to OLL Implement ossu#832 * add two new books on systems * Add section to FAQ about alts * Sharpen FAQ answer language * Remove direct link to issues We often get issues opened that are empty, with no text or description of a problem. This may be because learners follow the link from the Community section, and post in order to interact. By removing the link (but keeping the link to the contributing instructions) we can hopefully direct new learners in how to interact productively. * Move CS50 to Courses/Extras Resolves ossu#833 * Remove prereq not mentioned by course creators * Remove topic that is not covered in the section * changed the discord invites Changed the 2 invite links (one inside the svg) to direct to the #welcome discord channel. Also changed some relevant language. * Update Game Design specialization Bump to new version * Include edX financial aid information * feat: Change order of database courses * Update issue templates * Changed link to Effective Thinking Through Mathematics course in extras (issue ossu#870) (ossu#871) * Changed link to Effective Thinking Through Mathematics course in extras * Delete .DS_Store Co-authored-by: Jonathan Hustad <[email protected]> Co-authored-by: waciumawanjohi <[email protected]> * updated Prolog link, added PDF version (fixes ossu#868) (ossu#873) * updated Prolog link, added PDF version * updated Prolog link, added PDF version - removed `Text` column, added footnote instead * updated Prolog link, added PDF version - parentheses * updated Prolog link, added PDF version - added link to book source code * Updated links to both HtC Simple and Complex Data * Added alt link to ocw version of 6.002 in extra courses (ossu#885) * added OCW alt link for 6.002 in extra courses * fixed parenthesis * Update books' editions * Updated the links for books that have a newer edition. I have included the authors' home page for the book where possible. * Updated some titles to reflect the linked edition. I have maintained the original format (``2e`` for the books in the ``Programming`` section ``(2nd Edition)`` for the books in the other sections). Unifying the format could be something to consider. * More realistic estimate for OS course Hi, I am currently taking this course and I am about half way into it. I already have a CS degree and I've been working as a developer for ~8 years. The course is very interesting and comprehensive. If you want to do this course properly, I think 6 hours per week for this course is bare minimum: - There are ~3 hours of lectures each week - The original course is split into 14 weeks - Each chapter has homework at the end of it - Homeworks are not very difficult, but some of them require significant amount of work - Projects require significant amount of work * Update other_curricula.md Add new curriculum (writing started Summer 2019) See more: https://github.com/functionalCS * Reflects locked down CS Timeline Spreadsheet * Spreadsheet link prompts users to make a personal copy * Remove course that is no longer offered Resolves ossu#907 * Make Calculus Required closes ossu#841 * Change calculus recommendation to OLL and OCW Resolves ossu#838, ossu#886 * Change Networking course to Kurose-Ross Resolves ossu#887 * Evaluation section update Change language to encourage students to be proactive in seeking feedback for projects. * Advanced Applications subsumed by Project Clarifies that the advanced application list is a subset of a larger, unspecified, set of adequate options. Advanced Applications was listed as a precursor and possible replacement for the final project. This merges the two and specifies that students may choose another avenue for creating a capstone project. Resolves ossu#830 * Update core math blurb Resolves ossu#921 * Removed Project with Dead Link 1. Removed Binary Machine project as repository link results is dead. 2. Fixed link to applications block. * Update Team * extras/courses: Add Introduction to Computational Thinking by MIT As noted here ossu#912 adding this course to The Math section * Add Algorithms by Sedgewick Add Algorithms by Robert Sedgewick on the basis that it's a freely available book from a reputable institution (it's the textbook for the Princeton Coursera courses). That being said, I haven't had the chance of reading the book so I can't personally comment on its quality. * Commit for RFC at issue ossu#933 (ossu#945) * Commit for RFC at issue ossu#933 Added by error Co-authored-by: Harsh <[email protected]> * Add The Linux Command Line book to Tools section in extra readings * Switch 3b1b Linear Algebra from pre to corequisite (ossu#927) Switch 3b1b Essence of Linear Algebra from prerequisite of MIT Linear Algebra to corequisite * Add interesting/useful reading resources (ossu#941) * fix: updated Computation Structures 1,2 & 3 links (ossu#953) * Add books, fix formatting * Add Ethics Course Ethics being a very important education in field of computer science. CS 2013 Says, while technical issues are central to the computing curriculum, they do not constitute a complete educational program in the field. Students must also be exposed to the larger societal context of computing to develop an understanding of the relevant social, ethical, legal and professional issues. This need to incorporate the study of these non-technical issues into the ACM curriculum was formally recognized in 1991. * Update README.md * Update Ethics Course Discord Links * Fix link formatting * fix some links * extras/books recommends Linear Algebra for Everyone closes ossu#910 * Add puzzles-practice to extras Closes ossu#783 * Added Intro to Numerical Analysis Added Introduction to Numerical Analysis by HSE, a CS2013 Elective Course. * Added alternative to Intro to NumAnalysis. Added MIT18-335J as an alternative to Introduction to Numerical Analysis. * Swapped Core security and Core applications links in the curriculum index to reflect the order of the page. Added a link for Core ethics to the index. Updated some capitalization. * Add answer on finding courses * Add cs-video-courses * Add link to goodreads in FAQ * Remove alternate course that is no longer offered. * Update README.md * Fixes typos * Update full stack open hours/week https://studies.cs.helsinki.fi/stats/courses/fullstackopen According to the course stats, every part takes at least 15 hours to finish on average. * update MathForCS dead alternate link * Remove note on provisional status Having closed the [RFC: Add Security Courses](ossu#639), it is time to remove the provisional label from the Core Security section. * Replace Numerical Analysis Course Resolves ossu#1006 * Typo fix * Fix typo * Math for CS 2010, 2015/2019 solutions * Add DSA Textbook to Extras Thank you to @hamzakat Closes ossu#994 * alternate links for Computation Structures * alternate links for Computation Structures improved formatting * added OSTEP course page * added OSTEP course page fixed typo * added OSTEP course page fixed typos, removed/updated links * added OSTEP course page updated prerequisites on README * Replace discontinued Intro Sec Course [Information Security: Context and Introduction](https://www.coursera.org/learn/information-security-data) has been discontinued. Replacing with [Cybersecurity Fundamentals](https://www.edx.org/course/cybersecurity-fundamentals) Resolves ossu#1041 * Update README.md * Update README.md * Add information security link to table of contents * hints and tips for OSTEP Project 2A * Rename intro file in directory to README.md Users browsing the directory structure will better understand which file to read first. * Fix typo Small typo fix * Update PROJECTS.md Reword the top description of PROJECTS.md to make it more clear what this section is about. * Swap Intro CS from edX to OpenCourseWare * change Logic course * Update LICENSE copyright year Signed-off-by: Ariston Lorenzo <[email protected]> * Improve links From a suggestion by @Alaharon123 here: ossu#1078 (comment) * Update exercism url to point to the current url * Add 2011 Berkeley SICP in Scheme to extras Since the Scheme version remains arguably as/more popular * Update PROJECTS.md * Update PROJECTS.md * update How to Design Programs textbook link * Update courses.md * Update courses.md * Update courses.md * Update courses.md * added resource explaining xv6 code for OSTEP * added resource explaining xv6 code for OSTEP fixed typo * Clarify OSTEP Options Direct most students to read OSTEP and complete homework. Direct only students specializing in systems to undertake the course projects Resolves ossu#1083 Co-authored-by: Waciuma Wanjohi <[email protected]> Co-authored-by: spamegg <[email protected]> * Clarify OSTEP: add missing link, fix prerequisite * Add structure to links * Update FAQ.md * Update CONTRIBUTING.md * Changed course for Theory of Computation to the one in openMIT (ossu#1125) Resolves ossu#1096 * Reduce time estimate for Probability * Correct link to resources below (ossu#1133) * fix core applications machine learning (ossu#1143) * Fix machine learning in core applications The machine learning course is only 3 weeks long, not 11. Further, it's a very gentle introductory course. Even the prerequisite of Basic coding is stretching it, but it is as listed on the course page. * Fix machine learning Machine learning should link to the entire specialization. The specialization is 11 weeks in all I believe, and they suggest 9 hours per week although that could be scaled down to 4-6 hours if you're just auditing. Also, the prerequisite should be basic coding, linear algebra is not necessary. Closes ossu#1118 * Add a new project from a student (ossu#1130) * Added a PR template for projects. (ossu#1136) * Update CURRICULAR_GUIDELINES.md Reference the upcoming CS2023 * Update LICENSE copyright years (ossu#1152) * Update course link Effective Thinking Through Mathematics * Census Announcement * Move census link to top of page * Correct the CS50 alt URL https://cs50.harvard.edu/ just redirects to Edx. The course is available at https://cs50.harvard.edu/x/ * Remove 2023 Census link * Add better link for How to Code courses Add the Systematic Program Design course (which consists of both parts of How to Code) as the main link and move How to Code to to alt. * Add backt the HTDP book * Add intro-programming course page (ossu#1177) * Create intro-programming course page (incomplete) * Complete the intro-prgramming page * Add intro-programming course page to the README file * Fix spellings * Fix the name of the Py4E course * Add alt for Computer Graphics Resolves ossu#1140 * Update Process Mention taking courses in parallel. Resolves ossu#1139 * Fix CS50P pset links * Changed typo 'strucked' to 'stucked' * fix typos * Create CNAME * Update CNAME * Delete CNAME * Create CNAME * Delete CNAME * Create CNAME * update Software Engineering: Introduction course * Add whitespace May address ossu#1191 * Use full word rather than abbreviation for accessibility (ossu#1194) * Hopefully fix some confusions regarding alt courses Mention the full word "alternative" instead of the short form "alt" which may cause confusion to non-native speakers. Also change "/" to "," for the two parts of HTC course. * Fixed the missing "alt" * Replace deleted course with its video playlist * Adding a new URL course for Git and GitHub because the old link invalid (ossu#1204) * Adding discussions channels * Remove mentions of outdated materials and add warning about them (ossu#1212) * Remove mentions of outdated materials and add warning about them * Remove the new warning blockquote syntax Seems like github pages don't support the new warning blockquote syntax * Update README.md with suggestion from @waciumawanjohi (1) Co-authored-by: Lenox Waciuma Wanjohi <[email protected]> * Update README.md with suggestion from @waciumawanjohi (2) Co-authored-by: Lenox Waciuma Wanjohi <[email protected]> * Update README.md with suggestion from @waciumawanjohi (3) Co-authored-by: Lenox Waciuma Wanjohi <[email protected]> --------- Co-authored-by: Lenox Waciuma Wanjohi <[email protected]> * add final project into PROJECTS.md * Move space between badges out of link text * fix: quick stupid case corrections for Discord can I brag about having contributed to ossu yet? :^) * Mark the Py4E course link as link The Py4E course link in the intro cs coursepage was not marked as link. While GitHub renders it as link, the GitHub pages website don't. This PR fixes that. The PR also fixes the CS50P discord invite link, which was expired. This time, I have made a link that never expires, and can be used an unlimited number of times. * Update page to use CSS for center alignment Uses mozilla recommended CSS for centering: https://developer.mozilla.org/en-US/docs/web/html/element/center * Align with div attribute Github homepage does not respect the CSS centering * Add Intro CS coursepage and replace the OCW version with an archived version on Edx (ossu#1224) * Create README.md * Add link to Intro CS course page * Update README.md * Update courses.md This change is adding the interactive, open-source, community-led SICP version that was adapted into JavaScript. This addition seems worthwhile because JavaScript may be a more appealing language to go through SICP with than the original Scheme. In addition, this JavaScript version of SICP was created with the apparent goal of being as close to the original Scheme version as possible: https://sourceacademy.org/sicpjs/prefaces03 * Add SPD coursepage (ossu#1225) * Create README.md * Add files via upload * Update README.md * Add files via upload * Update README.md * Update README.md * Update readings.md * Update README.md * Update README.md * Delete coursepages/spd/HTC2X.zip * Delete coursepages/spd/htc-simple.zip * Delete coursepages/spd/space-invaders-starter.rkt * Delete coursepages/spd/ta-solver-starter.rkt * Update README.md * Add files via upload * Add info about eabling automatic parentheses, square brackets and quotes * Remove the newsletter link The newsletter link does not work anymore. Also, AFAIK, it was not in active use anyway. * Remove Projects.md * Move interactive textbook from courses to readings --------- Signed-off-by: Ariston Lorenzo <[email protected]> Co-authored-by: Waciuma Wanjohi <[email protected]> Co-authored-by: waciumawanjohi <[email protected]> Co-authored-by: spamegg <[email protected]> Co-authored-by: Aaron Hooper <[email protected]> Co-authored-by: Manuel Esparza <[email protected]> Co-authored-by: aryzach <[email protected]> Co-authored-by: riceeatingmachine <[email protected]> Co-authored-by: spamegg <[email protected]> Co-authored-by: Travis Brackett <[email protected]> Co-authored-by: Cybermise <[email protected]> Co-authored-by: Cybermise <[email protected]> Co-authored-by: Josh Hanson <[email protected]> Co-authored-by: attackgnome <[email protected]> Co-authored-by: bradleygrant <[email protected]> Co-authored-by: silential <[email protected]> Co-authored-by: Uniminin <[email protected]> Co-authored-by: Alaharon123 <[email protected]> Co-authored-by: Silent <[email protected]> Co-authored-by: Tyler Miller <[email protected]> Co-authored-by: Tanya Nevskaya <[email protected]> Co-authored-by: Hanqiu Jiang <[email protected]> Co-authored-by: licjon <[email protected]> Co-authored-by: Jonathan Hustad <[email protected]> Co-authored-by: Henrick Kakutalua <[email protected]> Co-authored-by: Elahi-cs <[email protected]> Co-authored-by: Josip Ćavar <[email protected]> Co-authored-by: Kye Davey <[email protected]> Co-authored-by: Dody2 <[email protected]> Co-authored-by: Harsh <[email protected]> Co-authored-by: azzsal <[email protected]> Co-authored-by: Rodi <[email protected]> Co-authored-by: NadaTElwazane <[email protected]> Co-authored-by: Guilherme Marz Vazzolla <[email protected]> Co-authored-by: aayushsinha0706 <[email protected]> Co-authored-by: Nico Schlömer <[email protected]> Co-authored-by: Dion Rigatos <[email protected]> Co-authored-by: Matt Rieke <[email protected]> Co-authored-by: Nick Roma <[email protected]> Co-authored-by: Ethan Deng <[email protected]> Co-authored-by: Mikhail Loginov <[email protected]> Co-authored-by: Eero Pomell <[email protected]> Co-authored-by: Justin Kim <[email protected]> Co-authored-by: Ariston Lorenzo <[email protected]> Co-authored-by: Maheshkumar P <[email protected]> Co-authored-by: Roman Bird <[email protected]> Co-authored-by: martin <[email protected]> Co-authored-by: anantav51 <[email protected]> Co-authored-by: Choubs01 <[email protected]> Co-authored-by: Thái Hữu Trí <[email protected]> Co-authored-by: Rob <[email protected]> Co-authored-by: Ariston Lorenzo <[email protected]> Co-authored-by: Pulkit Krishna <[email protected]> Co-authored-by: zkv <[email protected]> Co-authored-by: Avishek Sen <[email protected]> Co-authored-by: Budi_Ubuntu <[email protected]> Co-authored-by: Karim Safan <[email protected]> Co-authored-by: karim1safan <[email protected]> Co-authored-by: Pablo Colturi Esteve <[email protected]> Co-authored-by: Yukai Chou <[email protected]> Co-authored-by: Maru <[email protected]> Co-authored-by: mgg143 <[email protected]>
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:
The text was updated successfully, but these errors were encountered: