Skip to content
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: Hack The Kernel #690

Closed
spamegg1 opened this issue Apr 5, 2020 · 15 comments
Closed

RFC: Hack The Kernel #690

spamegg1 opened this issue Apr 5, 2020 · 15 comments

Comments

@spamegg1
Copy link
Contributor

spamegg1 commented Apr 5, 2020

Problem:
Hack The Kernel in Core Systems is poorly designed and supported, and is extremely difficult for its place in the curriculum.

Duration:
April 5, 2020 - May 5, 2020

Current State:
Awaiting feedback (updated Proposal and Alternatives with suggestions)

Proposer:
spamegg1

Proposal:
Replace Hack The Kernel with the textbook OSTEP (Operating Systems: Three Easy Pieces) and its homework assignments, supplemented by material from Wisconsin's CS 537 and its video lectures which closely follows the textbook.

Alternatives:
Replace Hack The Kernel with Udacity's UD923 Introduction to Operating Systems

Details (very, very long):
I took Hack The Kernel. It was BY FAR the most difficult thing ever. It took me 6 months.

This course is poorly designed and supported.

They recorded the university lectures with a camera in the back of the classroom and put them on the web. In most lecture videos you cannot see the projection screen because of light/glare, so you have to read the slides separately. Moreover the audio quality is low, so you cannot hear the questions the students are asking.

I found the lectures to be very vague, unhelpful and underwhelming. The instructor has a tendency to give purely verbal explanations while walking back and forth in front of the classroom, instead of writing anything on the board or typing some code on the screen. There is no indication in the lectures how I am supposed to convert the high level abstract concepts in the lectures to the C programming API (the OSTEP book takes care of this with dedicated chapters). Also the lecture videos are very long and boring. (CS50 did not suffer from this, despite having even longer lecture videos.)

Recitation videos are a little bit more helpful but not by much. They had low audio quality and audio stutters. The TAs are trying VERY HARD "not to give away any answers" they end up talking in the same circles as the instructor; and also they deliberately avoid typing any code at all, instead giving vague hints. A few TAs gave some very helpful hints but again there is no info on how to convert them to C. Moreover the recitation videos are a collection of a bunch of videos, all from different years, where back in the past the assignments were somewhat different. No offence to the TAs, but some of them have very strong foreign accents and were difficult/impossible to understand with the low audio quality (I was a foreign TA in the US so I can sympathize).

The only helpful videos were the ones where the lecturer/TAs had "screencasts" of themselves typing stuff into the terminal, explaining how to setup the code system, how to browse the gigantic code base, using grep on the command line etc. But even these videos were hard to follow due to tiny font sizes and high resolution.

The slides for the course are also not helpful and very vague. The explanations of the concepts in slides don't really stick unless you read a textbook. The slides look like you took pages from a textbook and removed 90% of the text. I could not understand anything from them.

It looks like the course was not updated since 2017. The discussion forums were dead (last posts from 2017) so there is no way to get help. (This is not a unique problem, a lot of Udacity courses are also like this: outdated and "abandoned".) The assignment codes only work with a very outdated, insecure version of Ubuntu (Xenial 16.04 from 2016). The code had some bugs in it, which broke some of the assignment tests, with students reporting them all the way back to then. I was taking it in 2019.

There is no clear indication on the course website after which lecture/slide/recitation I should start each assignment. Also I did not know when I should watch each recitation video, because they were only listed under the pages of each assignment, rather than being incorporated into "the course flow". Students who physically attended this class at Harvard probably had no problem because they are on a schedule, but the creators did not translate this to the web version. Sometimes I ended up going too far in the course material/subjects and started the assignments too late. Sometimes I started the assignments too early without learning necessary concepts.

So at some point (way too late) I decided I should start ASST1. After watching all the related videos and reading all the related text, I had to stop taking the course because I could not get anywhere. Instead I dedicated one month to reading OSTEP (Operating Systems: Three Easy Pieces) cover to cover and doing all of its homework. All of a sudden EVERYTHING MADE SENSE. This book is so good I cannot recommend it enough. It's like going to your favourite professor's office and hanging out with him/talking to him. In fact the book opens and closes each chapter with a Student/Professor dialogue.

Not only OSTEP explained everything at least 10 times better than the lecture/slides/recitations, it had CODE SEGMENTS that implemented the concepts in C. A programming course that shows you code! How evil indeed! Moreover it had dedicated chapters explaining the C Thread API and all its functions. In fact without this code from the book I could not possibly do the assignments. On top of that each chapter has homework assignments with code you can get from the author's website. Most of these homeworks do not make you write code, but rather use author's code to step through multi-thread executions and predict their outcomes.

