Stefan's relatively fleshed out computer science curriculum
Here's a table of the actual course per semester:
Semester | Courses |
---|---|
1 | Computer familiarity and research |
2 | Fundamentals of Programming |
3 | Programming language exploration, Computer Architecture, Software in Computer Science |
4 | Low Level Programming Details, Applications 1 |
5 | Data structures, Applications 2, Documentation |
6 | Performance, OSes and Memory Security, Application Security |
7 | Capstone 1, Computer Networks, Elective |
8 | Capstone 2, Elective, Elective |
- No skipping by AP
- Stats, once. Don't make me take it so many times. Please.
- No group work till Application 2
- All autograded tests will be available for students to run locally. No hidden tests.
First class - Computer familiarity and research
(skippable by special test only)
This class covers fundamentals of a computer. This includes:
Day 1 - Computer usage basics (yes, really)
Basic Mouse Usage
Left click, right click, scroll wheel, middle click, side buttons on mice that have them.
Basic Keyboard Usage
Besides the letters, pretty much every key - notably windows key, escape, and some combos.
Basic Keyboard Shortcuts
For now probably Windows and Mac based. Start menu, spotlight, task manager, etc.
- High level differences between different operating systems
- What is a file
- What is a file system
- Practice navigating using a GUI file explorer
- Practice using context menus
- Practice controlling system settings
- Practice opening different applications
- Practice reading errors
- Practice reading documentation This one is interesting, because I think you could really get some value out of showing some error messages and then having students explain what they should google.
- Practice opening a terminal
- Practice starting applications via terminal
- Basic terminal navigation (multiple oses)
- Practice reading help text
- Text editor vs word processor
- Practice following tutorials
- Practice reading documentation to solve problems
- Inspect some websites
A secondary goal to this class is to get students to stop being afraid to try things.
Second class - Fundamentals of Programming
(skippable by special test only)
Javascript.
The editing environment would still have some form of the Typescript Language Server, so many problems caught by types will still be caught.
This class covers fundamentals of programming, and well.
- Variables
- References
- Functions
- Loops
- Control flow
- Other boolean logic
- Maps
- Lists
- Organization
- Debugging (print statements)
- Objects (as in anonymous maps)
Another class - Programming language exploration
Depends on Fundamentals of Programming class.
Another class - Computer Architecture
Depends on Fundamentals of Programming.
Assembly
Another class - Software in Computer Science
Depends on Fundamentals of Programming.
- Git (but alone)
- More GUI
- More Terminal
Another class - Low Level Programming Details
Depends on the Computer Architecture class.
C / Zig, probably.
Actually show a debugger for the first time.
Another class - Data structures
Javascript.
Depends on the Low Level Programming Details class.
Another class - OSes and Memory Security
Depends on Low Level Programming Details class.
- Syscalls
- Linux specifics
- Windows specifics
Another class - Computer Networks
Depends on Low Level Programming Details class.
Another class - Applications 1
Depends on Fundamentals of Programming. Depends on Software in Computer Science but can be taken concurrently.
- Databases
- "Web" applications
Another class - Applications 2
Depends on Applications 1
- Capstone esque "next feature" design progress based on Applications 1 project.
- Group work
- Git (but used with others)
Another class - Documentation
This class counts towards the writing requirement.
Depends on Applications 1
Another class - Performance
Depends on Data structures and Applications 1.
Another class - Application Security
Depends on Application class.
Electives
Pick 3 ish? Most things became required.
- Computer Graphics
- Compiler
- AI / etc.
- Native applications
- Mobile app
- Others I forget, maybe "deeper dives" into certain covered topics
Other required classes
- CS 2100
- CS 3100
- Linear algebra (including vector calculus)
- Calculus (2d, 3d, derivatives, integrals, series, optimization)
- Stats, once.
Haven't thought about these enough to be specific, probably never will, don't care enough.
Not necessary to be a good programmer, but necessary for the "science".
FAQ
Why Javascript for most of the classes?
For better or for worse, Javascript does the best at three qualities today:
- Coming preinstalled with nearly no way to fuck it up (a web browser)
- Powering most new written applications
- Not going anywhere anytime soon.
Almost everything besides systems level programming can be done in Javascript, effectively too. Take for example Algorithms. They can all be done to adequately affect and improve the runtime of a program in Javascript. They're not as efficient, sure, but, that's not the point. Nobody teaches best practices for implementation efficiency.
Measure performance first anyway.