CS193p: Developing Apps for iOS
cs193p.sites.stanford.edu
cs193p.sites.stanford.edu
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
My guess is that those are manual.
It is definitely someone just having a bit of fun :)
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.
If you watch WKRP In Cincinnati on MeTV, the subtitled lyrics for the closing theme are different every time.
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".
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.
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 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.
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.
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.
Using proprietary software/tools is not the worse thing universities have done (looking at you $700 biology dept textbooks).
- 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?
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.
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.
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 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.
However, it was taught by the business school, and I think that was very appropriate.
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)
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.
Excel, Power Point, etc.
In 30 years maybe there will be an academic/open source "teaching OS" for mobile like there is for desktop Operating Systems classes today.
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.
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.
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?
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'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.
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.
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.
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?
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.
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 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.
Which is great, of course, but is this different?
This was also present in the itunes-u courses in the past
I’m not sure if all of the assignments were posted then, and the site wasn’t as good.
Submitters: "Please use the original title, unless it is misleading or linkbait; don't editorialize."
Edit: here's one source from 2011 - https://news.stanford.edu/news/2011/november/itunes-apps-cla...
Anyway, they’re good!
- 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 ;)
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.
[1] For example (I am not associated with the website): https://www.soupbowl.io/2020/04/macos-in-virtualbox/
You could probably start with them.
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
s/mac/computer/
s/ios/software/
Would you?
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...
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.
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 {}.
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.
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
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 unlocked a lot of job opportunities for me, and I’m still grateful to this day.
How are people developing with Xcode who prefer vim binds?
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.
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?
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.
(Not trying to start a flame war here)
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).
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 ;)
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.
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 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.
PS: It was free even then (same course number and everything) so not sure what's changed here :)
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.
Stanford's iPhone development course has been free online for more than 10 years.
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...
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.