I took CS193P when it was first offered in 2007; one of my favorite classes at Stanford because it was so hands-on. At the time few people had iPhones, so everyone in the class got a free iPod Touch for development. My final project was a photo sharing app with a Polaroid shake to reveal mechanic… lightly influenced Instagram which Kevin and I built a few years later!
I regret that we put my subdivision assignment as the last one, and we allowed students to skip one assignment. Most students skipped it, but those that did the work thought it was super cool to have their own subdivision tool for making smooth meshes.
If you were a student in 2025, is CS193P (looks swiftUI rendering heavy) still the hands-on foundation for the next-big-tinkerer or would it look more like building around affordances of AI? (or something else).
Yeah. Instagram was lovely. It might be disheartening to see what it became, what it does to people's minds for a profit, the costs for society as a whole.
Not sure if I'll do it, myself, because I think I may have already gotten past it, but that's been a long, painful slog. Wish I had this resource a few years ago.
This was my first learning experience with iOS around late 2012. Watched all the lovely videos and did the homeworks just to learn, and eventually went on to write lots of probably horrible working code for early Tinder. At least we had a QA team that rocked back then.
Thanks Paul! Could not have asked for a better intro to working with Objective-C at the time. The fact that this is free and everyone can learn with it is awesome!
I love cs193p! Paul Hegarty is an incredible teacher. I did the course twice [1], first in 2020 as a programming noob who just threw everything into one file. His teaching of MVVM was my first introduction to proper software architecture. Then I went through it again last year as a refresher before building my first app and even on the second run, his lectures were fun to listen to.
This course was integral in kicking off my career over a decade ago. I think there's no better way to learn to build an iOS app, and the fact that it's free is a true gift. Pre-reqs are in the first lecture:
-Experience writing code (100% of the work in this course involves programming)
-At least CS106A (Programming Methodology) + CS106B or X (Programming Abstractions) and CS107 (Computer Organization & Systems); CS108 (Object Oriented Programming), CS43 (Functional Programming Abstractions), CS11O (Principles of Computer Systems), CS147 (Introduction to Human Computer Interaction Design) are awesome!
-Know some "structured" programming paradigm, e.g. OOP or Functional Programming
-Preferably you know more than one language (cause you're gonna learn a new one here!)
This is the course I used online to learn Objective-C and UIKit to make iOS applications, and now I am a Staff iOS Engineer. Nice to see him still doing this.
When I was in school, the corporate shill language was MATLAB, and even today not every program has moved on to greener pastures (Python/numpy, Julia). But doesn't Swiftui support Android now? https://github.com/skiptools/skip, I'm extremely skeptical and critical of anything Apple does, and I don't like programming languages without critical mass of community and corporate contributers, but seems like Swift is going in the right direction here.
SwiftUI is also now an API for writing Android native apps, too.
I don't know why you skipped over that part? It's maybe like when Google rewrote Java. Win32 is a bad comparison because there's no Win32-compatible API for native apps on other platforms (that I know of?) except for emulation, but the Android SwiftUI project is not using emulation, it runs the code natively and the result is native Android UI.
Apple has not released a version of the SwiftUI framework for Android.
There are third party attempts to create something that lets SwiftUI code run on Android, just as Wine is third party software that allows you to run Win32 apps on Linux.
No one said it's first-party. And it's a good thing that it's not first-party! We want multiple options for deploying our code.
As I said, Wine provides emulation. But the SwiftUI on Android project does not emulate - it runs your SwiftUI code natively (as Swift that is compiled for Android), and maps it to native Android components, fully accessible and meeting platform expectations.
Completely different result and experience.
This also means that you can extend the SwiftUI on Android code with Android-specific code that will not run on iOS, to add other Android-specific UI. This is impossible with Wine + Win32.
Academia and higher education have long-established ideals, institutions receive considerations from society in light of that, and they are also supposed to be regulated in some ways (e.g., accreditation).
I think a better defense than the libertarian "don't tell me what to do with my property" would've taken the angle that "university X isn't actually becoming a factory for pumping out techbro libertarian scourges of society".
I am surprised that a university with the renown of Stanford would have a course specifically on "the fundamentals of how to build applications for iPhone and iPad using SwiftUI." Not even mobile UI/UX, or UI/UX principles in general; straight up yolo iOS.
How do people not find this absolutely egregious?
At my uni, we organized protests for much smaller intrusions of corporate interests into education.
Is Stanford not much better than a bootcamp these days?
No? It was a legitimate question because there have been similar trends in other unis around the world, and I am not personally acquainted with Stanford things. I always held Stanford in high regard.
There was no Android, app store was new, there were no app bootcamps.
In 2025 if you wanted to offer a hands-on quantum computing class for Computer Science (not Physics), you'd need to pick a corporate product.
I never took 193p, but I always found 148 to be hands on, and I made it very hands on for the year I contributed: https://web.archive.org/web/20130522184434/https://graphics.... .
I regret that we put my subdivision assignment as the last one, and we allowed students to skip one assignment. Most students skipped it, but those that did the work thought it was super cool to have their own subdivision tool for making smooth meshes.
Not sure if I'll do it, myself, because I think I may have already gotten past it, but that's been a long, painful slog. Wish I had this resource a few years ago.
Thanks Paul! Could not have asked for a better intro to working with Objective-C at the time. The fact that this is free and everyone can learn with it is awesome!
[1] https://github.com/sk-ruban/CS193p
-Experience writing code (100% of the work in this course involves programming) -At least CS106A (Programming Methodology) + CS106B or X (Programming Abstractions) and CS107 (Computer Organization & Systems); CS108 (Object Oriented Programming), CS43 (Functional Programming Abstractions), CS11O (Principles of Computer Systems), CS147 (Introduction to Human Computer Interaction Design) are awesome! -Know some "structured" programming paradigm, e.g. OOP or Functional Programming -Preferably you know more than one language (cause you're gonna learn a new one here!)
He’s an excellent teacher!
I think he worked at Apple so he shared a lot of the history behind the APIs in iOS going back to the NextStep days.
SwiftUI is a platform specific API for developers who are writing native apps for that platform.
You can think of Swift as being similar in concept to Rust and SwiftUI as being similar in concept to Win32.
I don't know why you skipped over that part? It's maybe like when Google rewrote Java. Win32 is a bad comparison because there's no Win32-compatible API for native apps on other platforms (that I know of?) except for emulation, but the Android SwiftUI project is not using emulation, it runs the code natively and the result is native Android UI.
There are third party attempts to create something that lets SwiftUI code run on Android, just as Wine is third party software that allows you to run Win32 apps on Linux.
For example:
> Bringing Swift and SwiftUI to Android
https://skip.tools/blog/bringing-swift-to-android/
As I said, Wine provides emulation. But the SwiftUI on Android project does not emulate - it runs your SwiftUI code natively (as Swift that is compiled for Android), and maps it to native Android components, fully accessible and meeting platform expectations.
Completely different result and experience.
This also means that you can extend the SwiftUI on Android code with Android-specific code that will not run on iOS, to add other Android-specific UI. This is impossible with Wine + Win32.
I think a better defense than the libertarian "don't tell me what to do with my property" would've taken the angle that "university X isn't actually becoming a factory for pumping out techbro libertarian scourges of society".
How do people not find this absolutely egregious?
At my uni, we organized protests for much smaller intrusions of corporate interests into education.
Is Stanford not much better than a bootcamp these days?
Rage-bait?
Universities are criticized for not providing enough economic value and real job training, yet when they do, they are labeled corporate shills.