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

Problems/suggestions with some courses #385

Closed joshmhanson closed 7 years ago

joshmhanson commented 7 years ago

Hi,

The parallel computing course has homework assignments that require you to be physically present on campus. Maybe replace it with Parallel Programming, which builds on the earlier Scala programming course?

I notice that the highly-acclaimed Automata course was dropped in favor of Intro the Theoretical Computer Science because Automata was no longer available. However, the Automata course is currently available here: https://lagunita.stanford.edu/courses/course-v1:ComputerScience+Automata+Fall2016/about

The operating systems course is just a series of YouTube videos, but this class offers offers exams and assignments. Has the latter ever been considered?

The programming paradigms section only covers statically-typed languages in functional and object-oriented variants (Scala and Java). Here is an alternative: the well-regarded three-part series "Programming Languages" (A, B, C) covers statically-typed functional programming (A), dynamically-typed functional programming (B), and dynamically-typed object-oriented programming (C).

So that set of three could replace the Scala class, and the final paradigm could then be covered by the OOP Java course. This would be more complete and cohesive, with the trade-off being that it would contradict my earlier suggestion of using the Scala-based Parallel Programming course; the Udacity course could be used instead in this scenario.

Finally, the UX Design course seems overly specific to mobile development (Android in particular). Why not use this more general course? https://www.coursera.org/learn/ui-design

alexerhardt commented 7 years ago

These are excellent suggestions - I don't know if they'll include them in the curriculum but I've certainly taken note. Thanks.

ericdouglas commented 7 years ago

Many thanks for your feedback guys, I really appreciate it.

I just opened an issue to discuss our next curriculum update here, if you have more suggestions, feel free to add them here or on the another issue.

lambainsaan commented 7 years ago

One more suggestion, add MIT 6.004 (http://computationstructures.org/notes/top_level/notes.html), 6.004 is an introductory level Computer Architecture course and has great labs and exercises to practice the concepts. The Princeton Course has a prerequisite that you should have taken basic computer architecture course, 6.004 will be great as an introductory level computer architecture course, which can be taken after a course on Algorithms. It's also offered on edX once a year.

joshmhanson commented 7 years ago

@lambainsaan You mentioned the course is offered on edX, is it one of these or something else?

Note that the above-linked Part 1 has this prerequisite: The Computing Technology Inside Your Smartphone

lambainsaan commented 7 years ago

@hanjiexi Yes it is the same course.

Though there is a prerequisite mentioned for the course, the course is very basic and it starts out from scratch. I have no idea why they have mentioned that course as a prerequisite, when asked about prerequisite course in the discussion forum, this was the reply from the staff,

screenshot from 2017-02-12 00-42-39

Here is the course's brief overview,

6.004 offers an introduction to the engineering of digital systems. Starting with MOS transistors, the course develops a series of building blocks — logic gates, combinational and sequential circuits, finite-state machines, computers and finally complete systems. Both hardware and software mechanisms are explored through a series of design examples.

joshmhanson commented 7 years ago

Thanks for the info. So are you saying that a basic physics course + those three edX courses listed above would be suitable as the prerequisite for taking the Princeton Computer Architecture course that's already in the curriculum, or are you suggesting that the Princeton course be removed altogether and replaced with those?

Unfortunately there's hardly any info on the Coursera page for that Princeton course, and I know nothing about the subject. But I did see this review:

This course was a very helpful for filling in gaps in my knowledge between high level software development and details of processor architecture and instruction sets (MIPS mainly). I didn’t have the exact prerequisites for this advanced course so it was hard work especially at the beginning (hadn’t done the earlier architecture course recommended and am not an electrical engineer, but have trained and worked in software development and physical sciences). The concepts are not unduly difficult but the course is VERY detailed and the sheer volume of recommended reading somewhat overwhelming: I got by with buying a Kindle version of the Hennessy and Patterson text book (plus a few peeks into a digital logic book). I appreciated Prof Wentzlaff’s insights: he was clearly teaching from experience.

The course is however not really designed bottom-up for online teaching. The lectures are videos of actual Princeton lectures, with a few multiple choice questions hacked in. It helps to keep a copy of the slides when watching as when the camera pans out it is difficult to read the diagrams on the board.The course homework was quite difficult, even after the brief solutions were given. The mid-term and final tests exams were however well constructed and instructive and much clearer as to what was required. So all in all a real bargain for the cost of a text book!

So I'm not really thrilled about this course based on this review. It sounds like it might go way too deep into the hardware (i.e. computer engineering) for a computer science curriculum. For instance, the Carnegie Mellon requirements for computer science majors doesn't require any course that goes so deep into hardware. Something like the Princeton course, but shorter and lighter-weight (and without any prerequisites), would be the ideal in my opinion. But I'm not sure anything like that exists. On the other hand, the linked edX courses above do look more pleasant for CS students, but altogether it would take 30 weeks to get through them, not counting the prerequisite physics course!

So ultimately, my suggestion would be to have some kind of 'electives' concept in the OSSU computer science curriculum. There could be some core classes that everyone following the curriculum takes, but things like the Princeton Computer Architecture course, or the three edX courses, could be an elective path for people who want to stay closer to hardware -- i.e. people who see themselves working more in systems languages like C or Rust. Then there could be another elective path for people who think they're mainly going to be working with garbage-collected runtimes like JavaScript, .NET or JVM languages.

joshmhanson commented 7 years ago

Has anyone ever taken the Nand 2 Tetris course?

https://www.coursera.org/learn/build-a-computer

I'm wondering if this would be a suitable replacement for the computer architecture courses, as it is short (six weeks) and fully self-contained (no prerequisites).

joshmhanson commented 7 years ago

Actually, there is a part II, covering virtual machines, compilers, and the operating system stack: https://www.coursera.org/learn/nand2tetris2

So I suggest that, for the purposes of a software-focused computer science education, "From Nand to Tetris Part I" can replace the Computer Architecture and "From Nand to Tetris Part II" can replace the Operating Systems and Systems Programming course. This would be more cohesive, software-focused, and time-efficient. Plus, there's no better way to learn computer architecture and operating systems than to make one yourself.

ghost commented 7 years ago

It was removed due to the exercises being paid, but I think I looked into it and that was incorrect, you simply cannot submit the course-work to be graded. Test scripts are provided to check your work: http://nand2tetris.org/01.php

I actually think this means N2T should be added back.

ghost commented 7 years ago

I haven't checked all of them, but it seems like every Coursera course I've seen requires you to pay to "Access to Graded Materials."

qodist commented 7 years ago

I haven't checked all of them, but it seems like every Coursera course I've seen requires you to pay to "Access to Graded Materials."

There's almost 1500 free courses (in English) Free Coursera

joshmhanson commented 7 years ago

@tunabee We apply the same minimum standard to all materials. We consider a course "free" if the primary learning materials (e.g. lectures) are free to access, not if every single aspect of the course is free. If we required every single course to offer free graded quizzes/exams/projects, then there's a ton of material on the Internet that we wouldn't be able to include, such as MIT OpenCourseWare, online books, etc.

ericdouglas commented 7 years ago

Closed due to v7 release