Course Structure - May Term 2016

"The focus of this class is on understanding how to apply Computer Science principles in the context of a specific modern platform (iOS). "

Professor Don Patterson
Lecture: M T W Th F : 10:15 - 12:15
Classroom: Officially Winter Hall 110, but actually the instructional lab in Voskuyl Library
Discussion Section: N/A
Telephone: 7028 (on campus) 805-565-7028 (off campus)
Office Hours: TBD
Teaching Assistant:N/A
Office Hours:N/A

No book(s) are required for this class, we will be working in a lab based format. The following book(s) are optional for this class.

Class Attendance / Participation / (1 dropped) ~30%
Written Assignments ~15%
App Mini-Projects ~55%

As the class progresses I may find it necessary to alter the percentages.

This class is a lot of work. You will have to develop iOS Applications. You should expect to spend 2 hours outside of class each day following-up on material from class, finishing daily work and reading background material.

This class is a lab/workshop style class. We will be working together on computers. Here are some things that I hope to be able to cover. You will be able to:

  • to read and write Objective-C - PL01
  • utilize a strong grasp of Objective-C objects - PL01
  • to organize their code professionally using objects and blocks - PL01
  • prototype several entry-level apps - PL01/02
  • to Post Facebook, Twitter, Sina Weibo, Tencent Weibo messages to social media using single sign-on on behalf of a user.
  • use OAuth 2.0 to securely authenticate to Instagram and retrieve photos on behalf of a user
  • describe JSON’s syntax
  • write well-formed JSON
  • work with JSON data objects in Objective-C
  • appropriately set the security settings for App Transport Security in iOS 9.0
  • use http, https and https with perfect forward secrecy to fetch web resources
  • obtain permissions to receive local push notifications
  • write an app that can send and receive local push notifications
  • obtain permissions to receive remote push notifications
  • write an app that can receive remote push notifications
  • authenticate using Apple’s cryptographic services such that the developer can use 3rd party infrastructure to send remote push notifications to their app.
  • securely store data on the user’s device.
  • articulate Apple’s Design Approach
  • communicate Apple’s Design Concepts
  • communicate Apple’s Human Interface Guidelines
  • develop apps that respond to various devices sizes and orientations using the auto-layout engine
  • communicate various navigation styles supported by iOS
  • to construct apps using subset of available ViewControllers
  • communicate the range of built-in interaction support for iOS apps
  • communicate general Human Computer Interaction design concepts
  • communicate iOS user interface components that are appropriate for their app
  • make an app that responds to keyboard movement
  • make mapping apps that track the user
  • create apps that display tables of information
  • interface tables with Core Data using NSFetchedResult controllers
  • make a basic to-do list manager app
  • use the reverse geocode service to convert latitude and longitude to location names
  • implement GeoFences to make an app efficiently monitor an iOS device’s location
  • leverage the power of accelerometers, magnetometers and gyroscopes to orient a device in physical space
  • create an app that responds to ambient light levels by using screen brightness as a proxy
  • play sound effects and other media as audio
  • make a game like Pong
  • make a game like Breakout
  • manipulate graphics in a game environment
  • use the physics engine to create realistic game worlds
  • react to multi-touch events for complex interaction design
  • detect and respond to collisions and contacts efficiently
  • chain complex sequences of actions, animations and sounds with precision
  • animate multi-frame sprites
  • create particle systems to simulate fire, smoke and magic (and more!)
  • interface with Game Center to create leaderboards and achievements that can be shared through social networks

I prefer to give many small assignments which build up a picture of overall student learning success rather than to rely on one or two large exams which students may bomb based on non-learning related complications.

At the end of the day, learning requires the active initiative of the student. I consider myself someone who points students in the right direction and can/will explain the fundamentals of a subject matter. I can't actually do the work of learning for a student. That takes effort and self-motivation. I will help to provide structure and incentives for that learning, but you also need to learn how to expand on this subject yourself. In a technical field like this, you will be left behind the field in about six months, regardless of how well I present the subject matter, if you can't keep learning on your own.

I like to stop talking periodically and let students ask questions. Although I expect the small size of this class and the hands-on approach will make stopping and clarifying a pretty normal thing to do.

This class is going to be a small and intimate community. We are going to move fast. Participation is essential for it to be successful.

Participation will be assessed by attendance on days in which nothing tangible is due. On days in which responses are due, participation will be evaluated based on the response and the communication of it to the rest of the group.

Writing lots of mini apps is a major part of this class. Most of these will be lab style and students will follow along in their development during the course.

The goal of the apps is to give the students lots of tools and examples that they can draw on at other points in their career and to create artifacts that you can use in job interviews or post-graduate assessments or possibly just for your own sense of enjoyment and accomplishment.

I encourage collaboration but each student will turn in their own work

Some of these lab assignments will require additional research outside of class preparation.

The goal of the labs will be to give you a chance to familiarize yourself with basic software technologies for modern user interfaces. Rather than producing extensive deliverables the focus is on learning to teach yourself from on-line resources how to build user-interfaces in different technologies. This will hopefully form the basis of being able to create more extensive projects in the future.

This class will have a few written assignments/quizzes. They will be announced.

I strive to pick the best-of-class tools to use to administer this class and with which to teach. That requires using multiple websites. They are carefully chosen. Unfortunately, like most of the rest of online activities they are also highly fragmented (not one super-tool). We utilize several online tools in this class. Please familiarize yourself with their use and location. I expect you to check in and use all of them:

This is a small class, so our tools will consist of the following:

  1. This web page: in particular the calendar part, is the authoritative location for communicating assignments, materials from the class and due dates.
  2. Eureka for the gradebook CS150 on Eureka
  3. Eureka for the news forum CS150 on Eureka

Periodically at the beginning of class I will take the opportunity to address issues of Christian Faith and it's relationship to our course material, current events or personal reflections. This may include times of prayer, listening to music or speech, or direction discussion.

These moments are typically not planned far in advance or recorded, but are noted post-facto on the class calendar.

We have many goals for students taking courses in the Computer Science Program. Some of them are specific to particular courses, but almost all are examples of our Program Learning Outcomes (PLOs).

This are the overarching Computer Science Program Learning Objectives

  1. Programming Students will know how to write computer programs in several languages.
  2. Create and Analyze Algorithms Students will be able to use formal skills to understand and build computer programs abstractly .
  3. Context Students will be able to do the above in the context of real-world problems which requires creativity, research and compensating for ill-posed problems
  4. Reason in CommunityStudents will be conversant and articulate about the social and spiritual impacts of computational artifacts on individuals and society in the context of general and specific Christian revealation. This requires communication, analysis and background knowledge.