Tuesday, July 31, 2018

Latest book: Mobile App Programming for Android

This week I'm putting the final touches on my latest zyBook: Mobile App Programming. If you aren't familiar with zyBooks, they are online books that include animations and interactive questions. (I co-authored the Web Programming zyBook a few years ago and use it in my web development courses.)

Mobile App Programming shows how to develop Android apps using Java. The book contains several complete Android apps: Pizza Party, Lights Out, Dice Roller, The Band Database, and others.

Below is a summary of the Mobile App Programming chapters. Contact sales@zybooks.com if you'd like to be alerted when the zyBook is ready for evaluation. You can beta test it this fall if you'd like.

  1. Introduction: Android platform, Android Studio, app resources, debugging
  2. Layouts and Widgets: Various layouts, widgets, event handling, styles and themes
  3. Activities and Intents: Activity lifecycle, restoring state, explicit and implicit intents
  4. Menus, Dialogs, and Touch: app bar, dialogs, context menus, touch and gestures
  5. Fragments: Creating fragments, fragment lifecycle, fragment and activity interaction, RecyclerView
  6. Working with Data: Shared preferences, file I/O, SQLite, settings, web APIs, Volley, Room
  7. Running Background Tasks: Background threads, AsyncTask, Handlers, Loopers, services, notifications
  8. Graphics, Animation, and Sound: Shape drawables, animation drawables, property animations, custom views, playing sounds, SurfaceView
  9. Sensors, Camera, and Location: Motion sensors, taking photos, Google Play services, Google Maps
  10. Testing: TDD, unit tests, JUnit, integration tests, Espresso, UI tests



A big thank you to the zyBook staff that helped in producing this book: Roman, Kenny, Liz, Evan, the college interns that proofread the text, and tech support.

zyBooks don't usually have a dedication page, but I dedicate this book to my wife Becky who encouraged me these past 18 months while I worked on my book and my boys Ethan and Braden who love to play my Android apps. I love you guys!

Wednesday, July 25, 2018

Kids Coding Adventures 2018

Today was the final day of Kids Coding Adventures 2018, a coding camp that I've directed for the past three years at Harding University.  23 kids attended, who ranged from 2nd thru 4th grade (a few 5th graders snuck in). I had two fantastic helpers from Harding Academy (Mason and Anna) as well as my oldest son.

In previous years we used Tynker, but this year we used Microsoft's MakeCode to program Minecraft mods using blocks or JavaScript. This required us to use Minecraft Education Edition, which is a special version of Minecraft that interacts with programming environments like MakeCode.

A few of my observations, in no particular order:

  • Kids absolutely love Minecraft, so they were really excited about camp. But loving Minecraft is a double-edged sword: It's challenging to keep kids on task when they can easily start "playing" Minecraft.
  • Minecraft Education Edition is only $5, which is really inexpensive. And it's easy to install. However, each user must have a special Office 365 account, which is a headache for our IT guys to setup.
  • Using MakeCode was challenging, especially for the 2nd graders. You must flip back and forth between the MakeCode window and Minecraft, and flip back and forth between chat and regular mode in Minecraft.
  • Two major usability problems with MakeCode:
    1. The responsiveness is pretty bad. I saw frustrated kids clicking multiple times on a button that should have immediately responded, but it would take seconds to process the first click.
    2. When you mistype a chat command, there's no feedback that the command was mistyped. This happens more often than you might imagine.
  • I discovered three problems in MakeCode the first day: a tutorial had erroneous logic, and MakeCode had 2 bugs, one of which would completely erase all your code. (I've reported all the issues to Microsoft.)
  • Most kids struggled more than I thought they would with creating objects using the "fill with" command. We focused on using only the x and y axis, but it was still tough for them to convert a simple picture into code. Next time I'll spend more time doing simple exercises to get these ideas across.