First I'd like to say that the instructors of the course created a very impressive kernel simulation software for the assignments. Super impressive indeed. It's like a miniature copy of a Linux OS. However the code base is 30000+ lines of code and it's INSANE. Impossible to understand. I had to trace files/code that depend on each other so much, I had to BUY A SECOND MONITOR just so I could look at it all and try to understand it. The code has so much required reading it's crazy. 95% of my time was spent reading insanely complicated low level kernel code (sometimes even assembly).

OK I can understand that... this is supposed to be "real world experience" because if I get a job I'll have to work with large systems and read others' code. The lecturer said that much. But this was definitely not Core CS level. It's even beyond Advanced CS level I think. It's at least Pro CS level (but even most pros would fail at this, since Linux kernel development is far more difficult than other "pro" work). I sincerely do not expect any one of the Advanced Applications or Specializations to be ONE TENTH of this course in difficulty. If I ever entertained any delusions about becoming a kernel developer, they are dead and done.

I would say that the first assignment was.... OK, fair and doable with help from OSTEP/Github (but definitely not with what I got from the lectures). It required not too many lines of code, maybe a bit over 200. I still had to get some hints from other people on Github who wrote their own solutions. Semaphores were already provided, I could use that code as example and just make some changes. The code I had to write was clearly indicated as "fill in the blanks here". I implemented other synchronization primitives (locks, condition variables, reader-writer locks), and solved some classic synchronization problems. In fact I had an "aha!" moment when I solved the Buffalo Intersection problem, it felt amazing. It just clicked, and I put a semaphore into the code, and, voila! Max concurrency achieved!

Now we get to the second and third assignments. Oh boy this was pure hell.

ASST2 asked us to design our own process/file handle/file descriptor/PID/system call system FROM SCRATCH. Holy hell. There was far less code provided. We also had to create a very very long design document. It took me 2 months to just write the design document. Just tracing one system call takes you through 10+ different files... I had absolutely no idea whatsoever where to start on designing any of that. I could read the actual, real-life Linux kernel code and base my design on that... but come on. I had to get some idea from others on Github. After a ton of struggle for a total of 3 months my 800+ lines of code could pass most of the tests with the exception of some tests that were reported possibly bugged. The instructors already admit that "at this point the code is so complicated, it's already becoming impossible to debug anything so don't even bother". Good luck trying to sort through the horrible text interface of GDB.

ASST3 was straight up INSANE. It asked us to design OUR OWN virtual memory system FROM SCRATCH. This is equivalent to 2200+ lines of code MINIMUM. No skeleton code provided whatsoever. There were far less instructions/help than ASST2. At least the lecturer is honest and he admitted that "this is supposed to drive you insane and make you tear out your hair." At this point I threw in the towel and just cheated. I looked at others' code on Github and tried to make sense of it (also realized a lot of repos stopped after ASST2). I wrote some code in no way I could call my own. Anyways I decided to consider it closed and move on to the next course in OSSU. I could go on for several more paragraphs into detail of this hell but this is already too long.

You may object by saying "you just suck at C" but in no way this was due to my lack of C knowledge or shortcomings. After all I finished ASST1 and 2 (admittedly with LOTS of help). No amount of C programming books/courses would help. Yes there was a function with triple pointers at some point, but I understand all that.

DESPITE ALL THAT I think the course might be worthwhile for some people out there, who are very hardcore and want to challenge themselves super hard, and want to go into low level programming. So it makes sense to keep it in Advanced Systems (where it would be an elective). Even in that case though, definitely read OSTEP anyways and check out others' code on Github.

@spamegg1
Copy link
Contributor Author

spamegg1 commented Apr 5, 2020

Digression:
Anyways I decided to consider it closed and move on to the next course in OSSU. Otherwise I could have spent another year on HtK. It was becoming unhealthy. Then I started to read about other fellow OSSUians struggling with this course, not even making a dent into ASST1, having NO IDEA what to do. I wanted to spare them the pain and told them to move on. After all it's not useful if they are not planning on becoming kernel developers or do any low level coding in their future career.

Moreover I heard about the "notoriety" of this course in Harvard, how it "broke Mark Zuckerberg and made him drop out". I even watched the movie "The Social Network" where there is one scene of this class with Jesse Eisenberg answering a Virtual to Physical address translation question, then walking/dropping out. Then all my experiences in grad school came back to me: the uncooperative instructors deliberately withholding information and obscuring things, torturing students and calling it "tough", the gate keeping and elitism, shaming and intimidation labelled "Honour Codes".

