"Hey, we've been writing programs since CS1110!" you might say. "How different can this be?"
Quite a few ways.
Some of you (?) built an Android app in CS 2110. The main purposes there were to 1) get students excited about computing ("I wrote something and wow it's running on this other thing! Neat!") and 2) to get you using a framework you have to learn (and there's plenty of that in Android). We'll focus some time in this class on both these things, but first we need to talk about how software development for a mobile device is different than for a desktop (or for a browser).
So far, you've seen a few different software delivery paradigms:
desktop model - stand-alone application on a single-user machine; this could be a console window or a GUI app
client-server / web model - an application broken into several pieces across multiple machines and is accessible to many users; GUI written in a markup language of some kind
Now we're adding the mobile model.
Some things to consider:
Screen real estate - You no longer have a huge screen to show lots of information on. You have to make careful choices as to what should be displayed.
Interface - You no longer have a mouse and keyboard. You have your fat, imprecise, greasy finger.
Platform differences - Writing for different browsers is one thing. Writing for different mobile platforms is a whole other one.
Platform guidelines - Along the same lines, we now have more rules to follow.
App distribution - This is a completely different model than what we're used to with the other models. The "walled garden" is in full effect here, mainly coming from the history of mobile.
How people consume the app - For the other types, people are (usually) sitting still. Definitely not so with mobile!
Sensors - Your desktop might have a mic and camera, but does it have an accelerometer, gyroscope, and GPS?
We have to rethink building software again with mobile.
Lessons from the InfoWorld article:
Every Pixel Counts
Focus on user experience
Deal up front with memory and bandwidth constraints
Choose carefully between native and Web development
Think about how to take advantage of location
Rely on server-side data synchronization
Design and code for touch interfaces
Don't get too dependent on hardware performance
Expect users to make mistakes
Model-View-Controller is the general paradigm / architecture we'll be dealing with all semester. Best learn it now!