ossu / computer-science

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

Create new top-level section "Foundations" for housing non-CS prerequisites? #531

Closed joshmhanson closed 4 years ago

joshmhanson commented 5 years ago

As I described in #438, I am thinking about pulling most non-CS topics out of Intro/Core/Advanced CS and putting them in a separate section called "Foundations". Courses from this section would only be required when someone doesn't have the relevant background, and the curriculum would still begin with Intro CS. Students would only take what they need from it, when they need it. The prerequisites section of each course would then contain a hyperlink to the relevant section in Foundations.

Rough outline of how that would play out, assuming we were to adopt other changes I've suggested recently:

Foundations

Complete only those sections as directed by the prerequisites of a CS course you're about to take.

K-8 math

Select the appropriate grade level from Khan Academy Math.

High school math

Single-variable calculus

Multivariable calculus

Probability

Electricity

Modern technology

Intro CS

Core CS

Core math

Linear algebra

Discrete mathematics

(etc.)

Advanced CS

Advanced machine systems

(etc.)

waciumawanjohi commented 5 years ago

I like this idea in general. A future goal would be to have an assessment that would let students know if they can skip a course. (CLEP has an Algebra, Precal and Calculus class) If we are listing electricity, we should list high school physics.

On math, I suspect linear algebra should sit alongside calculus and probability in Foundations math, with only discrete math in the required math courses.

Python programming should receive more (not less) emphasis than Stanford's CS101.

We'll help students evaluate if they should take a Foundations course by not only listing its pre-reqs, but also what courses it prepares students for.

Alaharon123 commented 5 years ago

Whether to put Calculus and up in Foundations or Core depends on whether the goal is for Core to be everything in a cs degree besides for gened or if it's to only include cs specific courses. If it's the first, most cs degrees assume you already know precal and start with Calculus so that would be where ossu starts from. If it's the second then Calculus would be in Foundations.

Sidenote: I don't know how practical this is, but you could consider making something like University of Buffalo's flowcharts. They let you mouse over courses to see prerequisites and courses that use it as a prereq.

ghost commented 5 years ago

Hello!

I just want to say that I like this idea a lot. I was looking for guidance on the best resource to learn/refresh the necessary high school math without knowing what is relevant and what is not. Much beacause I was not sure what the American curriculum demands. I am following this site, https://www.mathsisfun.com/links/curriculum-high-school-algebra.html, but then I am like, is it enough? Is it too much? So, having some guidance is really useful.

Also, Khan Academy is great, but bandwidth is really expensive where I live, so whenever I can, I avoid videos.

Thank you!

ghost commented 5 years ago

I love the idea of the Foundations page. Back in the 70's, I studied Engineering at Georgia Tech. Dropped out. In the 80's, I studied Computer Science at Rutgers. Dropped out again. At both, calculus was a required course. I think the Core Math section should section should include Single Variable Calculus and Multivariable Calculus to reflect the both structure of a degree program, the importance of these courses to our studies and the effort needed to understand and pass them. Personally, I hated Calculus but loved Linear Algebra. Perhaps we could link each course to a page or pop-up that lists things like alternatives, testbooks, sites for practice and places to go for help to keep the main page and the foundations page cleaner?

joshmhanson commented 5 years ago

Thanks for everyone's feedback!

@waciumawanjohi

On math, I suspect linear algebra should sit alongside calculus and probability in Foundations math, with only discrete math in the required math courses.

