Event-based Languages (and phones) are the key to learning

When the user clicks the button,…

Computers were first designed to compute, to allow men with oversized glasses to write “recipes”, to take a large set of numbers and compute some formulaic result. Computers still crank through formulas, of course, but their purpose has expanded far beyond computing things. It is doubtful that Alan Turing and his generation envisioned Facebook, Google glass, or even people carrying around their computers tweeting camera-shots and using GPS to find where they’re going.

Though the reason we use computers has changed dramatically, our coding languages have not. Popular languages like Python and Java are still based on the “recipe” model with a “main” program of sequential instructions. This recipe model makes sense for computing things, but is a poor fit for modern software, which is much more like an event-response machine, reacting to the user touching a button, location information coming in from a GPS satellite, or a text arriving from a friend.

For experienced programmers, the dissonance between the language they use and the software they’re trying to build isn’t that big a deal. But for beginners it makes learning to code really difficult. Want to program an app in which clicking a button causes the button to turn red? Should be simple right? It’s not. In Java, for instance, you first create an object called a Listener, then register that listener with the user interface object (the button), then program the handler to…you get the picture! Its not a first hour or even first day exercise, and you have to understand many things before you can do it. This difficulty is the reason why most people’s initial engagement with coding is to display “hello world” on the screen or at most to add up a list of numbers. Couple these less than motivating initial results  with the fact the computer is barking error messages at them, and it is no wonder most don’t stick with the field very long.

The problem is that events, like the user clicking a button or dragging the mouse, are not first-class objects in our popular programming languages. The events must be constructed by the programmer, and its not easy to do.

Event-handling languages like App Inventor are different– “when event do” is a first-class construct in the language. Here’s how you program the”click a button to turn it red” example in App Inventor:

Such a program takes about 30 seconds to learn. You just look in a drawer of button events and function blocks, drag them into your app, and plug them together. Here’s another sample:

Can you tell what it does? It’s basically an answering machine for texts. You turn the app on when you get in your car, or enter a meeting, and it auto-responds to any incoming texts. Pretty powerful, but easy to specify, almost as easy as telling Siri, “when someone texts me send an auto response”.

Now this texting code is a bit more complicated than the Button.Click sample. You have to understand that “number” is the phone number of the person who sent the text and know how to refer to it to set the “PhoneNumber” of the out-going message. But it is still a first day or even first hour exercise.

Here’s one last example, for you game lovers out there. Let’s say you want to animate a flying saucer and have it move horizontally across the screen? Coding animation is really hard, right? Well, here’s the App Inventor code:

Screen Shot 2013-12-11 at 6.58.24 AM

The code is, again, a little more complex than a Button.Click. You need to understand that the Clock.Timer is like an alarm clock, and that there is another value somewhere specifying how often the timer should go off.  And you need to understand that the “X” coordinate of the flying saucer is its horizontal location, and that you can change it by setting it to “itself”+ 5.

The beauty of an event-handling language like App Inventor is that the events– the things that your app can respond to, are pre-defined. They’re organized into little drawer. You just click on a drawer, find what you’re looking for, and drag it into your app. Then you drag response (function call) blocks in to specify what should happen when the event occurs. The fundamental software behavior– event-response– is the fundamental construct in the language.

Now you’re probably asking, “why aren’t all language like this?” Well, they should be. Part of the problem is just the incredible inertia that exists in software engineering. People teach what they know, and programming language design became passee sometime in the 1990s. But it is also about control. Programming languages are designed for maximum flexibility– so you can build anything and make as general-purpose a program as possible. To enable reuse of code, abstraction is worshiped; concrete simplicity is disdained.

App Inventor was designed by a group of really smart Googlers whose target audience was  beginners, so they favored concreteness over abstraction. The language provides you with a fixed set of concrete event and response blocks. You can program just about anything that can occur on a phone or tablet, but not everything. And you cannot define a new component, you are at the mercy of the engineers who develop App Inventor. Such inflexibility drives programmers crazy, they want total control of the machine, and are wary of “toy” systems that don’t give them that. Unfortunately, the cost of this total flexibility– of having an abstract Listener object that you can program– is that learning to code is a horror story!

