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

CourseDurationEffortPrerequisites
Systematic Program Design13 weeks8-10 hours/weekNone
Class-based Program Design13 weeks5-10 hours/weekSystematic Program Design, High School Math
Programming Languages, Part A5 weeks4-8 hours/weekSystematic Program Design
Programming Languages, Part B3 weeks4-8 hours/weekProgramming Languages, Part A
Programming Languages, Part C3 weeks4-8 hours/weekProgramming Languages, Part B
Object-Oriented Design13 weeks5-10 hours/weekClass Based Program Design
Software Architecture4 weeks2-5 hours/weekObject Oriented Design

Why These Courses?

This carefully designed sequence introduces you to multiple programming paradigms:

  1. Systematic Program Design teaches a methodical approach to program construction using functional programming
  2. Class-based Program Design introduces object-oriented programming principles
  3. Programming Languages series explores language features, design, and implementation across different paradigms
  4. Object-Oriented Design deepens your understanding of OOP with advanced concepts
  5. Software Architecture teaches you to design and evaluate complex software systems

Learning Outcomes

After completing the Core Programming sequence, you will:

  1. Understand multiple programming paradigms
  2. Be able to select appropriate languages and approaches for different problems
  3. Write well-structured, maintainable code
  4. Design software at multiple levels of abstraction
  5. Test and verify program correctness
  6. Work with functional, object-oriented, and multi-paradigm languages