This course completely changed my attitude towards these so-called "Honour Codes" and online learning in general. I realized that Honour Codes are EVIL, enemies of learning, ways for some instructors to protect their inflated fragile egos, and shaming tactics that Colleges and Online Learning Platforms alike try to keep charging you money for degrees/certificates and prevent answers from being distributed. Don't they always tell you "pay us money! it's a great motivator!" Especially in a subject such as CS, certificates and degrees are meaningless.

In my opinion all online classes MUST have COMPLETE solutions provided. LEARNING should come above and beyond stupid codes, money, and gate keeping. I could not have possibly done anything in this course without looking at others' solutions at Github. Call me a cheater if you want, but what is the point of getting stuck on something for 6 months, not getting any help, not learning, and then calling it "honour" and patting myself on the back for not looking at solutions?

Surely if I copy solutions without doing anything at all then I won't learn either; but in the case of free online learning with no help, this should be up to the learner's own free will and self restraint, not some degree/money/honour requirement. I was encouraged by the Remzi Arpaci (author of OSTEP) who makes his awesome book freely available on his website, and the words of one of the repository owners whose solutions I looked at. It was something like "please try very hard to do these assignments yourself first! Only look when you are absolutely stuck."

@aryzach
Copy link
Contributor

aryzach commented Apr 5, 2020

Just wanted to say thanks so much for this review. I was going to get started on this class within the next month or so because it's the next on the curriculum. I was planning to use both this and Three Easy Pieces, because I know there was debate between that and HtK for what should be on OSSU. I'd say this is an easy decision for the curriculum.

And I totally agree on your stance on not torturing yourself when stuck. It took me a while to get here, and it still is sometimes painful to look at solutions prematurely, but it's definitely sped up my learning and probably improved it (from getting different view points on approaches). In reality, most people who take classes have other people (classmates, TA's, profs) to ask questions. Taking a class in isolation where you are both the smartest and dumbest one in the room is not a great / normal way to learn, but it's also taught me how and when to ask the right questions, and made me look at education differently, and see what parts are valuable and what parts are gatekeeping / elitist.

@spamegg1
Copy link
Contributor Author

spamegg1 commented Apr 5, 2020

@aryzach Much appreciated, and I agree; this course certainly brought up feelings of inadequacy and made me want to quit OSSU altogether. I would not be surprised if this happened to other OSSUians. You should still read OSTEP and do its homeworks, they are very simple.

@waciumawanjohi
Copy link
Member

I support replacing Hack the Kernel with the book/projects Three Easy Pieces (OSTEP).

  1. I've had the pleasure of corresponding with Remzi H. Arpaci-Dusseau, one of the OSTEP authors. I found him engaging, curious about students using his work and open to the suggestion of developing more tools for online students. I am particularly happy that homeworks now have solutions available (I don't remember that being the case) and that there are intentions to port over the projects from the author's UWisc operating systems course. And I've always been tickled that I was included in a footnote in Chapter 15.

  2. The authors are from U Wisconsin. The University's CS 537 follows the book closely. A syllabus with lecture notes is available.

  3. Previous lectures for CS 537 have been recorded. One set is of Mike Swift in 2014. Another is of Adalbert Gerald Soosai Raj in 2017. Neither has been organized into a playlist, but both have hours of content. I enjoyed a number of the more recent lectures.

  4. The RFC details that HtK is both hard and low quality. While the difficulty level might recommend putting the course in Advanced Systems, the information about course quality convinces me that Hack the Kernel should simply be removed from OSSU's curriculum.

@s7oev
Copy link

s7oev commented Apr 5, 2020

This course definitely doesn't sound like something that should be included in the main curriculum. Indeed, maybe put it as an elective somewhere, warning people about the general course experience.

As for replacing it in the curriculum, I believe that it would be great if there is also a video resource. I have found that Georgia Tech's Intro to OS course from their well-received online Master in CS is actually avalable for free on Udacity (bearing no credit for the Master, obviously). Additionally, even the follow-up course - Advanced OS, is available for free!

Here are the links:
https://www.udacity.com/course/introduction-to-operating-systems--ud923
https://www.udacity.com/course/advanced-operating-systems--ud189

Is there someone that took them and can share their opinion?

@s7oev
Copy link

s7oev commented Apr 5, 2020