If you are new to coding and want to give it a try, go to ai2.appinventor.mit.edu. You can also try the App Inventor Hour of Code intro lessons or the I Have a Dream video tutorial at appinventor.org. You can be programming your Android phone in 10 minutes!

Advertisement

Obama says, “Don’t just play with your phone, program it!”


As part of code.org‘s terrific “Hour of Code” week, Barrack Obama has called out youngsters to learn how to code. There are some great learning tools at code.org, including Blockly, Scratch, and App Inventor. The initial “Angry Birds” code challenges involving programming character’s movement through a maze is a great beginning to programming. My twelve-year-old son Tomas had a blast and learned a lot of programming (if, loops, complex logic, etc.).

App Inventor Answers the President’s Call

Learning to program a maze is great, but App Inventor stands out as a tool that actually lets you program your phone and build all kinds of apps. You can build apps that auto-respond to text messages or an app that with a single click sends “thinking of you” to a list of phone numbers; You can build apps that remember where you parked your car, or how far you’ve run. And you can build meaningful, media-rich apps such as an “I Have a Dream” app that plays the speeches of MLK and Malcolm X. Most importantly, you can share your apps with your family and friends because App Inventor works on the open Android platform.

The “I Have a Dream” screencast tutorial is below. If you have an Android, click on the link and follow along, and you can have a cool app downloaded within minutes. And you’ll learn enough programming to build your own apps of various types– the sky is the limit!

For more, see appinventor.org and  MIT’s Hour of Code lesson.

App Inventor 2 is Here!

Screen Shot 2013-12-05 at 9.39.58 AM

App Inventor 2 is the new version of App Inventor now available at http://ai2.appinventor.mit.edu. It is fabulous– a real game changer in terms of app building and computer science education for beginners. Congratulations to the MIT team for this great achievement!

The tool is much easier to setup and usually requires no downloads on your computer. If you want to build apps and learn some programming, and you have an Android phone, you can literally get going within minutes.

Besides the better setup, the new system provides a much more elegant programming experience. The blocks editor loads immediately — its now in the browser, not a Java app!. And there are a number of new features that simplify the app building process. Once you use it you will NEVER go back. However, AI “Classic” (beta.appinventor.mit.edu), and the projects you’ve already built, will still be available for some months. For a description of the key changes in AI 2, see http://www.appinventor.org/appInventor2Changes.

appInventorBook

Teachers– you should teach with AI2 this Spring. For my take on why, see http://appinventor.org/appInventor2. In terms of supporting materials, the App Inventor book has been partially translated into AI2. You can find some chapters in web form at http://appinventor.org/book2. Most of the book will be translated in web form by early January. I am also working on a new book which will be available in plenty of time for next Fall.

There are also a number of AI2 video tutorials available at appinventor.org, and Shay Pokress and the MIT team have also created a number of nice tutorials available on the MIT site.

 

Dave

Super-Teacher Kelly Powers Teaching High schoolers!

Want to see a successful STEM program in action? Check out this video of Kelly Powers, the Mass. STEM teacher of the year, teaching students to be creative, solve problems, and build their thinking skills, all through building apps with App Inventor. Congratulations Kelly!

 

AppInventor.org updates

AppInventor.org has been updated with the following:

1. Conceptual roadmap — find what you want to learn! This page should be helpful to students and teachers designing courses.

2. App Inventor 2  tutorials and video screencasts.
The first batch is ready, many more to come…

  • “I Have a Dream” soundboard app tutorial for beginners. video text
  • Paintpot, the classic tutorial now in App Inventor 2  video text
  • Math Blaster, an app that generates and checks arithmetic, lots of iteration! text

3. Course-in-a-box updatesDesigning an App Inventor course? Make use of the materials here, including these additions:

In the next few weeks we’ll be rolling out more new content, especially for App Inventor 2, and we’ll have a new design!
Dave

$200,000 Keck Grant for AppInventor.org

keckDavid Wolber and the University of San Francisco received a $200,000 grant from the W.M. Keck Foundation to launch the Democratize Computing Lab at USF.  The Lab’s mission is to  break down the programmer divide and radically broaden and diversify the pool of software creators.

