Core Programming
This section covers the essential programming concepts, paradigms, and practices that form the foundation of computer science. You’ll learn multiple programming languages and paradigms, enabling you to choose the right approach for any problem.
Topics Covered
- Functional programming
- Design for testing
- Program requirements
- Common design patterns
- Unit testing
- Object-oriented design
- Static typing
- Dynamic typing
- ML-family languages (via Standard ML)
- Lisp-family languages (via Racket)
- Ruby
- And more
Course Sequence
| Course | Duration | Effort | Prerequisites |
|---|---|---|---|
| Systematic Program Design | 13 weeks | 8-10 hours/week | None |
| Class-based Program Design | 13 weeks | 5-10 hours/week | Systematic Program Design, High School Math |
| Programming Languages, Part A | 5 weeks | 4-8 hours/week | Systematic Program Design |
| Programming Languages, Part B | 3 weeks | 4-8 hours/week | Programming Languages, Part A |
| Programming Languages, Part C | 3 weeks | 4-8 hours/week | Programming Languages, Part B |
| Object-Oriented Design | 13 weeks | 5-10 hours/week | Class Based Program Design |
| Software Architecture | 4 weeks | 2-5 hours/week | Object Oriented Design |
Why These Courses?
This carefully designed sequence introduces you to multiple programming paradigms:
- Systematic Program Design teaches a methodical approach to program construction using functional programming
- Class-based Program Design introduces object-oriented programming principles
- Programming Languages series explores language features, design, and implementation across different paradigms
- Object-Oriented Design deepens your understanding of OOP with advanced concepts
- Software Architecture teaches you to design and evaluate complex software systems
Learning Outcomes
After completing the Core Programming sequence, you will:
- Understand multiple programming paradigms
- Be able to select appropriate languages and approaches for different problems
- Write well-structured, maintainable code
- Design software at multiple levels of abstraction
- Test and verify program correctness
- Work with functional, object-oriented, and multi-paradigm languages