Hacker News new | past | comments | ask | show | jobs | submit login
CS193p: Developing Apps for iOS (stanford.edu)
700 points by rangoon626 on Feb 10, 2021 | hide | past | favorite | 165 comments



Since this is posted here I'll ask a question that has been bugging me for the last year: Who does the captions on these YouTube videos? Is it automated? I ask because every CS193p video starts with the same opening scene/music and the caption describing the music is different on every single one. Is this an auto-caption algorithm just getting it wrong? Or is there a person having fun behind the scenes waiting for someone like me to notice and spend an irrational amount of time wondering what happened? I feel like it has to be a person, right? YouTube's captioning wouldn't give 12 different results.

Edit- For anyone curious, here's how the music is described in the captions at the beginning of each lecture:

1. regal music

2. mellow ambient music

3. light music

4. gentle music

5. air whooshing

6. gentle music (turns out there is one repeat)

7. peaceful music

8. [no description]

9. ethereal music

10. celestial music

11. serene music

12. dramatic music


I have a feeling that there is a chance that this comment has made some anonymous subtitle transcriber with a sense of humour very happy.


Oh, these are (mostly?) manual (often done by students working with SCPD, if I recall correctly). Any student can sign up and record for a class after some basic training, which I think can also include CC'ing some parts of it.

It is definitely someone just having a bit of fun :)


I think you are right - people sometimes have too much fun with subtitles: videos from https://www.youtube.com/technologyconnections typically subtitle the jazz at the end of the videos with a relevant adjective (e.g. 'cool jazz' or something for a video on HVAC operations.)


I know for a fact that Alec either transcribes those videos himself (not hard to do from a script he already writes for himself), or gets it done by someone else before uploading the video.

I'm any case, they're always uploaded at the same time as the main video.

Also, YouTube recently removed the ability for individual users to contribute to captions of creators. There was a thread on HN about it.


people sometimes have too much fun with subtitles

If you watch WKRP In Cincinnati on MeTV, the subtitled lyrics for the closing theme are different every time.


YouTube automatically transcribes captions for its videos. So that is why they are so funny sometimes.

As a YT creator, it is possible to upload your own captions if you have any transcribed, which will then be used in place of the automatic ones. But 99.9% of YT videos are using automatic captions.

Edit: Ok, I started watching the first video in this series and these are manually uploaded captions. So Stanford got the videos transcribed and manually uploaded the captions to Youtube. I wonder if various students did the captioning. So each student described the music differently. I laughed because the first video describes the music as "Regal Music".


I wonder if various students did the captioning

It's possible. But there are plenty of companies that do subtitle transcription pretty cheaply.

Local TV newscasts used to pipe the scripts from their TelePrompTers into the closed captioning encoder, but that wasn't good enough when the law changed in the late 90's because then there wasn't any text for interviews or weather segments.

Now you can hire a company like Denver Caption that will have someone dial into a special phone line at the TV station and transcribe the content in real time, sending it directly back to the station's encoder.

This is why when more than one person is talking, you can see in the text how the person captioning gets overloaded. Or they might use the wrong form of a word or phrase that would be easy to pick if someone was watching video, but easy to get wrong if they're only listening to audio over a phone line.


Given the precision of things like ponctuation, and certain words like ViewModel being correclty spelled (instead of "view model" for example), those captions are probably manually edited.


The YT automatic captions are marked as such and are usually easily distinguishable because the subtitles appear word-by-word instead of whole lines at once.

My guess is that those are manual.


My partner worked for a bit as a transcriber on Rev, which I believe is the source for a bunch of these— they have a turnkey option for "caption Youtube video X": https://www.rev.com/


Stanford hires students to transcribe all classes that are also available through SCPD. My suspicion is that some bored student out there is having some fun.


The course's videos have options for both "English" and "English (auto-generated)" captions. The non-generated one is uploaded by whoever uploaded the video.


Is it weird that a /university/ is offering this course on how to work with a specific commercial product? Shouldn't this be the domain of Apple itself or a company that specialises in training?


Huh. Lots of different perspectives out there...

- Is it weird that there's barely any training of practical software engineering in a university setting as it is, and now this question posits that one of the great durable examples of such a course is somehow against the norm?

- Is it weird that a community would train someone in methods and concepts using the technologies invented up the street?

- Is it weird to think that after decades of deeply-rooted institutional ties between Apple and Stanford that they wouldn't have a genuinely beneficial relationship and respect for one another?


It depends what you expect from your education. I'd personally expect a university to focus on the academic side of computer science rather than teaching typical practical "busywork". The theory is what I expect to count in a university, the practice is just a nice side effect for testing the theory. Others expect a university to just teach you how to be a software dev as best as possible.