Berkeley CS 162 is another resource that has public lecture recordings and assignments. It is also the recommended course by teachyourselfcs, yet, oddly, it is only named without further explanation.

@waciumawanjohi
Copy link
Member

waciumawanjohi commented Apr 5, 2020

I took the Georgia Tech Intro to Operating Systems course as an OMSCS student. It's a good course, one of the highest rated in the curriculum. But the assignments for the course are not freely available online. Because of that, I would not recommend it for the OSSU curriculum. It is already listed in Extras/Courses.

@spamegg1
Copy link
Contributor Author

spamegg1 commented Apr 5, 2020

The RFC details that HtK is both hard and low quality. While the difficulty level might recommend putting the course in Advanced Systems, the information about course quality convinces me that Hack the Kernel should simply be removed from OSSU's curriculum.

That's fine with me. Some people hold this class in high regard due to its notoriety and difficulty, and the assignments, if done correctly, certainly teach you A LOT and make you a bad ass programmer, so first I thought that making it an elective would give people the option to do it if they wanted. But now I realize you are right. Low quality should not be tolerated. I think their code is high quality but the lectures/videos/slides/assignments are low quality. I think their goal was to create a code base on which other schools/classes can base their own assignments.

It doesn't look like there are any alternatives for an Operating Systems class with programming assignments at such depth that can be submitted to a system and checked for correctness by an auto-grader. It's just way too difficult to build an auto-grader testing system for something like that.

@s7oev The Udacity UD923 course linked above has programming assignments, WITH SOLUTIONS provided (YES!), but without an auto-grader or some submission system. Also the assignments are a lot less involved/deep and not focused on Unix-like system calls and shell. But maybe that's OK. That course looks good to me. I'm gonna add it to Alternatives. It says:

Introduction to Operating Systems is a graduate-level introductory course in operating systems.

Yeah so there you go, Harvard treats this as a 100-level class (161), while another school treats it as a 900-level graduate course, and it's only introductory. HtK definitely should not be undergrad material, let alone Core CS. This shows you the very strange elitism going on at Harvard. I also had a similar opinion about CS50; it definitely did not feel like a 050 level class. Felt more sophomore/200-level.

I think HTK's code and the assignments are still valuable. Since their last commit was 3 years ago, they probably consider it "done". I think that maybe I (or someone else) should do something about this to salvage them. We could fork their kernel simulation code, but design/flesh out the 3 assignments by dividing them up into many more, smaller assignments and providing A LOT MORE skeleton code and hand-holding. (In fact there was something about this in their code saying something like "if you base your course on our material, here are your options..." and I vaguely remember on the web some other schools had 6 assignments based on this material.) But this would be a huge undertaking and would take a long time, so certainly not an option for right now.

@spamegg1
Copy link
Contributor Author

spamegg1 commented Apr 5, 2020

@waciumawanjohi I will add the resources you listed to the proposal. Makes sense. I was fine without videos for OSTEP but others might find it helpful.

I took the Georgia Tech Intro to Operating Systems course as an OMSCS student. It's a good course, one of the highest rated in the curriculum. But the assignments for the course are not freely available online. Because of that, I would not recommend it for the OSSU curriculum.

The Udacity 923 course looks free, am I missing something? They are both Georgia Tech, are these two different courses? Udacity says "Offered at Georgia Tech as CS 8803" and your link says CS-6200. Confused.

@s7oev
Copy link

s7oev commented Apr 5, 2020

@s7oev The Udacity UD923 course linked above has programming assignments, WITH SOLUTIONS provided (YES!), but without an auto-grader or some submission system. Also the assignments are a lot less involved/deep and not focused on Unix-like system calls and shell.

@spamegg1 I'm guessing you signed up for the course, based on this paragraph! I haven't done so, but if you did and you could see there were assignments then may be the situation has changed since @waciumawanjohi last researched.

Especially if the course itself is well-rated, and assuming the assignments are available, I think it is a great option. Honestly, can't assess it in terms of depth (I'm not very far in my CS education), but having just an introductory course is okay, IMO.

