Course Description
This course provides an introduction to the fundamental principles and techniques of software development that have greatest impact on practice. 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.
Instructors: | |
Course Number: |
|
Departments: | |
Topics: | |
As Taught In: | Fall 2008 |
Level: |
Undergraduate
|
Learning Resource Types
assignment
Problem Sets
notes
Lecture Notes
group_work
Projects
assignment_turned_in
Programming Assignments with Examples