CS 4962 - Mobile Application Programming
Obligatory Link to Grades
Instruction
Instructor: Lorenzo Swank
Instructor Office Hours: By appointment, but usually available after class
Teaching Assistant: Nathan Swenson
Teaching Assistant Hours: After Class in MLIB 1110
Course Contact
Website: http://www.eng.utah.edu/~cs4962/
Administrative: L.Swank at utah.edu (please mail homework and achievement questions to the class TA)
Class TA: superblockio at gmail.com
Prerequisites:
CS 3505 or Equiv.
Course Material:
Introduction to mobile programming, Objective-C language syntax, memory management, static code analysis, custom classes, computer graphics, mobile application lifecycles, Model-View-Controller design patterns, designing for re-use, web service integration, RESTful web services, hardware interaction, power as a first-order design constraint, and source code management with Git.
Course Outcomes:
At the conclusion of CS 4962 students should be able to:
1. Design and implement applications on a mobile device using the model-view-controller design pattern.
2. Understand and be able to quantify the effects of different software design decisions on mobile device battery life.
3. Design and implement self-contained, reusable user interface elements that meet or exceed the design criteria of existing industry standard user interface libraries.
4. Understand how to use distributed source code management tools as an individual programmer and as part of a team.
5. Possibly make back their tuition money for this course from the work they do during the course of this semester.
Class Discussion:
Most of the class discussion outside of class will take place in the ##cs4962 channel on irc.freenode.net. If you haven't used IRC before, you will need an IRC client. Please refer to Wikipedia or Google for help on this. Freenode.net is not a server run or sponsored by the school, and we are not responsible for the content of any other channels outside of our course channel. Inappropriate behavior or creating a hostile environment is grounds for ejection from both the IRC channel and the course. Play nice and don't poke anyone's eye out.
We recommend running an IRC proxy so that you can have a record of the class conversation even while you are not logged on. Professor Matt Might uses bip (http://bip.milkypond.org/), but also recommends running irssi on a remote server with a screen session.
Development Tools on Campus:
The Marriott Library Mac Group has been very kind hosting our courses for the past few years. We are very grateful to Richard Glaser and James Reynolds who make sure that the Marriott Library lab machines are up to date with the latest versions of Xcode. MLIB 1110, a 45-seat Mac Lab has been reserved for your use every Tuesday and Thursday from 3:40 P.M. to 5:00 P.M.
What To Expect:
The semester will start out with two traditional homework assignments. After completing those, your work for the remainder of the semester will consist of two parts. First, you will have five milestones for your final project where you will demonstrate measurable progress on toward timely completion of your final project. Second, throughout the semester you will need to complete between about ten to fifteen very small homework assignments, called "achievements", which are described below.
There will be no final exam for the course, and final project presentations will take place on the last day of class.
Homework:
There will be two homework programming assignments at the beginning of the semester to help you get your feet a little wet. These assignments are very important to get done on time and out of the way. We will help you with that by accepting no late homework. Homework is due at the beginning of class. If you cannot make it to class for any reason, please make arrangements to turn in the homework before the deadline.
The remainder of the coursework will consist of completing objectives called "achievements", as well as completing the final project milestones.
Achievements:
Throughout the semester, you will be required to demonstrate your knowledge of the subject material by performing between about ten to fifteen small programming assignments or analytical (written) assignments. We will recognize that you have demonstrated this knowledge by awarding you an achievement. A description of the course achievements will be available on the website. Some achievements can be awarded to all of the students in the class, while other achievements will only be awarded to the first student who accomplishes the task. Each achievement will clearly state this on the website, and achievements which are no longer open will be clearly marked on the website.
Students are required to complete 300 points 200 points (Changed in class on April 3rd) worth of achievements. An example of a 10-point achievement might be: "Run your code on a mobile device." An example of a 40-point achievement might be: "Write a mobile program that logs in to CIS, generates a DARS report for your major, and downloads that report when it has finished generating."p>
In order to promote excellent code quality, the achievements must follow the CS 4962 Source Code Style Guide. Students will turn in achievements using handin on the CADE machines to the "achievements" directory. (Changed 26 Jan 2012. Announced by e-mail on the same day.) Where applicable, achievements must be in a self-contained class or set of classes with a sample project showing how to create and use an instance.
Achievements will be awarded for tasks completed up until April 30 at 23:59:59 Mountain Time. Any work must be submitted at or before that time to be considered eligible to receive points.
Grading:
Homework Assignments 20%
Final Project and Milestones 50%
Achievements 30%
Extra Credit:
You can get extra credit by performing additional achievements. If you feel like you are going to need some insurance, you should start early and get as much of the low hanging fruit as possible.
Work Load
It is anticipated that a typical student will need to spend:
2+ hours in class per week
2 hours reading documentation each week
9 hours coding each week
1 hour working on written material
(code documentation, project report) per week
Additional time working on your final project if it is more complex
14+ hours per week
PLEASE plan your schedule so that you have time to complete the tasks required of you. Programming is a lot of fun, but it takes time to learn new languages and new frameworks. Even experienced programmers find that it takes a non-trivial amount of time to code things that they already are familiar with if a project has any degree of complexity. You should have approximately twelve weeks to work on your final project, including the milestones that you will turn in along the way. If you plan to work on your project for nine hours per week, that gives you 108 hours to put in to your final project. We will try to help you limit the scope of your final projects so that you don't have a 108 hour gorilla on your back the entire semester, and we will help you spread that work out throughout the entire semester. Even if you are a talented programmer who is already deeply aware of the intricacies and nuances of the languages, tools and APIs we will be using in this course, trying to fit in 108 hours of programming in the week before finals is going to leave you a spent, burnt scrap of an individual.
Cheating Policy: Just don't
Here are some things that constitute cheating in this class:
1) Copying someone else's work on an assignment. If you accidentally see another student's written homework or source code, make a note on your homework or source code. Honesty is of great value. You will not be penalized for this.
2) Copying things (anything) from a book, the Internet, a source code repository, etc. We all live in a very open world where it's very easy to find examples of source code from other places. It is OK to use third party toolkits, widgets that are open source and live on Github, and others' libraries. Most of what you will be learning this semester will come from the industry's extensive API collection, and we don't expect you to rewrite a Unicode string library just so that you can say that it is yours. What we do expect is that the core logic, the UI code, and the majority of the functionality come from you. Open source widgets and UI elements almost always require that you re-print their licenses. Some third party toolkits do not. Disclosure of use of outside sources is academic honesty. (Disclosure: I modified this syllabus from one from Dr. Furse. See how easy academic honesty can be?) In this course, we will require that each project has a .LICENSE file that contains all of the licenses of anything that you have used, as well as your own license. We don't want you to re-invent the wheel. We do want you to create something by the end of the semester that is substantial and that you can be proud of. One of the reasons that you will be proud of it is because it will be yours. If it's not . . .
What happens if you cheat?
Under the University of Utah policy (http://www.saff.utah.edu/code.html), you could receive an E in the class, be suspended from school, be fined, or be expelled from the University of Utah. Some of these things have happened to previous students taking this course. I want you to know that we are dead serious. Don't cheat.
What happens if someone else cheats?
It will lower your grade, statistically speaking. Please tell us (anonymously is fine) if you see instances of cheating in this or any other class. We will take care of it.
Now, Here's the Good Part
This class is all for you. There are a couple of topics that we feel really strongly about and that we're just not going to be able to live without teaching you. We know we'd be doing a great disservice to you if we didn't cover our pedagogical bases such as static code analysis, model-view-controller (and similar) design paradigms, and going on about power as a first order constraint.
BUT . . .
We have structured the course so that you start on your final project as soon as we feel comfortable letting you out of the gate. You're going to encounter some difficulty and find out that you don't have some of the information you need to make your final project really shine. Let us know when you reach those points. As we discuss your progress on a regular basis, we are entirely open to deviating from our regularly schedule lectures to cover the topics that you need to make your project everything that it can be.
Mobile programming is very enjoyable, and the reason that we've been at it since the beginning both in an academic setting and in a commercial setting is because it's just so much fun. The mobile industry is growing, and it doesn't show any signs of slowing down any time soon. Mobile programming is a great place for you to learn some more of the theory behind great computer science as well as to apply the things that you have already learned. Previous students have sold their final projects for money, and it is our hope that you, too, might be lucky enough to stumble upon a project that pays for your degree.
