Conceptualize, Protype, Remix, and Test Small!

It’s a great time to learn coding! Everyone from will.i.am to Chris Bosh to Sheryl Sandberg, COO of Facebook are stating the facts: software is now part of all we do, but very few people know how to code. (Check out code.org for more on this).

App Inventor is a great way to start because it lets you program by plugging puzzle pieces together and you get to learn by building cool apps for your phone! Many beginners start by building the apps from the App Inventor book, which are online for free at appinventor.org, along with video of a professor (me!) walking through the creation of the apps. The screencasts are popular with my students at USF and appinventor.org recently reached a million hits.

David1
Build-Conceputalize-Customize-Create

You’ll probably start by stepping through some tutorials rather mechanically, only partially understanding what you’re doing. It’s very important to slow yourself down as you step through and take the time to really understand the language and logic behind what you’re doing. Talk to your teammates about the apps and walk through the blocks on a whiteboard, tracing the blocks and showing how the app’s internal memory (properties and variables) change. Try some of the conceptual questions at appinventor.org (e.g., these about the MoleMash game), or ask your teacher/advisor to ask you some questions. The key is that with programming (or Math) you can’t just memorize, you have to understand!

Once you’ve done some conceptual work, challenge yourself to build something for which you don’t have detailed instructions. The customization exercises at the end of each chapter are good for this, and the video screencasts are setup to encourage trying each part before watching the lesson. The most successful learning strategy I’ve seen is a build-conceptualize-customize-create process.

“The key is that with programming (or Math) you can’t just memorize, you have to understand!”

 

david2

Prototype

A prototype is an incomplete, unrefined and perhaps buggy version of the app you’re planning to build. Now your grade school teachers would have never allowed such a thing, but in programming, such an unrefined entity has great value. I’d encourage you to create prototypes of your app as you go, even while you’re still thinking of ideas. It is really hard to describe interactive software with text or words, and even a lousy prototype gives you a tangible (okay, virtual) piece of software, something that can help you formulate your ideas. Perhaps most importantly, the prototype allows you to express your idea to others, whether they be potential clients, users, or angel investors. Software engineers way too commonly build solutions where there are no problems— early prototyping and user/client discussions can make sure you don’t fall into this trap.

“I’d encourage you to create prototypes of your app as you go, even while you’re still thinking of ideas.”

david3

Remix

Another important engineering skill is to steal, whoops, I mean remix. With App Inventor, you can make use of the App Inventor Gallery. Here you’ll find hundreds of apps built with App Inventor, and all the apps are open source, meaning you can download the source code (blocks) and remix them for you own app. This is not “cheating”, as long as you provide proper attribution (e.g. in the about page for your app, specify the apps from which you borrowed). As they say, there is no reason to recreate the wheel, so search for apps similar to yours and for programming samples that can help in your own project. You’ll learn a lot by reading the code of others, and heavy reuse of code is how things work in the real world. Rarely, if ever, do programmers begin a project from scratch.

david4

Code a little, test a little

Perhaps the best advice I can give you is this: test as you go, after every few blocks of code. Great software engineers can shift between the big picture design and minute details, a skill that is much harder than it seems. When you are designing, think big and creatively. But when you code the blocks, assign yourself tiny sub-goals, then code and test each part to completion. SaveAs every few minutes, and always have your phone or an emulator running as you code. Failing to do this will ruin your project and/or give you gray hair!

“…when you code the blocks, assign yourself tiny sub-goals, then code and test each part to completion.”

User-Generated and Persistent Data

A major conceptual leap for beginners is when you start to build apps with user-generated data, e.g., apps like Facebook in which the user enters information and expects it to be saved persistently. Suddenly your app becomes more abstract, and you also need to deal with a database. “Persistent” means information that lives on even after an app is closed, and it requires some type of database to save the information. In App Inventor, you can use the TinyDB component to save and retrieve database data. Check out the MakeQuiz/TakeQuiz sample. For an example using Fusion tables, check out the Pizza Party sample.

Have Fun!

Most of all, have fun! Software is changing the world and you can be a leader in this seismic shift! The great thing about App Inventor and programming is that you get to learn by creating, which is the best way. Just follow your instincts, choose a great project that you are passionate about, and always keep in mind that the goal of engineering software is to make someone’s life easier or better. I think you’ll find that you learn a ton and think harder and better than you ever have!

david5

ABOUT THE AUTHOR:

David Wolber is a professor of Computer Science at the University of San Francisco. He is the author of App Inventor: Create your own Android Apps and the site appinventor.org.