This post is part of a behind-the-scenes series about how I obtain and prepare for opportunities like podcast interviews, speaking gigs, and instruction roles. Our first one talked about my podcast interview with Greater than Code.
This one talks about syllabus design!
A colleague of mine at a local university recently brought it to my attention that the department is looking for a part-time instructor to teach their evening graduate class about iOS development. Ive done a heavy chunk of iOS development in my day, so I decided to apply.
I applied cold through the university’s job application website. The application consists of three required documents: CV, cover letter, reference list. Optionally, applicants can also submit a sample syllabus for the class.
My CV doesn’t turn heads: I have no graduate degrees, research grants, or academic publications. I have references for my iOS development work, so maybe that helps.
But to me the most important part of this application was the optional part: the sample syllabus. To me, out of these four documents, that’s the one that provides by far the strongest signal about whether someone could actually teach this class.
So I considered the following question: What 30 hours of material would give someone the biggest leg up as an iOS developer?
I designed a syllabus around that.
The Syllabus, in Part
The full syllabus contains several clauses about the academic integrity policy, the harassment policy, and the accessibility policy. I recommend including these items in a syllabus, but I have omitted them here since they’re not germane to our discussion of course material. If you’re curious about these sections, I recommend perusing the syllabus template from The Teaching Center at Washington University, St.Louis. I based my syllabus on their template.
Selected Sections of My Syllabus
In this course, students will learn the fundamentals of mobile development using Apple’s iOS SDK.
First, students will learn the key concepts of both functional and imperative programming paradigms. Practice exercises will use Swift, a programming language that supports both paradigms as well as the programming language for modern iOS apps.
Next, students will build and iterate on an iOS application to fetch information via HTTP and display it in a master-detail view. This app will serve three purposes:
- The HTTP connection creates an opportunity to learn about general interaction via the web, the publication-subscription (pub-sub) model, and API design. It’s also a case where a functional programming style is a good fit.
- The master-detail view creates an opportunity to learn about mobile app architectures, UI Storyboarding, and the view life cycle. It’s also a case where the imperative programming style is a good fit, and it’s a good feature for learning about automated testing.
- HTTP requests and master-detail views pop up in most mobile applications. So if students can work on these two features, they could immediately pick up tickets on a mobile development project for a client or employer.
Students will then build on the concepts they have learned so far by applying those concepts to new functionality in iOS apps: app navigation with tabs and menus, Adaptive UI, data manipulation with Core Data, localization, animation, accessing the photo library and camera, Touch ID, maps, and augmented reality with ARKit.
The course will consist of lectures, hands-on coding exercises, and discussion.
As a final project, each student will design and implement an application of their choice to be presented in class. Students will start preparing for this from the very first class by thinking about user needs, constructing storyboards, and gearing up for user testing and deployment to Apple’s App Store.
Each student will also present a case study featuring an app from the Apple’s App Store. The studies will include a technical decomposition of the implementation (i.e. features, functionality, design, etc.) and a market analysis (i.e. competition, pricing, positioning, etc.) for the app. These case studies are designed to encourage students to gain an appreciation for the decisions companies and developers face when entering the app market.
The Philosophy Behind Course Description
Let’s back away from iOS for a second and think about our audience. These are graduate students, probably with undergraduate degrees in computer science. I have some familiarity with your standard academic computer science curriculum. It’s bits and bytes, algorithms, C. Maybe Java. Maybe some Python, if the university is trying to be modern. It comes from a scientific perspective and attempts to talk about computers in terms of basic research and theory.
There is less, if any, exposure to engineering challenges: assessing the benefits and risks to users and teammates of this software design versus that one. Students have little, if any, practice with testing, test driven development, continuous integration, or continuous deployment. They might know about imperative (object-oriented, in practical contexts) and/or functional paradigms, but they haven’t necessarily operationalized either one.
That’s our starting point. If I want to turn out functioning engineers, I need to start with some of these engineering basics. Then, once they have the basics, I want to get them started writing apps. As they get example after example under their belt, we can start to have fun with more and more specific features of iOS.
This syllabus was especially fun to write because I got to use my favorite secret weapon of programming instruction: Swift.
Students who complete this course successfully will be able to:
- Understand the difference between functional and imperative programming and identify good use cases for each
- Test and implement fully featured iOS applications using Swift and Xcode
- Appreciate and participate in ideation and user testing as well as implementation and deployment
- Analyze the decisions that app developers make while building products for the App Store
Required Texts, Materials, and Equipment
Mac running macOS Sierra (10.12) or later
An Apple ID, which is free. Students may also choose to enroll in the Apple Developer program, which will include privileges to upload to the App Store.
(optional) an iPhone or iPad on which to run the applications we write. If students do not have this, they can instead use Xcode’s iOS Simulator on their computer without an additional device.
Selected chapters of Working Effectively with Legacy Code, by Michael Feathers. A PDF version of the chapters can be provided to students who cannot access a copy of the book.
Apple Human Interface Guidelines (colloquially called “The HIG”). Available for free online.
Selected chapters of Test-Driven iOS Development with Swift 4 – Third Edition by Dominik Hauser. A PDF version of the chapters can be provided to students who cannot access a copy of the book.
Selected chapters of Beginning iOS 12 Programming with Swift by Simon Ng. A PDF version of the chapters can be provided to students who cannot access a copy of the book.
Some online blog posts and articles, for which I will provide links.
Philosophy on Course Materials
It’s important to me that materials be available to students for as little cost as possible. For that reason, I did my best to either find things that were available online or identify useful resources and only provide those pieces that students would need at no cost. That way, if the students wanted to read the whole resource, the authors who created these materials would still get a sale.
By the first class, each student is expected to have a Mac and an Apple ID. Each student is also expected to have installed the most recent version of XCode from the App Store (this will be free).
At the end of each class, students will be presented with a programming challenge to complete for the next class. At the beginning of each class, we will review the programming challenge from the previous class.
Major Assignments: Descriptions
This course includes two major assignments:
- A case study featuring an app from the Apple’s App Store. The studies will include a technical decomposition of the implementation (i.e. features, functionality, design, etc.) and a market analysis (i.e. competition, pricing, positioning, etc.) for the app.
- As a final project, each student will design and implement an application of their choice to be presented in class.
Classes include discussions and exercises. Students must attend class to receive the benefit of these activities and contribute to the activities for the benefit of their fellow students. That said, we will not be taking attendance. As is often the case in industry, students are responsible for their own success, and their success on the assignments happens to be heavily predicated on learning the topics we discuss in class.
The goals of the course are stated on the first page, and grades provide us with a tool to communicate whether those goals have been met. Those goals depend both on my success as an instructor and the students applying themselves to the work.
The programming challenges will not be graded. The master-detail app, the case study, and the final project will all have grades. They will not be graded on a curve: that is, if all of the students deserve an A (theoretically), I will not give some A’s, some B’s, and some C’s in accordance with a predetermined distribution.
Explanation of Grading System
Case Study: 40% of total grade or maximum points
Final Project Application: 60% of total grade or maximum points
Philosophy on Homework, Grading, and Participation
This area, I suspect, is my weakest. I have not taught graduate students before. I have taught in bootcamps and evening programs to adults with jobs who already have their sh*t together, so to speak, and who are voluntarily taking my course because they want to learn and apply that knowledge in their lives and jobs.
So my policies above are heavily predicated on the level of maturity and overall goals of the students being similar to those of students I’ve had before. That’s a big assumption on which I could be wrong. So if I end up teaching this thing, I expect I would revisit this section with professors who have more experience teaching graduate students.
Course-Specific Support or Supplementary Instruction
Chelsea’s office hours occur remotely at appear.in/chelseatroy from X:00 PM – Y:00 PM on Wednesdays. If you need additional help or are unavailable at that time, please reach out to Chelsea via email.
Of course. I think it’s critical for students to have access to extra help. Students from underserved groups to the front.
Preliminary Schedule of Topics, Readings, and Assignments
Wk Topics/Assigned Readings/Homework Major Assignments and Deadlines 1 Hour 1: Introductions and Syllabus
Hour 2: Functional Programming in Swift
Hour 3: Object-Oriented Programming in Swift
Programming Challenge: Data Stores and Data Manipulation
2 Hour 1: HTTP Call in iOS
Hour 2: Publication and Subscription
Hour 3: HTTP and APIs
Programming Challenge: Caching Data Store
Read for this class: History of API Design Blog Series, Ridester Uber vs. Lyft 3 Hour 1: Master View in iOS
Hour 2: Detail View in iOS
Hour 3: Automated Testing on a class-by-class basis
Programming Challenge: Fancy Detail View
Read for this class: Selected Chapters from TDiDS4, How MyFitnessPal got 165 Million Users 4 Hour 1: User Testing
Hour 2: Caching Data Store with CoreData for iOS
Hour 3: StackViews vs. TableViews, Sharing Data on Screen Transitions (with testing)
Programming Challenge: Help Screen
Read for this class: Selected Chapters from WEWLC 5 Hour 1: App Navigation with UITabBar and UINavigation
Hour 2: AdaptiveUI
Hour 3: Accessibility
Programming Challenge: Tap Animation
Read for this class: The HIG, Design Choices in the Headspace App
Due: Plan for Final Project
6 Hour 1: TestFlight deployment, Localization and the concept of language accessibility
Hour 2: Maps
Hour 3: Animation
Programming Challenge: Upload Photo
Read for this class: Selected Chapters from Bi12PS, System design for chat apps 7 Hour 1: Touch ID and User Security
Hour 2: Accessing the Photo Library and Camera
Hour 3: App Store Deployment
Programming Challenge: AR Hat
Read for this class: Selected Chapters from Bi12PS 8 Hour 1: ARKit
Hours 2 and 3: Final Project Questions and Assistance
Due: Case Study 9, 10 Final Presentations Due: Final Presentation
Philosophy on Readings and Schedule
I know that students are busy. I limited readings to the specific chapters in the specific resources that I think are most relevant and helpful for students at each juncture in the course, leaving them the opportunity to read more in these resources if they wish. I also have included a few links to online coverage of various technical, commercial, and legal challenges faced by companies with iOS apps. The students are expected to do an analytical case study of an app during the course, so the goal of those readings is to prepare them for that—as well as to give them a taste of what they might see in industry.
Each class has a programming challenge, which they can try between classes and that we will go over at the beginning of the following class. The idea here is that students engage more fully with the problem by trying it themselves first. My learning experiences always stick best when they start with mistakes I have made, so I’m leveraging that experience in the design of these lectures and exercises.
The Future is Unknown
Will I teach this course at the institution to which I applied? I don’t know! Will someone see this blog post and reach out to me about teaching this at their institution, in addition to or instead of the original one? I don’t know! I might never teach this course. I might teach it multiple times. I might go rogue and make an online course following this syllabus. I might teach a very different version of this course based on feedback from students and professors. Who knows?
Regardless of whether I end up teaching this course on iOS development, I enjoyed the exercise of determining how I would teach such a course. I started, as any software engineer might, by thinking about my audience and their needs. From there, I did my best to match my experience with what would most help them at this juncture in their careers. We begin from some general principles about programming and software engineering. From there, we gradually taper our focus specifically to iOS development.
If any of you are an actual professor and have feedback for me about this syllabus, I would be absolutely thrilled to hear it. And if I end up teaching this course, I’ll post about that too :).
If you enjoyed this look at how I’d design a syllabus, you might also like:
This post about adding members to a software team, which covers how advanced contributors might not know things you consider to be “basic”
Software Engineering and Improv Comedy—How applicable is all of this to your team? I don’t know, but it was fun to write.