ossu / computer-science

πŸŽ“ Path to a free self-taught education in Computer Science!
MIT License
167.87k stars 21.23k forks source link

Re-evaluation of Core Programming curriculum? #462

Closed DavidScales closed 6 years ago

DavidScales commented 6 years ago

pulling over from discussion in #458

... what do the OSS core programming courses map to in a University program like the Standford one that you've mentioned?

It looks like core programming involves nearly 9 months of study, which would map to multiple courses - maybe something like "software engineering I & II" and/or a "programming languages" course?

The core programming section is a bit of a mental barrier for me because its such a large time commitment and I can't yet see where it fits.

a1h05 commented 6 years ago

The core programming section is a bit of a mental barrier for me because its such a large time commitment and I can't yet see where it fits.

Can't speak for the university program, but from skills/knowledge point of view it is worth to complete those courses. I believe a lot of subsequent courses after Core programming section will contain programming in some way (as well as a lot of jobs in the market).

It is possible to finish Core CS within about 2 years

whole program will 2 years or so. If student is prepared to put as much effort, it should be easier to prepare to its sections, each of which will take less than 2 years =).


If we talk about what can improved, probably some of the courses from https://www.coursera.org/specializations/scala could fit there. Like "Functional Programming Principles in Scala" and "Functional Program Design in Scala". It could balance OOP design point of view of Software Construction. (Have not done them, so feedback whether it is free and will really fit curriculum will be helpful)

joshmhanson commented 6 years ago

(Note that the whole curriculum is due for a re-evaluation. I had created #422 with the intent of eventually consolidating my thoughts there β€” once I feel more confident about them β€” and discussing them with the community, but this topic is fine as is for discussing Core Programming in particular.)

@DavidScales it's not super clear to me what you're asking. Are you reluctant to take courses in Core Programming because you believe that you should be following the curriculum for a specific university?

Like "Functional Programming Principles in Scala" and "Functional Program Design in Scala". It could balance OOP design point of view of Software Construction.

I'm also interested in hearing about "Functional Program Design in Scala" from someone who has taken it. The "How to Code" series (precursor to "Software Construction") covers elementary functional program design, but only up to the level of a single module. It never covers structuring a program across multiple modules.

DavidScales commented 6 years ago

@hanjiexi Thanks for the response. The long story is that I currently have a job involving programming, but my coding background is more typical of a bootcamp grad. I want to learn the computer science fundamentals and work towards being a well rounded engineer.

I recently started looking into online/part time CS programs, with the hope of achieving the same CS fundamentals that a university degree holder would have, and what I assume I'm missing so far as being an engineer.

I assume that this story is probably fairly common for OSSU students.

From the program description:

The OSSU curriculum is a complete education in computer science using online materials. It's not merely for career training or professional development. It's for those who want a proper, well-rounded grounding in concepts fundamental to all computing disciplines... ...It is designed according to the degree requirements of undergraduate computer science major...

This program sounds like exactly what I need.

But when comparing the curriculum to other university programs generally (not just the Stanford one I mentioned), I don't really see where the core programming content fits in. I don't doubt @a1h05 that the core programming courses are valuable, but if my goal is to achieve CS degree equivalence, I just want to be sure I'm not investing significant time into study that wouldn't typically be in a CS curriculum (even if it is useful).

So I guess my refined question would be - is the core programming work typical of a CS program, and I just haven't seen it in the curriculums I've examined, or is it something extra that OSSU simply considers critical to its own program?

For example the Oregon State post-bach, Stanford, MIT, and University of Washington programs don't have a "programming languages" requirement (although UW lists it as an optional course). And the "How to code simple data" and "How to code complex data" descriptions don't mean enough to me to know what those map to any of these programs, if at all.

a1h05 commented 6 years ago

And the "How to code simple data" and "How to code complex data" descriptions don't mean enough to me to know what those map to any of these programs, if at all.

In ubc those courses seems to map to CPSC 110 - Computation, Programs and Programming of their core curriculum.

joshmhanson commented 6 years ago

@DavidScales Thanks for clarifying. I think I understand better what you're asking now.

OSSU CS Core Programming is more in-depth than most universities require because most universities have a much broader range of specialties you can go into. We don't have enough advanced-level material to support specializing in databases, graphics, networking, cryptography, low-level systems development, etc.

(I would say, especially due to the work of Andrew Ng, there is enough online material nowadays to support specializing in machine learning, but I would rather have that kind of specialization in a separate curriculum.)

So what does that leave us with? Focusing instead on what we can β€” mostly programming. It is basically like a regular university CS curriculum where some electives have been chosen for you.

Let me attempt to show my interpretation of how our curriculum maps to Carnegie Mellon's requirements. Note that while many courses are marked "elective", you are still required to choose several of them. Also I'm leaving out some of their applications electives.

CMU Course Type OSSU Course Type
Principles of Imperative Computation Required Introduction to Computer Science and Programming using Python Required
Principles of Functional Programming Required How to Code + Programming Languages Required
Mathematical Foundations for Computer Science Required Mathematics for Computer Science Required
Parallel and Sequential Data Structures and Algorithms Required - :(
Introduction to Computer Systems Required From Nand to Tetris Required
Great Ideas in Theoretical Computer Science Required partially covered by Automata Theory Elective
Algorithm Design and Analysis Required Stanford Algorithms Required
Computational Discrete Mathematics Elective - :(
Modern Computer Algebra Elective - :(
Undergraduate Complexity Theory Elective - :(
Computational Geometry Elective Computational Geometry Elective
Combinatorics Elective - :(
Graph Theory Elective - :(
Foundations of Programming Languages Elective - :(
Programming Language Semantics Elective Partially discussed in Programming Languages Required
Software Foundations of Security and Privacy Elective - :(
Constructive Logic Elective - :(
Bug Catching: Automated Program Verification and Testing Elective - :(
Foundations of Cyber-Physical Systems Elective - :(
Category Theory Elective Touched on via the Haskell books Required
Operating System Design and Implementation Elective ops-class + Operating Systems: Three Easy Pieces Required
Compiler Design Elective Compilers Elective
Parallel Computer Architecture and Programming Elective Working on finding a replacement... Elective
Distributed Systems Elective Reliable Distributed Systems Elective
Computer Networks Elective Introduction to Computer Networking Required
Introduction to Machine Learning Elective Machine Learning Required
Natural Language Processing Elective - :(
Database Applications Elective Databases Required
Computer Graphics Elective Computer Graphics Required
Foundations of Software Engineering Elective Introduction to Software Engineering Required

That was an interesting exercise. After doing that comprehensive comparison, I think our curriculum is pretty fair, but also very opinionated in the electives that it chooses for the student. It's also very dense; students attending university are typically required to take a bunch of other non-CS courses to round out their study, but ours has none of that.

One interesting thing I noticed was that we currently require object-oriented programming (via Software Construction) in Core Programming while there is not a single course that I can see on CMU's requirements that teaches this concept. (Of course, CMU is very opinionated about this, but I didn't know they took it so far as to completely eradicate it from their requirements.) If we wanted to trim Core Programming, I think Software Construction would be the one to trim out, not Programming Languages.

DavidScales commented 6 years ago

Wow thanks for the extensive response @hanjiexi πŸ₯‡That makes a lot of sense.

Perhaps in the future, when more of the sad-face electives are available as free courses that OSSU can incorporate, the curriculum could have some flexibility in which electives students take.

In the meantime, I'm definitely convinced of the merit of the current course decisions πŸ‘ Thanks again