Обучение
May 5, 2024

Эффективно изучаем новую технологию (с примером на Gradle)

Всем привет.
Айтишникам (а в особенности нам, программистам) достаточно часто приходится изучать новые технологии. Однако времени мало , а материалов много. Хочу поделиться тем, как изучаю новое я. Для примера возьмем Gradle, так как знаю, что многим трудно разобраться в этом инструменте.

  1. Определи цель изучения Важно понимать для чего ты изучаешь новую технологию: работа, удовольствие, просто так, подготовка выступления. От этого будет зависеть то, какие материалы и в каком объеме нужно изучать. В нашем случае цель - понять как работает Gradle для ежедневного применения в работе программиста, то есть писать билд-скрипты, курочить настройки и собственно создавать JVM-билды.
  2. Найди обзор технологии Сперва стоит посмотреть в официальной документации, однако в нашем случае документация предельно лаконична. Так что просто заходите на YouTube и ищете видео по нужной тематике.
  3. Изучи базовые концепции Одна из первых задач при изучении нового - создать в голове правильную модель, понять структуру того, что изучаешь. Тогда будет проще дальше наслаивать более сложные вещи и разбираться с проблемами.
    Давайте рассмотрим запуск билдов. В нашем случае заходим сюда и изучаем Core Concepts. Важно изучить вот эту картинку, так как дальше очень многое объясняется с ее помощью. Также можно выписать себе основные термины, например: Project, Build Script, Task, Action, Plugin, etc. Я часто это делаю в виде некоего произвольного mind map.
  4. Пройди туториалы
    После изучения базовых концепций крайне важно замарать руки о какой-то пример. Берем туториал и методично проходим, благо он тут очень понятный и качественный. Когда проходите туториал, выписывайте себе новые термины и вопросы.
  5. Закопайся в документацию После изучения базовых концепций и прохождения туториалов вы получите те самые 20% знаний и навыков, нужных для выполнения 80% работы. В целом, на этом можно и закончить и перейти к главному - к применению. Но если у вас остались вопросы - ныряем глубже. Например, у меня были вопросы по тому как работает Spring Boot Gradle Plugin. Поэтому сначала я разобрался с тем что вообще есть плагины (а в случае с Gradle плагины дают львиную долю функциональности), поделал примеры, ну а потом перешел к интересующему меня плагину.
  6. Найди книгу, курс, видео
    Если вам не особо подходит формат изучения документации или документация кривая, то тогда ищите литературу/курс/видео, благо всего этого много. Но в случае с Gradle этот фокус может не пройти, ибо книги древние, а этот инструмент имеет дурную славу частой смены API. Так что тут возвращаемся к предыдущему пункту. Да и прокачать навык работы с документацией не будет лишним.
  7. Ищи ответы на сайтах Если вы ленивы или напоролись на какую-то экзотику (а скорее всего неправильно поняли, что вам нужно сделать), то добро пожаловать на StackOverflow и подобные ресурсы. Однако см. пункт выше насчет устаревания и смены API.
  8. Используй изученное Учиться чтобы учиться, конечно, интересно, однако без закрепления на практике ваши усилия пропадут даром. Ваша мантра: "изучил - примени".
    Давайте предположим, что в вашем Gradle-проекте нужно компилировать файлы protobuf. Вы находите несколько примеров в сети и видите там примерно такие старые и страшные вещи:
    plugins { id "com.google.protobuf" version "0.8.10" id "java" } group 'ru.chemelson' version '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' compile group: 'com.google.protobuf', name: 'protobuf-java', version: '3.10.0' }

    protobuf { protoc { artifact = 'com.google.protobuf:protoc:3.10.1' } }

    Выглядит непонятно, особенно тревожит то, откуда взялся блок protobuf, однако все достаточно просто, давайте посмотрим что за плагин Gradle мы используем: id "com.google.protobuf" version "0.8.10". Ищем этот плагин и находим Protobuf plugin for Gradle. А далее читаем README и видим: The plugin adds a protobuf block to the project. It provides all the configuration knobs. Иными словами, плагин добавляет в DSL Gradle необходимые настройки, согласно которым будут выполняться задачи (Task) для компиляции ваших .proto файлов в Java классы.
    Идем дальше. Ваш тимлид говорит вам, что нужно вынести папку с .proto файлами в корень проекта. Идем в README и видим, что у вас есть 2 пути: либо добавлять папку как новый sourceSet, либо объявлять как зависимость вида:

    dependencies { protobuf files('myprotos/') } Вот так просто.
    Ну а самые внимательные найдут в проекте плагина папочку с примерами и разберутся с их помощью.

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