Want to be the next Nick D'Aloisio who at the ripe old age of 17 sold his smartphone app to Yahoo for $27 million?

Want to know the ins and outs of rolling your own Android app?

Want to develop your own app as part of a group project?

Then read on ....


The coolest technology to emerge over the last decade is the smartphone -- its had a huge impact on our lives. Today, 3/4 of all Americans own a smartphone and I bet you are reading this webpage on your phone, no?

If you've been curious about programming phones and creating great apps then this course is for you. We'll focus on programming Android phones -- sorry iPhone users.

The course is heavy on programming. The prerequisite for this course is Computer Science 10 (no exceptions given).


We have updated the course thematic app MyRuns to include a more modern UI design and use Google's activity recognition API. We've also added a social component to MyRuns..

The top 5 students can keep their phones as a keepsake.


Office hours, sections and lab hours

Office hours:


Brief review of the weekly programming assignment. It is only a Q&A. You come with the questions and the TA's will answer. It is not a lecture where they present the assignment and tell you how to do it.

Lab hours:

Teaching assistants

Both TAs are experienced Android programmers and super nice people. Proud of these guys. They are first year PhD students.

You can make an appointment to see the TAs. Just email them.

What we'll teach you

The goal of this course is to teach students how to design, implement, test, debug and publish smartphone applications on java based android phones. Students will learn how to take their innovative ideas from conception to the android market through a series of rigorous hands-on programming assignments and group projects.

This is an introductory course aimed at undergraduate students (but graduate students are most welcome) who have Java programming experience. However, there is a significant amount of programming in this course requiring a commitment on the part of the student.

Topics covered: the android development environment including the Android Studio IDE; key programming paradigms; UI design including views and activities; data persistence including SQLite; content providers; messaging and networking; phone sensors, location based services (e.g., Google Maps), background services; broadcast receivers; cloud programming; and publishing applications to the android market.

Android programming concepts are reinforced through a set of thematic programming exercises that introduce these topics and incrementally allow the student to build a complex application; that is, programming labs form a set of components that collectively implement a continuous sensing application. The resulting phone app allows user to log their exercises (e.g., walks, runs) and display them on Google maps.

A key part of this course is group projects where students will work in small teams onjoint problem solving. This should be a fun, creative and group-oriented experience. You will need to be organized to do well in the allotted time.


Computer Science 10 (no exceptions). Android is based on Java programming.

We are using Piazza for information dissemination and Q&A

Sign up to CS65 Piazza. The best way to get answers to programming problems is crowdsourcing -- so the first time someone comes across a problem and we know the answer - everyone sees it. I encourage students to actively use piazza. It's a great system.

Coursework and grading

The coursework is as follows: There are a number of longer thematic labs (MyRuns) and shorter programming assignments (CodeIts), weekly Monday quizzes and a group project.

Checkout the grading rubric for the programming assignments plus design and coding advise.

50% - Thematic programming exercises

There are 6 weekly programming assignments over the first 7 weeks. These labs are designed to help students learn the android programming environment and key programming paradigms. Assignments are done individually. Each lab will receive the same percentage of the grade.

Each student will demonstrate their standalone MyRuns5 (after lab 5 is complete). We will meet on the green to assess your app. You will be asked to demo two activities: walking around the green and running (if you don't feel up to running we will find someone to run with your phone).

Your MyRuns5 app should correctly capture the activity (walking and running) and the details of the exercise. Andrew should be able to see the saved exercises in your history tab displayed on Google Maps.

Labs are graded on completeness of the required features, the correctness of the functionality, and the robustness: note, if your lab crashes it will not be graded and you will have to resubmit a working version with 10% penalty against your lab grade.

Please make sure that your submitted code has no warnings in the code. We will not grade code that has compilation/lint warnings unless you have the OK from the TA in advance for some edge case that can't easily be cleared: Note, if your code has such warnings it will not be graded and you will have to resubmit a working version with 10% penalty against your lab grade. We will provide a list of known exceptions..

You should download, inspect and run all code examples in the notes (.zip files) to fully understand concepts and patterns taught in class. However, you cannot under any circumstances ``cut and paste'' these examples into your solutions for your submissions. You should use these coding examples as a learning tool; always code your own intrepreation of these coding examples in your solutions if you choose to use the patterns; that is, look at the code and understand how it works but always code your own versions of these patterns if you use them in your solution. If you cut and paste any class code there will be a 10% penalty and you will have to recode and resubmit your lab.

The MyRuns document captures the complete app specification and lab assignment information. You should read through the design specification for the complete MyRuns app a couple of times before starting the lab sequence. For each lab we give you a running example of the solution called an APK. Your job is to functionally replicate each APK.

25% - Monday Quiz (10 mins) and CodeIts

We will have a weekly quiz (only 10 mins) on any material discussed in class and in the notes for the previous week. Quizes will be for the last 10 mins of class on Monday. That means you have to read the notes, attend class, and run and understand the code snippets. You will be asked to write code but it does not have to compile. I care less about exact syntax and more that you get the code right.

Also, we will have a number of short coding assignments called CodeIts. Some of these will be started and completed in class or submitted before the end of the day of class. These will not be complex like MyRuns and just reinforce what we discussed in class.

We will grade CodeIts simply. We will only look at functionality -- does the app do what we asked. If it does not work at all you get 0. If it partially completed the CodeIt you get 50%. If you complete it you get 100%. Don't get stressed about CodeIts. A CodeIt and Quiz will carry approximately the same grade. I would imagine there will be 7 quizzes and 3 CodeIts -- so each carry 2.5% of your overall grade.

25% - Group projects

Students will develop their own app.

Projects are made up of a small (3 people) teams and require strong collaboration and a problem solving mindset. The goals of this activity are to help you develop the confidence, skills, and habits necessary to write real phone apps while part of a multi-person team.

Each team member will get the same grade assuming all goes well. The grade will breakdown as follows:

All project information is assembled here

Grading Rubric

Your final percentage grade will be translated to a letter grade using the following table.

Submission of programming assignments

We use the Dartmouth Computer Science Gitlab Server for submission of assignments. You will need to go to the server and sign up using your Dartmouth mail addresses - not gmail. You will need to add the TAs to your CS65 repos.

Here are the detail instructions for submitting using git.

Note, we take a snap shot of your repo at midnight on the submission date. So to submit you have to make sure you add and commit all your local files so your repo is up to date at 11.59 pm. Please make sure your code works and does not crash.

Policy for late assignments

You should always aim to get your lab in on time.

Penalties: < 8 hours: 10%; < 24 hours: 20%; < 48 hours: 40%; more: no credit.

Under extenuating circumstances, alternative arrangements may be made with the instructor, if possible before the due date.

Our late policy is a bit harsh but here's the reasoning. Each lab builds on the previous lab so falling behind is a taxation unto itself. To balance this late policy I add this sweetner: you get two free 24 hour pass without penalties. These are atomic units -- you can't divide them up, before you ask. Take it when you like but put a note in your README.txt file and email the TA.

It is not good to fall behind because it limits the time you can spend on the next lab which comes out as you finish the current one. Therefore, three final pieces of advice:

  Don't fall behind in this course.
  Don't fall behind in this course.
  Don't fall behind in this course.

Policy on Joint Work and the Dartmouth Honor Code

First, you may discuss and help each other (e.g., help in debugging, sharing knowledge, giving moral support, getting coffee, etc.) - I promote that as the type of team spirit and joint problem solving skills that is the essence of the course and necessary to do a great project. However, you cannot work jointly on coding up (i.e., writing) your programming assignments. You can talk, discuss solutions but you cannot jointly work on the code development and writing. Submitted code for the labs has to be yours and yours alone.

The project phase is different. You can work jointly on writing code. But you cannot take code from anywhere (e.g., the web or any other source). It has to be the joint product of the team. One caveat: no sharing of code between teams. As above, teams can discuss code but not share source code. The project phase of the course is a friendly competition so there isn't a lot of incentive to share code.

We hate to state this since you all know it but it is necessary to be explicit here:

You would be amazed at how easy it is to tell when people work together on problem sets, particularly coding exercises. Think about the simple shell commands we run against your source code from labs and projects to compare your lab assignments and projects against every other assignment and project ever submitted since this course started - it takes less that a millisecond to run these checks - no effort on our behalf.

We use the moss tool from Stanford to run regular checks against all submitted code. To quote the website

"Moss (for a Measure Of Software Similarity) is an automatic system for determining the similarity of programs. To date, the main application of Moss has been in detecting plagiarism in programming classes. Since its development in 1994, Moss has been very effective in this role. The algorithm behind moss is a significant improvement over other cheating detection algorithms (at least, over those known to us)"

Similarly, we know how to use Google too. You should not under any circumstance look at or use code from students that have previously taken CS65. The message is simple - please don't make life unpleasant for all of us by breaking these rules. The penalties for cheating at Dartmouth are severe, starting with suspension and including expulsion. If students cheat I will immediately give them a failing grade for the course and will push for their suspension from the college. The most depressing part of my academic career was catching two really nice students cheating -- they recieved failing grades from me and were suspended by the college. Please please please do not do this at any cost.

We take the Honor Code very seriously, so please, if you are unclear on any matter regarding this policy, do not hesitate to see me in office hours, and we will be more than happy to answer your questions.

Ok I'm glad I got that off my chest ...

Laptops and smartphones policy

Read the New Yorker post on "The Case for Banning Laptops in the Classroom" by my colleague Professor Rockmore. I'm the soccer highlights fellow in the article.

You may use your laptop, phone, wearable, implantable .. go a head.

Coding style

Please write clean code using good coding styles. As the course moves on you will get dinged for poor coding styles. Checkout this single guideline for advise:

Android code style guidelines (1) and (2)

Also, checkout a summary of design and coding tips.

Group Project

Group projects are made up of 2 students.

All project information is assembled here

The project starts in week 5 with each student sharing their idea with a 1 minute/1 slide pitche.

The grade will breakdown as follows:

Your project webpage will serve as running blog on your project progress and will graded for completeness. All code should be stored in a git repo called project.

There is a focus on working code and a demoable app. Key rule for demo day: the professor should be able to download app and it should work off the shelf.

MyRuns project document

The MyRuns document captures the complete app specification and lab assignment information. Please read this a couple of times and refer back to it.

Asssigments Due Dates

Assignment       OUT                IN  

MyRuns1          Monday 03/26       Wednesday 04/04 11.59 PM
CodeIt1          Friday 03/30       Sunday 04/01    11.59 PM
MyRuns2          Thursday 04/05     Wednesday 04/11 11.59 PM
CodeIt2          Friday 04/06       Sunday 04/08    11.59 PM
MyRuns3          Thursday 04/12     Sunday 04/22    11.59 PM
CodeIt3          Friday 04/13       Sunday 04/15    11.59 PM
Pitch            Monday 04/23       Tuesday 05/01   11.59 AM
MyRuns4          Monday 04/23       Wednesday 05/02 11.59 PM
ProjectInfo      Tuesday 05/01      Sunday 05/06    11.59 PM
MyRuns5          Thursday 05/03     Sunday  05/13   11.59 PM
------ MyRuns ends -------------------- Projects start ----- 
Projects         Monday 05/14       Monday  05/28   11.59 PM


Please read the FAQs.

Week 1 -- Live code an app

Read over the weekend: Using the Camera and Data Storage

Week 2 -- UI is King

Please read this over the weekend - do before the CodeIt: Debugging

Week 3 -- The SQLite db

Please read this over the weekend - do before starting the CodeIt: Testing

Week 4 -- Threaded Design

Week 5 -- Geo-Location, Google Maps, Services

Next, Tuesday during x-hour each student gives a 1 minute 1 slide pitch of their idea. Send me shared google slide before Tuesday 11.59 AM. X-hour is 12.50 PM. Be bold.

Week 6 -- Activity Recognition, Project Pitch and the Cloud

Week 7 -- The Magic of Firebase

Week 8 Project Phase

All project information is assembled here

The pitch, show_and_tell 1 and 2, demo day are all graded -- see grading. The project represents 25% of the grade. I will give all students in the project the same grade -- because I assume you all pull together -- unless I hear from any team member before demo day. After demo day is too late. The pitch is graded individually. If you have any questions come ask me.

There is a considerable amount of office hours available to you (see below). These are for you to use. It is not mandatory to come to my project office hours but it will help your project for sure. Maybe not all group members can attend but one or two of you might. Please use these hours I've set a side for CS65.

I will announce the schedule for all project demos. Remember, the taught course is like a Android boot camp. You know enough now, had signficiant coding experience with a complex app, to knock it for 6 (that cricket not baseball).

Week 9 Project Phase

Week 10 Demo Day

Android programming books

We recommend you buy the following book which is only available online:

The Busy Coder's Guide to Android Development

Cost $45.00.

We will supplement the course notes with specific chapters from this book. Note, it's a huge book, don't be intimidated.

I like the online book because you pay once and you get the revised versions if updated. This is important because the APIs are still fluid. Many APIs are being added and depreciated at the same time. So the book at least quickly tracks major changes.

This book is not a reference but a boot camp. We will use some coded examples from this nice book:

Having all three books might seem excessive -- call me excessive.

Spring Term 2018

March 26, Monday -- Spring term classes begin

May 28, Monday -- Memorial Day, College Holiday (no classes held)

May 30, Wednesday -- Spring term classes end

June 1, Friday -- Final Examination period begins

June 4, Monday -- Scheduled Final Examinations end

June 5, Tuesday -- Final Examination period ends