I don't believe that Apple is the best at teaching people proper coding techniques for their platform; they have trouble keeping their API documentation up to date, I don't expect them to be that great at teaching people how to use them. Different approaches taught by different institutions are often a great way to improve your software design as well, because if you only learn from a single track then you can easily become too blinded by how things should be done to think of how things can be done. So, different places teaching how app development works rather than letting Apple be the guide towards the platform is a good thing in my eyes.

I can understand the ties behind the Stanford connection, but I would expect a university to at least design a course to be platform-neutral. Focussing a course on extending the very closed app store ecosystem from an educational institution feels sketchy to me.


The core curriculum focuses on theory with lots of projects to apply what you learned.

CS193 classes are optional and are sometimes designed/lead by grad student lecturers who are interested in that topic.

It is clear that there is a demand by Stanford students for this class. If someone wanted to design and teach a mobile dev course that surveyed android & ios, html5 mobile dev, and mobile UX issues, they could do so. They could call it CS193m or something.


So if not Apple's platform, which platform would be a better pedagogical platform for education in mobile programming?

I am not aware of a mobile OS that exists for an optimal pedagogical experience. Or a set of programming languages and libraries that exist for pedagogically optimal exploration. Your choices are basically Android/Kotlin or Apple/iOS. I do both. It's not obvious to me that either is a great "leading to code" environment. Your comment about Apple docs up to dates was... I find figuring out Google's Android APIs much more difficult and it's a huge flux between what's trending cool and what will actually run on a given device.

As an educator, I would guess that having more consistency betwixt student devices would be a big win. Apple definitely wins here.

What may have decided it though was the student body's more common device. If more students were packing iPhones than droids, then it makes sense for that to be your text.


I'm personally more in favour of supporting Android development in a teaching environment for one simple reason: you don't need a Chromebook to develop for Android, but you do need a Mac to develop for iOS. Even if you own an iPhone, running an Android emulator is free and easy. If you own an Android, there's no way to run a simulated iPhone without more accompanying hardware. If you've purchased a Windows-based laptop at the start of your education, you're basically locked out of the iOS course unless you borrow someone else's Macbook or start messing with horrible virtual machine solutions that violate the EULA.

I don't even think for a second that Google's docs are any better than Apple's. In fact, I think they're much worse. What I intended to convey with that paragraph is that I don't think that Apple should be the educator that teaches people to code for mobile.

I haven't kept up with Android's new APIs but I do know that Android is great for backwards compatibility. If you know the basics for Android, you can adapt to whatever fancy framework Google pumps out this year quite fast, or you can choose to stick to the "traditional" API that'll always be supported. Normal apps can do just fine without even some of the older stuff like fragments. Whatever Google is doing, is not necessarily the best way to develop code for their platforms.


I second that. And there is even Flutter [1] which works similarly to SwiftUI and is multi-platform.

[1] https://flutter.dev/


Things are what they are when you interact with them. You can't learn how to ride a bike by learning the theory. It's no different for software.


There are some education institutions which are very focused on "practical software engineering", and which sometimes produce people who lack computer science background and cannot work with complex systems. This cheapens the value of CS education for everyone.

When I saw the course, I was worried because I thought that Stanford might move in that direction.

(after the explanation that this is optional undergrad course, I am no longer worried)


I got a Computer Engineering degree from Mississippi State University, and I was able to take a 1-hour class on writing iOS apps.

However, it was taught by the business school, and I think that was very appropriate.


Your comment includes its precise reply: "training".

Universities are not for training. Schools are for that. Institutes are for that. Whatever.

Universities are for knowledge, science, truth. Not "training".

And yes, I am aware that the above makes medicine mostly a school thing (except for the academic aspect).

But of course, things change.


Apple has a lot of programming related courses and tools. The docs, and their relative quality has been discussed a lot here.

But in general universities have been teaching the tools of specific industries for a long time. Sometimes entire departments or buildings are sponsored by specific companies or programs underwritten as “industry-academic partnerships” when the research aims are aligned with strategic goals of a particular company.

For example, Oregon State University’s College of Forestry has a Tallwood Design Institute:

“Its core tenets are the importance of industry collaboration, through outreach, education and feedback from professionals.”

So, teaching a particular framework may be more explicit, but it isn’t unusual activity.

http://blogs.oregonstate.edu/collegeofforestry/2019/04/09/ta...


I also think it's weird too but decided it's my problem/snobbery even.

Universities have a bunch of roles and one of them is to teach skills you'll need in a given job. While some of those skills are truly general (problem solving, certain mathematics, thermo) you still learn the ones most common in your discipline. When you start a job as a new graduate you should have some familiarity in the tools and language of your discipline -- what units are used, how people talk (different disciplines can use different terms for the same thing), and yes, the most important tools. When I was an undergraduate we used Bridgeport mills (yes, it was pre CNC -- they were installed the very next year) because those were the common tools.