It should, yes, but currently we use LAFF which uses a lot of programming exercises written in a style similar to how one writes linear algebra programs in C, etc. Linear algebra could go in Foundations if we used a more abstract resource with no to little programming (Strang's materials probably are like this).

Python programming should receive more (not less) emphasis than Stanford's CS101.

I'm not sure what you're saying here. Are you suggesting we don't use Stanford CS101? Or add more Python courses? What's your rationale? (Not challenging, just asking for clarity)

We'll help students evaluate if they should take a Foundations course by not only listing its pre-reqs, but also what courses it prepares students for.

Reverse dependencies are a good idea!

@Alaharon123

Whether to put Calculus and up in Foundations or Core depends on whether the goal is for Core to be everything in a cs degree besides for gened or if it's to only include cs specific courses. If it's the first, most cs degrees assume you already know precal and start with Calculus so that would be where ossu starts from. If it's the second then Calculus would be in Foundations.

@CamLV

I think the Core Math section should section should include Single Variable Calculus and Multivariable Calculus to reflect the both structure of a degree program, the importance of these courses to our studies and the effort needed to understand and pass them.

Thanks for your input. I understand your perspectives, but I want to point out that even though I'm proposing to move Calculus, et al., off the Core CS page, it's still required for everyone who hasn't already taken it and would be clearly marked as such in the relevant sections.

Regarding geneds: I'm trying to solve a short-term problem specific to OSSU CS, but general education requirements (as commonly, and rightly, required by CS standards committees) isn't just an OSSU CS problem; it's an OSSU problem. Geneds are, by definition, required of everyone at a university, so it should be solved at the OSSU level. Maybe someone else can step up and create a general education curriculum that we could then refer to.

@chinguelessi

Also, Khan Academy is great, but bandwidth is really expensive where I live, so whenever I can, I avoid videos.

Not having an answer for this situation is an oversight of OSSU and I apologize for that! But as you can probably tell from above, I want to start including text-based resources alongside videos for people who prefer (or need) this format.

waciumawanjohi commented 5 years ago

On math, I suspect linear algebra should sit alongside calculus and probability in Foundations math, with only discrete math in the required math courses.

It should, yes, but currently we use LAFF which uses a lot of programming exercises written in a style similar to how one writes linear algebra programs in C

If Linear Algebra is in the core curriculum only because the only acceptable course uses programming, we should ensure that students know which courses rely on LinAlg and that their selected path through the curriculum may not require the course.

I'm not sure what you're saying here.

The wording sounded to me like CS101 was being emphasized more than CS1301. Not a big deal.

Alaharon123 commented 5 years ago

@chinguelessi https://courses.edx.org/courses/course-v1:ASUx+MAT117x+1T2016/course/ is really good especially for returning students. It tests your knowledge and then only teaches you what you need to know. It also checks every so often to make sure you've mastered topics so you don't get left behind with something you don't really understand. It starts off with a knowledge check. If you start after that with less than 15% in your pie, then you're not ready for college algebra yet. If you start with more than 85%, you can skip to Pre-Calculus. It's all text and pictures so it should take less bandwidth than videos. Of course, this is only relevant if you're ready for College Algebra. If you get less than 15%, then you still have the same problem. I've heard the OpenStax textbooks, which start all the way from pre-algebra, are good, but I haven't used them so ymmv. You could probably take the quizzes on Khan Academy to figure out where you're holding and download a pdf (free) or buy a physical copy (paid) of the appropriate textbook.

@hanjiexi gened for ossu is definitely doable. Using the SUNY requirements as an example since I'm familiar with them, Mathematics is already covered, there are plenty of online courses for learning a language, social sciences can be some course on Computers in Society (that's what it is in my college), Arts can be an introductory html/css course (I'm taking that right now), I think there's such a thing as an online physics lab course. The hardest part, other than actually choosing the courses (requires knowledge of courses from a variety of fields so that's actually pretty hard), would probably be finding a college level online english course. Not sure how that would even work.

EDIT: https://www.coursera.org/learn/english-composition

joshmhanson commented 5 years ago

@waciumawanjohi

If Linear Algebra is in the core curriculum only because the only acceptable course uses programming, we should ensure that students know which courses rely on LinAlg and that their selected path through the curriculum may not require the course.

That's a good point. It will be very inconvenient to have a section in Core Math that isn't actually needed except in some very specific domains. From a brief glance and trying to keep all the proposed changes in my head, linear algebra is only needed for one course in Advanced CS (LAFF Programming for Correctness) and several courses that I proposed to move to Domains (e.g. graphics, machine learning).

I have some invariants I hope to maintain for the top-level sections, but without mapping all the proposed changes I don't know yet how this will play out:

  1. No top-level section should contain forward-dependencies.
    • Example 1: a course in Foundations can depend on another Foundations course, but it shouldn't depend on material from Core CS or above.
    • Example 2: a course in Core CS can depend on material from Core CS and Foundations, but not on material in Advanced CS.
  2. No top-level section except Domains (our endpoint) should contain unused dependencies. If there is no way to trace the reverse dependencies of material in Foundations, Core, and Advanced all the way to some Domain / application area, then the material belongs in Extras.
    • Example: Logic programming (fulfilled via Prolog) currently isn't used anywhere beyond Core Programming. It should be moved to Extras, unless we add a Domain that uses it or depends on material that uses it.
  3. Every section in Advanced CS should have a corresponding section in Core CS. If there is no way to justify adding a corresponding section in Core CS, then such section belongs in Domains.
    • This is relevant to our discussion in #528.
  4. There needs to be at least one section of Advanced CS that only depends on Foundations or Core CS, not on other sections of Advanced CS.
    • For this to be true of all sections is a "nice to have" but it might be too hard to maintain.

My basic idea is to model a four-year undergraduate CS degree, where this progression is possible:

joshmhanson commented 5 years ago

So with the above design (for which I, like everything else, hope to get feedback), that means Linear Algebra would likely end up in Foundations or Advanced CS. If it goes in Foundations, the resource we use can't depend on advanced programming knowledge. If it goes in Advanced Math, we would need to show that Advanced Math is a viable subject in and of itself for year 3 or 4, and that such material is depended on by at least one Domain.

(I might be overreaching on the amount of work that is viable to do before v9 lands. I want v9 to arrive by the end of the year.)

joshmhanson commented 5 years ago

I have used our wiki to create a draft for what the new Foundations page could look like: https://github.com/ossu/computer-science/wiki/Foundations-draft

Notes:

I will proceed to format the rest of the curriculum pages in this way unless there is anything seriously wrong with it.

Alaharon123 commented 5 years ago

Looks good. Should probably also have a flowchart to give an overarching view of everything.

joshmhanson commented 5 years ago

Foundations draft updated with some narrative and a more diverse set of resources (mostly to ensure we have both text and video coverage of most topics).

I think it's in it's final or near-final state. I wasn't sure what to do about the annoying dual-track Linear Algebra, but I think this is just a necessary evil. We may have other topics in the curriculum that have these dual-tracks.

@Alaharon123 yeah, this is worth doing once the whole revision is done!

Alaharon123 commented 5 years ago

Looks good, but it's unclear why Applied Linear Algebra is here rather than in extras/readings. Why would one want to reference this incomplete text?

joshmhanson commented 5 years ago

I want to ensure that there are text-based resources listed alongside video-based resources for people whose bandwidth is expensive. I don't know how this will play out yet, but I'm thinking that the separate extras/readings page might be removed in favor of keeping all high-quality materials grouped under the relevant topic, with explicit recommendations given about which resources are worth using under which conditions.

Applied Linear Algebra, incomplete though it may be, is geared towards beginners with only a high school math background. The other free text, by Jim Hefferson, assumes college level calculus just like the Strang course. So both groups of resources are grouped according to their prerequisites. I do probably need to add a note about the incompleteness of Applied Linear Algebra compared to the course it sits alongside.

At some point I also need to figure out just how much of linear algebra exactly is required for which later courses. It may be that some courses need a lot more and some need much less, so the tracks could be re-organized later according to their reverse dependencies. But that's not going to happen anytime soon as I don't have the time.

Alaharon123 commented 5 years ago

Ok I made a mistake. I saw Immersive Linear Algebra in the text and then Applied Linear Algebra in the table and didn't realize they weren't the same thing. What I meant to ask was why Immersive Linear Algebra is put there if that's something for OSSU to keep an eye on rather than for students to keep an eye on. However, I am now realizing that this is because you are using the wiki to have notes for yourself and are probably planning on transferring this all to the readme when 9.0 is ready.

I see that you added a note afterwards stating that Applied Linear Algebra does not cover everything it should. If that's because of my comment, I was mixing it up with Immersive Linear Algebra (if that's a thing anyway then I guess I'm glad that my mistaken comment led to something positive). Sorry for the confusion. The original text was clear, just Applied and Immersive look similar enough that I had a brain fart.