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

CS50 2018 - Dynamic Programming - should it be optional? #463

Closed amadeann closed 5 years ago

amadeann commented 6 years ago

CS50 course has been updated in 2018, and now it includes Dynamic Programming in week 6 (link: What's new?).

The curriculum says:

feel free to skip straight to the second course when CS50 (the first course) moves away from C.

Since week 5 touches on HTML (so it moves away from C), is the week covering Dynamic Programming required? Or is it something that will be covered anyway in subsequent courses?

FlorianHoornaar commented 6 years ago

I found the exercise on Dynamic Programming the most challenging and most rewarding part of CS50. I recommend doing this part.

IMHO the lecture itself is not particularly good. Google 'edit distance video' to find better and shorter explanations. This video helped me a lot: https://www.youtube.com/watch?v=We3YDTzNXEk.

Regarding the remainder of the course. Having web development experience, I put the videos on 2x speed and blazed through them. It shouldn't be too hard anyway. And it is a good reminder of all the fundamentals that we normally take for granted.

I found it fulfilling to have done all the exercices and to get a certificate. But maybe that's a reflection of my OCD and the time that I have available. ;-)

joshmhanson commented 6 years ago

Since week 5 touches on HTML (so it moves away from C), is the week covering Dynamic Programming required?

Haven't looked at it yet, but it would be nice to include dynamic programming in the curriculum. I am in favor of changing the wording assuming the assignment is as good as @FlorianHoornaar says it is -- has anyone else tried it?

FlorianHoornaar commented 6 years ago

What is actually the reason for skipping the python/web part?

amadeann commented 6 years ago

Thanks for your thoughts on this.

Skipping the second part is recommended since the second part is apparently much easier. It probably depends on when you're coming from.

In my case, I've been doing quite a bit of development for over a year, and had some experience with statistical programming languages at the university (R and SAS 4GL). I also worked full-time in Business Intelligence for 2 years, so I got the working knowledge of databases as well. I don't need another introduction to high-level programming languages, and basics of web development. On the other hand, I feel like I am lacking a lot in terms of more basic computer science theories. That's why I decided to start doing the courses in this repo (I took before both parts of Nand2Tetris and I think it was the best online course I ever took).

I'd guess that a lot of people starting the OSSU 'degree' come from a similar background. They have some working knowledge of programming, but never had a chance to get solid understanding of different CS theories. So it doesn't really make sense to go over the basics once again if you can spend that time going straight for the knowledge you're after. Since the 'degree' will take a few years to complete, it's better not to 'waste' too much time on things that won't give you too many new insights.

a1h05 commented 6 years ago

I am in favor of changing the wording assuming the assignment is as good as @FlorianHoornaar says it is -- has anyone else tried it?

It seems like week 5 (HTTP/HTML) and 6 (Dynamic programming)do not contain assignments (or at least edx page does not mention them at this time) Only lectures: https://video.cs50.net/2017/fall/lectures/6 http://video.cs50.net/2017/fall/lectures/7

But I see that week 7(Web Programming) contains this new assignment - https://docs.cs50.net/2018/x/psets/6/similarities/more/similarities.html , probably that what FlorianHoornaar referred to.

DavidScales commented 6 years ago

For what its worth I'm about to start on that assignment this week, so I should soon be able to add my thoughts to @FlorianHoornaar's endorsement

FlorianHoornaar commented 6 years ago

Okay, now I’m anxious. If you solve it within the hour... Feel free to lie your ass off, or at least soften the blow a bit. 😰

FlorianHoornaar commented 6 years ago

@a1h05 “Similarities” is indeed the one with Dynamic Programming

doct0rX commented 6 years ago

I've finished all CS50 course long time ago.. and since OSSU focusing on CS not programming languages! what you'll learn from this week and so on won't be computer science but some web development and simple syntax. if you started next course -- intro to computer science using python -- professor Eric discussed dynamic programming and memoization and other concepts beside basic algorithms.. studying CS make you understand what's really going on with solid understanding while it would be easy to study/know any programming language to work with for certain situation I've finished3 months of Udacity Android nano-degree by Google in 6 days with project submissions

leungleoqin commented 6 years ago

@hanjiexi There is a section dedicated to Dynamic Programming in Part II of the Stanford Algorithms Course, which is already included in the curriculum. I haven't seen the latest version of CS50, but IMO the Stanford course explains it pretty well and offers a systematic approach to identify opportunities for using DP.

Nonetheless I think CS50 is a great course and should be completed in full. Like @FlorianHoornaar said it is a good refresher even for those with experience, and they can choose to skim through it if needed. For people who came from a non-technical background, it is a good overview of topics they are about to dive deeper into.

a1h05 commented 6 years ago

it is -- has anyone else tried it?

Have tried https://docs.cs50.net/2018/x/psets/6/similarities/more/similarities.html . I had not used dynamic programming before, so it was interesting enough for me. I think from introduction point of view it is worth to complete.

If we want to omit web development, it is possible to do this task without it. You could only touch helpers.py and then check it in the console via ./score FILE1 FILE2

DavidScales commented 6 years ago

Just to follow up on this after finishing the assignment:

Don't worry @FlorianHoornaar, I did find this assignment to be challenging haha. I also found your recommended video to explain the algorithm much more clearly, so thanks for that 👍

I think this assignment and the web part of the course in general are pretty darn good (better even than when I took CS50 a few years ago).

I think at this point it probably just boils down to preference for whether or not the later sections of the course be mandatory/optional. There are valid points on both sides.

The only solution I could think of would be to collect the arguments for & against finishing the course, and add that to the linked FAQ, letting students decide for themselves.

I'm personally planning on finishing the course, but only because its so motivating to actually finish something, and I can't count how many times I've started a self-pace online course and not finished it.

joshmhanson commented 6 years ago

There is a section dedicated to Dynamic Programming in Part II of the Stanford Algorithms Course, which is already included in the curriculum.

I totally forgot about that! That definitely counts against making CS50's new section mandatory.

On the other hand, there's nothing wrong with repeating the same concept twice, and the feedback on that assignment has been very positive. We originally made the web section of CS50 optional because it was too easy, shallow, and frivolous. But that reasoning doesn't seem to apply in this case, so I am in favor of keeping this assignment in the curriculum.