The Lab’s strategy is based on App Inventor, a visual language from MIT that allows beginners to learn by programming their phone or tablet. The language has a low barrier to entry. Instead of being bogged down for months in the syntax of a traditional language, beginners can build useful applications within days and early on experience the joy of computing and real-world problem-solving.

AppInventor.org On-Line Course

AppInventor.org: Learn mobile programming on-line

Wolber has been involved with App Inventor since its inception at Google in 2009, and co-authored a book with App Inventor creator Hal Abelson and two of the Google engineers on the App Inventor team (including Mills College professor Ellen Spertus). His site appinventor.org, which provides video lessons and course materials for students and teachers, recently received its millionth hit.

The Lab is involved with a number of App Inventor education projects for providing beginners with an entry-way into the world of programming. Wolber and his students are completing and refining the “course-in-a-box” materials for students and teachers on the appinventor.org site. They’re also working with MIT and UMass-Lowell on the App Inventor Community Gallery, a site where students, teachers, and developers share apps and learn from each other.

An open-source app studio for peer-to-peer learning

App Inventor Gallery: app studio for peer-to-peer learning

Wolber will continue to direct the Lab in the fall while on Sabbatical at MIT, where he’ll be serving as a visiting faculty member and working with Hal Abelson and the App Inventor team.

Jeff Gray is Transforming Education in Alabama

University of Alabama professor Jeff Gray is working to develop new computer science AP curriculum for Alabama high school students based on App Inventor and mobile programming. Check out this video from ABC news:Screen shot 2012-12-01 at 11.45.05 AM

Technovation Challenge: Sign up!

High school girls: sign up for this amazing after school program:

Software developers and entrepreneurs: sign up to be mentors

Enter the MIT App Inventor App Contest

MIT App Inventor App Contest 2012

What:   The First MIT App Inventor App Contest. Prizes, Fame, Fun!
Who:    Everyone is eligible, see categories below
Why:    To promote App Inventor, the App Inventor Gallery, and mobile programming for all!
When:  Submission Deadline is Midnight, December 12, 2012, (Pacific Time)
Where: The App Inventor Community Gallery (http://gallery.appinventor.mit.edu)

Prize Categories
Most Outstanding App: grades K-8, 9-12, College/University, Open

Prizes (each category)
1st Place: Google Nexus 7 Tablet
2nd Place: App Inventor Book ( http://bit.ly/AppInventorBook )

Contest Criteria
Creativity
How novel is the app? What app(s) is it similar to, and what is the value-add of the app?

Potential Impact
What is the potential impact of the app? Who will it help, and how will it help them?

Complexity
How complex is the app in terms of blocks, logic, and programming concepts.

User Experience and Presentation
Does the app have a well-designed, professional-looking user-interface? Is it easy to use for the intended audience, even the first time they use the app?

Completeness
Is the app complete or close to it? Has it been user-tested or deployed with real users?

To Enter the Contest:
1) Join the MIT App Inventor Community Gallery
(The Gallery is in Beta, go to http://gallery.appinventor.mit.edu to request full access).
2) Develop an app using App Inventor (http://beta.appinventor.mit.edu),
3) Upload your app to the App Inventor Community Gallery.
4) Fill out the contest submission form at: http://bit.ly/AIContestEntryForm
5) You may edit your app and form entry until the contest deadline of 12/12/12. Be sure and save the “edit form” link when your initial submission is confirmed.

More info: email contest organizer, USF Professor David Wolber, wolberd@usfca.edu

National Science Foundation Grant for Teaching App Inventor

The National Science Foundation has awarded a $565,836 grant in support of mobile programming education with App Inventor. Its
a TUES Grant, which stands for Transforming Undergraduate Education in Science, Technology, Engineering, and Mathematics.

The project involves Wellesley College, MIT, Trinity, U. Mass, Lowell, and the University of San Francisco (my school). We’ll be building on-line, Khan-academy-like tools for App Inventor, with the goal of teaching computational thinking to beginners, especially non-CS-students. Many thanks to Franklyn Turbak of Wellesley, who led the proposal process, and Hal Abelson of MIT who leads the App Inventor project. Here are all the Project leads:

Hal Abelson, MIT

Lyn Turbak, Wellesley

Ralph Morelli, Trinity

Fred Martin, UMass-Lowell

David Wolber, USF