ossu / computer-science

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

Introductory courses #671

Closed NatSydenham closed 4 years ago

NatSydenham commented 4 years ago

Newcomers to OSSU are expected to take the following 'intro to cs/programming' courses:

To me, this seems like too many 'intro' courses, when one + CS50 for systems should suffice. My solution would be to take out PfE, Fundamentals and MIT Python, and just keep HtDP and CS50.

This has the advantage of keeping the excellent HtDP courses, which is definitely at the right difficulty for beginners and starts off by teaching good practice with TDD and Data Driven Development. It keeps introduction to a C-like language (conveniently, it's C) with CS50, too, so we aren't losing out there.

aryzach commented 4 years ago

I disagree. But I do think the intro course could be described better. CS50 was my first exposure to programming, and while I got through it, I could see how somebody less interested would give up.

I think CS50 is a great class, but not necessary prereq for nand2tetris. Maybe CS50 could be an alt class to MIT python. One of the main things, is that I think the VM to assembly translator project and the Jack to VM compiler project in the second part of nand2tetris are fairly large projects, and it helps to have more programming experience before you start with these projects IMO.

HtDP shouldn't be anybody's first CS class. I took at as my 3rd (after CS50 and MIT python, and still felt like I lacked a little context. I think this is a great 2nd or 3rd class. I also don't think it's a great first class because it's functional language.

What do you think if there was just better descriptions for PfE, Fundamentals of Computing, and MIT python? I haven't taken PfE or Fundamentals of Computing, but I think most people in college or older should have a good experience with MIT python. Then we could direct people to PfE and FoC only if they meet certain criteria (say struggled with math in high school, or just want a very basic intro so see if it's for them then take PfE)

NatSydenham commented 4 years ago

Having looked at the content of the courses, I think having aspects of each of those courses is great. EG the SQL and web stuff in PfE would be very valuable, but there's not really much need in having 4 courses where we go over the basics of iteration etc. The basics are fundamentals and you'll get exposure to them as you program more, no need to go over them in 4 different resources. Potentially, the best way is to cherry pick core features from each course and tell people to learn those, rather than completing lots of duplicate content.

waciumawanjohi commented 4 years ago

The intro courses underwent a significant review a few months ago. You can read this thread for context: https://github.com/ossu/computer-science/issues/589

The Introduction to Programming classes were added for students that have had no previous programming experience. @aryzach If you have language that you believe would clarify their purpose and help students decide which course to pick/whether to skip the Introduction to Programming classes, I would be very interested in seeing a draft. (Though I would not include "struggled with math" as a criteria for deciding which course to pick any more than I would include "struggled with earth sciences").

The idea to cherry-pick some of the content from this set of courses is a good one. That is why that's what OSSU does! Students are recommended to only take the first half of CS50 and are directed to this entry in the FAQ for an explanation of why: https://github.com/ossu/computer-science/blob/master/FAQ.md#why-do-you-recommend-skipping-the-second-half-of-cs50

A proposal to change the introductory courses would need to make reference to our curricular guidelines (CS2013) and get into the particular topics taught in each class and detail how a subset could meet all the requirements currently being met. This isn't a trivial undertaking, but I welcome anyone that would like to step up to undertake it.

I'll also point out that the introductory courses have undergone the most review. Future students will benefit greatly from contributors who can evaluate the later core and advanced sections. The greatest value would come from a review of Core Applications or of Advanced Systems. Another valuable contribution would be commenting on this open RFC: https://github.com/ossu/computer-science/issues/639

aryzach commented 4 years ago

I haven't (and don't really have the time right now / want to) taken PfE or FoC.

From the description about by @NatSydenham, it sounds like PfE would be super valuable for a lot of people even if it was their only programming class ever (web stuff and SQL). This class also only says 58 hours which is a low commitment compared to any other class. When OSSU recommends this course, do they mean all 5 courses within that course (when you click on the link) or just Course 1?

Here's an outline of my description (disclosure: have not take PfE or FoC) @waciumawanjohi

PfE (assuming it's all 5 courses in the link): Two main types of people:

  1. For people who want to see if programming is for them and have never done it before
  2. If you've heard of SQL, an API, or web scrapping (either at work or elsewhere), and want to learn more about that If you take this course instead of FoC, you should also take MIT python before moving on.

I'm mostly including #2 here because I still don't know much about these things, and I've taken 13 OSSU courses (not including math). I think a lot of people are in a place where they could and want to apply things (work or fun home projects) either to change roles, get a job, or just for the hobby. While I have the skill set to easily pick up these things (SQL, web scrapping), I haven't been introduced to them through OSSU. I expected I would have earlier, and other people might think that too, especially if they're in a role where coworkers are talking about these things.

FoC: Take this if you're more interested the academic side of computer science, and less interested in immediate application of what you learn in this class. While what you learn here will be immensely valuable in future classes and your understanding of computer science, you likely won't be applying what you learn here to real world applications immediately. If you take this course, skip right into Core CS with the class How to Code

MIT python: Current description is good.

CS50: I'd potentially recommend just weeks 3 (algorithms), 4 (memory), and 5 (data structures). Because you skip the sections where you learn C syntax, preface this suggestion by saying that learning a new language without direct class lectures is a good learning experience and practical skill. If students have taken all the courses in core programming, this should be achievable and a good exercise. This does three things:

  1. cuts down on the time for this class (which a lot of it is similar to MIT python)
  2. it introduces them to memory, which is important for nand2tetris. I think algorithms and some data structures are introduced in MIT python, but I think the revisit here is ok
  3. gives them more project experience before starting the larger challenging projects (at least for me) in the nand2tetris class