Course Syllabus

Course Description

Software development for mobile devices has special needs and challenges. Devices are constrained in many ways, including a limited display size, processor speed, amount of storage, energy budget, as well as sporadic network connectivity. Yet mobile devices also have a wider variety of available sensors than many desktops, including cameras and microphones, alongside location and motion sensors. This allows for significantly different usage patterns and capabilities, all of which affect application development.

This course will introduce you to the tools, language, software architectures, and user interface requirements needed to develop applications for Android phones, tablets, and other devices. You will build small to mid-sized Android applications using the Java language, addressing the implementation of user interfaces and interactivity, networking, sensor access, and data storage and retrieval.

Prerequisites: CSE 143; INFO 343 or equivalent.

Learning Objectives

After completing this course, students will be able to:

  • Utilize development tools and IDEs to implement Android applications
  • Understand the fundamental components and lifecycle of an Android application
  • Specify user interfaces for applications through a variety of interactive widgets and modalities
  • Harness sensors common to mobile device in applications
  • Develop applications that work across a heterogeneous set of devices
  • Be familiar with patterns used in industry for the development of Android applications.

Course Components

This course aims to help you develop practical skills implementing applications using the Android framework, so activities will be targeted at these programming activities.


Lectures will be used to introduce and demonstrate topics, providing a basic for assignments. Lectures will primarily follow a "tutorial/walkthrough" approach, demonstrating how to implement particular components of an application, while providing you a chance to experiment with techniques. The best way to learn is to participate and "code along" with the class demos. I expect you to ask questions, experiment with variations, and otherwise "be all in" with the course.

Note that lecture explanations and tutorials will also be available in the Lecture Notes available online. I encourage you to read the relevant sections of the text before lecture when possible, and be ready to ask questions about concepts that are unclear!


Find complete assignment details and due dates on the Assignments page.


Lab sections will involve small implementation exercises used to either practice/review concepts from lecture, or to explore supplementary aspects of Android development. You will be expected to complete each exercise (including finishing at home if necessary).

Find complete lab details and due dates on the Assignments page.

Group Project

You will also be completing a group project (developing an application of your choice) at the end of the course. See the relevant assignments for more details.

Class Attendance

Make every effort to attend each class meeting (including lab sections!). Class will begin and (usually) end on time. Please do your best to get to class before the start of the session. Students are expected to attend all meetings, with exceptions permitted in case of illness and family emergencies.

Please silence all cell phones/pagers/etc. before the beginning of each class. You should bring your laptop for in-class work, but please don't use class time (lecture or lab) to check your email, update your Facebook, read reddit, watch YouTube, make dank memes, seize the means of production (allowed), etc. Such usage is distracting and interferes with learning both for you and for all the other students around you. Spend class time on class materials. If another student's activity is distracting, please ask them to stop it (or let us know outside of class).


