ossu / computer-science

🎓 Path to a free self-taught education in Computer Science!
MIT License
172.55k stars 21.79k forks source link

Re-organization roadmap for OSSU CS #422

Closed joshmhanson closed 4 years ago

joshmhanson commented 7 years ago

Continuing discussion from #421 and #418. Will add my thoughts later.

chrisdziewa commented 6 years ago

I just want to offer some feedback. I believe that the Software Construction courses from UBC are severely lacking in effectiveness. The first one varied between good and mediocre. The second is literally one of the worst learning experiences I've ever had. The instructors race through topics and somehow expect students to understand the advanced use cases of the patterns they barely explained. Then to make matters worse, they expect students to have an insane command over Java to complete the final project with requirements nowhere near reflecting that of the poor instruction given. As someone who has programmed for years in many different languages, I have to believe there is a better course offering available.

joshmhanson commented 6 years ago

I appreciate this feedback. I have mixed feelings about UBC Software Construction.

I will start with the positive: the course exists for a good reason, which is to expose students to the painful reality of trying to be productive in an unfamiliar codebase written in an unfamiliar language that favors a convoluted coding style. Feeling a little overwhelmed is part of that experience.

What I don't like is that "making students feel overwhelmed" (on purpose) is not really relevant to a computer science education. It's more like job training, which should be done by companies, not by us.

What would be relevant is an in depth analysis of (1) the semantics of object oriented programming; (2) the design process for large-scale software, where decisions are made about the types needed by the system.

(1) is needed because traditional object-oriented programming is complicated to describe mathematically, which in practice leads to lots of indirection and makes it difficult to reason about. But, it is very common and useful in some scenarios, so it needs to be understood.

(2) is needed because students of CS, regardless of whether they will go on to be industrial programmers, should develop a robust understanding of how to scale the systematic design process (learned in the "How to Code" series) beyond a single module.

The Programming Languages course (mostly Part C, if I remember correctly) goes into some greater depth on the design process, but still only on the level of a single module (i.e. the types of functions: parametric polymorphism vs. subtyping polymorphism). We need the same thing applied to a system of cooperating modules, discussed explicitly and systematically.

All of this is to say that I want to replace Software Construction, and there are many options for doing so superficially. At least one of the alternatives I remember trying out was just as bad (I think it was the UC San Diego Java course). But if we're just doing a superficial replacement, it's not clear what the benefit will be.

I have so far not found what I'm looking for. That's why I want us to design our own courses using publicly available materials (e.g. academic papers) as sources. But this is a supermassive undertaking...

On Mon, Apr 30, 2018, 11:46 PM Chris Dziewa notifications@github.com wrote:

I just want to offer some feedback. I believe that the Software Construction courses from UBC are severely lacking in effectiveness. The first one varied between good and mediocre. The second is literally one of the worst learning experiences I've ever had. The instructors race through topics and somehow expect students to understand the advanced use cases of the patterns they barely explained. Then to make matters worse, they expect students to have an insane command over Java to complete the final project with requirements nowhere near reflecting that of the poor instruction given. As someone who has programmed for years in many different languages, I have to believe there is a better course offering available.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/ossu/computer-science/issues/422#issuecomment-385592611, or mute the thread https://github.com/notifications/unsubscribe-auth/AFbnYidY3gFv46N2uALyINF38MCqyjc2ks5tt9qqgaJpZM4PSEb8 .

chrisdziewa commented 6 years ago

Thank you for your response! I really wanted to like the courses because I thought the approach was unique and because the subject matter was interesting and important. It seems that the course suffers from poor execution. Perhaps they were a bit overambitious to try to cover so much in such a short time frame.

Having control over course content creation would be awesome. It reminds me of what free code camp has achieved. But yes, definitely a massive undertaking requiring massive support.

Hope to see this project gain more traction because it is awesome so far.

andrewtcooper commented 6 years ago

FYI this course now costs $9 to access all its content without the certificate. I know that's not much but now it seems to go against the OSSU philosophy even more. Evidently Edx is now going to be doing this with an assortment of courses going forward as discussed in this blog post https://blog.edx.org/furthering-the-edx-mission/?track=blog so it's not clear how big of an effect this might have on the curriculum overall.

joshmhanson commented 6 years ago

@andrewtcooper I'm enrolled in Software Constructio but I didn't get an email about that, and I can't find any notice within the course about a price increase to $9. Where are you getting that information?

andrewtcooper commented 6 years ago

@hanjiexi I should have clarified, the Data Abstraction course is still free (for now) but the Object Oriented Design course is now showing as costing $9 to audit. There are other courses in the OSSU curriculum that are also now showing as costing $9 to audit, but I can't remember which ones off the top of my head. See screenshot: https://imgur.com/HMKVaos