Many of the things I learned back then are obsolete, but I realize that most of the time was spent on the stuff that has lasted: diff eq, thermo, "deep skills". However I could not have been of any use to any employer if I didn't know (in my case) how to program a Lisp machine.


I went to Stanford (albeit as a grad student).

The CS193* classes are electives for the undergrad CS majors. I think this one is popular simply because lots of Stanford students want to make apps for the phone they have in their pocket.

The core curriculum is based around algorithms, data structures, theory, discrete math, etc etc that you expect from a top university in CS. They use a variety of languages like python, java, lisp, C, etc to illustrate these concepts through class projects.

Learning the SwiftUI API is not a required part of the core curriculum at Stanford.


It's par for the course. When I was in university you had to submit papers in MS Word, Excel, or Powerpoint. Computational Math courses were either Mathematica or Matlab. Engineering courses were AutoCAD, Revit, and Solidworks. And programming migrated away from STL C++ to VS C++. The free, opensource equivalents weren't quite there yet.

Using proprietary software/tools is not the worse thing universities have done (looking at you $700 biology dept textbooks).


When I was in university, we had to submit working algorithms in C, Java or whatever the prof chose, but we didn't learn the language in class. The prof would show snippets of code, but never discuss the language itself. Same for Word/Excel. There were books at the university library if needed.


My CS experience was the same. We saw snippets of code in class. But I enjoyed CS193 much more. Just being able to follow along, as they debug and step through it was a much more cohesive experience to me than "here's a bit of code, to learn more go read the book after class." It was difficult for me to learn that way.


When I was an English major we studied a bunch of commercial products, and we had to buy them from huge corporations. Sometimes the authors of those products were alive enough to actually receive a royalty, sometimes not.


I had to buy HP32s calculator as an undergrad. That thing is great but pricy for a university student.

I imagine for this class owning a mac is a minimal requirement.

I think your talking about books though.. I didn't like it when Profs used there own books.


Yes, I so agree with this sentiment. Also I feel a little bad for students at Stanford who actually take this class in person. It seems a little weird that these students come to this world class institution where leading minds are doing cutting edge research, and they are paying exorbitant tuition to sit in a class and learn about how to string simple API calls together. Most of this knowledge can be obtained by just reading the documentation and tutorials on various websites.

I'm sure it makes sense for some students, but it just kind of seems like a waste of money to me for most people.. It's good that it's free now.


What you're describing would be a problem if they were studying only stuff that they can learn from docs and tutorials. But I'm sure that not every class is like this one and the students are getting plenty of exposure to theory and deeper knowledge in various fields.

Universities need to balance out the argument that you're making with the argument that CS education doesn't prepare people for having an actual job.


False dichotomy. I'm sure Stanford cruses its CS students with theory and math already. Nothing wrong with a course that is purely practical and can help people get a job. Most employers would rather see "built and iOS app" in a resume than "took this difficult theory class".


It's not like this is a required class. You still have to take the required set of theory classes. This is just an optional elective for students to take if they want to learn iOS development.

At the end of the day the day if you want to create a startup or even just get a job out college, taking practical courses like iOS development will put you in a much better position than spending all of your time taking theory classes.


You're focusing on the apparent triviality of the coursework ("learn about how to string simple API calls together ... just reading the documentation and tutorials on various websites") versus the stellar skills and knowledge of the faculty.

This applies to a lot of 1xx classes anywhere! In particular, foreign languages, or beginning art classes.

My wife went to art grad school at UCLA. Her advisor (whose competence is beyond amazing, e.g. https://art.famsf.org/adrian-saxe) taught an undergraduate ceramics class, and one of his chores was to bust on his students who made bongs as their class project. Which he did with good humor. (Broke in the kiln, how about that!)

What can you say? Learning happens in all kinds of ways?


I mean majority of the knowledge is online and open sourced nowadays, even if the most cutting edge technology, especially in CS field.


My university has been offering seminars on how to use Matlab for years. They also offer a course on getting you proficient in SolidWorks. I get your point that it should be offered by a company that specializes in training, but it's nice when universities go beyond pure theoretical concepts and teach things that can be used for side-projects.


I'll go a step further. When I was in college, as an electrical engineering major, we were required to take a Matlab course in our first year. Matlab was used fairly heavily in courses where it was useful throughout the rest of my major.


Matlab code is still not the same as writing Apps for a locked in ecosystem - The company that owns matlab wants matlab everywhere, Apple wants everywhere to be in iOS


If it helps someone be better prepared for the job market then why not? Should colleges stop teaching Java or C# because they are 'owned' by commercial entities?


Java or C# is just a tool to teach CS concepts. Teaching iPhone development is more specialized and knowledge is less transferable.


I think it's weird from the perspective of Apple being a notoriously closed ecosystem - I have worked in CS teaching in the past and Linux/BSD and other FOSS was highly preferred over even Windows.


People suspend their principles when Apple dangle a new toy in front of them


You can't really teach "mobile engineering" in abstract like you can with databases or computer vision or whatever. The only real way to do anything hands on is with one of the two commercial platforms.

In 30 years maybe there will be an academic/open source "teaching OS" for mobile like there is for desktop Operating Systems classes today.


> You can't really teach "mobile engineering" in abstract like you can with databases or computer vision or whatever.

Sure you could. "mobile engineering" would just be a study of solving computer science problems with relatively low resources, a finite amount of power, etc. You don't need to make iOS/Android apps to study this. Many lessons I've learned while solving problems on mobile apps can be easily transferred from platform to platform. They weren't Android or Chrome specific for example.


What low-resources device are you going to actually program though?


I’m sure there’s a lot of sun sparc machines in a closet in a computer lab that has less ram and cpu power than today’s iPhones. 1/2 joking, 1/2 truth.

It’s client/server, no need to be specifically mobile phone as a course.

I do agree about practical hands-on training is like riding a bike; just ride it to know how.


Its not completely uncommon. Sometimes its very specific the tooling you use. In this case the fact that this knowledge is going to benefit one particular company might be seen as problematic. You aren't going to use these skills in Linux or Windows development.

A lot of programming classes utilized specific tech (The Extension school at the University I work at teaches classes on React and Vue and Laravel, R, Python....) These are cross-platform tools and generally free.

I think it can be useful to have this knowledge out there. The parts of it that are good might end up in Open Source projects or give people ideas of different ways of doing things.


Apple has its own app class curriculum available, but this Stanford class predates it by quite a few years.

If you want to learn about mobile application development, you have to pick a specific platform to target, and anything other than mobile web is going to be commercial.

Ideally, the things students learn in the class aren't just various APIs, but instead how to build a product, work as a team, and solve problems.

FWIW, I teach a very practical class in mobile application development at a university.


I agree with the sentiment, but I believe this is an elective class. When I looked, the school I went to had electives for tools like AutoCAD, Adobe tools Photoshop and Premiere, Python, Android development, MySQL etc. If students or professors had interest in learning or teaching about a specific set of tools, often they'd offer classes on them for a few semesters as long as there was interest.


Universities are walking a tightrope right now. It used to be they’d teach you domain knowledge and theory and you’d figure out application elsewhere. The expense and demands of college have meant (in many ways) ensuring that they can hit the ground running, so to speak. Do courses like these provide practical skills along side the their theory courses.


It's always been like that

Excel, Power Point, etc.


Should Princeton stop using Java in their CS curriculum because Java is a commercial product?


As if there aren't fully open source Java implementations?


On a higher conceptual level, I agree with your premise in full. In this specific scenario, however, I don't think it applies.

Let's imagine you want to teach your students a course on native mobile development. How would you do it without turning it into a "course on how to work with a specific commercial product", given that your only two relevant choices are Android and iOS, and both are commercial products?


Stanford (like many others) has continuing education classes as well.


Apple has been doing it for ages, more universities should take inspiration from his and teach students practical skills and not just archaic programming technologies.


Did you somehow miss the decades of schools teaching DOS Windows Excel Word etc. because that’s what everybody used?


It's an elective course.


About as unusual as my Uni teaching based on Sun Java or Microsoft Visual Studio back in the 90s...


Is it weird that a /university/ is offering this course on how to work with a specific commercial product?

Not any more weird than my old college offering courses in Java and .NET-related things.

Or high schools that teach people how to use Microsoft Word.

Or a trade school teaching people how to use specific types of machinery only made by one company.

Or secretarial schools that only taught people how to use IBM Selectrics.


I'm so glad that Paul Hegarty is teaching this. Not only does he know the material through experience (I think he was an early employee at NeXT and continued on at Apple), he also explains things really well and works through lots of examples. It's also clear that he enjoys teaching the course, which makes a big difference.

I watched an earlier iteration of the course, and it's the reason I know iOS development today. I don't often write reviews (and certainly not on HN), but I absolutely have to recommended this course for anyone interested in learning mobile development.


Minor nitpick, he was a VP at NeXT but not early on and didn’t go to Apple.


Haven't there been free iphone dev courses from stanford for free for over a decade? I recall iTunesU hosting them, and perhaps Coursera/EdX, and their own website etc.

Which is great, of course, but is this different?


Thanks—I've changed the title now. Submitted title was "Stanford Makes iPhone Development Course Free".

Submitters: "Please use the original title, unless it is misleading or linkbait; don't editorialize."

https://news.ycombinator.com/newsguidelines.html


Yes I learned iPhone development in 2010 by watching Stanford's CS193P course on iTunesU


From the article: “ Stanford has made these lecture videos available to all by posting them on its YouTube channel (links below). This website was set up to give everyone access to the supporting material that was distributed to students during the quarter (homework, demo code, etc.).”


> the supporting material

This was also present in the itunes-u courses in the past


But I thought iTunes-U is shutting down? Maybe that’s why the wording is as such.


Yes. I went through the course in one it’s earliest releases.

I’m not sure if all of the assignments were posted then, and the site wasn’t as good.


A big shout out to Paul Hegarty, one of the best teachers I've ever had, even though I've only attended his online classes.


I learned iOS development from their courses on iTunes U many years ago now... Good that they're continuing with it though.

Edit: here's one source from 2011 - https://news.stanford.edu/news/2011/november/itunes-apps-cla...


Is there an Android equivalent of such a course? CS193A doesn't have official videos and resources like this one. Any other university course?


Also interested in this. I've explored a few Android courses, but most online content I've tried so far hasn't really given me the "college lecture" vibe that I'm looking for.


Im also interested in this as well


Old news? These excellent videos have been posted on Stanford’s YouTube channel for 8 months: https://youtube.com/playlist?list=PLpGHT1n4-mAtTj9oywMWoBx0d...


Yeah these have always been free. I got excited thinking maybe it was a more recent class being published, but it’s not.

Anyway, they’re good!


Oh, I see. The new news is that the course materials other than the videos have now been posted.


I don't have a mac, why is it to be so hard for someone like me to learn ios development :(


You would never

s/mac/computer/

s/ios/software/

Would you?


It is quite a hassle indeed. As far as I know, you need:

- a Mac (with a recent enough version of Mac OS)

- an iPhone with a recent enough iOS

- a 99$/year (iirc) Apple developer account

These things might be a given for people in SV but it’s quite a big upfront cost for most people outside of HCOL areas.

Unless I’m mistaken and you can do without a Mac? But I seem to recall you need to use iCode (or whatever apple’s IDE is called ;)


The GP's question was about learning IOS dev. For that, you only need the Mac. There is a simulator built in to Mac dev tools so you don't have to have an iphone. The developer account also isn't needed to learn. You only need the $99/year account to publish apps to the app store.


I think you also need the dev account if you want to run apps on a physical phone, but it's been awhile since I tried.


You can just use your Apple ID (I think that's what it's called), which is free. Some of the features are only available if you have the $99/year account.


You can side-load builds onto your iPhone/iPad and they expire after a while (maybe 30 days).


7 days.


It's possible to build iOS binaries without a mac but you have to collect a bunch of the tools yourself since Apple has made it illegal to distribute them. Of course you can't actually get the app installed on your phone without sending it to apple first (this is what eg cydia impactor does.)

IMO: that whole platform is so extremely user/developer hostile it's better to just avoid it entirely unless someone is paying you to work on it.


Definitely not suggesting that it's ideal, but if iOS dev is important to you have you considered setting up a Hackintosh or a macOS VM [1]? Typically macOS Hackintoshes/VMs have annoying issues or requirements that make it unstable for full-time desktop use, but if you're just trying to use the simulator and the Xcode build tools, maybe it's enough?

[1] For example (I am not associated with the website): https://www.soupbowl.io/2020/04/macos-in-virtualbox/


if this bothers you maybe your energy is better spent developing something other than an iOS app

mobile apps were pretty cool in 2009, now they're just another medium

there's so many interesting problems to solve and interesting programming technologies that don't suffer from the problem you're pointing out


Scaleway recently added M1 Mac instances. Their price is $3 per day.

You could probably start with them.


[flagged]


This is a pretty dramatic take. You can get a brand new mac mini with an M1 for <$1000. The price drops significantly (<$500) if you get a refurb or pick up a used one on ebay. $500 may still be a lot of money, but it's not "rich" money.


Off topic, but looking at the curriculum of the course and the more I read about native development, the more I love Flutter. There are so many barriers to entry for native development, to develop and publish a simple app is such a complex procedure that I respect anyone even trying to go Native first without any prior knowledge.

Flutter on the other hand, is a pure joy. Almost anything you need UI-wise is prepared, and you can just customize it the way you want (try implementing a ListView in native vs Flutter). For the big majority of today's apps native is just not neccessary, most apps don't need bluetooth access or some other specific service.

Especially from the business side, Flutter is way better. You need to maintain only one codebase which results in less need for resources. And you are way faster, you can iterate like crazy and push out an MVP...

And when stable Flutter Web arrived, it is game over...


As an iOS engineer with native and flutter experience, not needing access to hardware and OS specific APIs is a BIG assumption, I used to not need access until I needed them and it was somewhat painful most of the time, either support was not there how we needed it or some APIs were awkward to use.

I'd also say that the write once support on all devices is definitely not a 100% thing. There is definitely a lot of tweaking for adding support to specific platforms and devices (think iPad vs iPhone vs Android Phone vs Android Tablet). I've also found it that its a lot easier (when compared to native development) to create code that needs to be heavily refactored out when adding support for additional devices while also making sure to not braking things on other platforms. This last point complicates development because then you are forced to be familiar on how to test and debug on each platform, making sure that changes or issues fixed on a specific one don't break the other ones; this for sure adds a ton of development and testing time, specially when you go beyond just android phones and iPhones.

Where flutter has shined for us though has been for internal tools that we deploy and for which the UI is not designer-driven or that don't have stringent design and performance requirements.

Now don't get me wrong; I'm well invested in flutter but it does not come without its compromises, specially on iOS being second in line support after Android. It definitely gets you quicker to market with an MVP on more platforms compared to pure native development.


The idea is that over time as the ecosystem matures, you will need less and less need for platform channels because there will be more plugins available on pub.dev. Personally I think the Flutter team is taking too much on their plate porting it to Linux/Mac/Windows/Web at the same time. I would rather see them make the iOS and Android implementations rock solid and create great plugins for hardware & OS specific APIs.


FWIW, my buddy and I built and launched a simple iOS app (Export Health!) in the App Store in two weeks using SwiftUI. The whole app is basically one file and under 1MB including all the iOS extras. Both of us are professional engineers but only had minor exposure to iOS before building this app.

A few years back I built internal apps at work using React Native. Warts aside, it was a great dev experience and was able to re-use code 100%. However, having to ensure all was well with both iOS and Android (and indeed sometimes there were edge cases) slowed me down.

SwiftUI and the Combine framework provides a similar dev experience I felt using React Native. Moreover, app previews in XCode make it straightforward to paint different application states and iOS settings. Building for one platform also reduces the quality check surface, allowing you to spend more time focusing on product.

If cross platform is a necessity from the onset (e.g. internal app for work where all employees need access but may have different phones) then starting with non-native makes sense. However I personally recommend anyone looking to build a product as an app to focus on iOS first and use SwiftUI. I reckon you will move faster, have a smaller code base, and a better app. All of which are conducive to finding PMF if you intend to make a business out of your product


Upvoting you because the downvoting was unfair.

Nevertheless I think your position is naive; most interesting and engaging apps need more information than you can get from a generic tool alone.


It feels like SwiftUI, and other native tools, are embracing the advantages of some of these other cross platform tools: declarative, rapidly-iterable, abstracted.

I feel SwiftUI markedly lowers the 'barrier to entry'.

Crossplatform tools may serve your purpose better, but I think it's unfair to say that, at least for SwiftUI, native development may not be as 'joyful'. A list view in SwiftUi is List {}.


I agree - native development is bad. I had an iPhone app that I built using native Apple stuff and it was miserable. And the whole time you're struggling with their buggy UI framework you can't even take solace in that you're learning useful skills because it's all specific to Apple development. From the programming language to the frameworks/APIs you use.

It's so domain specific that IMO it's not worth trying to do that kind of work unless it's your main career. I ended up taking the app I had built down because I kept getting support requests for bugs I didn't know how to fix and the idea of going into the code to add more features filled me with a sense of dread. The app was doing somewhat well too, it had about 1000 DAU.

I built another app for the CDC in React Native, which has its own foibles but is overall much easier. I'm not sure how successful Flutter will be overall because you can't leverage outside skills and you have to learn a different language.


Have you used Flutter web? It performs extremely poorly and is completely inaccessible.


I could've sworn that a lot of Stanford iOS courses were already on iTunes U.


It’s in the Podcasts app now since iTunes U is discontinued.


I don’t see this one, but do see earlier ones dated 2010


I don’t do iOS development anymore, but I did cs193p almost a decade ago, when it was on iTunesU and taught by Paul Hegarty.

It unlocked a lot of job opportunities for me, and I’m still grateful to this day.


It all looks trivial until you actually start building


Looking at the slides, this course is based on SwitftUI which only came out in the last year or two while previous versions used UIkit.


Exactly! This is the best resource on SwiftUI I have found yet!


Wish we had classes like this back when I was doing my CS degree. Not saying that algos/ theoretical / systems stuff isn't valuable, but if you want to build anything that reaches real customers, then knowing how to build for the Apple Ecosystem is essential!


Paul Hegarty does a great job of refreshing this course every year so students are taught Apple’s latest tech even when the old stuff isn’t deprecated. I’ve been coming back to CS193p lectures for years and they’re always up to date.


OT: I recently tried to get some vim binds working on the latest Xcode and it's impossible. People got it working on prior versions but now, it's seem to be over.

How are people developing with Xcode who prefer vim binds?


Have you looked at Appcode? I haven't used the IdeaVim plugin myself but it might be worth a go.


Did this course almost a decade ago when it was ObjC based. Never really pursued iOS development (a big mistake on my part) but with Swift and SwiftUI I'm game to give it another try.


I was an ios dev via Objective-C in another life.

Swift and SwiftUI is such a fundamental shift in experience for the better.

There are a few esoteric things based on full interoperability with ObjectiveC and the cocoa API's, but for most apps, it's really straight forward.


I'm assuming you need a Mac computer to develop ios applications? I have an iphone and ipad but I won't purchase their computers.


Technically, no; my first App Store release lo those many years ago was developed using a Hackintosh. That was like ten years ago, though, so maybe something has changed that requires, say, the Secure Enclave or something.


I wonder how macs move to custom chips will impact the hackentosh community going forward. I can see the day when intel is simply no longer supported as a platform.


Apple Silicon will kill the hackentosh. I expect Intel to have 5 years of support left, based on the PPC to Intel shift. One more system upgrade then 3 years of security updates.


Maybe by then mac hardware won't be required to write ios apps? That's always felt rather monopolistic to me. It would be like MS refusing to deploy anything that wasn't written on a surface, or google refusing gcp deployments from anything but a chrome book.


That's always felt rather monopolistic to me.

It always felt like a smaller company that didn't want to support multiple operating systems. But Apple's not all that small anymore, right? Well, the fallback to that argument is the long-standing habit of pretending other systems don't exist (Mac vs. PC commmercials notwithstanding). Best I recall, one will rarely (if ever) hear Apple comparing, say, iOS to Android. Nope, it's just "iOS is awesome, and here's why". Given that, why port your dev tools to a system that you'd rather pretend didn't exist in the first place?


A side point but as you're OK with the i* devices I'm curious what it is about the macs that lead you to "won't".

(Not trying to start a flame war here)


My work provides me with an iphone (which i only use for work). I like the hardware but the OS is super limiting.

I bought an ipad pro for art - mostly Procreate (is that sad?) but I also use a 16" wacom display tablet attached to my desktop when I'm not mobile. I also use it to play with music recording on mobile with a small midi keyboard and some synth apps. The ipad hardware is really nice. The OS is super limiting to the point of frustration. If there were alternate non-apple hardware of similar quality for what I do on ipad, I would likely switch. As it is the device is just for 'playing' creatively.

For a computer, I regularly run software with no mac ports and I'm not a big fan of the way apple is fundamentally anti consumer in its approach to product repair, OS design and controlling what software can be run on devices. I don't want to invite that sort of intrusive tech control over my life in the future by buying into now as a principle computing device when its more 'open' (even though apple is fundamentally not open) I've seen this kind of thing coming as apple gets more and more aggressive with its policies.

Apple's move to their own silicon only makes me think they walled garden will get an even more impenetrable wall, and I'm just not interested. (The hardware is good but the OS is limiting, and it seems likely to me that the longer apple makes their own silicon the less likely it will play nicely with anyone else. Apple wants you to buy their shit and they don't care if it doesn't work with anyone else's).


It's also possible to use darling on linux to develop for iOS. Very unsupported and unofficial path though. That said I hate iOS and Android development with passion. Both have managed to lock their development ecosystem in big clunky monolith IDEs and every cross-platform development solution has to deploy ugly hacks to make things work (they still don't and the whole thing comes crashing down very easily).


> I'm assuming you need a Mac computer to develop ios applications?

You do, if you want to code in Objective-C or Swift (likely the languages tought in Stanford’s lectures). But React Native and Expo’s EAS services (expo.io/eas) has made it possible to avoid buying a Mac. EAS requires a subscription and you also need an Apple Developer sunscription to publish to their AppStore.


You can now do it on AWS MacOS instances


But in long run it is cheaper to buy used Mac Mini for XCode builds.


I guess you could use Flutter to do hybrid applications


The title is misleading, the lecture videos and materials for that course have always been publicly available.


What would be an advantage going for swiftui vs. React Native for a startup? I feel like the cross platform nature of React would be more beneficial for starting a new platform or business. Of course swift will operate better for ios but is the tradeoff that great with React Native?


Interested as well. I’ve heard a number of tech companies use react native on iOS targets which allows for easy reuse of components developed for web UI, and any mobile... certainly where I’d lean given the choice based on current information.

There was an engineering blog post from discord a number of months ago discussing their use of react native bottlenecking iOS app performance, and they ended up converting some key react data structures to native iOS constructs within the react native app and crushed those bottlenecks. My takeaway was that developer ease and reusability should be prioritized until you hit a performance wall at scale such as discord did, at which point you’ll have the money to pay other engineers to optimize the important parts of you don’t have the time or know-how ;)


For a more balanced measure of Discord's performance, try using it on a five-year old iPhone.


AFAIK that was the device subset they were optimizing for, I have an iPhone SE lying around so I’ll try it out.


React Native will get you to an MVP way faster than native/SwiftUI development. However there is the massive risk that you'll find yourself shackled to React Native if you want to grow the capabilities of your app to beyond what React Native can accommodate. React Native make development faster, but traditional native development is the safer option in the long term.


The advice I give roughly to clients is to go native if your business heavily depends on mobile. Otherwise React Native is pretty viable, especially for small teams of generalists. In terms of SwiftUI, most businesses aren’t building entire apps in it yet.


i've never used react native but regularly use react for the web and find swift/swiftui development to be faster and less complicated overall


Has anyone dipped their toe into this course at all? I wrote a very, very simple Android app several years back and have been intrigued by iOS development since the introduction of SwiftUI, but I'm not sure if there is material I should be familiar with before attempting this


The pre-reqs are roughly 'you know a programming language and have access to a Mac'.


Cool, thanks.


Does anyone know of a good course to get started on AppleTV development?

I've tried getting started with a small hobby project multiple times, and I get something working, but the documentation I can find doesn't really help you get into more advanced stuff.


TvOS is 90% the same as iOS, and has almost no viable application market besides video streaming apps. Unfortunately that means there are almost no docs or classes on programming it. The occasional WWDC presentation is all there is.


The course linked here is a good one. It teaches SwiftUI and Swift which are what you will use to develop on AppleTV.


Has anyone succeded to make a living from app purchases? I am really interested to follow up on it, just dont know if it will be. enough to cover my frigging expenses. (Main question is: How much is left after all the other guys get their due)


My full time job as an iOS developer is for a company that makes 100% of its income from app purchases. Mostly up front (our app is a plain old paid app), but we do have a couple in app purchases for optional extra "pro" features.

That was true of my last developer job too, where I was (primarily) a Mac developer. There, most of our sales were direct, ie. not on the Mac App Store (we did have some MAS income).

That said, it's pretty hard to become successful through app store sales alone, and you definitely can't rely solely on the app store to do your marketing, promotion, etc. The app store is a distribution channel, and if you get lucky, you can get promotional value out of it, particularly if Apple features your app, but it doesn't replace traditional marketing strategies.


I think in the early days it used to be common...


I credit my success as a mobile app dev consultant to Stanford’s iOS videos back when iTunes U was a thing (2012).

I will have to watch these because damn if I don’t have a ton of questions about SwiftUI architecture best practices.

Pro-tip: watch these at 2x speed.


i always admire the fact how the professors who teach professionally, ease us into things while many youtubers struggle to do so. Its not all about what you know, its more about how the other person ..


