Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RFC: Replace the current Object Oriented Design and Design Patterns courses #1168

Open
zarry0 opened this issue Aug 6, 2023 · 14 comments
Open

Comments

@zarry0
Copy link

zarry0 commented Aug 6, 2023

Problem:
Object Oriented Design, Design Patterns (and Software Architecture, although this last one is out of this RFC's scope) leave much to be desired as the course pace is monotonous and way too verbal with minimal coding involved, and the few coding assignments are paywalled and also require the use of Android Studio which is an unnecessary hassle.

Duration: 3 months(?)

Background:
Object Oriented Design and Design Patterns are key concepts that any CS/SE student must know. Yet, the current alternatives in the curriculum hinder the learning process by being unnecessarily tedious in their presentation of the topics.

It's safe to say that the consensus about these courses is that they're not good (see the dozens of negative comments that students leave on the discord channels for these courses).
While the courses have high production quality, this did not translate to the content of the courses themselves as they're not didactic. In his review, spamegg writes:

Another verbal course. It's like a literature class. Words, words,
words, words, words. They hired a nice young acting or dance major
student to read all the text from the teleprompter for a nice
presentation. She clearly has no idea what she is saying.

Spam's recommendation: What do you think? Skip it, of course.

(This is in reference to the software architecture course, but it perfectly applies to the other courses in the specialization).

I've heard some say that the tedious nature of these courses is due to the very own nature of the topics they aim to teach, and we are supposed to endure that because this material is essential and we do not have better alternatives.

Doing some research, I found some courses that could replace the OOD and Design Patterns courses (sadly, they're not enough to replace the software architecture course).

The course is Object Oriented Design from Northeastern University.

NEU CS 3500: Object Oriented Design
From the course description: "CS 3500 teaches a rigorous approach to object-oriented programming and design, with an emphasis on abstraction, modularity, and code reuse as applied to the building and understanding of large-scale systems. [...]" It also has full lectures and assignments.

It lists CS 2510 Fundamentals II: Introduction to Class-based Program Design as a prerequisite.
I have read a couple of negative reviews of this particular course online, but I've been doing it for the past few weeks, and I'm actually enjoying it. It feels like a successor to PL part C as it touches on some of the same concepts but tries to develop design recipes around them (similar to the HtC courses).

Both courses take a design approach similar in style to How to Code, but for OOP as they're partially based on materials developed by Matthias Felleisen, the author of How To Design Programs (I believe he also taught some of the earlier versions of the courses listed above and also wrote a draft for a book called How to Design Classes that some of the courses lists as related material)

Together they cover topics like principles of object oriented program design, basic Java, basic data structures implemented with OOP, UML, and Design patterns. It generally translates many of the concepts taught in the HtC and PL courses to an OOP environment and delves into design patterns.

The courses have full written lectures and assignments, plus some labs; overall, they seem very practical.

Proposal:
Replace the current Object Oriented Design and Design Patterns courses with NEU CS2510 Fundamentals II: Intro to Class-based Program Design and NEU CS3500 Object Oriented Design.

Alternatives:
There is another alternative to CS3500 that doesn't lists CS2510 as a prerequisite:
NEU CS 5004 Object Oriented Design
It combines some lectures from 2510 and some from 3500.

This could be the way to go if we want to reduce the number of courses, It covers roughly the same material, but it covers them less in depth.

Edit:
Fixed Fundies 2 course number

@Alaharon123
Copy link
Contributor

Quick note, you refer to Fundamentals 2 has CS 2500 throughout the op. CS 2500 is actually Fundamentals 1. CS 2510 is the course you mean.

Some notes on CS3500 vs CS5004:

CS3500 CS5004
For undergrads who have taken CS2500, which is a HtDP course like How to Code, CS2510, a course that teaches Java from the perspective of someone who only knows Racket Student Langugage For masters students from a non-CS background who have taken CS5001, a course I'm not very familiar with beyond it using Python and being from Northeastern, a school that likes HtDP
Assumes knowledge of Java, starts from later and thus goes further. If this were from a textbook, this is the second half Assumes you only know Python and starts with teaching Java. If this were a textbook, I think it'd be a selection of chapters and sections from throughout
Very good lecture notes. Many students in person learn from them rather than lecture because lecture often doesn't add much lecture notes are adapted from CS2510 and CS3500, both of which have great lecture notes
I have taken this course Has course charter available that says what in CS2013 it covers! https://www.khoury.northeastern.edu/cs5004-object-oriented-design-course-charter/

@edwinhung
Copy link

Thank you for addressing this. I am struggling with the current Object Oriented Design and Design Patterns courses. I will try the alt courses you mentioned and come back for feedback, hoping that would help. 😊

@Jack203s
Copy link

Jack203s commented Aug 7, 2023

Should I try CS5004 or NEU CS2500 Fundamentals II: Intro to Class-based Program Design and NEU CS3500 Object Oriented Design? Please let me know

@zarry0
Copy link
Author

zarry0 commented Aug 8, 2023

Should I try CS5004 or NEU CS2500 Fundamentals II: Intro to Class-based Program Design and NEU CS3500 Object Oriented Design? Please let me know

Well, I may not be able to give you a straight answer. It depends; I believe the CS2510 and CS3500 combo is the better alternative. The transition from PLC to CS2510 feels really gentle (kinda similar to the transition from HtC: Complex Data to PLA) as it begins by translating data definitions in Racket to Java; it feels like a continuation of those courses. And in this option, we replace two courses with another two so the net amount of courses remains the same. Also, based on @Alaharon123's comment, this approach should leave you better prepared (as taking CS3500 is like "the second half of a textbook," and I imagine CS2510 should be like the first half of that textbook)

CS5004 should also be easy to pick up as it is meant for students with a non-cs background, but I'm worried as to how in-depth the course covers the topics. Also, I took a look at some lectures from CS5004, and while they're clearly based on lectures from 2510 and 3500 the fact that some examples (HtC-like examples) are given in Python feels less natural than seeing them in Racket (I think using Racket instead allow us to compare the fp vs oop approaches); although this last point is really not a big deal, the examples are simple enough to follow (it's just that I find easier to think about design recipes in Racket and then translating them to java, as opposed to seeing them in Python first).

So, for now, and until more people do these courses, the main difference between the two paths would be depth and length. If you want to go more in-depth and have the time to do two courses, do CS2510 and then CS3500; otherwise, take CS5004; I don't think you would miss some vital piece of information anyway.

For me, the 3500 route makes more sense (although I might end up taking all three courses just to be able to compare them), but again you should do what you think will work best for you.

@writeonlycode
Copy link

I think it's a good idea to replace Object Oriented Design, Design Patterns (and maybe Software Architecture). I did OOD and I'm currently doing DP, and I can confirm that the courses are not very good.

@pulkitkrishna00
Copy link
Contributor

pulkitkrishna00 commented Aug 8, 2023

It also has full lectures and assignments.

Does it have lecture videos? I can't seem to find them. The lecture notes are good, though.

@Jack203s
Copy link

Jack203s commented Aug 8, 2023

Should I try CS5004 or NEU CS2500 Fundamentals II: Intro to Class-based Program Design and NEU CS3500 Object Oriented Design? Please let me know

Well, I may not be able to give you a straight answer. It depends; I believe the CS2510 and CS3500 combo is the better alternative. The transition from PLC to CS2510 feels really gentle (kinda similar to the transition from HtC: Complex Data to PLA) as it begins by translating data definitions in Racket to Java; it feels like a continuation of those courses. And in this option, we replace two courses with another two so the net amount of courses remains the same. Also, based on @Alaharon123's comment, this approach should leave you better prepared (as taking CS3500 is like "the second half of a textbook," and I imagine CS2510 should be like the first half of that textbook)

CS5004 should also be easy to pick up as it is meant for students with a non-cs background, but I'm worried as to how in-depth the course covers the topics. Also, I took a look at some lectures from CS5004, and while they're clearly based on lectures from 2510 and 3500 the fact that some examples (HtC-like examples) are given in Python feels less natural than seeing them in Racket (I think using Racket instead allow us to compare the fp vs oop approaches); although this last point is really not a big deal, the examples are simple enough to follow (it's just that I find easier to think about design recipes in Racket and then translating them to java, as opposed to seeing them in Python first).

So, for now, and until more people do these courses, the main difference between the two paths would be depth and length. If you want to go more in-depth and have the time to do two courses, do CS2510 and then CS3500; otherwise, take CS5004; I don't think you would miss some vital piece of information anyway.

For me, the 3500 route makes more sense (although I might end up taking all three courses just to be able to compare them), but again you should do what you think will work best for you.

Thanks for your suggestion. I will do CS2510 and then CS3500.

@zarry0
Copy link
Author

zarry0 commented Aug 17, 2023

It also has full lectures and assignments.

Does it have lecture videos? I can't seem to find them. The lecture notes are good, though.

Sadly no. The only lectures available for all listed courses are the written ones. I think the notes are good enough that videos are unnecessary, but perhaps that depends more on your learning style than the notes themselves.

Edit
I was wrong; the CS2510 version I linked above has video lectures and notes, but they're still missing for CS3500 and CS5004.

@Takoulinos
Copy link

I decided to do CS3500 instead of OOP and Design Patterns and so far it is very solid. My only issue is that you can't use the university's autograder to test your solutions to assignments.

@Alaharon123
Copy link
Contributor

There is no autograder for the course, only a style checker that tests for little more than if you put the config file they give you into IntelliJ and ran the autoformat. I think you also have to change a setting relating to line length or something, but that's about it, just read and follow the Google Java Style Guide that's linked. All other grading is done by humans and yeah you don't have a human to grade you. The style points are something like 15% of the grade

@zarry0
Copy link
Author

zarry0 commented Aug 17, 2023

I decided to do CS3500 instead of OOP and Design Patterns and so far it is very solid. My only issue is that you can't use the university's autograder to test your solutions to assignments.

The main disadvantage of these courses is the lack of an auto grader and/or reference solutions for the assignments. One solution I can think of is if the RFC gets implemented and the courses are added to the curriculum, and once a few people have finished the courses; we could reach a consensus about how the solutions to the assignments should look (according to the course design guidelines). That way, we could generate a "solutions bank" for future reference, like we had on the HtC courses. But, for now, it is possible to self-assess the quality of your solutions using the tester library and following the design principles laid out on the course page.

@ahsatan
Copy link

ahsatan commented Dec 4, 2023

Glad it's not only me - the current recommended OOP classes are a major disappointment and turn-off for progressing through OSSU. The lessons drag and are minimally informative for the time required. While I understand the value of planning your project out, the emphasis on UML here is so opposite to my experience in modern software jobs (I'm going through OSSU to re-skill after being a SAHP for a number of years). It's actually hard to not zone out in these lectures and I generally love school and learning.

The tedium of watching somebody who clearly doesn't care about the topic and can't pronounce 'Java' nor 'attributes' was infuriating. Passion is so valuable towards engaging your audience and this class falls flat after Professors Kiczales and Grossman.

Will check out the suggested alternate classes and be back with feedback!

@neilord
Copy link

neilord commented Dec 28, 2023

Hi! Why OSSU curriculum still have Object Oriented Design and Design Patterns courses if they are bad (or not that much?). After all which courses to complete "Core Programming" should be taken? Could you please reach a consensus on this topic? Thanks!

@pulkitkrishna00
Copy link
Contributor

pulkitkrishna00 commented Dec 28, 2023

@neilord

Hi! Why OSSU curriculum still have Object Oriented Design and Design Patterns courses if they are bad (or not that much?).

Because an alternative course which has been validated by multiple people has not been found yet. This RFC lists an alternative, but it does not have lecture videos, which can be a bit of a problem, especially this early in the curriculum. But it has very excellent lecture notes, so it might not be that much issue. The main concern is that we do not have enough analysis from people who have done this course yet.

You are welcome to try this and report your findings.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants