Как изучаешь новые технологии?

Ответ

Мой подход к изучению новых технологий, особенно в контексте C++ и смежных областей, структурирован и практикоориентирован.

1. Фундамент и теория:

  • Документация и стандарты: Изучаю cppreference.com, официальные предложения (WG21 papers) для новых возможностей C++ (например, PFR для рефлексии).
  • Книги и статьи: Читаю книги авторитетных авторов (Скотт Мейерс, Николай Йосуттис) и технические блоги (Bartek's Coding Blog, Microsoft C++ Team Blog).

2. Практическое погружение:

  • Эксперименты с кодом: Создаю минимальные примеры для проверки концепции. Например, при изучении корутин C++20:
    #include <coroutine>
    #include <iostream>
    generator<int> range(int from, int to) {
    for (int i = from; i < to; ++i) {
        co_yield i;
    }
    }
    int main() {
    for (int v : range(0, 5)) {
        std::cout << v << ' '; // 0 1 2 3 4
    }
    }
  • Пет-проекты: Реализую что-то конкретное, например, простой HTTP-сервер с использованием Boost.Asio для понимания асинхронного ввода-вывода.
  • Изучение open-source: Анализирую реализации в библиотеках уровня Boost или крупных проектах вроде Chromium, чтобы понять best practices и edge cases.

3. Консолидация знаний:

  • Решение задач: Использую платформы вроде LeetCode, но с фокусом на новые фичи языка (алгоритмы с использованием ranges C++20).
  • Написание и ревью кода: Пробую применить изученное в рабочем коде или в pull request к open-source проектам.

Для таких технологий, как новые инструменты сборки (CMake, Conan) или системы статического анализа (Clang-Tidy), я сразу пробую интегрировать их в существующий проект, чтобы оценить реальную пользу.

Ответ 18+ 🔞

Слушай, у меня тут целая система, как я новые штуки в C++ осваиваю. Не просто так, с бухты-барахты, а чтоб намертво засело. Иначе какой смысл, ёпта? Будет тебе знание — хуй с горы, на ветер.

Первое — фундамент, без этого нихуя.

  • Доки и стандарты: Я сразу лезу на cppreference.com, это святое. И эти их бумажки, предложения WG21, где они рефлексию или ещё какую пиздопроебибну обсуждают. Надо понимать, откуда ноги растут, а не просто синтаксис тырить.
  • Книги и блоги: Читаю Мейерса, Йосуттиса — классика, маст хэв. Плюс слежу за техническими блогами, где люди реально в теме. Иначе можно в манду с ушами превратиться, повторяя устаревшие паттерны.

Второе — практика, а то теория без неё — ноль ебать доверия.

  • Код-эксперименты: Беру новую фичу, ту же корутину из C++20, и начинаю впендюривать её в минимальный пример. Вот смотри, чтобы просто понять, как оно дышит:
#include <coroutine>
#include <iostream>
generator<int> range(int from, int to) {
    for (int i = from; i < to; ++i) {
        co_yield i;
    }
}
int main() {
    for (int v : range(0, 5)) {
        std::cout << v << ' '; // 0 1 2 3 4
    }
}

Скомпилил, покрутил, посмотрел, что под капотом — сразу яснее становится. Иначе это просто магия какая-то, хитрая жопа.

  • Пет-проекты: Ну тут всё просто. Захотел понять асинхронщину — сел, написал на Boost.Asio простенький HTTP-сервак. Пока сам не упрёшься лбом в проблему, не поймёшь ни хуя себе.
  • Чужой код: Открываю Boost или какой-нибудь Chromium и смотрю, как умные люди это используют. Там сразу видно все подводные камни и лучшие практики. Учишься на чужих косяках, а не на своих.

Третье — закрепление, чтоб не выветрилось.

  • Задачки: LeetCode и подобное, но с прицелом. Не просто алгоритм написать, а с использованием новых ranges из C++20. Чтобы мозг привыкал думать в новой парадигме.
  • Настоящий код: Пробую впихнуть изученное в рабочий проект или хотя бы в пул-реквест к опенсорсу. Пока тебе в код-ревью не напишут «чё за хуйню ты тут нагородил, чувак», не осознаешь всех граней.

А с инструментами вроде нового CMake или Clang-Tidy — тут вообще да похуй на долгую теорию. Беру и сразу пытаюсь встроить в текущий проект. Либо заработает и принесёт пользу, либо накроется медным тазом, но я быстро пойму почему. Практика, блядь, она всё расставляет по местам.