joshmhanson commented 6 years ago

I've been holding off on sharing my long-term ideas because I felt they're too incomplete and too speculative, but now I think I need to just share them and start gathering feedback right away.

Some of this is only relevant to OSSU CS, and much of it is relevant to OSSU as a whole. I could have posted it here or the roadmap repo, but chose here for greater visibility.

Some day, I hope OSSU would exist as both an online and offline organization, offering a robust, cutting-edge, authoritative, unified, self-sustaining curriculum that is both simple to approach yet sufficiently challenging to improve the minds of its students.

I have some tentative ideas for how to implement these goals:

Apart from the students, who benefits from building all this infrastructure? What financial incentive is there for anyone to support it? I don't have any thoughts on organization funding at this time, but I would suggest that the people who build it should be students themselves — not some professional contractors, etc. Open Source Society University should be open-source through and through — every project a student produces, all the software they use to produce it, and all the software that runs the school. The act of building it is itself an educational achievement, and those who do will learn the concepts probably much better than the people who are just using it.

Looking for feedback!

fractalbach commented 6 years ago

@hanjiexi

A couple ideas I think should be pursued:

I also think it's important to increase communication between students on similar pathways. There could be a system designed specifically for the purpose of grouping people together, and prompting their communication.

Even in online courses for actual credit, online chatter can be low unless it's prompted. I think some icebreakers might be needed :). Anything to rally people together would be a step in the right direction IMO.

On a side note, I think more programming languages is better than one. How can you find your favorite musical instrument if you only try one? Why force everyone to use only a Swiss army knife to build everything? Metaphors aside, might be more worthwhile to spend time on the other great ideas you have !

joshmhanson commented 6 years ago

I think my ideas were too forward-looking. No one knows how to respond to something that is still years in the future.

So below I'm outlining my current thoughts for v9-10. (I don't know if everything here can make it for v9, so some of it might have to be delayed.)

I'm limiting this purely to curriculum content and repo organization. Things like mentor systems, projects, offline meetups, organizational structure, etc., will need to be discussed elsewhere.

Each of these points will have an associated issue created for separate discussion. (Edit: links to issues have been added.)

  1. I want to give each major section its own page so that the resources can be discussed in greater detail without making the page really long. The main page would just be a guide to the overall curriculum and a table of contents for the remaining pages. #529

  2. I want to take "Theory" and split it into "Theory" and "Structures". #525

    • Theory would be used for what is called theoretical computer science, a topic of which we currently have poor coverage.
    • Structures would be used for material covering concrete data structures (e.g. arrays), abstract data structures (e.g. stacks), purely abstract structures like categories (e.g. monoids) or machines (in the mathematical sense, i.e. automata), and theory-focused applications of those structures to the real world, e.g. (theory of) databases, (theory of) networks.
    • Addition of Category Theory to "Advanced Structures".
    • Addition of Purely Functional Data Structures to "Advanced Structures".
  3. Arguably, everything in the curriculum is a "system". I want to rename "Systems" to "Machine systems", limiting it to a discussion of low-level systems and their associated DSLs like C. #526

    • Networking should be moved to "Structures" if the material we're using is more theory-focused, but it can be kept if it's implementation-focused.
    • Addition of Rust materials to "Advanced Machine systems".
  4. I want to move "Applications" to its own top-level section separate from Core and Advanced for the following reasons. #527

    • "Applications" aren't inherently foundational or advanced by themselves; they each have their own specific learning curve.
    • "Applications" often also have their own specific and unique pre-requisites.
    • By moving out "Applications", we keep Core/Advanced CS just focused on CS.
  5. I want to create a section under both "Core" and "Advanced" called "Engineering". Although this will be a bit like the old "Applications", engineering is something that is more general and universal as soon as you're no longer creating toy programs. It would be focused just on processes, good practices, etc. for building larger systems. #528

  6. Under "Core Machine systems", I want to replace CS50 with Aalto C since the latter will be more focused on learning C while the former will have the student spending a lot of time learning stuff they already know. #516

  7. Move Software Testing and Software Debugging to "Core Engineering" as they are quite fundamental, and move the UBC "Software Engineering" courses to "Advanced Engineering" as they are much more involved. #528

  8. Introduction of Parallel, concurrent, and distributed computing in Java to "Advanced Programming".

ahmadshalabi commented 5 years ago

Thank you all to your effort that make such thing exist.

I have two question: 1- How can I helping you? 2- When you will to finish the v9?