<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Chemelson</title><author><name>Chemelson</name></author><id>https://teletype.in/atom/chemelson</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/chemelson?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@chemelson?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=chemelson"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/chemelson?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-28T06:31:07.188Z</updated><entry><id>chemelson:UstdhSCAPjJ</id><link rel="alternate" type="text/html" href="https://teletype.in/@chemelson/UstdhSCAPjJ?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=chemelson"></link><title>Эффективно изучаем новую технологию (с примером на Gradle)</title><published>2024-05-05T03:56:22.240Z</published><updated>2024-05-05T03:56:22.240Z</updated><category term="obuchenie" label="Обучение"></category><summary type="html">Всем привет.
Айтишникам (а в особенности нам, программистам) достаточно часто приходится изучать новые технологии. Однако времени мало , а материалов много. Хочу поделиться тем, как изучаю новое я. Для примера возьмем Gradle, так как знаю, что многим трудно разобраться в этом инструменте.</summary><content type="html">
  &lt;p id=&quot;yJ1h&quot;&gt;Всем привет.&lt;br /&gt;Айтишникам (а в особенности нам, программистам) достаточно часто приходится изучать новые технологии. Однако времени мало , а материалов много. Хочу поделиться тем, как изучаю новое я. Для примера возьмем &lt;a href=&quot;https://gradle.org/&quot; target=&quot;_blank&quot;&gt;Gradle&lt;/a&gt;, так как знаю, что многим трудно разобраться в этом инструменте.&lt;/p&gt;
  &lt;ol id=&quot;4Bm3&quot;&gt;
    &lt;li id=&quot;izb6&quot;&gt;&lt;strong&gt;Определи цель изучения&lt;br /&gt;&lt;/strong&gt;Важно понимать для чего ты изучаешь новую технологию: работа, удовольствие, просто так, подготовка выступления. От этого будет зависеть то, какие материалы и в каком объеме нужно изучать. В нашем случае цель - понять как работает Gradle для ежедневного применения в работе программиста, то есть писать билд-скрипты, курочить настройки и собственно создавать JVM-билды.&lt;/li&gt;
    &lt;li id=&quot;IdDd&quot;&gt;&lt;strong&gt;Найди обзор технологии&lt;br /&gt;&lt;/strong&gt;Сперва стоит посмотреть в официальной документации, однако &lt;a href=&quot;https://docs.gradle.org/current/userguide/userguide.html&quot; target=&quot;_blank&quot;&gt;в нашем случае &lt;/a&gt;документация предельно лаконична. Так что просто заходите на YouTube и ищете видео по нужной тематике.&lt;/li&gt;
    &lt;li id=&quot;dbwa&quot;&gt;&lt;strong&gt;Изучи базовые концепции&lt;br /&gt; &lt;/strong&gt;Одна из первых задач при изучении нового - создать в голове правильную модель, понять структуру того, что изучаешь. Тогда будет проще дальше наслаивать более сложные вещи и разбираться с проблемами. &lt;br /&gt;Давайте рассмотрим запуск билдов. В нашем случае заходим &lt;a href=&quot;https://docs.gradle.org/current/userguide/getting_started_eng.html#gradle_intro&quot; target=&quot;_blank&quot;&gt;сюда&lt;/a&gt; и изучаем Core Concepts. Важно изучить &lt;a href=&quot;https://docs.gradle.org/current/userguide/img/gradle-basic-1.png&quot; target=&quot;_blank&quot;&gt;вот эту картинку&lt;/a&gt;, так как дальше очень многое объясняется с ее помощью. Также можно выписать себе основные термины, например: Project, Build Script, Task, Action, Plugin, etc. Я часто это делаю в виде некоего произвольного mind map.&lt;/li&gt;
    &lt;li id=&quot;j2XA&quot;&gt;&lt;strong&gt;Пройди туториалы&lt;/strong&gt;&lt;br /&gt;После изучения базовых концепций крайне важно замарать руки о какой-то пример. Берем &lt;a href=&quot;https://docs.gradle.org/current/userguide/getting_started_eng.html#getting_started&quot; target=&quot;_blank&quot;&gt;туториал&lt;/a&gt; и методично проходим, благо он тут очень понятный и качественный. Когда проходите туториал, выписывайте себе новые термины и вопросы.&lt;/li&gt;
    &lt;li id=&quot;KDKv&quot;&gt;&lt;strong&gt;Закопайся в документацию&lt;br /&gt;&lt;/strong&gt;После изучения базовых концепций и прохождения туториалов вы получите те самые 20% знаний и навыков, нужных для выполнения 80% работы. В целом, на этом можно и закончить и перейти к главному - к применению. Но если у вас остались вопросы - ныряем глубже. Например, у меня были вопросы по тому как работает &lt;a href=&quot;https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/htmlsingle/&quot; target=&quot;_blank&quot;&gt;Spring Boot Gradle Plugin&lt;/a&gt;. Поэтому сначала я разобрался с тем что &lt;a href=&quot;https://docs.gradle.org/current/userguide/custom_plugins.html&quot; target=&quot;_blank&quot;&gt;вообще есть плагины&lt;/a&gt; (а в случае с Gradle плагины дают львиную долю функциональности), поделал примеры, ну а потом  перешел к интересующему меня плагину.&lt;/li&gt;
    &lt;li id=&quot;eo4t&quot;&gt;&lt;strong&gt;Найди книгу, курс, видео&lt;/strong&gt;&lt;br /&gt;Если вам не особо подходит формат изучения документации или документация кривая, то тогда ищите литературу/курс/видео, благо всего этого много. Но в случае с Gradle этот фокус может не пройти, ибо книги древние, а этот инструмент имеет дурную славу частой смены API. Так что тут возвращаемся к предыдущему пункту. Да и прокачать навык работы с документацией не будет лишним.&lt;/li&gt;
    &lt;li id=&quot;IYJc&quot;&gt;&lt;strong&gt;Ищи ответы на сайтах&lt;br /&gt;&lt;/strong&gt;Если вы ленивы или напоролись на какую-то экзотику (а скорее всего неправильно поняли, что вам нужно сделать), то добро пожаловать на StackOverflow и подобные ресурсы. Однако см. пункт выше насчет устаревания и смены API.&lt;/li&gt;
    &lt;li id=&quot;SY77&quot;&gt;&lt;strong&gt;Используй изученное &lt;br /&gt;&lt;/strong&gt;Учиться чтобы учиться, конечно, интересно, однако без закрепления на практике ваши усилия пропадут даром. Ваша мантра: &amp;quot;изучил - примени&amp;quot;.&lt;br /&gt;Давайте предположим, что в вашем Gradle-проекте нужно компилировать файлы &lt;a href=&quot;https://protobuf.dev/&quot; target=&quot;_blank&quot;&gt;protobuf&lt;/a&gt;. Вы находите несколько примеров в сети и видите там примерно такие старые и  страшные вещи: &lt;br /&gt;&lt;code&gt;plugins {&lt;br /&gt;    id &amp;quot;com.google.protobuf&amp;quot; version &amp;quot;0.8.10&amp;quot;&lt;br /&gt;    id &amp;quot;java&amp;quot;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;group &amp;#x27;ru.chemelson&amp;#x27;&lt;br /&gt;version &amp;#x27;1.0-SNAPSHOT&amp;#x27;&lt;br /&gt;&lt;br /&gt;repositories {&lt;br /&gt;    mavenCentral()&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;dependencies {&lt;br /&gt;    testCompile group: &amp;#x27;junit&amp;#x27;, name: &amp;#x27;junit&amp;#x27;, version: &amp;#x27;4.12&amp;#x27;&lt;br /&gt;    compile group: &amp;#x27;com.google.protobuf&amp;#x27;, name: &amp;#x27;protobuf-java&amp;#x27;, version: &amp;#x27;3.10.0&amp;#x27;&lt;br /&gt;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;protobuf {&lt;br /&gt;    protoc {&lt;br /&gt;        artifact = &amp;#x27;com.google.protobuf:protoc:3.10.1&amp;#x27;&lt;br /&gt;    }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Выглядит непонятно, особенно тревожит то, откуда взялся блок protobuf, однако все достаточно просто, давайте посмотрим что за плагин Gradle мы используем: &lt;code&gt;id &amp;quot;com.google.protobuf&amp;quot; version &amp;quot;0.8.10&amp;quot;. &lt;/code&gt;Ищем этот плагин и находим&lt;a href=&quot;https://github.com/google/protobuf-gradle-plugin&quot; target=&quot;_blank&quot;&gt; Protobuf plugin for Gradle&lt;/a&gt;. А далее читаем README и видим: &lt;code&gt;The plugin adds a protobuf block to the project. It provides all the configuration knobs. &lt;/code&gt;Иными словами, плагин добавляет в DSL Gradle необходимые настройки, согласно которым будут выполняться задачи (Task) для компиляции ваших .proto файлов в Java классы. &lt;br /&gt;Идем дальше. Ваш тимлид говорит вам, что нужно вынести папку с .proto файлами в корень проекта. Идем в README и видим, что у вас есть 2 пути: либо добавлять папку как новый sourceSet, либо объявлять как зависимость вида:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;dependencies {&lt;br /&gt;  protobuf files(&amp;#x27;myprotos/&amp;#x27;)  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;Вот так просто.&lt;br /&gt;Ну а самые внимательные найдут в проекте плагина &lt;a href=&quot;https://github.com/google/protobuf-gradle-plugin/tree/master/examples&quot; target=&quot;_blank&quot;&gt;папочку с примерами&lt;/a&gt; и разберутся с их помощью. &lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;72jJ&quot;&gt;С помощью такой нехитрой методологии можно достаточно быстро и эффективно изучать и применять новые технологии. &lt;br /&gt;&lt;/p&gt;

</content></entry></feed>