О стэнфордских лекциях

Стэнфордский университет, США — один из лучших в мире  в области информатики (Computer Science). Он щедро делится своими курсами. Одним из  самых популярных и успешных курсов является курс CS193P  по разработке приложений на iOS, который читает профессор Paul Hegarty. Это курс раньше читался ежегодно, начиная с 2010 года. Сейчас читается реже. На данный момент актуальными являются:

«Developing Apps for iOS», CS193P весна 2023 года» Разработка приложений для iOS (SwiftUI) (актуальный)

«Developing Apps for iOS», CS193P весна 2021 года» — Разработка приложений для iOS (SwiftUI) (менее актуален. но можно посмотреть, если интересует работа с Core Data)

«Developing iOS 11 Apps with Swift»,    CS193P осень 2017 года — Разработка iOS 11 приложений с использованием Swift (UIKit) (последний курс с UIKit и Swift)

«Developing iOS 10 Apps with Swift»,    CS193P зима 2017 года — Разработка iOS 10 приложений с использованием Swift (если вас интересует UIKit и работа с Core Data)

Ожидается (31 марта 2025 — 4 июня 2025) ) курс «Developing Apps for iOS», CS193P весна 2025 года» Разработка приложений для iOS (SwiftUI)

Для того, чтобы освоить эти курсы, вам нужно иметь только Mac — Macbook Pro, MacBook Air, iMac.

Перечень русскоязычных конспектов лекций и решений Заданий для соответствующих курсов можно найти на следующих страницах: 

«Developing Apps for iOS», CS193P весна 2023 года» находится на странице «iOS SwiftUI 2023».

«Developing Apps for iOS», CS193P весна 2021 года»находится на странице «iOS 14 + SwiftUI 2»

«Developing  iOS 11 Apps with Swift» находится на странице «iOS 11 + Swift 4» и «iOS 12, 11 + Swift 4″, 

«Developing iOS 10 Apps with Swift» находится на странице «iOS 10 + Swift 3»,

 «Developing iOS 9 Apps with Swift» находится на странице «iOS 9 + Swift 2.2 + Swift 3»,  

«Developing iOS 8 Apps with Swift»—  на странице «iOS 8 + Swift»,  

 Developing iOS  7 Apps for iPhone and iPad — на странице «iOS 7 +  iOS 9 + Objective-C»

Если вы освоите этот курс, то можете считать себя профессионалом, способным создать любое самое современное приложение для iPhone и iPad. Это сделать очень не просто, но это того стоит.

Задача  данного проекта в том, чтобы вывести разработчиков на достаточно высокий уровень iOS программирования, когда вы свободно сможете общаться с экспертами и понимать все, что говорится на WWDC, а также следить за созданием новых версий языка программирования Swift (Swift 5, Swift 6) на сайте Swift.org , а не “болтаться” вечно в обучающих материалах. После качественного самостоятельного программирования  Заданий курса CS193P никакие обучающие курсы уже будут не нужны.

В этом курсе высвечивает множество нюансов операционной системы iOS, которые не так -то легко  найти в документации, профессор снабжает вас приемами программирования, которые вы не найдете ни в одной книге ( может быть, на WWDC 2014 2015 2016 2017 2018 2019 2020 2021 2022). Он многократно сократит ваш путь изучения  языков программирования Swift и Objective-C и системы iOS.

Хотя профессор Paul Hegarty подчеркивает важность знакомства с объектно-ориентированным программированием как обязательное требование к курсу, и что этот курс — не для начинающих, начинает профессор с очень подробного рассказа о синтаксисе Swift (Objective-C  в курсе iOS 7) и о возможностях Xcode. Буквально объясняет каждый символ. И может возникнуть обманчивое впечатление, что это курс для начинающих. Но он умышленно это делает вначале, чтобы дальше, при объяснении функционального программирования, протоколов, замыканий, анимации, многопоточности, Autolayout (разметки), Size Classes, объектно-ориентированной базы данных Core Data, Dynamic Animation и т.д., не вернуться к этому никогда, и начать говорить только о сложных вещах. Поэтому первые 3-4 лекции — просто находка для тех, кто только начинает разрабатывать iOS приложения.  Дальнейшие лекции потребуют более профессиональной подготовки.

Особый прорыв в изучении программирования в операционной системе iOS удается достичь при выполнении Заданий, которые предлагаются на этих курсах. В курсе обычно бывает 5 или 6 домашних заданий. Первое — очень легкое, нужно в основном повторить то, что профессор показывал на лекции. И это также создает иллюзию, что курс для начинающих. Далее сложность заданий возрастает по экспоненте. Они, как правило, очень интересные, и вы несомненно получите от этого удовольствие. На этом сайте даны варианты решения Заданий, которые можно посмотреть, и предложить свои решения.

