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