Lab 1: Computer Abstraction Hierarchy

People mostly take for granted the enormous behind-the-curtain technology that allows their favorite apps to work. Unit 4 gave a first glimpse at that technology for apps that rely on the Internet, with an abstraction hierarchy that includes application protocols, TCP, IP, and link layer (hardware interface) protocols. There are even more levels of abstraction inside your computer. The purpose of this lab is to tour these levels of abstraction, from high (application programs) to low (transistors).

Keep this entire lab light. Throughout the lab, there's much that can be expanded. Some students will want more, so additional interesting information is tucked away in optional reading sections that hide detail that's not needed for the AP exam but may appeal to student curiosity, like this:

Why tour that whole range of abstraction?

Most computer engineers specialize in one level of abstraction, spending their entire careers at that level. But the engineers who really change the nature of the technology are always aware of the latest developments at levels above and below their own work, because those other levels exert pressure on the design of any individual level.

For example at the start of the 1970s, computer architectures were mostly designed to provide a large and flexible set of machine language instructions. By the end of the decade, instruction sets were smaller and simpler. Why? Two reasons:

The details of this example aren't important for you or your students to learn; the point of the story is to motivate you in familiarizing students with the entire hierarchy from top to bottom.

Not all abstraction levels are equally important. We single out two: the software abstraction that allows a computer to solve different problems without having to be physically rewired for each one, and the digital abstraction that allows hardware designers to pretend that a transistor is always either fully on or fully off.

FOR NEXT YEAR: The abstraction commentary about "nuanced meanings" should really appear earlier in the year. We should change the next year, and what remains here should just be a nod to that ongoing discussion. --MF, 11/21/17 (with Brian)

Abstraction has many nuanced meanings in computer science. At the end of each page that deals with abstraction, ask students, "What does abstraction mean on this page?" and consider keeping a running log.

There is a lot of reading in this lab. Find a strategy that works for your class. You might have students take turns reading, or you might have all students read a section silently and then ask one or two students to summarize out loud.

Pacing

MARY: Is this up to date? --MF, 5/16/20
The 7 required lab pages could be split across 3–7 days (140–280 minutes). Expected times to complete follow:

* If you must abridge content to keep on pace, these are the pages that are safest to skip.

Prepare

Lab Pages

Solutions

The Unit 6 Assessments and Solutions are available only to teachers. For access, please sign up here.

Correlation with AP CS Principles Framework 

Enduring Understandings:

Students learn about software applications, their uses in creative expression and human experience (EU 1.2, EU 1.3, and EU 5.4), and impacts of software on society, entertainment, medicine, business, politics, and science (EU 7.2). They then learn about the general characteristics of programming languages used to write applications (EU 4.1) and the abstractions, including libraries and operating systems, on which programming relies (EU 2.2 and EU 5.3). Students learn that arithmetic and Boolean operators are included in nearly all languages and learn about logic gates, which emulate Boolean operators in circuitry (EU 5.5). This lab builds toward these EUs by presenting the three domains of the computer abstraction hierarchy (the software domain, the digital domain, and the analog domain) and selected levels of hierarchy within them.

Learning Objectives:

Students answer several online multiple-choice questions with built-in feedback that address the level of abstraction of programming languages (LO 2.2.3).

Essential Knowledge: