Расскажите о вашем текущем профессиональном обучении.

Ответ

Да, непрерывное обучение — неотъемлемая часть моей работы. Акцент делаю на углублении знаний в экосистеме Apple и современных практиках разработки.

Основные направления:

  • SwiftUI & Combine: Изучаю продвинутые паттерны состояния, кастомные layout и реактивные цепочки данных.
  • Архитектуры: Анализирую такие подходы, как The Composable Architecture (TCA) и MVVM, чтобы выбирать оптимальные для масштабируемости и тестируемости.
  • Concurrency: Осваиваю современный async/await, Task и Actor, сравнивая их с GCD и Operation.

Источники знаний:

  1. Официальная документация и сессии WWDC.
  2. Технические блоги (Swift by Sundell, Point-Free).
  3. Исследование open-source проектов на GitHub.
  4. Практика через пет-проекты и рефакторинг рабочего кода.

Пример применения: При изучении async/await переписал сетевой запрос:

// Старый подход с completion handler
func loadItems(completion: @escaping (Result<[Item], Error>) -> Void)

// Новый подход с async/await
func loadItems() async throws -> [Item] {
    let url = URL(string: "https://api.example.com/items")!
    let (data, _) = try await URLSession.shared.data(from: url)
    return try JSONDecoder().decode([Item].self, from: data)
}

Цель — не только знать синтаксис, но и понимать компромиссы (например, отмена задач и обработка ошибок в structured concurrency).

Ответ 18+ 🔞

Ну ты смотри, какая история! Сижу я тут, значит, и думаю: ну как же так, блядь, в этой нашей айтишной жизни не отстать от поезда, который, сука, летит со скоростью света? А поезд этот — новые технологии, фреймворки, эти ваши архитектуры, которые плодятся как кролики. И понимаю — учиться надо, блядь, непрерывно. Иначе накроешься медным тазом, и будешь ты, как тот Герасим, только мычать «Муму» на старом Objective-C, а все вокруг уже на SwiftUI с async/await чирикают.

Вот и я, сука, так же. Основной мой фокус — это вся эта яблочная экосистема, потому что, ну, ёпта, там такой сад развели, что без поллитры не разберёшься. Но разбираться надо, иначе пиши пропало.

Куда мозги, блядь, вкладываю:

  • SwiftUI & Combine: Это ж, блядь, основа основ теперь. Но не просто кнопочки-ползуночки рисовать, а вникать в эти ихние продвинутые паттерны. Как состояние управлять, чтобы не получилось пиздопроебибны, где всё связано со всем. Кастомные лейауты делать, чтобы не как у всех. И Combine, эта реактивная хуйня, чтобы данные текли как надо, а не как попало.
  • Архитектуры: Вот тут, блядь, раздолье для ума. Смотрю я на TCA (The Composable Architecture) — и волнение ебать, такой монстр, но красивый, блядь. Потом на MVVM — старый добрый, но с подвохами. Цель-то простая: выбрать такую штуку, чтобы приложение не развалилось, когда оно из пет-проекта превратится в нечто с овердохуищем фич, и чтобы его можно было протестировать, не поседев при этом.
  • Concurrency (Многопоточность): А вот это, сука, отдельная песня. Раньше был GCD — уже мозг выносил. Теперь вот async/await, Task, Actor... Красота, вроде бы. Код как в сказке читается. Но подвох, блядь, везде есть. Как задачи отменять? Как ошибки ловить в этих «структурированных» потоках? Вот и ковыряю, сравниваю со старьём, чтобы понять, где реально лучше, а где просто синтаксический сахарок.

Где, сука, знания добываю:

  1. Первое дело — иду к первоисточнику. Документация Apple и записи с WWDC. Там, бывает, такие ништяки рассказывают, что потом месяц осмысливаешь.
  2. Блоги всякие умные, типа Swift by Sundell или Point-Free. Там ребята так глубоко залезают, что иногда кажется, они про мой код пишут, про мои косяки.
  3. На GitHub лазаю. Смотрю, как другие, не дураки, проекты строят. Подсматриваю решения, ага, вот эта хитрая жопа такую проблему обошла!
  4. Ну и, конечно, практика, мать её. Либо пет-проект какой-нибудь левый замутить, либо в рабочем коде найти кусок, который глаза режет, и его переписать. Без этого никуда.

Вот, например, наглядная хуйня: Изучал я этот самый async/await. Раньше сетевой запрос выглядел как многоэтажный пиздец с completion handler'ами:

// Старый подход, который вгонял в депрессию
func loadItems(completion: @escaping (Result<[Item], Error>) -> Void) {
    // Тут куча кода, где можно было всё просрать
}

А теперь, блядь, красота:

// Новый подход. Чисто, понятно, почти как проза.
func loadItems() async throws -> [Item] {
    let url = URL(string: "https://api.example.com/items")!
    let (data, _) = try await URLSession.shared.data(from: url)
    return try JSONDecoder().decode([Item].self, from: data)
}

Но и тут, сука, расслабляться нельзя. Цель же не просто синтаксис новый выучить, как попугай. А понять, о чём он, блядь, думал, этот самый синтаксис. Где эти новые подходы выстрелят, а где могут так впендюрить, что мало не покажется. Вот в этом и есть, блядь, вся соль. Чтобы не просто модно писать, а писать так, чтобы потом самому же не было стыдно и больно.