We will send out official course announcements and information by email, so you should check your email daily (it may not be hip, but it's accessible and effective!) Note that this email will go to your address. If you prefer to read your email on another account, you should set your UW account to forward your email to your preferred account.

You are welcome to email me at any time. When emailing, please make sure to sign your emails! This will let me know who is writing and will help us to better answer questions.

I have also set up a Slack team for questions and discussion. I encourage you to use that to ask for programming help rather than email: this lets you get support from the whole of the class (not just the professor), and is more conducive to the kinds of small questions that come up when programming.

Note that I will generally not be available to answer questions on the weekend; you should not expect a response from me then.

My official office hours are listed on the home page, but if my door is open then I am more than happy to talk about any questions or concerns you may have about the course or its material. We can also schedule a specific time to chat that works better for you.


Find complete assignment details and due dates on the Assignments page.


YYour grade in this course will depend on your completing the homework assignments, lab activities, and final group project thoroughly and on time. Active participation during class meetings and overall support of the learning environment will also be a factor.

Final grades are determined based on the iSchool Standard Grading Scheme. I urge everyone to focus not on the grade itself but on learning what's necessary to earn high scores; the grades will follow from that.

Late Assignments

Late assignments will lose 10% per 24-hour period they are late. After 3 days, students may receive a maximum of up to 70% of the points possible.

However, each student also has three (3) "late days" that can be used for "no questions asked" extensions on homeworks. Late days are spent in 24h increments. Group assignments require one late day from each group member for each 24h used. Labs, participation activities, and final project deliverables cannot be extended with late days.


A number of challenges from a variety of directions can affect your ability to bring your optimal attention and energy to a course. Student Resources is a set of links to campus resources that UW makes available to students in trying to mitigate and cope with some of these challenges. This includes disability accommodations, physical and mental health, and community connections among others. If you are having any difficulties, please contact your academic advisor for support, or Health & Wellness at Furthermore, please notify the professor if you are comfortable in doing so. This will enable me to provide any resources that I may possess.

I encourage all students having difficulty, whatever the reason, to consult privately with me at any time.

Academic Conduct

The standard iSchool and UW academic policies that apply to all of our courses, apply here as well.

Diverse backgrounds, embodiments, and experiences are essential to the critical thinking endeavor at the heart of higher education. We expect you to be respectful of the many social and cultural differences among us, which may include, but are not limited to: age, cultural background, disability, ethnicity, family status, gender identity and presentation, citizenship and immigration status, national origin, race, religious and political beliefs, sex, sexual orientation, socioeconomic status, and veteran status. Please talk with me right away if you experience disrespect in this class—from any source (including teaching staff)—and I will actively work to address it.


The iSchool encourages and supports collaboration. The goal of this course is to learn the material—to be able to create Android applications on your own. You are encouraged to utilize any available resources, including your classmates, to **learn** these skills. You are welcome to discuss exercises and problems with others, to work through challenges in pairs, to seek help if you get stuck, and to share guidance and expertise if requested. Help each other to become experts!

But "collaboration" does _not_ mean just copying other people's code and trying to pass it off as your own. You can discuss problems and even work through solutions together, but the final product (the code you create and submit) should come from your own brain and your own hands.

The point of assignments is for you to learn to complete them. This includes the entire process of getting the solution—_including_ the false starts, bugs, misconceptions, and mistakes—because the learning occurs in the doing. Completely apart from the ethical issues, copying a solution without understanding deprives you of the whole point of the assignment, and frankly is a waste of your time.

A good rule of thumb: When working on an individual assignment, no other student's code should **ever** be on your computer. Not ever shown on your screen (including as an image or screenshot), not saved to a file on your harddrive, not found in an email under your account, etc.. You can verbally talk through the code to write, but make sure you understand what and why your implementation works—and if you're not sure, ask!

  • DO: Ask people for help finding bugs.
  • DO NOT: Let someone else type code for you.
  • DO: Give credit when you get help or advice from someone.
  • DO NOT: Copy or adapt an assignment from a previous quarter.

Code Reuse

Although professional web developers often reuse code they find on the web, they also take the time to understand what that code is doing, customize it to their specific context, and cite the source so that they can find it again later. If you want to use code you find on the web, you MUST include a reference to where you found the code (a URL in a comment is fine), and take the time to understand why it works. Otherwise you won't learn anything. Failing to give appropriate credit is a form of plagiarism, and so is considered cheating.

Academic Honesty

The consequences of academic dishonesty are not worth the risks. The simple rule is: do not claim anyone else's work, code, words, or ideas as your own. If you're in doubt, come talk to me in advance.

If we determine that you violated the collaboration policy and plagiarized code, you will get an automatic zero on the assignment, and will force us to file an academic misconduct report with the Associate Dean of Academics. Note that both students will be considered to be at fault in the case of unauthorized code sharing.

If you're having problems in the course, come and speak with me; never take the shortcut of copying someone else's work. It isn't worth it.

Course Summary:

Date Details Due