Problem:
The current structure does not organize courses by knowledge area and dimension respecting their scope and hierarchy.
Background:
Simplifying tracks and having all the resources systematically arranged by knowledge areas will have some of the following advantages:
IAS - Information Assurance and Security knowledge area label.IAS - Information Assurance and Security and topics like _Tools and Environments_ (A topic from the knowledge area of SE - Software Engineering).DIMENSION
ApplicationsKNOWLEDGE AREA
IAS - Information Assurance and SecurityTOPIC
Cryptography
Proposal:
Simplifying tracks for the curriculum based on dimension and knowledge area. The structure is better detailed in this draft of comment-660886018
The contributing section points to our curricular guidelines. One thing to note is that the CS2013 splits CS courses into 17 knowledge areas! This approach would move us further from that model.
The links to the 4 different schools similarly shows a variety of ways to categorize courses. The proposed system above matches the Princeton approach. This is somewhat similar to Harvard, which has the broad buckets of Basic mathematics, Basic software, Theory, Technical electives. Stanford uses Prereqs, Programming, Core and Electives.
MIT does not use such buckets.
Right now we essentially have the buckets:
programming
math
systems
theory
applications
security
tools
The Extras match this, with the exception of two classes in extras that are called: Online Learning - Great Courses. These are simply not part of the CS curriculum at all and are included because students found them valuable in preparing them for online learning.
I infer 3 goals from your proposal:
The structure of Extras should match the curriculum.
The curriculum should be easy to update.
The sections should be easy to understand.
It's not clear to me how these goals aren't fulfilled by the current sections. Can you discuss a place where you feel they are not?
To be clear, Wikipedia uses 4 buckets:
I'm interested to hear your response about goals. Did the 3 goals I listed above accurately summarize your goals?
Note: You point out that math can be inside theory along with algorithms. But in the grouping above discrete structures (which is essentially the union of algorithms and structures and discrete math) is in systems.
I made this v9 draft, you guys might like it or can take something good about it. Its not about changing the curriculum structure, but just adding an organized complete overview with all the courses systematically arranged by knowledge area. Btw, feel free to move, add and remove courses around to organize them better, im not an expert.
| Knowledge Area | Course | Hours| Prerequisites |
|---|---|---|---|
| SDF - Software Development Fundamentals|CS50's Understanding Technology | 24 | none
Develop effective ways to solve computing problems.
| SDF - Software Development Fundamentals | Python for Everbody & CS50 | 244 | none
|:--|:--|:--|:--|
| PL - Programming Languages| Programming Languages A-B-C| 66 | SDF
| SP - Social and Professional Practice| Learning How to Learn | 15 | none
| DS - Discrete Structures| 1 Calculus A-B-C, Probab. & CS Math | 420 | high school
| CN - Computational Science | Computer Science | 20 |DS AL
| AL - Algorithms and Complexity | Algorithms | 96 | SDF PL DS
Devise ways to use computers.
| SF - Systems Fundamentals | Nand to Tetris I & II | 150 | SDF
|:--|:--|:--|:--|
| IM - Information Management | Relational, Modeling & Semistructured| 54 | none
| NC - Networking and Communications | Computer Networking | 64 | SDF DS
| AR - Architecture and Organization| Circuits, Architecture & Organization | 180 | SF
| OS - Operating Systems | Intro to Operating Systems | 66 | AL |
| IS - Intelligent Systems | Artificial Intelligence & Machine Learning | 55 | Linear Algebra
Design and implement software.
| SE - Software Engineering | Compilers, Debugging & Testing | 135 | SDF PL
|:--|:--|:--|:--|
| IAS - Information Assurance and Security | Secure Coding Practices | 64 | SDF
| HCI - Human-Computer Interaction | Software Architecture & Design | 48 | SDF PL
| PD - Parallel and Distributed Computing | Parallel Programming | 28 | SDF PL DS
| GV - Graphics and Visualization | Computer Graphics | 72 | Linear Algebra
| PBD - Platform-based Development | Introduction to Haskell | 70 | SDF PL
PBD - Platform-based Development HCI - Human-Computer Interaction IS - Intelligent Systems IM - Information Management PD - Parallel and Distributed Computing
| KA | Course | Hours | Prerequisites |
|---|---|---|---|
| PBD | Fullstack Open | 72 | programming |
| PBD | Functional Programming in Scala | 29 | programming experience |
| PBD | Game Design and Development | 120 | programming, interactive design |
| HCI | Internet of Things | 90 | strong programming |
| IS | Modern Robotics | 75 | physics, linear algebra, calculus, differential equations|
| IM | Data Mining (Specialization) | 90 | machine learning |
| IM | Big Data (Specialization) | 120 | none |
| IM | Data Science (Specialization) | 120 | none |
| PD | Cloud Computing | 120 | C++ programming |
I agree that your suggestion:
-May make the curriculum easier to understand.
-More flexible and easier to update and adding or removing courses.
-The guideline sections can be nested in it, so we wouldn't move away from the current approach of the guideline as @waciumawanjohi wanted to avoid.
-The last suggestion when you added the extra courses just beneath the main courses will make the courses more visible and accessible, allowing students an easier comparison and switch between courses.
However, I suggest:
in my version of the OSSU curriculum, I used the same sectioning used in "teachyourselfcs" because I kind of merged the two of them and probably I will update it to use this one
This is a list of high-quality resources, they are systematically arranged according to the knowledge areas stablished in the Curriculum Guidelines for Undergraduate Programs in Computer Science with their recommended lecture hours.
| Knowledge Area | 308 Lecture Hours | 100%
|---|---|---|
|SDF - Software Development Fundamentals | 43 | 13.9%
|:--|:--|:--|
|PL - Programming Languages | 28 | 9.1%
|DS - Discrete Structures | 41 | 13.3%
|SP - Social Issues and Professional Practice | 16 | 5.1%
|CN - Computational Science | 1 | .3%
|AL - Algorithms and Complexity | 28 | 9.1%
|SF - Systems Fundamentals | 27 | 8.7%
|:--|:--|:--|
|IM - Information Management | 10 | 3.2%
|NC - Networking and Communications | 10 | 3.2%
|AR - Architecture and Organization | 16 | 5.1%
|OS - Operating Systems | 15 | 4.8%
|IS - Intelligent Systems | 10 | 3.2%
|SE - Software Engineering | 28 | 9.1%
|:--|:--|:--|
|IAS - Information Assurance and Security | 9 | 2.9%
|HCI - Human Computer Interaction | 4 | 1.2%
|PD - Parallel and Distributed Computing | 15 | 4.8%
|GV - Graphics and Visualization | 3 | .9%
|PBD - Platform Based Development | 0 | 0%
Knowledge Units: Algorithms and Design Fundamental Programming concepts Fundamental Data structures Development Methods
| Courses | Readings and Other |
|---|---|
| Python for Everbody | Structure of Programs - Hal Abelson...
| Intro to CS - CS50 | How to Design Programs - Matthias Felleisen...
|Intro to CS and Programming| Think Python 2e - Allen B. Downey
|Fundamentals of Computing| Googles's Foundations of Programming
|How to Code 1 2| 100+ Python Coding Problems
|Computer Fundamentals| Codingame.com
|Computer Programming Khan | Intro to Programming - John V. Guttag
|Java Programming| Concepts of Programming - Peter Van Roy...
|Computing In Python | MDN HTML CSS JavaScript
|Programming Basics | You Don't Know JS 1 2 3
|Computing In Python | Awesome for beginners |
|Programming Basics | Rosalind
Knowledge Units: Object Oriented programming Functional Programming Event-Driven and Reactive Programming Basic Type Systems Program Representation Language Translation and Execution Syntax Analysis Compiler Semantic Analysis Code Generation Runtime Systems Static Analysis Advanced Programming Constructs Concurrency and Parallelism Type Systems Formal Semantics Language Pragmatics Logic Programming
| Courses | Readings and Other |
|---|---|
| Pogramming Languages A B C | Programming Languages - Shriram Krishnamurthi
| CS50 Web | Programming - Shriram Krishnamurthi...
| Interactive Programming 1 2 | Competitive Programming - Steven Halim...
| Object Oriented Programming with Java | Design Patterns - Erich Gamma...
| Programming with MATLAB | Refactoring - Martin Fowler
| Functional Programming | Clean Code - Robert Martin
| Interpretation of Computer Programs | Code Complete 2e - Steve McConnell
| |The Pragmatic Programmer - Andrew Hunt...
| |JavaScript Allong茅
| |D2 Tips and Tricks
| |Think Java
Knowledge Units: Sets, Relations, and Functions Basic Logic Proof Techniques Basics of Counting Graphs and Trees Discrete Probability
| Courses | Readings and Other |
|---|---|
| 1 Calculus A B C | Discrete Mathematics: An Open Introduction - Oscar Levin
Probability | Applied Discrete Structures - Alan Doerr, Ken Levasseur
Math for CS | Grinstead and Snell鈥檚 Probability - Charles M. Grinstead...
Introduction to Logic | Introduction to Linear Algebra - Gilbert Strang
Discrete Mathematics | Calculus Made Easy - Silvanus P. Thompson
Effective Thinking Through Mathematics | Interactive Calculus Textbooks Ximera team
Mathematical Thinking | Ximera
Sets | Probability Brilliant |
Calculus Khan | Calculus Brilliant |
Probability Khan |
Introduction to Probability Science |
Introduction to Mathematical Thinking |
Advanced Precalculus |
Introduction to Probability and Data |
Multivariable Calculus |
High School Math |
Precalculus |
How to learn Math |
Differential Equations |
Knowledge Units: Social Context Analytical Tools Professional Ethics Intellectual Property Privacy and Civil Liberties Professional Communication Sustainability History Economies of Computing Security Policies, Laws and Computer Crimes
| Courses | Readings and Other |
|---|---|
| Learning How to Learn |
| Mindshift|
Knowledge Units: Introduction to Modeling and Simulation Modeling and Simulation Processing Interactive Visualization Data, Information and knowledge Numerical Analysis
| Courses | Readings and Other |
|---|---|
| Computer Science | Computer Science - Robert Sedgewick and Kevin Wayne
| Theory of Computation | Introduction to the Theory of Computation
Knowledge Units: Basic Analysis Algorithmic Strategies Fundamental Data Structures and algorithms Basic Automata, Computability and Complexity Advanced Computational Complexity Advanced Automata Theory and computability Advanced Data Structures, Algorithms and analysis
| Courses | Readings and Other |
|---|---|
| Algorithms | Visual Algo
| Algorithms I II | Algorithms - Robert Sedgewick and Kevin Wayne
| Data Structures and Algorithms | Analysis of Algorithms - Robert Sedgewick and Phillipe Flajolet
| Analysis of Algorithms (Sedgewick) | Introduction to Computing - David Evans
| Algorithms Khan | Introduction to Algorithms - Thomas H. Cormen...
| Intro to Algorithms 1 2 | Algorithms and Data Structures Freecodecamp
| Analysis of Algorithms (Skiena) | Fundamentals of algorithms - Geeksforgeeks
| Algorithmic Thinking 1 2 | The Algorithm Design Manual - Steven Skiena
| Statistical Mechanics: Algorithms and Computations | Category Theory: A Gentle Introduction - Peter Smith
| Approximation Algorithms I II | Category Theory for Programmers - Bartosz Milewski
| Intro to Algorithms | Open Data Structures
| Complexity Algorithms |
| Design and Analysis Algorithms |
Knowledge Units: Computational Paradigms Cross-Layer Communications State and State Machines Parallelism Evaluation Resource Allocation adn Scheduling Proximity Virtualization adn Isolation Reliability through Redundancy Quantitative Evaluation
| Courses | Readings and Other |
|---|---|
| Nand to Tetris I II | But How Do It Know? - J. Clark Scott |
| Intro to Computer Systems | Computer Systems - Randal E. Bryant... |
| | System Design - Various
Knowledge Units: Information Management Concepts Database Systems Data Modeling Indexing Relational Databases Query Languages Transaction Processing Distributed Databases Physical Database Design Data Mining Information Storage And Retrieval MultiMedia Systems
| Courses | Readings and Other |
|---|---|
| Database Systems 1 2 3| Readings in Database Systems - Peter Bailis... |
| Relational Database Systems | Database Management Systems - Raghu Ramakrishnan...
| Database Systems | Transaction Processing: Concepts and Techniques - Jim Gray...
| Using Databases with Python | Data and Reality - William Kent...
| Database Management Essentials | An Introduction to Information Retrieval - Christopher D. Manning
| Processing Big Data with Azure HDInsight | An Introduction to Statistical Learning - Gareth James
| Big Data Science | Architecture of a Database System - Joseph M. Hellerstein...
| Introduction Data Science |
| Database Concepts and Design |
| Relational Databases |
Knowledge Units: Introduction Networked Applications Reliable Data Delivery Routing And Forwarding Local Area Networks Resource Allocation Mobility Social Networking
| Courses | Readings and Other |
|---|---|
| Computer Networking | Computer Networks (5th) - Andrew S. Tanenbaum |
| Introduction to Computer Networking | Computer Networking (6th) - James F Kurose
| Bits and Bytes Networking |
Knowledge Units: Digital Logic and Digital Systems Machine Level Representation of Database Assembly Level Machine Organization Memory System Organization and architecture Interfacing and Communication Functional Organization Multiprocessing and Alternative Architectures Performance Enhancements
| Courses | Readings and Other |
|---|---|
| Computation Structures 1 2 3 | Computer Organization and Design - David Patternson...
| Computer Architecture |
| Computer Architecture (Machine Structures) |
| Introductory Electricity and Magnetism |
| Electricity and Magnetism 1 2 |
Knowledge Units: Overview of Operating Systems Operating System Principles Concurrency Scheduling and Dispatch
Memory Management Security and Protection Virtual Machines Device Management File Systems Real Time and Embedded Systems Fault Tolerance System Performance Evaluation
| Courses | Readings and Other |
|---|---|
| Operating Systems: Three Easy Pieces | Operating Systems (4th) - Andrew S. Tanenbaum... |
| Operating System Engineering |
| Introduction to Operating Systems |
| Advanced Operating Systems |
| Os Power User |
| Computer Hardware and Operating Systems |
Knowledge Units: Fundamental Issues Basic Search Strategies Basic Knowledge Representation and Reasoning Basic Machine Learning Advanced Search Reasoning Under Uncertainty Agents Natural Language Processing Advanced Machine Learning Robotics Perception and Computer Vision
| Courses | Readings and Other |
|---|---|
|Machine Learning |Deep Learning - Ian Goodfellow...
|CS50AI | Machine Learning - David Barber
|Game Theory
|Intro to Artificial Intelligence
|Intro to Machine Learning
|Machine Learning for Data Science and Analytics
Knowledge Units: Software Processes Software Project Management Tools and Environments Requirements Engineering Software Design Software Construction Software Verification and Validation Software Evolution Software Reliability Formal Methods
| Top Courses | Hours |
|---|---|
| Compilers | How to Use Git and GitHub
| Software Debugging | Kubernetes Certified Application Developer
| Software Testing | The Mythical Man-Month - Fred Brooks, Jr.
| The Missing Semester of CS | Compilers - Alfred V. Aho...
| Software Engineering: Introduction | Compiler Construction - Niklaus Wirth
| Software Development Capstone Project | 97 Things Every Programmer Should Know
| Software Construction | Hacker Earth
| Structure and Interpretation |
Knowledge Units: Foundational Concepts in Security Principles of Secure Design Defensive Programming Threats and Attacks Network Security Cryptography Web Security Platform Security Security Policy and Governance Digital Forensics Secure Software Engineering
| Courses | Readings and Other |
|---|---|
| Secure Coding Practices |
| Information Security: Context and Introduction |
| Principles of Secure Coding |
| Identifying Security Vulnerabilities |
| Identifying Security Vulnerabilities in C/C++Programming |
| Exploiting and Securing Vulnerabilities in Java Applications |
Knowledge Units: Foundations Design Interaction Programming Interactive Systems User Centered Design and Testing New Interactive Technologies Collaboration and Communication Statistical Methods for HCI Human Factors and Security Design Oriented HCI Mixed, Augmented and Virtual Reality
| Courses | Readings and Other |
|---|---|
| Software Architecture & Design | |
| Internet of Things|
Knowledge Units: Parallelism Fundamentals Parallel Decomposition Communication and Coordination Parallel Algorithms, Analysis, and Programming Parallel Architecture Parallel Performance Distributed Systems Cloud Computing Formal Models and Semantics
| Courses | Readings and Other |
|---|---|
| Parallel Programming | Distributed Systems - Andrew Tanenbaum...
| Cloud Computing / Distributed Programming | Distributed Systems Reading Group - Various
| Introduction to Parallel Programming |
| Introduction to Formal Concept Analysis |
| Parallel, Concurrent and Distributed Programming |
| Fundamentals of Parallelism on Intel Architecture |
| Distributed Computing |
| Git for Distributed Development |
Knowledge Units: Fundamental Concepts Basic Rendering Geometric Modeling Advanced Rendering Computer Animation Visualization
| Courses | Readings and Other |
|---|---|
| Computer Graphics | Physically Based Rendering - Matt Pharr...
| Computational Geometry|
Knowledge Units: Introduction Web Platforms Mobile Platforms Industrial Platforms Game Platforms
| Courses | Readings and Other |
|---|---|
| Introduction to Haskell | Open Source Applications - Michael DiBernardo |
| Functional Programming in Scala | Language Implementation Patterns - Terence Parr
| Game Design and Development | The Google Android Development Guide
It's been over a month since the last comment on this issue.
This issue raises a number of different suggestions:
It's been difficult to have discussions about each of these. Both because they are all bundled together and because comments were edited multiple times after contributors had voted or commented on them.
Lots of interesting ideas. By breaking these out into separate proposals contributors will have the opportunity to discuss the merits of each. In particular, any proposal for a substantive change (like adding or removing courses) should go through an RFC.
@waciumawanjohi I wish to understand how a major version bump happens here in OSSU? There have been many PRs to the curriculum over the past few months, but the rev is in v8?
Meanwhile, in the wiki, I see some drafts of V9, and in quite a few issues, I see many many more drafts of V9 and variants. How do we go from version to version? When is V9 scheduled to be released?
From https://github.com/ossu/computer-science/blob/master/CHANGELOG.md
Note: The curriculum is currently undergoing review for v9. This consists largely of checking our recommendations against our curricular guidelines, adding missing topics and cutting redundant or out of scope courses. As Requests for Comment in this effort are completed, changes are made immediately to the curriculum. When the overall review is complete we will notate the version bump to v9.
See also here:
https://github.com/ossu/computer-science/issues/674
As to the wiki, 18 months ago hanjiexi put a variety of ideas on paper about directions OSSU could go. A number of those have become RFCs and have been incorporated in the curriculum. A number will become future RFCs. There is no current plan for a wholesale alteration, but instead for incremental improvements by RFCs. The wiki no longer makes any reference to the term "v9".
As for the title of this issue, the individual who posted the issue used the term v9.
Will all the closed RFCs be pondered over whenever such a major update will happen?
Most helpful comment
Curriculum
Intro CS
| Knowledge Area | Course | Hours| Prerequisites |
|---|---|---|---|
|
SDF - Software Development Fundamentals|CS50's Understanding Technology | 24 | noneCore CS
Theory
|
SDF - Software Development Fundamentals| Python for Everbody & CS50 | 244 | none|:--|:--|:--|:--|
|
PL - Programming Languages| Programming Languages A-B-C| 66 |SDF|
SP - Social and Professional Practice| Learning How to Learn | 15 | none|
DS - Discrete Structures| 1 Calculus A-B-C, Probab. & CS Math | 420 | high school|
CN - Computational Science| Computer Science | 20 |DSAL|
AL - Algorithms and Complexity| Algorithms | 96 |SDFPLDSSystems
|
SF - Systems Fundamentals| Nand to Tetris I & II | 150 |SDF|:--|:--|:--|:--|
|
IM - Information Management| Relational, Modeling & Semistructured| 54 | none|
NC - Networking and Communications| Computer Networking | 64 |SDFDS|
AR - Architecture and Organization| Circuits, Architecture & Organization | 180 |SF|
OS - Operating Systems| Intro to Operating Systems | 66 |AL||
IS - Intelligent Systems| Artificial Intelligence & Machine Learning | 55 | Linear AlgebraApplications
|
SE - Software Engineering| Compilers, Debugging & Testing | 135 |SDFPL|:--|:--|:--|:--|
|
IAS - Information Assurance and Security| Secure Coding Practices | 64 |SDF|
HCI - Human-Computer Interaction| Software Architecture & Design | 48 |SDFPL|
PD - Parallel and Distributed Computing| Parallel Programming | 28 |SDFPLDS|
GV - Graphics and Visualization| Computer Graphics | 72 | Linear Algebra|
PBD - Platform-based Development| Introduction to Haskell | 70 |SDFPLSpecializations
PBD - Platform-based DevelopmentHCI - Human-Computer InteractionIS - Intelligent SystemsIM - Information ManagementPD - Parallel and Distributed Computing| KA | Course | Hours | Prerequisites |
|---|---|---|---|
|
PBD| Fullstack Open | 72 | programming ||
PBD| Functional Programming in Scala | 29 | programming experience ||
PBD| Game Design and Development | 120 | programming, interactive design ||
HCI| Internet of Things | 90 | strong programming ||
IS| Modern Robotics | 75 | physics, linear algebra, calculus, differential equations||
IM| Data Mining (Specialization) | 90 | machine learning ||
IM| Big Data (Specialization) | 120 | none ||
IM| Data Science (Specialization) | 120 | none ||
PD| Cloud Computing | 120 | C++ programming |