Interested students can always continue - either with the Georgia Tech Advanced OS, and/or maybe even the HtK course for those that find it extremely interesting. But either way, those would be electives, as I do think that a general CS program does not need to go in great depth in OS (but, again, I'm in no way an authority on this).

@spamegg1
Copy link
Contributor Author

spamegg1 commented Apr 5, 2020

@s7oev Yeah I signed up and looked at all of the UD923 course. It looks pretty good to me. Since I've already done HtK I am able to understand the level and depth of these assignments. Definitely much more introductory, which is much more appropriate for Core CS. The assignments are NOT graded, there is no auto-grader to submit your code but solutions are provided; so it's like self-study (just like how one would with OSTEP). Also after the first set of assignments it switches to a less technical, more traditional "college exam" type assignment. OSTEP has very similar homework assignments, like "explain why this is preferable to that" etc.

@xxylem
Copy link
Contributor

xxylem commented Apr 6, 2020

Just wanted to chime in here to corroborate what @spamegg1 has said. I stopped the course after doing ASST1.

  • The lectures: filmed in a room, slides are blurry, instructor rambles (spends a long time going over admin or berating the students in his class), doesn't explain things well (I only understood what he was talking about because I had already starting reading the textbook; but then, I may as well just read the textbook)
  • The philosophy of the course: while at some point a teacher should withhold help so that the students can discover for themselves, that point is not day 1. The attitude of the instructor is that you should just be able to work everything out for yourself.
  • The assignments: an old version of Ubuntu is required to get them running. I had to fix some bugs to get the code working before I could start on the assignment.

I have been reading the OSTEP book, but not doing the assignments (limited time at the moment, plan to do them in a break), so cannot comment on their quality, but the quality of the chapters is high and content is exposed/explained clearly and in a sensible order. The authors want you to understand, as opposed to HtK.

@spamegg1
Copy link
Contributor Author

spamegg1 commented Apr 6, 2020

@xxylem Glad to hear I'm not the only one, but sad to hear that you had to go through it too. At least you had the good sense to stop much earlier than me. Yeah, the rambling lecturer, deliberate withholding of information, blurry videos with bad audio, and the attitude that expects me to do everything by myself really pissed me off.

@spamegg1
Copy link
Contributor Author

Thanks everyone for the comments and suggestions. Closing this issue a bit early if that's OK, no comments have been made for a while (also I'll be offline for 1-2 months). Making a pull request with the Proposal changes.

waciumawanjohi pushed a commit that referenced this issue May 3, 2020
Implementing the proposal from issue 690: #690
waciumawanjohi pushed a commit that referenced this issue May 3, 2020
Implementing the proposal from issue 690: #690
@dipanzan
Copy link

I know this is an old thread, but would you still recommend HTK for someone who'd like to know about the internals of a kernel?

I'm an MSc student currently doing research with the Linux kernel itself, I'm barely scratching the surface, but I'm somewhat comfortable reading kernel code now (after months of struggling, I'll admit) and gaining a bit more proficiency in C. I really want to venture into making drivers or parallel computing someday, I figure I'd need to understand at a good level of how an operating system works and how it interacts with the software running above.

Thank you for the amazing review and posts!

JulianSpring added a commit to JulianSpring/computer-science that referenced this issue May 16, 2024
* 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 <code@waciuma.com>

* 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 <code@waciuma.com>

* Use Discord Widget

