Skip to content

Instantly share code, notes, and snippets.

@Schemetrical
Last active August 16, 2019 07:08
Show Gist options
  • Save Schemetrical/a60d232cb32a54913f7fc543132ff0c2 to your computer and use it in GitHub Desktop.
Save Schemetrical/a60d232cb32a54913f7fc543132ff0c2 to your computer and use it in GitHub Desktop.
Proposal for a UBC seminar on iOS mobile development.
%------------------------------------------------------------------------------
% Beginning of journal.tex
%------------------------------------------------------------------------------
% Replace amsart by the documentclass for the target journal, e.g., tran-l.
%
\documentclass{amsart}
% If your article includes graphics, uncomment this command.
\usepackage{graphicx}
\begin{document}
\title{Student Directed Seminar Proposal for \MakeLowercase{i}OS Mobile Development}
% Information for first author
\author{Yichen Cao}
\maketitle
\begin{center} \today \end{center}
\section{Rationale}
Mobile phones are an integral part of our lives. We use them to communicate with people and to navigate our busy daily schedule. One of the key things that enables us to do more is the apps on our phone, allowing us to do things like mobile banking, or document editing, all in an accessible and secure way.\\
I would like to propose an iOS mobile development seminar. The goal of this seminar is to apply the concepts and practices of computer science and software engineering to create apps for your phone. Students will learn, through a hands-on approach, how to build and design mobile apps, how software architecture applies in large software projects, and the steps to publish an app to the App Store. Students will understand how concepts such as protocol-oriented programming and abstraction are used in the context of iOS app development. Finally, students will explore iOS frameworks that enable different mobile experiences, such as using augmented reality, computer vision, or machine learning.\\
The choice of platform, iOS, allows students to approach a different programming language and environment. As one of the most popular platforms, iOS runs on iPhones and iPads, and is a mature platform for software development. Although it is preferable to own a Mac to build and an iOS device to run (and to show off to your friends), the university has resources in the major libraries around campus for students who do not have the hardware necessary for iOS development. Specifically, there are 30 Mac workstations preinstalled with Xcode (the IDE) in Chapman, and several more in other libraries listed on the UBC Library website. It is still strongly encouraged to be familiar with the iOS platform, as experiences on these devices will fuel inspiration for what to build for a project.
\section{Motivation}
The computer science courses offered at UBC are fantastic ways to introduce core concepts and in depth topics to students so that they can utilize it within software engineering, academia, or other paths that students decide to take. This seminar complements and applies these concepts, allowing students to create apps that they can use on their own phone, with immediate feedback for everything the student writes in code. Students will also have the freedom to explore different topics available to them and use previous knowledge such as machine learning or graphics in their final project. Overall, this is a fantastic seminar that ties everything students learn in computer science to create apps that are personal and useful.
\section{Prerequisites}
The only prerequisite for this seminar is CPSC 310 or equivalent. It is necessary for the students to have worked on a collaborative software engineering project, and students should have an understanding of high level (software) design. It is also necessary to have experience with quickly picking up new languages and frameworks. It is encouraged for students to have taken CPSC 344, as students can incorporate their learning and share knowledge of HCI during presentations to other students. Having built projects on their own or having industry experience are likely good indicators for engagement in this course.
\newpage
\section{Format}
The seminar lectures will be divided into two sections. The first section will cover the basics of mobile development with iOS, and the second section will cover topics in iOS development, such as UI testing, frameworks, persistence strategies, continuous integration, etc. Guest lecturers may be invited to give presentations on these topics.
From this course, I want students to take away:
\begin{itemize}
\item \textbf{How to build and design mobile apps}: Students will learn how to translate what they want to see into an app, both the visual elements and the backing logic. Students will learn how different users from different locales or capabilities approach apps differently, and how to make an inclusive and accessible app.
\item \textbf{How to apply software architecture}: While CPSC 310 gives an overview of different high-level and low-level design patterns, students learn to apply these concepts in their projects, utilize abstraction with a highly object-oriented and protocol-oriented language, and understand proper separation of view, model, and logic. Students will take away other software engineering best practices from certain topics of the syllabus, including but not limited to: dependency injection and mocking in a protocol oriented environment, building reusable visual components to separate view and logic, and state management with reactive programming.
\item \textbf{An app they built from start to finish}: One of the biggest joys I find about mobile development is being able to hold what you make in your hand, and share what you create with others. Students should be proud of their schoolwork, and be able to present and describe their motivation, technical challenges, and product to other students.
\end{itemize}
\subsection{Assignments}
Students will be given two assignments to work on throughout the first half of the seminar (corresponding to the lectures). These assignments will allow students to apply their learning from lectures and have hands-on experience with writing and debugging code, as well as familiarizing themselves with the IDE. The first assignment will involve students learning to utilize language features and the debugger, as well as creating simple UI to complete an existing application. The second assignment will be a Todo app (with a twist), combining the topics of table views, MVC, and view controller navigation. Doing well in the assignments is critical for later parts of the seminar which are more project-based and self-guided.
\subsection{Project}
Students will work alone or in pairs to create an app of their own during the second half of the seminar. A proposal will be made and certain deadlines will be given to ensure that students show progress and will have a presentable app. There will be presentations during the last weeks of the seminar.
\subsection{Grading}
The project will carry most of the weight of grades, and the assessment will be a combination of motivation/idea, presentation/design, and implementation. Assignments will be graded on completion and functionality. A quiz will be given halfway through the term to test on the concepts learned during the first half of the seminar, and it may be repeated (with diminishing returns) much like how it is handled in CPSC 210, to ensure students fully understand certain concepts.
A sample grading scheme may look like this:
\begin{center}
\begin{tabular}{ r | p {8cm} }
\hline
Assignments: 30\% & 2 assignments, respectively covering View basics and View Controller navigation. The former will contain skeleton code, and the latter will be from scratch based on a specification. Graded on completion, functionality, and quality. Examples will be given. \\ \hline
Quiz: 20\% & 1 quiz on language features, covering topics from fundamentals to designing data with generics. Topics will be given. \\ \hline
Project: 50\% & Students will be working as individuals or groups to build an app and present it to the class. \\
\hline
\end{tabular}
\end{center}
A sample rubric for the project is as follows:
\begin{center}
\begin{tabular}{ r | p {8cm} }
\hline
Idea: 10\% & Written, answering questions such as "what problem is this idea trying to solve?". Serves as an early check-in to gauge progress, graded on scope and completeness. \\ \hline
Progress: 10\% & Is the project progressing, and are the problems encountered being adequately tackled? This is to ensure that students pace themselves, and are able to reach certain set goals from their original idea. \\ \hline
Quality: 20\% & Is the code maintainable or does it exhibit anti-patterns? Students are not expected to write production ready code, but should also understand the implications of certain design choices. Graded by the student instructor, based on course content only (no penalty to try out new things). \\ \hline
Technical: 30\% & As part of the course, students are encouraged to explore topics such as those listed in the second half of the syllabus. This is graded on how well the student incorporates topics of their choosing into their app, by the student instructor. \\ \hline
Presentation: 30\% & A short presentation of the idea, challenges, and technical accomplishments, accompanied by a demo. Graded by the students, with a clearly defined rubric and top/bottom marks removed for fairness. \\ \hline
Bonus: 2\% & Top few students who receive the most votes on best project will receive a bonus mark. This encourages students to create something they're really proud of, while not penalizing those who may not have the time due to other reasons. \\
\hline
\end{tabular}
\end{center}
\newpage
\section{Syllabus}
The seminar will cover the following topics during the first half of the seminar. Each subject is approximately a week worth of material:
\begin{itemize}
\item \textbf{Introduction}: Overview of iOS, tools (IDE, language, frameworks), Cocoa Touch, Foundation, your first app.
\item \textbf{Language}: Object and protocol-oriented programming in swift, value vs reference types, language features (type inference, optionals, error handling, extensions, generics).
\item \textbf{UI Layout}: View hierarchy, interface builder, storyboards, autolayout, best practices.
\item \textbf{View Controllers}: integrating application logic with UI, outlets, delegates, VC lifecycle, segues.
\item \textbf{UI Components and interaction}: table views, alerts, action sheets, inputs, gesture recognition.
\item \textbf{Application lifecycle, networking, multithreading}: UIApplication delegate, entry points, URLSession, async, app extensions
\end{itemize}
The seminar will cover some of the following topics during the second half of the seminar course. The options are ranked based on importance and guest lecturer availability:
\begin{itemize}
\item \textbf{Accessiblity}: How people of physical disabilities or visual impairment perceive our apps, and how we can improve our app experience for them.
\item \textbf{Localization}: Building apps that scale to different locales, time zones, right-to-left languages.
\item \textbf{Testing and CI}: Unit testing, UI testing, best practices. Possible guest lecturer.
\item \textbf{Publishing}: How to get your amazing app into the App Store. Includes workflows on how to manage assets and builds.
\item \textbf{Apple frameworks} (based on student interest through survey): ARKit, Multipeer Connectivity, etc.
\item \textbf{Dynamism}: Objective-C runtime, static vs table vs message dispatch.
\item \textbf{Universal Apps}: Working between different screen sizes, different platforms.
\item \textbf{Persistence}: Object relationship managers, databases, Codable.
\item \textbf{Dependencies and dependency managers}.
\item \textbf{User interface design for mobile devices}.
\item \textbf{Architectural designs}: MVC, MVP, MVVM in practice.
\end{itemize}
\section{Qualifications of the Coordinator}
Yichen Cao: 4th year major in Computer Science. 4 years of experience in iOS and three time Apple Worldwide Developers Conference scholarship recipient. Several apps published on the iOS App Store with over 50,000 downloads. Previous and future iOS Software Engineer internships. Your friendly UBC symphony viola player.
\end{document}
%------------------------------------------------------------------------------
% End of journal.tex
%------------------------------------------------------------------------------
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment