Как вы изучали программирование и iOS-разработку?

Ответ

Обучение проходило по модели самообразования с акцентом на практику:

Основные источники знаний:

  1. Онлайн-курсы и туториалы: SwiftBook, Udemy, RayWenderlich.
  2. Официальная документация: Apple Developer Documentation, Human Interface Guidelines.
  3. Конференции: WWDC (видео и sample code).
  4. Практика: Коммерческие проекты, менторские программы, хакатоны.

Пример изучения фреймворка Combine на практике:

// Создание и подписка на Publisher
let publisher = PassthroughSubject<Int, Never>()
let cancellable = publisher
    .sink { value in
        print("Received value: (value)")
    }
publisher.send(42) // Output: Received value: 42

Постоянное развитие:

  • Анализ чужого кода (Code Review, open-source).
  • Решение реальных задач в проектах — главный источник опыта.

Ответ 18+ 🔞

Ну и смотри, как я в эту iOS-разработку влипал, блядь. Никаких там универов с лекциями про сортировку пузырьком, ядрёна вошь. Всё на чистом самообучении и практике, как в боксе — пока по морде не получишь, не научишься.

Откуда я мозги качал, ёпта:

  1. Курсы и мануалы: SwiftBook, Udemy, RayWenderlich — там как раз для таких, как я, всё разжёвано. Сидишь, вникаешь, хуяк-хуяк — и уже что-то понимаешь.
  2. Священное писание от Apple: Документация и Human Interface Guidelines. Сначала читаешь и нихуя не понимаешь, а потом, когда на реальной задаче обожжёшься, возвращаешься — и вот тут-то озарение, блядь!
  3. WWDC: Эти конференции — просто кладезь. Смотришь видосики, качаешь примеры кода, и волнение ебать — столько нового сразу.
  4. Практика, мать её: Вот это главное. Брал коммерческие проекты, лез в менторские программы, на хакатонах мозги выносил. Без этого — нихуя, просто теория.

Вот, например, как я этот твой Combine осваивал, пиздопроебибна штука: Прочитал теорию — нихуя. Потом сел и начал тыкать, как обезьяна с гранатой:

// Создание и подписка на Publisher
let publisher = PassthroughSubject<Int, Never>()
let cancellable = publisher
    .sink { value in
        print("Received value: (value)")
    }
publisher.send(42) // Output: Received value: 42

Отправил 42, увидел в консоли — и тут, сука, щёлкнуло! А, бля, вот как оно работает! Потом уже на реальных сетевых запросах и интерфейсах пробовал.

И так постоянно, блядь:

  • Чужой код смотрю, как на Code Review или в open-source. Иногда видишь решение и просто сам от себя охуеваешь: «Ни хуя себе, как элегантно, а я бы тут велосипед на три года строил».
  • Но главный учитель — это реальная задача в проекте. Когда дедлайн горит, тимлид орёт, а у тебя ничего не работает. Вот тут-то и выковывается опыт, в рот меня чих-пых. После такого уже никакая документация не страшна.