Thursday, July 18, 2013

Thoughts On Mobile Phone Development

For the second year the annual CSTA Conference has had a mobile phone development “throwdown.” In this session each participant has 15 minutes to create a mobile phone app. We had someone developing in Objective C for iOS (iPhone), App Inventor for Android, and Visual Studio for Windows Phone. I recorded a version of my Windows Phone demo at Windows Phone Random Dialer Demo. I believe the whole session was taped and I’ll update this post with a link to that when it is available. But this post is about what I have learned and some opinions I have developed from watching the “other guys.”

Update: A video of the live session from the CSTA conference including the iOS and App Inventor for Android development is available at

Ralph Morelli(Android), Adam Howitt (iOS), Alfred Thompson (Windows)Picture by Peter Beens
The first thing I have learned is that I have no real interest in using iOS development in my classroom. If I were in the app development business I would probably go though the pain to learn it but since I’m not I will not. Objective C seems a little on the weird side to me. And I am probably spoiled by Visual Studio but attaching code to events and objects seems a lot easier in Visual Studio (and App Inventor for that matter) than in iOS development. I want something easier and smoother for teaching.
App Inventor is cool. No two ways about it. It’s fast, easy, graphical and there is a lot of good access to phone features. It’s not “real code” though to me. I have mixed feelings about that. I would love to see how the professionals develop for Android. In the demo at CSTA the presenter did have to go into Java tools to get access so random contacts in the contact list because App Inventor didn’t have a native way to do it. That was done hurriedly with a bit of “I prepared this earlier” so it wasn’t clear to me how it all fit together. Some of that was of course because of the severe time constraint.
I can see using App Inventor in some ways in a first course. In a more advanced course I was more traditional code.
Visual Studio is, in my admittedly somewhat biased view, just right in the middle between the drag and drop of App Inventor and the complicated Objective C of iOS development. It also has the advantage that the same languages (C# as I used in  this demo or Visual Basic) that are used in more traditional programming as also used for phone development. I like that.
An addition to the mix for me is TouchDevelop. It is somewhat similar to App Inventor in that syntax is largely taken out of the mix. It doesn’t have quite the same drag and drop user interface ability that either App Inventor, Visual Studio or even the iOS tools have though. On the other hand it allows the user to export to Windows Phone, Windows 8 or web apps. That’s cool!
It is also very easy to get access to phone specific functions. Take a look at this code that displays information about all the contacts on my phone.
And that is with some error handling to watch out for contacts without phone or email addresses. As TouchDevelop continues to improve that may be the way I do things if we do another ThrowDown in the future.
Something else I learned is that different platforms allow (or not) different things to coders. For example it is easy to get information (meta data) about phone messages or texts in Android. Not so easy at all in Windows Phone. On the other hand in Windows Phone development one is able to easily access random contacts while on Android (especially with App Inventor) some hoops have to be jumped though. There was also a lot of “set up” required in iOS development that neither App Inventor nor Visual Studio or TouchDevelop had to go though. So you have to do some homework to make sure your app is even possible on a platform.


Mrs_D said...

I attended a workshop about Programming Android Phones using Eclipse. I guess it is the programmer in me, but I felt it was easier than AppInventor. It uses an interface similar to Visual Studio.

Garth said...

Take a look at Corona SDK. It writes for iOS and Android. Code on a Mac or Windows platform. If a kid can do Small Basic then they can get something working in Corona. It is line code, no drag and drop. Beginner to professional apps. Much, MUCH easier than Objective-C. Several IDEs to choose from. I use Outlaw IDE but NotePad++ works if you like it simple. NotePad++ is what I use with the kids. Very low overhead. There is a pretty good tutorial network building and some decent texts. Best of all, everything is FREE! OK, so the free version does not let you publish to any of the stores but who cares for teaching. The kids like it. They can actually write a game or whatever and get it on their Android device. Corona will allow you to publish directly from the computer to the phone. Can't with iOS, have to go through the store. Bummer.

Mike Zamansky said...

In NYC kids aren't allowed to have cell phones in school which kindof puts a damper on mobile development.

That said, in my softdev class I had multiple groups do mobile development even though we didn't explicitly cover it. We had one project on IOS and a couple using Android. It was pretty funny keeping an eye out for school administrators on demo days.

One mobile tool you didn't mention is web apps for the phone -things like Phonegap or Appcelerator (I kindof like Phonegap personally).

The idea is that your application is html/javascript/css with libraries to access phone internals and then wrap the whole thing up to appear as a native app. One code base, multiple platforms. Pretty cool if you ask me.

I'm sure it's not as optimized and polished as native, but still pretty cool.

Side note -- not a fan of AppInventor here - maybe subject for some blog fodder later on.