ossu / computer-science

:mortar_board: Path to a free self-taught education in Computer Science!
MIT License
165.59k stars 20.92k forks source link

Request for Comment: Remove CS50 from Core Systems #833

Closed waciumawanjohi closed 3 years ago

waciumawanjohi commented 3 years ago

Problem: CS50 is a time consuming course that does not match the learning goals of Core Systems.

Duration: Jan 1, 2020

Background: CS50 is currently in the curriculum "because it is one of the few chances the student has to play with manual memory management in a (relatively) low-level language. By learning C, students will also have a much easier time getting through the following course, Nand2Tetris." FAQ

However, C pointers and memory management (malloc, etc) are elective topics in the Programming Languages knowledge area in our curriculum guidelines. CS2013

The authors of Nand2Tetris do not list C or understanding of manual memory as a prerequisite. "The course and the book are completely self-contained, requiring only programming (in any language) as a pre-requisite." Nand2Tetris About Page

Meanwhile, CS50 is one of the most time consuming courses in the curriculum, with an upper bound estimate of 240 hours for completion. Timeline Spreadsheet While OSSU encourages students to stop the course after the section on C, in practice many students continue in the course. If a student is devoting ~20 hours per week to study, removing CS50 from the curriculum will move up the student's completion date by 1 to 3 months. Given that the overall time commitment is ~24 months, this means removing the CS 50 recommendation can reduce a student's time to completion by about 10%.

Proposal: Remove CS50 from Core Systems.

Alternatives: Replace CS50 with a course more targeted to learning C pointers and memory management:

Note: This RFC is not a forum for discussing CS50's strengths as an intro to programming course. That is not the role it serves in the OSSU curriculum. Arguments for its retention should focus on whether it appropriately fills its roll as a mid-curriculum course.

Exkywor commented 3 years ago

If it's not really needed for the following course, and a suitable alternative for learning pointers can be found I'd say go for it.

waciumawanjohi commented 3 years ago

Are you advocating the Alternative (replacement instead of removal)?

I-GiM commented 3 years ago

I say leave it be

On Fri, Dec 4, 2020, 11:24 PM waciumawanjohi notifications@github.com wrote:

Are you advocating the Alternative (replacement instead of removal)?

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/ossu/computer-science/issues/833#issuecomment-739055003, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOY7UQVBRT4LHER4E7LAHO3STFOR3ANCNFSM4UOAXYJQ .

r0hitm commented 3 years ago

There is no problem with the CS50 problem sets, right? I say they are good practice.

saerosV commented 3 years ago

If there's a sounder choice, I'd say replace it. CS50 could be an alternative or just optional.

rdansie commented 3 years ago

As someone who found OSSU after completing week 3 of CS50 as a beginner, I can say that I don't really know too much about pointers or memory management. There is talk of big O notation in week 3 but we aren't asked to focus on it particularly in the problem sets. So that would suggest it serves more as an intro to programming from week 0 to week 3 and only weeks 4 and 5 are focused on really solidifying manual memory management (although I have not started those weeks).

I do think it would be a shame to not use CS50 in some capacity as I think the lecturer is great at hooking people into computer science, it should at least be listed on the site as an optional resource.

r0hitm commented 3 years ago

I do think it would be a shame to not use CS50 in some capacity as I think the lecturer is great at hooking people into computer science, it should at least be listed on the site as an optional resource.

I totally agree with @rdansie

Alaharon123 commented 3 years ago

I do think it would be a shame to not use CS50 in some capacity as I think the lecturer is great at hooking people into computer science, it should at least be listed on the site as an optional resource.

Dw it'd still be in extras/courses. As stated in the op, this rfc is not about its value as an intro course, we don't use it as one anyway

pcolt commented 3 years ago

Concepts of memory management are already present in Nand to Tetris part II and in Operating Systems Three Easy Pieces. After reading the curriculum guidelines, probably the problem here is that such argument is not covered in any of our courses in Core Programming [CS2013, pag.164].

In particular OSTEP already gives you plenty of opportunities to play with pointers and malloc, in fact one of the learning outcomes of the course is to improve skills of the student in the C language [see this lesson at minute 7:30]. But in the OSTEP book's page is written that "Of course, we assume some background in The C Programming Language" pointing to the book C Programming Language, by Brian W. Kernighan. So I would at least put some explicit information about such requirement in the OSSU curriculum. Furthermore I found most of the work done around assignments in Introduction to Computer Networks written in C, and only some others in Python. So I would consider to shift position order in the curriculum of OSTEP with Intro to CN, so that students already have strong skills in C AND Python.

About the time effort I agree that we should reduce the overall time needed to complete the curriuclum, but we should be aware that there are many courses listed that are declared for fewer hours then they are in reality.

Because of the great quality of CS50 in particular for newcomers in the field of self-taught education, I would propose to move it into Intro CS as a more comprehensive alternative to both courses Python fro everybody and Intro to CS and programming with Python, considering that the goal of Intro CS is: "Students [...] should take this course for a flavor of the material to come. If you finish the course wanting more, Computer Science is likely for you".

Proposals:

Exkywor commented 3 years ago

I'm advocating for replacement. I like pcolt's proposals, I think having CS50 as an alternative in Intro rather than a required course could be a good middle ground to keep CS50, but not have it be mandatory

lorenzolewis commented 3 years ago

I just completed CS50 last week and agree that as an intro it would be valuable. I didn't learn much aside from pointers (which has been discussed) given that I have a background in programming, but I feel it would fit very well in as an intro course.

agilvarry commented 3 years ago

Could something like the mentored C track on exercism.io be good fit? I haven't dug into it at all but found the Python and JavaScript tracks helpful in learning those languages to the point I could use them for my own purposes.

tommcginty commented 3 years ago

I'm new here, but has anyone looked into these courses from Dartmouth on EdX?

https://www.edx.org/professional-certificate/dartmouth-imtx-c-programming-with-linux Ignoring the certificate, there are individual modules for memory management and pointers in C.

waciumawanjohi commented 3 years ago

Close of the Comment Period

Findings: There is general agreement that CS50 does not serve the purpose of teaching manual memory management. There is interest in CS50 as an introductory course. There were a number of suggestions:

Response:

Conclusion