This course provides an introduction to the fundamental principles and techniques of software development that have greatest impact on practice.

FREE
This course includes
Hours of videos

611 years

Units & Quizzes

22

Unlimited Lifetime access
Access on mobile app
Certificate of Completion

Topics include capturing the essence of a problem by recognizing and inventing suitable abstractions; key paradigms, including state machines, functional programming, and object-oriented programming; use of design patterns to bridge gap between models and code; the role of interfaces and specification in achieving modularity and decoupling; reasoning about code using invariants; testing, test-case generation and coverage; and essentials of programming with objects, functions, and abstract types. The course includes exercises in modeling, design, implementation and reasoning.

Course Currilcum

  • Introduction Unlimited
  • Classes Unlimited
  • Subclassing and interfaces Unlimited
  • Designing state machines Unlimited
  • Implementing state machines Unlimited
  • State machine invariants Unlimited
  • Designing stream processors Unlimited
  • Decoupling and interfaces Unlimited
  • Testing and coverage Unlimited
  • Designing a SAT solver, part 1 Unlimited
  • Designing a SAT solver, part 2 Unlimited
  • Debugging Unlimited
  • Designing a SAT solver, part 3 Unlimited
  • Rep invariants, equality, visitors Unlimited
  • Little languages Unlimited
  • Basics of mutable types Unlimited
  • Event-based programming Unlimited
  • Designing a photo organizer Unlimited
  • Implementing a photo organizer Unlimited
  • Concurrency Unlimited
  • Relational databases Unlimited
  • Conclusion Unlimited