[#173862703]

Authored-by: Waciuma Wanjohi <code@waciuma.com>

* 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 <jonathanhustad@Jonathans-iMac.lan>
Co-authored-by: waciumawanjohi <waciumawanjohi@users.noreply.github.com>

* 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 <Harshnagarwal@yahoo.in>

* 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 <4tl0renz0@gmail.com>

* 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 <code@waciuma.com>
Co-authored-by: spamegg <spamegg@pm.me>

* 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 <waciumawanjohi@users.noreply.github.com>

* Update README.md with suggestion from @waciumawanjohi (2)

Co-authored-by: Lenox Waciuma Wanjohi <waciumawanjohi@users.noreply.github.com>

* Update README.md with suggestion from @waciumawanjohi (3)

Co-authored-by: Lenox Waciuma Wanjohi <waciumawanjohi@users.noreply.github.com>

---------

Co-authored-by: Lenox Waciuma Wanjohi <waciumawanjohi@users.noreply.github.com>

* 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 <4tl0renz0@gmail.com>
Co-authored-by: Waciuma Wanjohi <code@waciuma.com>
Co-authored-by: waciumawanjohi <waciumawanjohi@users.noreply.github.com>
Co-authored-by: spamegg <4255997+spamegg1@users.noreply.github.com>
Co-authored-by: Aaron Hooper <rnjckhpr@gmail.com>
Co-authored-by: Manuel Esparza <manoloesparta@gmail.com>
Co-authored-by: aryzach <zach_asmith@yahoo.com>
Co-authored-by: riceeatingmachine <50071043+riceeatingmachine@users.noreply.github.com>
Co-authored-by: spamegg <spamegg@pm.me>
Co-authored-by: Travis Brackett <travmeister@gmail.com>
Co-authored-by: Cybermise <cyberm1se27@gmail.com>
Co-authored-by: Cybermise <57189446+Cybermise@users.noreply.github.com>
Co-authored-by: Josh Hanson <hanjiexi@gmail.com>
Co-authored-by: attackgnome <attackgnome@users.noreply.github.com>
Co-authored-by: bradleygrant <bagvwf@gmail.com>
Co-authored-by: silential <silential@protonmail.com>
Co-authored-by: Uniminin <42061747+Uniminin@users.noreply.github.com>
Co-authored-by: Alaharon123 <34926441+Alaharon123@users.noreply.github.com>
Co-authored-by: Silent <64616976+Silential@users.noreply.github.com>
Co-authored-by: Tyler Miller <tyler.rw.miller@gmail.com>
Co-authored-by: Tanya Nevskaya <unparalloser@gmail.com>
Co-authored-by: Hanqiu Jiang <hanq.jiang@gmail.com>
Co-authored-by: licjon <67080615+licjon@users.noreply.github.com>
Co-authored-by: Jonathan Hustad <jonathanhustad@Jonathans-iMac.lan>
Co-authored-by: Henrick Kakutalua <henrykeys96@gmail.com>
Co-authored-by: Elahi-cs <67738959+Elahi-cs@users.noreply.github.com>
Co-authored-by: Josip Ćavar <josipcavar04@gmail.com>
Co-authored-by: Kye Davey <kye.j.davey@gmail.com>
Co-authored-by: Dody2 <44237371+Dody2@users.noreply.github.com>
Co-authored-by: Harsh <Harshnagarwal@yahoo.in>
Co-authored-by: azzsal <abdazizkrd@protonmail.com>
Co-authored-by: Rodi <rodi.centr@gmail.com>
Co-authored-by: NadaTElwazane <nadaelwazane@gmail.com>
Co-authored-by: Guilherme Marz Vazzolla <53506039+saerosV@users.noreply.github.com>
Co-authored-by: aayushsinha0706 <84586770+aayushsinha0706@users.noreply.github.com>
Co-authored-by: Nico Schlömer <nico.schloemer@gmail.com>
Co-authored-by: Dion Rigatos <dion.rigatos@gmail.com>
Co-authored-by: Matt Rieke <matt.rieke@gmail.com>
Co-authored-by: Nick Roma <nikoandpiko@gmail.com>
Co-authored-by: Ethan Deng <44384988+ethand605@users.noreply.github.com>
Co-authored-by: Mikhail Loginov <mikhailloginov@Mikhails-MacBook-Pro.local>
Co-authored-by: Eero Pomell <97628152+Password-and-authentication@users.noreply.github.com>
Co-authored-by: Justin Kim <justinkim943@gmail.com>
Co-authored-by: Ariston Lorenzo <4tl0renz0@gmail.com>
Co-authored-by: Maheshkumar P <67100964+Maheshkumar-novice@users.noreply.github.com>
Co-authored-by: Roman Bird <romanbird@gmx.com>
Co-authored-by: martin <66410356+MartinOvington@users.noreply.github.com>
Co-authored-by: anantav51 <34206594+anantav51@users.noreply.github.com>
Co-authored-by: Choubs01 <115124294+Choubs01@users.noreply.github.com>
Co-authored-by: Thái Hữu Trí <110210159+thaitri2005@users.noreply.github.com>
Co-authored-by: Rob <39163+robbrit@users.noreply.github.com>
Co-authored-by: Ariston Lorenzo <me@ariston.dev>
Co-authored-by: Pulkit Krishna <contact@virtualhub.eu.org>
Co-authored-by: zkv <kiryl.zhybul@gmail.com>
Co-authored-by: Avishek Sen <x0rzavi@gmail.com>
Co-authored-by: Budi_Ubuntu <abdelrahman.salah.dev@gmail.com>
Co-authored-by: Karim Safan <110535652+karim1safan@users.noreply.github.com>
Co-authored-by: karim1safan <iibdae.almubtadi@gmail.com>
Co-authored-by: Pablo Colturi Esteve <pcolturi@proton.me>
Co-authored-by: Yukai Chou <muzimuzhi@gmail.com>
Co-authored-by: Maru <clear6860@tutanota.com>
Co-authored-by: mgg143 <77564511+mgg143@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants