Course Content


The first portion of the class will focus on cloud development. This will cover the differences between a service and a product. Then you will design a cloud based application. In doing so you will learn about and have the opportunity to implement different aspects of cloud software development. This will focus on the way data is stored and the way software releases are handled.


In the past you likely have interacted with an API provided either in software or on the web. In this portion of the class you will learn about API design and you will implement an API yourself that others would be able to use.

Mobile Development

The third portion of the class will focus on mobile development. In this portion of the class you will learn about the various features that exists on most mobile platforms. You will then write a program that in some way leverages features made available by mobile platforms.

Design Considerations

This portion of the class will look at the topics of security, scalability and usability in the context of web applications. You will learn about these topics while implementing an application that combines features from the entire class to make a polished final project.

Student Expectations

Prior Knowledge

Students are expected to know the following:

File IO and Sockets
You may need to do a fair bit of work with an operating system. You should be comfortable with a IO stream and be able to save and load state from a file. You should also be comfortable communicating between processes using sockets.
Advanced Object Oriented Design
You should know when to use a class, when to subclass, what an abstract class is and how to use an abstract class. You will be working in a lot of complex systems that will expect you to be able to use these tools.
Ability to Learn a new Language
There are currently no mobile platform or major cloud platforms whos primary language is C++. You will likely need to learn at least 1 new language in the course of this class depending on the platform you choose.
Problem solving
If a language does not provide you a tool to do something, but you need that tool to make progress, you should be comfortable making it yourself.
Organization and documentation
You should be able to look at a project and follow source code to figure out how it functions. You will likely have to deal with some larger software packages to implement some assignments in this class so you should be comfortable learning a large, unfamiliar collection of source code.
Things not on this list
This is not a comprehensive list, but it is a good start. If you don't know any of these topics, consider reviewing them before the class begins.


Read this guide on on-line communication. Follow every link in the section on asking good questions and giving good answers. You may be graded on the quality of your discussion. You need to communicate with clients and coworkers in the real world, you need to communicate with your fellow students here. You learn by finding the limits and holes in your knowledge. The best way for you to find them is to talk with others about the topics at hand.

Code quality

Code must be clear and you must understand what it is doing. Having well commented and documented code is going to be extremely important. I or the TA may not know the platform you are using so it is your responsiblity to make sure that we can follow what is happening.

You should also have no major errors in your program. If we can manage to get the program to throw some default error message that is usually a major issue. Errors which you handle by popping up a message the user would understand (eg. 'Please enter only numbers in the age field') are usually fine, error messages like 'Error 0x00001: Null pointer to Null found, expected pointer to Int Factory Factory' are not.

When possible, you should find a style guide and conform to it. For HTML all code must validate at as HTML5.