На вас в интернете обрушится шквал обучающих курсов либо по Swift типа ««Hello, World»  на языке Swift», либо по iOS 11 типа «Разработка 14 (20?, кто больше?) приложений на  iOS 11».  К сожалению, изучать Swift отдельно от разработки приложений не имеет смысл, так как он проявляет в полной мере свои конструкции только при разработке сложных приложение на iOS 11. Количество приложений тоже не решает проблему, потому что надо методически  идти от простых приложений к реально сложным, чтобы показать и Swift,  и iOS в полной силе. Это оказалось под силу только профессору Paul Hegarty. Поэтому стэнфордские курсы по iOS —  общепризнанно лучшие в мире при изучении программирования на  iOS (Swift, Objective-C). И у вас есть реальная возможность погрузиться в их изучение.

Если кто-то чувствует себя не совсем уверенно с английским или просто хочет почитать материал на русском языке, предлагаю свой неавторизованный конспект лекций на русском языке, сопровождаемый дополнительными комментариями. Конспект составлен с привлечением слайдов и фрагментов кода демонстрационных примеров, что создает иллюзию присутствия на лекции. Конспект хронометрирован через каждые 5 минут, и если вы параллельно включите английскую версию видео курса, то даже не владея английским в совершенстве, вы поймете все нюансы, о которых говорит профессор Paul Hegarty. Даже тем, кто владеет беглым английским, наличие текстового конспекта, который всегда под рукой, позволит освоить материал на более высоком уровне.

На этом сайте выложены все необходимые материалы для изучения вышеупомянутых стэнфордских курсов:  неавторизованные русскоязычные конспекты лекций, демонстрационные примеры и решения Заданий, адаптированные к iOS 11, Swift 4 и современному Objective-C, а также статьи, более глубоко раскрывающие некоторые темы, о которых лишь вскользь упоминалось на лекциях.

Весь материал разделен на 6 тематических частей:

«iOS SwiftUI 2023»

«iOS 14 + SwiftUI 2»

«iOS 13 + Swift 5 + SwiftUI»

«SwiftUI + Combine»

«iOS 12, 11 + Swift 4″,

«iOS 10 + Swift 3»

Но также возможен доступ к более ранним версиям этого курса:

 «iOS 9 + Swift 2.2 +Swift 3»

«iOS 8 + Swift»

» iOS 7+ Objective C»

Кроме того, в разделе Главная размещены в обратном хронологическом порядке лекции, задания и статьи по мере их появления на сайте, и вы можете искать нужный вам материал по категориям и облачным тэгам.

Процесс выполнения заданий на Mac в Xcode  — очень увлекательный: хорошая информационная поддержка, результат отображается на симуляторах iPhone и iPad  или на реальных устройствах, визуализация процесса отладки.

Самое интересное заключается в том, что из Xcode  вы можете запустить демонстрационные примеры на своем устройстве (или поделится с друзьями) совершенно бесплатно — для этого не нужно иметь сертификат разработчика Developer Account,  стоимостью 99 $/год.

После выполнения очередного задания вы другими глазами посмотрите на ту же самую лекцию, которую слушали перед выполнением задания,  она будет для вас абсолютно понятной и логичной, и вы сможете сосредоточиться на важных нюансах, которых в лекциях Пола Хeгэрти очень много.

Демонстрационные примеры  для курса «Developing Apps for iOS», CS193P весна 2023 года» находятся в этом репозитории на Github .

Демонстрационные примеры  для курса «Developing Apps for iOS», CS193P весна 2021 года» находятся в этом репозитории на Github .

Демонстрационные примеры  для курса CS193P Winter 2017  «Developing iOS 10 Apps with Swift»  находятся в этом репозитории на Github для Swift 3  и в этом репозитории для Swift 4.

Решения Заданий  для предыдущего курса CS193P Winter 2017  «Developing iOS 10 Apps with Swift»  находятся в этом репозитории также на Github для Swift 3  и в этом репозитории для Swift 4.


Свежие записи

Многопоточность по шагам: Чтение из хранилища

Это перевод статьи Concurrency Step-by-Step: Reading from Storage

Тема, которая снова и снова возникает в связи с многопоточностью (concurrency) в Swift, — это попытка «сделать компилятор довольным». Вы просто хотите, чтобы глупые ошибки исчезли. Пытаясь сделать это, вы натыкаетесь на множество вещей, таких как Sendable или @preconcurrency. Вы даже можете начать менять класс class на актор actor , и непонятно, насколько это может отличаться, но это даже то же самое количество символов. Поэтому вы просто начинаете бросаться синтаксисом в проблему. Это понятно!

