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: Make an exception for C #1078
Comments
C should be taught |
Unlike the other courses in the curriculum, OSTEP has a course page dedicated to it maintained by OSSU. On that page learners will read:
and
and
and
and
To me, this sounds like a robust preparation guide for OSTEP and C. What do you feel is lacking here? I will note, I don't agree with your statement that knowing C is a soft prerequisite for Nand2Tetris. For example, from the course's page:
|
Learning C well carries a significant time investment, one longer than many of the courses already on here. It’s completely unlike any other prerequisite, and should be given course status or at the very least something in between course and prerequisite. Instead of burying this massive C expectation let’s put in on the course page under core systems.
|
Why?
Learners are reasonably interested in knowing the time estimate for courses. I'm would support a re-examination of the time estimate for OSTEP in light of likely needing to do prep work. The curriculum is meant to reflect the requirements for an undergraduate curriculum in Computer Science. I'm not convinced that requires learning C (but I welcome contributors to use our curricular guidelines to prove the point). |
maybe for
|
Yeah something like this is a good idea (I think this could go further though). But its more than just C (like the C covered in CS50), learning C well enough to do a systems course is a significant project and more than a quick bit of pre-reading.
Obviously it doesn't fit, but I think an exception should be made (like the one made for CS Tools for example). Right now we've got a weird middle ground where we say C shouldn't be necessary because of existing principles but then implicitly expect a very high-level understanding of it. C doesn't make sense as part of CS2013 but it does make sense in our adaptation of CS2013. |
Which in turn is tied to our choice of an operating systems class. OSTEP is the best open OS course that we've identified, but we shouldn't create arbitrary impediments to replacing it with something more suitable in the future, nor should we create artifacts of its inclusion that would outlive its place in the curriculum. Including the material necessary for learning C in the pre-reqs of OSTEP rather than in a separate course in the curriculum, accomplishes these goals.
An important distinction is that familiarity with version control (git), debugging, etc are skills that can aid students both in most future classes as well as in essentially all work that relies on a Computer Science degree. And to be clear,they are part of the core curriculum in CS2013.
I'm not sure what this sentence is in reference to. The OSTEP course page reads:
As my thumbs up above indicates, I support angle943's duration proposal. |
This needs to be made prominent, somehow I never knew it existed. Otherwise, I am in favor of this proposal, simply because seeing C as a prerequisite to OSTEP helps students plan the time commitment it takes to do OSTEP. In general, I think for a lot of the courses present, we can offer less rigorous alternatives for people who would otherwise skip that topic altogether considering the utility to length ratio. For example, calculus so far has not proven particularly useful for any of the topics it was listed as a prerequisite in (machine learning and math for cs), so I could have gotten by with 6 weeks on Khan Academy instead of the 26 weeks of MIT's courses. So, for example, we can say Operating Systems: OSTEP for high rigor, requires C (read this textbook). 200 hours combined. We can do something similar for Core Security too and reduce courseload. |
It's a relatively new change. It's about as prominent as you can get, if you click on the link for OSTEP on the main page it takes you to our course page, not directly to the class.
In general if there's a low rigor course that actually covers requirements, that should be the recommended Core class and the more in depth course should be in Advanced. RFCs for replacement courses that meet our reqs and lower overall workload are always welcome! (There's a reason that the first line of the OSTEP course page is "First, we should be frank: it's really hard to find a good self-contained online course on operating systems. OSTEP is the best course we've found so far, but it does have some issues.")
Heads up, it looks like everything but the first week of that course is behind a paywall. |
Suggestion: Make the "strong C programming" text in the prerequisite column also link to the course page so people click on that and see that we have suggestion already for how to get strong C programming rather than being on their own to figure that out before clicking the OSTEP link |
From a suggestion by @Alaharon123 here: #1078 (comment)
That's a non-substantive change that makes a big improvement. Carried out! (To be clear, that doesn't close this discussion) |
@waciumawanjohi @spamegg1 @palladian1 I found another course that teaches C that might be more useful to us than the one listed: https://cs.uwaterloo.ca/~plragde/flaneries/IYMLC/index.html It's a creative commons book and it's meant for people who already know Racket based on HtDP.
It uses "C Programming: A Modern Approach" as an optional textbook, which is the recommendation on the OSTEP page.
This course seems like it "fits" into our curriculum seamlessly as it builds on Racket and HtDP. And it's also shorter than our current recommendation (Modern C). |
Off to a strong if VERY slow start on Goodreads. The author seems legit. As with any new resource, quality is an important question. |
@riceeatingmachine That's nice, but really far from sufficient for OSTEP projects. You should take a deep look into xv6 code. It uses a lot more advanced complicated C than the book you linked. There is simply no way around the roadmap laid out by palladian (who used K.N. King by the way). We had to go through some of the code together for hours to figure out what it was doing, because it's straight up written in assembly, or, due to memory limitations, bit-wise arithmetic ("dark magic" in palladian's words). I'd be fine with adding it to the OSTEP course page under "Additional resources" as: "here's a nice place to start, it's written by the How to Design Programs/How to Code people, uses Racket to teach some of the ideas (which you're familiar with), but it's far from enough, you'll still need to learn more after that." I'm totally fine with increasing the time estimate. For OSTEP, there is still a TON more to learn after C anyway (learning C is arguably the easier part): how x86 assembly works, how xv6 works, how Makefiles work, how preprocessing and linking work... Reporting from the active front lines: I am more and more convinced that Modern C doesn't really cut it either, K.N. King seems absolutely necessary. Some learners on Discord reported difficulty understanding parts of Modern C that's written a bit too tersely and left up to the reader. We had to recommend Modern C because it's free. Requiring a non-free book would be... I don't know. I don't want to deliberately push people toward piracy. Making an "exception" or making it more "prominent" or whatever is not going to change anything either. We can't do anything about the people who come straight to our Discord and ignore our Github page entirely (or look at a really old fork of someone). I had to direct quite a few learners: "please read this page first, it has everything you need" (even though it's pinned). Some Discord users don't even know what Github is, but somehow heard of OSTEP and decided to do it. 😨 The world is a weird place. Honestly, I am starting to consider this stupid C/OSTEP problem near unsolvable and I'm starting to get depressed. Maybe someone in the future will make an awesome super cool online operating systems course in Rust that's gentle, self-contained, auto-graded and easily doable. Given the personality types of OS people (and the overall difficulty of the subject) I'm not very hopeful though. OS knowledge is by its nature very arcane, poorly documented, hidden in academic offices, or spread out to wikis, old webpages from the 1990s, and the heads of a few developers who are extremely introverted. Hack the Kernel has graders, but it has low quality lectures, code base is 10x the size of xv6 (around 40000 lines), much much harder and requires a ton of MIPS assembly and quadruple pointers! We're probably stuck with C/OSTEP for a good while. |
@spamegg1 What do you think of this course? (Just see the topics)
Regarding this, please check my RFC #1079 I think it might be the way forward. |
The reason I bring up the educative.io course above it because it's made by the Authors of OSTEP (Andrea and Remzi). From this source:
The downside is as pointed out earlier - it's paid. |
As someone who is fine with using paid books stuff like this is kinda worrying, I was planning to use that book! If something's not sufficient we should know right? |
Don't worry. It's just my opinion, I can be wrong. A few others said Modern C is fine. We can't really know if it's sufficient or not. Very few have completed this course. So it's adventurous territory. We are just doing what we can, to the best of our knowledge. King explains things much better (but it's much longer) so we added it as the best recommendation. |
I want to bookmark this somewhere and this thread has become a bit of a discussion about the suitability of OSTEP. Stanford used to have a course That history aside, there exists a course site for a summer run of CS 110 and a youtube set of lectures from a Spring run. There are assignment, labs and assessments, where labs and assessments have solution pages. The class is all C++ based and the prereq course is all C based, so it doesn't solve the issue at the top of this issue. But wanted to point it out here since all the OS interested folks are getting notifications. |
This looks really cool! I'm gonna put this in for after 3EP so we can see if it's worth adding. |
@waciumawanjohi I think people are OK with the suitability of OSTEP course/book overall, but not with the OSTEP projects and their prerequisites. To do operating systems programming, there is simply no way around several hundreds of hours of work. There. Just. Isn't. The course you linked seems nice, but you're right it doesn't solve this issue. It looks just as hard and time-consuming as our current option. (I also think that "the C issue" is a bit related to the reverence C has, and people's desire to see it "represented", but I'll leave that on the side.) 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 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. If we make OSTEP projects optional, we can side-step this C/x86 issue. That's what I suggested in #1083 |
Reading the textbook+HW and skipping the projects does not require much C learning. It's the projects that require it. We currently say on the course page:
I suppose the issue is that nobody reads the course page carefully. Reading is super hard! Everyone just keeps on scrolling. I wrote a draft to clarify it here: comment This should make it abundantly clear that you don't have to learn much C or do the projects. |
Happy with how this resolved 👍 |
Problem:
For Core Systems, a strong understanding of the C Programming Language is expected in a way that is not currently reflected by the curriculum.
Duration:
1 month
Background:
Although OSSU justifiably doesn't favour teaching languages, I think an exception should be made for C due to its key role in the teaching of core systems. Right now, despite being a soft prerequisite for Nand2Tetris and a hard prerequisite for O3EP, C is only implicitly taught. I think making an exception about language courses (spirit of the law etc..) in this instance would lead to a more "complete" curriculum in line with OSSU's original intentions, and minimise the risk of people picking up bad C habits from low quality resources or skipping Core Systems because of a lack of appropriate preparation.
Proposal:
Alternatives:
The text was updated successfully, but these errors were encountered: