ossu / computer-science

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

Add Stanford CS101? #530

Closed joshmhanson closed 5 years ago

joshmhanson commented 5 years ago

The first course in the curriculum, MIT Intro to CS and Programming using Python, says that you will find the course challenging if you've never done any programming before.

Thus, it doesn't really start "from zero". This excludes anyone from the curriculum who is truly starting from nothing, and I don't want our curriculum to be exclusionary.

Therefore, I think we should add Stanford CS101 before MIT's intro. It takes a step back and answers much more fundamental questions.

It's probably the closest thing I've found to a MOOC for teaching what you learn in the great book Code: The Hidden Language of Computer Hardware and Software. It also has a very rudimentary introduction to programming (using a subset of JavaScript), which should help make students more comfortable going into MIT Intro to CS.

Many people here will find this course too easy. But that's because it isn't for you — it's for people who are truly starting fresh.

Alaharon123 commented 5 years ago

I don't think that's the solution to the problem. Right now ossu seems to have two goals for Intro to Computer Science. See if the field interests you and start off the major. So Intro to Programming is currently recommended that everyone do and consists of two courses (now one) that are the first course in Harvard and MIT respectively. The problem with this seems to be that Harvard and MIT are high level colleges so these courses are hardcore. People are being dumped straight into the deep end.

I don't think Stanford's CS101 is the solution. If you go on the Stanford website, that's a class for non-cs majors to get some computing knowledge; cs majors there are supposed to start with CS106. CS101 is definitely supposed to fulfill the testing the waters part, but it's lower level than a proper cs major; it's an entire rung down from Introduction to MIT 6.00.1x, not a stepping stone (does that metaphor even work lol).

Instead, I propose putting a note under it, like there is under Mathematics for Computer Science, that if you're failing the course, take Georgia Tech's Computing in Python and try again. This is the online version of their CS1301 course, which is their primary first cs course. Reason I'm saying this course is because I saw it mentioned twice in the mit 6.00.1x forums, one of them by a ta saying that other people have recommended it in the past (the other by two people saying that it helped them significantly).

Of course, now that I've typed this all out I'm noticing #521 and your points there are valid, but maybe putting it as an optional course for people having trouble with 6.00.1x would mitigate that. Also, there's enough time between 6.00.1x being offered to do the entirety of CS1301 so length maybe isn't as big a deal. (You can do 6.00.1x whenever afaik, but it's only offered on a schedule 2-3 times a year.) There's also the question of how much of CS1301 is helpful to 6.00.1x. Maybe part 1 is basic stuff that isn't needed and is better covered in 6.00.1x. Maybe part 4 is more advanced than will be helpful for 6.00.1x. I don't know, but it's worth thinking about. Maybe @bradleygrant can provide input here.

Anyway, take all this with a grain of salt since I haven't actually started yet (I'm in a shitty college so I don't have 15 hours a week extra, but I also don't feel fulfilled), but these are my thoughts on the matter.

bradleygrant commented 5 years ago

@Alaharon123 -- I'd be happy to provide insight if you have some specific questions. But ultimately I think the best thing is to try CS1301 out for yourself (and beta-test it for OSSU, if you like). One of the things I specifically enjoyed about the course is how little time I needed to make a step of progress in the course. You don't need 15 hours a week, you need 15 minutes a few times a day. I think you'll be pleasantly surprised by how much time you don't need.

Contrast that to CS50, which is an amazing course -- but you need an hour and a half straight for a lecture or two each week, 45 minutes for recitation sections, and several hours over the course of a couple weeks to bang on a giant problem set. It's easy to stagnate. But in CS1301 you can keep moving. So you do.

Alaharon123 commented 5 years ago

I pinged you specifically since you've done cs1301 and 6.00.1x so you can say which parts of cs1301 are helpful for 6.00.1x (or if it's the whole thing) and generally so that you're here and can be part of the conversation.

joshmhanson commented 5 years ago

Thanks for your feedback!

Stanford CS101 is admittedly not really a computer science course; it's more of an introduction to how modern technology works. (For those who are confused by my last statement: computer science has nothing to do with computers or technology. When computer science was discovered, the "computer" was a human being...)

It does provide some very rudimentary programming exercises (which you can see here). It's unclear if this would be sufficient preparation for MIT Intro to CS.

My suggestions in #531 could resolve this: Stanford CS101 (or anything very similar to it) would go under Foundations, a section devoted to non-CS prerequisites. Everything in Foundations would be optional for every student who already has the background.

MIT Intro to CS would still be the main course in Intro CS, but a relevant subset of GT Computing in Python (or anything like it) could be noted as optional preparation for those who already too comfortable with technology to do Stanford CS101 but still not comfortable enough to dive into the deep end of MIT's course.

Notice I said "a relevant subset of GT Computing in Python". I'm not sure if parts 1-2 would be sufficient, or if part 3 is also needed. If I remember correctly, there are also a lot of other introductions to Python in extras/courses that should be given proper consideration.

bradleygrant commented 5 years ago

Thanks for posting that resource on Stanford's CS101!

I went through a few of the sample lessons to see what CS101's course presentation looked like. It seems to be a suitable "first foundations" course. I was a bit concerned about the course's description of the language it uses to teach its code lessons, which they characterized as "a subset of JavaScript"; I was concerned that it would be too much like "toy code" or not very useful. I was happy to find that it is real JS, if not production JS. And the entire point of the course is to teach principles anyway.

I think the Stanford CS101 possibly merits inclusion as a "foundations" course, taking the place of a "survey of programming" course one might find as an elective or sub-unit in a junior high or high school program. It's a low-stakes way to test the waters and see if either programming or computer science is something one might enjoy.

In regards to GTx's CS1301x, I think that serves a separate purpose. In my mind, CS1301 is just a longer, shallower ramp up Mount 6.00.1. In other words, it gets you to the same place (or very close) but by trading time for effort. That's not to say I learned nothing from 6.00.1 (mainly: assertions, and plotting) but I touched all of it in CS1301, sometimes lighter, sometimes much deeper.

I find all of CS1301 relevant to 6.00.1x -- but of most help will be Parts 1, 2, and 3 (until Objects week, with which I think Part 4 of CS1301 actually does a better job). Below is an approximate mapping:

CS1301x Coverage Topic 6.00.1x Coverage
Part 1 Basic Programming, Procedures, Commenting, Debugging Week 1
Part 1 Variables, Logical & Mathematic Operators, Assignments Week 1
Part 2 Conditionals, Loops, Nesting Week 1
Part 2 Functions, Function Definitions, Stack Operations Week 2
Part 2 Error Handling, Try Statements Week 4
Part 3 Data Structures - Strings, String Manipulations Week 1
Part 3 Data Structures - Lists, Tuples, Sets, Dictionaries Week 3
Part 3 File Input and Output Not directly addressed
Part 4 Object-Oriented Programming Week 5
Part 4 Algorithms and Algorithmic Complexity Week 6
Not addressed Package Imports, Plotting Week 7

Hopefully this will help you answer questions related to course/material coverage. One thing you'll notice right away is there's a TON of material to pick up in the first week of 6.00.1x which is both language-agnostic and Python-specific... they kind of expect you to come in knowing how to code in some modern language. It's a lot to try and scrape together in the first two weeks of a course, and it's not a very nice way to learn the language.

joshmhanson commented 5 years ago

Wow... just want to say that this is eye-opening. I will have to get back to you later with my full thoughts.

waciumawanjohi commented 5 years ago

@bradleygrant You've been making a very persuasive case for OSSU recommending CS1301. I'll add a few things:

  1. I'm a current Georgia Tech masters student. (I applied to GT after preparing through OSSU.) I like what GT is doing around online CS education. One thing that GT gets right that we're still working on is getting a student community that creates positive feedback loops at scale. That is, students are very engaged, TA for courses, contribute to thousands of posts per class per semester. I want OSSU to work with an organization getting all of that right.

  2. Dr. Joyner, the developer of 1301x, is an instructor we should be working with.

    1. He is well respected in general among OSSU students. He is also demonstrably trusted by GT. He is an instructor that GT asks to join struggling online courses to right the ship.

    2. Joyner is responsive. I've corresponded with him multiple times. Recently I had a Udacity concern (Udacity hosts all the videos for OMSCS) and I reached out to Joyner and Udacity. I received a more full response from Joyner than from the platform itself.

  3. You join a steady beat of students pointing out the need for introductory courses that teach the basic basics. (e.g. @navimac's Oct 4 comment in the Gitter) I remember 6.00.1x and I would not have been able to succeed in that class if I hadn't already read an intro book on Python. We should look carefully at courses that will obviate that need for self-study of programming before taking the first class.

Pranaybee commented 5 years ago

I think an even more basic course should be a course on Logic. I am not sure where a course is offered that has this textbook, Introduction to Logic. This textbook should be coupled with this free software program on learning Logic, which is written by a different author.

joshmhanson commented 5 years ago

I'm going to close this issue for now since I've changed my mind about including Stanford CS101. So far, no one has really expressed an interest in it, and I think there are better solutions to the two problems I'm trying to solve:

  1. The MIT Intro to CS course is too hard for people without programming background: this should be solved by choosing a better introductory course.
  2. The curriculum assumes you are already familiar with modern technology: if this is really a problem at all, then we can include an optional Foundations course that introduces modern technology without also teaching programming, such as CS50's Understanding Technology.

For problem 1, I'm currently working on evaluating the options we have in issue #540. Please head over there for further discussions on this topic. We have to evaluate the intro courses on several criteria, and sometimes, a course can seem great until we encounter a deal-breaking flaw.

joshmhanson commented 5 years ago

Sorry @Pranaybee I forgot to respond to your comment. I think it's best if I address it in issue #540.