Hmmm nice! I did this years ago when it was called "Coding Together". Was a really good course!

PS: It was free even then (same course number and everything) so not sure what's changed here :)


I kickstarted my career 8 years ago by going through an old version of this course online. Huge props to Stanford for making it more easily consumable by others.


I took the swift course a few years ago. This is great for beginners and not bad for android developers either


this was always free. when i first learned ios development like 5+ years ago i took this course on youtube


Yeah, it seems like they make this course free a lot.

I remember almost 10 years ago watching Evan Doll instruct this class. I think I watched it as a video podcast at the time.

To be fair, I'm sure the course changes from year to year.


I guess the significant part now is that it's the latest Spring 2020 version of the course that's now available for free? Pretty cool!


Hasn’t this always been free? I’ve taken it twice in the past for free. When it was on iTunes University.


The submitted title of this page ("Stanford Makes iPhone Development Course Free") is misleading, and should just be the title of the page, "Stanford CS193p - Developing Apps for iOS."

Stanford's iPhone development course has been free online for more than 10 years.


Thanks! Fixed now.


Can't wait to see all the same apps popping up on GitHub.


Same! I love watching people learn new things.


Here's the one I made after watching those lectures: https://github.com/EvidentSolutions/toodim


A lot of people are mentioning that this is old news, but that's not the case for me: thanks for sharing!


I'm sure this is great content, but the usage of Comic Sans for the slides really brings that first impression down.


There is something funny about it being an Apple centric course that is using comic sans


I don't think it is Comic Sans. Probably Chalkboard:

https://en.wikipedia.org/wiki/Chalkboard_(typeface)

http://www.identifont.com/differences?first=Chalkboard&secon...

If you want to see a prominent Computer Scientist using Comic Sans, you need to watch Haskell creator Simon Peyton Jones' talks:

https://www.reddit.com/r/haskell/comments/1bd1ia/spj_and_com...


For what it's worth Comic Sans supposedly is an excellent font for dyslexic people. So at the cost of looking professional your content becomes available for more people (or that's what some believe - I don't know of any peer-reviewed study on its readability).


This is really good stuff! I’ve found much of Apple’s documentation on how to use SwiftUI to show samples without really explaining how they work or why they are the way they are.

I’ve only spent a few minutes skimming through the slides for this course but I already feel smarter than I was after spending hours slogging through Apple’s docs and samples.


Lesson 1: do exactly as Apple tells you. Don't try to build your own web engine. And don't write apps that are not suitable for children.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: