I Have a Dream Tutorial

This lesson engages the student in an instructor-led App Inventor tutorial that leads to the creation of a simple sound board app to play Martin Luther King's 'I Have a Dream Speech'. It reinforces the enduring understanding that programs are developed by people for different purposes, including creative expression. In this first app, they also learn about App Inventor's event-driven programming model. Students test the correctness of their program by ensuring the speech plays when the button is pressed.

CSP Framework Lesson Activities
BI 5: Programming
, EU 5.1 - Programs can be developed for creative expression, to satisfy personal curiosity, to create new knowledge, or to solve problems (to help people, organizations, or society).
Develop a program for creative expression. [LO 5.1.1]
EK 5.1.1B P 2
Students follow a tutorial to create a sound board app that plays Martin Luther King's 'I have a dream' speech.
Develop a correct program. [LO 5.1.2]
EK 5.1.2A EK 5.1.2B P 2
Students implement a correct event-driven program that manages a button click event.
BI 5: Programming
, EU 5.4 - Programs are developed, maintained, and used by people for different purposes.
Determine that the program is working correctly. [LO 5.4.1]
EK 5.4.1M P 4
Students work through the tutorial until their app works correctly.

Professional Development

The Student Lesson: Complete the activities for Unit 2 Lesson 2.2: I Have a Dream Tutorial.


Android mobile devices, student computers and presentation system (LCD projector/Interactive whiteboard)

Learning Activities

Estimated Length: 45 minutes

  • Hook/Motivation (5 minutes): Display any App Inventor block — a programming element — of your choice and ask the students to try to figure out what it does. What does a program do?
  • Experiences and Explorations (25 minutes): Lead the students through the I Have a Dream Tutorial, which explains the basic features and elements of the App Inventor environment and leads the student through the steps involved in creating their first mobile app, the I Have a Dream app.
  • Rethink, Reflect and/or Revise (10 minutes): App Inventor is a blocks-based programming language. It differs from text-based languages that students may have heard of, such as Java and Python. Visual, blocks-based languages make programming more accessible to beginners. Programming with blocks helps avoid making frustrating typographical errors. Explain event-driven programming and draw a picture of the event-driven programming model.
    • Suggested discussion questions (2 minutes): Were you able to reproduce the "I Have a Dream" app? What challenges did you encounter? What did you do to address the challenges?
    • Think-Pair-Share (3 minutes): How could we describe “event-driven programming” to someone who is not familiar with this concept?
    • Individual portfolio reflection (5 minutes): Ask the students to write a reflection in their Google portfolio that explains event-driven programming. They might also reflect on UI components of other apps they have used.

Assessment Opportunities

  • Students will be able to reproduce the “I Have a Dream” app on a mobile device. Students will have an opportunity to reflect on the success of creating their first app
  • Class discussion
  • Google Portfolio reflection

Differentiation: More Practice

Here are some additional resources if students are struggling with lesson concepts. Students should be familiar with the App Inventor documentation by the end of the course and able to look up these concepts on their own, but it may be difficulut to read on their own the first few times. You can introduce them to it when they want to explore new concepts or need to review previous concepts. The AppInventor.org website also has a How Do You? page that has short reviews of key concepts in App Inventor programming.

Background Knowledge: More on Programming and Abstraction

  • A computer is a device that can be programmed. A computer program is a set of instructions that controls the computer's behavior. Special purpose computers, such as an ATM machine and the devices that control a car's braking system, are equipped with a fixed program that cannot be changed. General purpose computers, such as our laptops and smart phones, are able to run many different programs -- games, calendars, word processors, and so forth. Similarly, when you download an app from the Google play store or the iPhone Market, you are download a program to a general purpose computer. Today's smart phones are much more powerful computers than the personal computers of a generation ago.
  • Event-driven programming is an important computing concept for mobile apps. Events are generated from the phone's hardware (user touches the screen or the phone's accelerometer detects motion) or from the external environment (GPS or phone call or text message received) or from the program itself (display "hello" on the canvas). The phone's software (its operating system) is programmed to detect events and to distribute them to applications that request them. For example, in this app, when you put a when-Button.Click block into your program that, in effect, is telling the phone to "let me know if this button is clicked". Similarly, if you use a block that handles incoming text messages, that's telling the phone, "let me know when you receive a text message." App Inventor programs are designed to just listen for and respond to events -- the events drive the app's behavior.
  • Here's a video explanation (2:02) of the model as it applies to I Have a Dream and here's a schematic diagram that shows the levels of abstraction involved in the event-driven model. Events are detected by the device's hardware (touching the screen, incoming radio signals, incoming GPS signals) and passed up to the Android operating system. The operating system passes the event up to the current application and to other software installed on the phone. If the app has the correct event handler (e.g., App Inventor block) for handling that event, it will respond ("meow").

Professional Development Reflection

Discuss the following questions with other teachers in your professional development program.

  • How does this lesson help students toward the enduring understanding that programs are developed by people for different purposes and for creative expression? [EU 5.1, EU 5.4]
  • How do the lesson activities promote the CT (computational thinking) practices of creating and analyzing an app (a computational artifact)? [P 2, P 4]

0 points
I am confident I can teach this lesson to my students.

0 points
What questions do you still have about the lesson or the content presented?