Иногда это может даже работать в краткосрочной перспективе. Но этот путь обычно приводит к разочарованию и гневу. Часто он приводит к чрезвычайно сложным проектам, которые просто приводят к еще большим проблемам.

Добро пожаловать во вторую часть «Concurrency Swift шаг за шагом». Первая часть «Concurrency Swift шаг за шагом» находится здесь. Цель этих постов— проработать общую задачу, чтобы помочь сформировать реальное понимание того, что происходит. В прошлый раз мы рассматривали сетевой запрос. На этот раз мы загрузим модель из хранилища данных.

Краткие заметки

Я проигнорирую обработку ошибок, чтобы сосредоточиться на многопоточности.
Я не очень хорош в SwiftUI. Нам потребуется Xcode 16 или более поздняя версия.
Мне было очень трудно придумать пример, который был бы одновременно простым и иллюстрировал проблему. Я думаю, что локальное хранилище будет работать хорошо, но нам придется сделать его довольно надуманным. Я не думаю, что это действительно уведет нас от каких-либо идей. Но я все равно хочу это подчеркнуть, потому что идея «хранилища данных» здесь не будет похожа на SwiftData, CoreData или другие вещи, которые может использовать реальное приложение.

Кроме того, этот пост строится на темах, обсуждавшихся в предыдущем посте. Некоторые из этих вещей будет сложнее понять, если вы не знакомы с содержанием предыдущего поста.

Расставляем детали по местам

Итак, начнем с определения интерфейса нашей системы хранения данных.

class DataModel {
	let name: String

	init(name: String) {
		self.name = name
	}
}

class Store {
	func loadModel(named name: String) async -> DataModel {
		DataModel(name: name)
	}
}

Я же говорил, что это будет надуманно!
Есть только ТИП DataModel для хранения простого значения name, а также Store, который «загружает» для нас модели. Ни один из них не делает ничего полезного. Но на самом деле нас интересуют только ТИПы и их интерфейсы.

Теперь нам нужен SwiftUI View, чтобы связать все это воедино.

struct ContentView: View {
	@State private var store = Store()
	@State private var name: String = "---"

	var body: some View {
		Text("hello \(name)!")
			.task {
				self.name = await store.loadModel(named: "friends").name
			}
	}
}

Этот фрагмент кода должен очень удобно поместиться на одном экране. Неплохо!

Отступление: система ТИПов

Я вставил небольшой комментарий выше, который заслуживает большего внимания.
Но на самом деле нас интересуют только ТИПы и их интерфейсы.
Это важно и довольно нетривиально! 

Читать далее
  1. Многопоточность по шагам:  Сетевой запрос Добавить комментарий
  2. Опыт создания iOS приложения Countries  с помощью Claude 3.5 Sonnet, ChatGPT 4.o1-mini, ChatGPT 4.o1-preview и Gemini 2.0 Flash Добавить комментарий
  3. Cursor AI в iOS разработке. Приложение «Фото с Flickr.com». Часть 2. Комментарии к записи Cursor AI в iOS разработке. Приложение «Фото с Flickr.com». Часть 2. отключены
  4. Cursor AI в iOS разработке. Приложение «Фото с Flickr.com». Часть 1. Комментарии к записи Cursor AI в iOS разработке. Приложение «Фото с Flickr.com». Часть 1. отключены
  5. Статистика созданных ChatGPT алгоритмов Expeсtimax и Monte Carlo для игры 2048 Комментарии к записи Статистика созданных ChatGPT алгоритмов Expeсtimax и Monte Carlo для игры 2048 отключены
  6. iOS приложение игры 2048 в SwiftUI с ChatGPT. Часть 3. ИИ (AI) для игры 2048. Комментарии к записи iOS приложение игры 2048 в SwiftUI с ChatGPT. Часть 3. ИИ (AI) для игры 2048. отключены
  7. iOS приложения игры 2048 в SwiftUI  с ChatGPT 4-o. Часть 2. Анимация и UI. Комментарии к записи iOS приложения игры 2048 в SwiftUI  с ChatGPT 4-o. Часть 2. Анимация и UI. отключены
  8. iOS приложения игры 2048 в SwiftUI  с ChatGPT 4-o. Часть 1. Введение. Логика игры 2048. Комментарии к записи iOS приложения игры 2048 в SwiftUI  с ChatGPT 4-o. Часть 1. Введение. Логика игры 2048. отключены
  9. Лекция 15. Документо-ориентированная архитектура. CS193P Spring 2023. Комментарии к записи Лекция 15. Документо-ориентированная архитектура. CS193P Spring 2023. отключены