Open bryanyli opened 4 years ago
There is already an Advanced Theory and an Advanced Programming track.
Is the thrust of this Issue to replace Advanced Applications?
The thrust of this issue is to separate the current advanced sections into smaller sections that are more like "senior sequences", which involves replacing advanced applications. However, as shown above, I think it would also be useful to separate sections like Advanced Programming into Programming Languages and Software Engineering.
I think this approach would benefit students because it gives a list of topics, not courses to pick from.
a list of topics, not courses to pick from.
This is the current intention. That's reflected in language like:
Courses in Advanced CS are electives. Choose one subject (e.g. Advanced programming) you want to become an expert in and take all the courses under that heading. You can also create your own custom subject, but we recommend getting validation from the community on the subject you choose.
and
students should take every course that is relevant to the field they intend to go into.
Here's a provocative idea. Perhaps we should go the opposite direction.
Perhaps we should replace Advanced CS
with something like Elective CS
.
This could be a section of courses that cover topics that are elective in the CS2013. We can organize the courses thematically to help students grok the structure. But the only 'requirement' would be for students to do some reasonable count of electives. Not to complete a suite of related courses.
Separate from that we can have Capstone/Major Project. This would be filled with courses that expect students to take on a project of significant scope.
Advantages:
Drawbacks:
That is quite an interesting idea. While I do like the idea of branching out, I think I prefer the idea of gradually building up towards a project in a track.
I think it would be beneficial if we could get additional opinions on the topic.
@Alphyte Here is some additional opinion:
I've finished Advanced Programming and I'm halfway through Advanced Theory. Also finished one and a half Advanced Applications (Scala + half of Fullstack Open).
In my opinion they cannot be organized to build up to a project. They are fairly separate topics that don't mesh together well. Such is the nature of these topics (and electives in ANY subject in general).
As for Advanced Applications, they are very much self-contained (due to how Coursera designed specializations). They can be taken while ignoring the rest of Advanced CS. They are designed to build up to a project by themselves. Let's say there are 5 courses in a specialization; the first 4 handle the build-up, the fifth being the project.
The purpose of CS2013 is to be well-rounded and cover pretty much everything. The only way, as far as I can see, to create tracks to build up to a project, would be to create multiple, much shorter, more specialized mini-curricula, separate from OSSU; obviously this would move far, far away from CS 2013. (One example would be: "Functional Programming Curriculum": How to Code 1,2 + Prog Lang A,B,C + Haskell + (maybe 1-2 other general courses) + Scala Spec. But even this has a lot of repetition in it.)
So I'm against this idea.
I agree with @waciumawanjohi that it would be easier to maintain his idea of Elective CS
than to create separate tracks. But I don't like this idea either. It would be more confusing than the current setup.
I think the current Advanced Programming - Advanced Systems - Advanced Theory - Advanced Applications
is a good balance between these two ideas: they present some semblance of tracks while also presenting a good selection of elective subsets to take.
More importantly they paint a very good picture of the overall landscape of CS, which is really vast. The current setup greatly alleviates this. You want to be: an Academic? -> go Theory. A Programmer? go Programming. A Systems person? go Systems. Something else? choose an Application.
We should also consider the maturity and the interests of advanced students. While we continue to recommend that they stick to one Advanced subset, they can feel free to mix and match courses from multiple subsets if they like. They will have much more command over their own destiny at that point, strict adherence to the guidelines is not necessary. (This kind of thing happens even in real life universities.) By that point maybe they will have already found jobs and forgotten about "finishing" OSSU, or they will continue to learn whatever they like.
At least this has been my personal experience. I "officially" finished OSSU by taking Advanced Programming then a specialization; but continue in the other subjects (partly as a guinea pig for the community).
I think the current organization is excellent, let's not rock the boat. Don't fix it if it ain't broke, ya know?
I'm probably going to be in the minority on this one. But I will support whatever comes out of this. Best of luck to all of you! :rocket: :+1: :100: :heart: :smiling_face_with_three_hearts:
I honestly don't understand why Haskell, Prolog and Scala programming courses are included in advanced track. They should be considered as an optional side tracks and not advanced. Why there are no good courses on Java and C++?
Compilers should be included in Core CS. It is a base course essentially.
Tim Roughgarden' Algorithms courses are highly dependent on prior knowledge of discrete math, complexity theory and computation theory. You should consider including more depth intro in those subjects before the algos courses or provide an optional course like the one from Sedgewick which is more independent.
Consider adding Blockchain course as part of Advanced apps track.
Thanks.
They should be considered as an optional side tracks and not advanced.
In the OSSU:CS curriculum, advanced courses are somewhat optional.
Why there are no good courses on Java and C++?
Haskell and Prolog are included not to teach those languages, but to teach programming language concepts that they embody well. If a better course were found that taught the same concepts in a different language, we would switch.
You should consider including more depth intro
There was a group of contributors that looked at this earlier in the year. Ultimately they made a recommendation to keep the current structure. (Read more here: https://github.com/ossu/computer-science/issues/664)
If you would like to bring together a few other contributors to take another look at how to improve the algorithms & data structures recommendations, I would be interested in reading that analysis.
Consider adding Blockchain course as part of Advanced apps track.
I think a fintech track in the Advanced Applications would be a great idea.
I do really agree with this thread that specializations should be more specific, for example if i want to be a software engineer there is no specific guide in the course after finishing the Core CS. Haskell and Scala after searching i found it's more suitable for making programming languages and compilers which is good for people who want to learn how things have built or beyond the high level programming and that fit with Compiler Course in the Curriculum. So i see @Alphyte new design it's more professional.
Thanks in advance
Consider adding Blockchain course as part of Advanced apps track. I think a fintech track in the Advanced Applications would be a great idea.
I would like to nominate teachyourselfcrypto.com for this. It's a website inspired from the OSSU itself and is a complete course on all the big crypto topics. It's free.
I'd say blockchain forms a part of advanced systems.
Speaking of reorganization, game theory in advanced theory has a part 2 which is a nice course but not in the curriculum. It requires some basic calculus though (to compute local maxima/minima). Not sure why it's not in the course, given that part 1 is.
@waciumawanjohi I read #664 and it seems like one of the issues is that the coverage of Data structures isn't good enough. I found a course specifically focusing on teaching data structures (it's a part of a Data Structures and Algorithms Specialization).
The instructors are quite good, I did their course on Intro to discrete math, which is a part of the OSSU.
I found one review directly comparing the specialization with Roughgarden:
This class hits the sweet spot for people who find Tim Roughgarden's Analysis and Design of Algorithms course too intense and hand-wavy, but who still want mathematically-sound, proof-based discussion of algorithmic techniques. (Listen to Roughgarden's drive-by treatment of Karatsuba's algorithm in his first week of lectures, and you will appreciate Neil Rhodes' coverage of the same algorithm all the more.)
Currently, the Advanced CS courses are organized in such a way where the learner is encouraged to pick a subset of the courses. I think that organizing it in a way such that there are separate "sequences" and having the learner pick from those sequences allows for the following benefits:
A short example of what I had in mind is shown below.
Advanced CS
After completing every required course in Core CS, students should choose a couple of topics in Advanced CS based on interest.
Programming Languages
Software Development
Robotics
Theory (Focus on Algorithms)