Wednesday, January 25, 2012

University of Maryland's CMSC 436: A Student-Driven Effort to Develop Open-Source Android Teaching Materials


Quick Links: Open Source Teaching Materials used in CMSC436: Programming Handheld Devices.



Starting in the summer of 2008, I and several others developed and offered a course at the University of Maryland on programming mobile applications for the iPhone platform. The course was well-received and the students really enjoyed experimenting with this cool, new technology. After a while however, as Android phones became more popular and more widely-available, students began approaching me, asking, "iPhone only? What about Android?" I didn't really have an answer. It's a lot of work to put together a course and having just spent a year on the iPhone course, I wasn't too keen to do it all over again for Android.

Still, I knew in my heart that the students were right. Mobile application development skills were (and continue to be) in high demand, the Android platform had matured greatly since we started the iPhone course, and its user base was growing rapidly. So there was a ready market for Android development courses. Also, from an educator's point of view, Android, unlike iPhone, relies on tools and platforms that are already familiar and readily available to UMD students, such as Java, Eclipse, Junit and commodity PCs. This frees up about 25% of class time, allowing me to shift from teaching Apple-specific tooling to teaching deeper mobile application concepts.

So I made a deal with my students. I would organize a 1-unit seminar course on Programming the Android Platform; the students would each research different Android topics, develop presentations on those topics, and then present them to the class. As each student prepared their presentations, I worked with them, providing further technical resources, slide templates and presentation feedback. By the time the semester finished the students had created a initial set of slides covering a wide variety of Android topics.

I then extensively edited all the presentations: reorganizing material, refactoring some presentations into multiple smaller, more focused presentations, adding many source code examples, filling in gaps in topic coverage, etc. These materials continue to be a work in progress, but, hopefully, they're mature enough that others can benefit from them. 

Going forward, I will continue to expand this work. In particular, I am actively adding new topics, new conceptual material, and new infrastrucure and applications. Some examples of this include:
  • New topics: Android 4.0+, using the USB Open Accessory Kit, using Near Field Communication, and Device/Cloud Integration.
  • New conceptual information: With Dr. Jules White (Virginia Tech) I am developing materials to teach important background concepts underlying mobile application platforms such as key Design Patterns found in the Android platform (e.g., Listener, Cursor, Proxy, Command, Monitor, Completion Callback, Broker, and many more.).
  • New Infrastructure: With Drs. Jules White (Virginia Tech) and Aniruddha Gokhale (Vanderbilt), I am currently creating a large-scale mobile application testbed called ATAACK -- the Android Tactical Application Assessment & Knowledge Cloud. when finished ATAACK will support cloud-based Android emulation to run experiments integrating 1,000+ emulated and actual Android devices running on Virginia Tech's Cognitive Radio Network Testbed (CORNET).
  • New Applications: Once it's completed we will use the ATTACK cloud to teach advanced security and privacy concepts. For example, we will develop lessons about how information spreads in online social networks, such as Facebook or Google+, and why careful selection of privacy controls is important. The lessons will be accompanied by pre-configured experiments on ATTACK to illustrate the fast spread and durability of information in these networks.
Click here to see the latest version being used in CMSC436: Programming Handheld Devices . Feel free to browse, use and share any of these. I also welcome your comments, corrections and improvement ideas. You can reach me at aporter@cs.umd.edu.