"An abstraction is a simplified view of an entity, which omits important details. Abstractions are useful because they make it easier for us to think about and manipulate complex things." John Ousterhout in A Philosophy of Software Design
In the book called A Philosophy of Software Design, John Ousterhout defines an abstraction as "a simplified view of an entity, which omits important details. Abstractions are useful because they make it easier for us to think about and manipulate complex things." Abstraction is a powerful tool that enables software engineers to solve complex problems. The data abstraction course will teach you how to effectively use several different types of abstractions as you solve problems and build software!
Using Python, you will first learn about the programming abstractions (e.g., iteration, recursion, and functions) that are the basic building blocks of computer programs. Second, you will explore the abstractions in object-oriented programming (e.g., inheritance, encapsulation, and polymorphism) that enable software engineers to create and maintain large-scale systems. Using the two previous types of abstractions, you will learn how to create and use abstractions like data structures (e.g., lists and dictionaries) and algorithms (e.g., searching and sorting) as you form the reliable building blocks of complex programs. Finally, you will use performance evaluation abstractions (e.g., worst-case time complexity and doubling experiments) to study the efficiency of all the other data abstractions. Let's learn more about how to confidently create complex software!
This course currently uses the textbook Introduction to Computation and Programming Using Python by John V. Guttag. Even though you must purchase this textbook, all of the supporting materials on this site are available for free. Please stay tuned as future versions of this course will leverage a free and open-access textbook!