Closed DavidScales closed 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)
(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.
@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.
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.
@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.
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
pulling over from discussion in #458