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.
I wasted a few minutes earlier today trying to find the original website for the Cocoa class that Tristan helped set up a few years before this one got started.
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 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.
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 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.
Excellent course (I did mine ~2019), super grateful to Paul and Stanford for continuously releasing it publicly and updating them all these years later.
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.
I like LLVM, and I enjoy a good UI focused-language like Vala or Obj-C. Building with or contributing to Swift is a waste of my time as a Linux developer, it was in 2018 and it still is in 2025. Foundation will not fully support Linux until the late 2030s, and even a fully-implimented SwiftUI translation is still ignoring basic GNOME HIG and lagging behind best-practices. I would not be developing apps I want to use, or ship to users on other platforms. Electron would be preferable to cross-platform SwiftUI, and deep down you know it.
And that's my sympathetic opinion, as a Linux developer who loves their native UI trinkets and pseudopolish. Windows developers have dozens more options and likely won't find out Swift ever existed until Swift 2 is announced during a keynote presentation. Broader adoption of Swift has simply failed. If the language disappeared tomorrow, I wouldn't know as nothing on my system consumes Swift as a dependency according to nix-tree.
Obj-C is unusable for many new Apple platform features. Not suitable for building anymore.
Electron - not available on iOS, so it is out of the question.
I make a living off my iOS/macOS apps so I am interested in ways to diversify without giving up the platform that makes me my money. These cross platform solutions for Swift are interesting for those targeting Apple platforms. I agree they are not compelling if you do not prioritize Apple platforms.
I can't make a living off Linux like I can on Apple. Android is also much less profitable. So Apple continues to make business sense for me, for what I build and who my customers are. And thus Swift.
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.
reply