<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Chemelson</title><generator>teletype.in</generator><description><![CDATA[Chemelson]]></description><image><url>https://img4.teletype.in/files/7b/be/7bbeb9b6-1be1-4b5f-8c1b-d5f0c73e728a.png</url><title>Chemelson</title><link>https://teletype.in/@chemelson</link></image><link>https://teletype.in/@chemelson?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=chemelson</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/chemelson?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/chemelson?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Tue, 28 Apr 2026 06:31:04 GMT</pubDate><lastBuildDate>Tue, 28 Apr 2026 06:31:04 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@chemelson/UstdhSCAPjJ</guid><link>https://teletype.in/@chemelson/UstdhSCAPjJ?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=chemelson</link><comments>https://teletype.in/@chemelson/UstdhSCAPjJ?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=chemelson#comments</comments><dc:creator>chemelson</dc:creator><title>Эффективно изучаем новую технологию (с примером на Gradle)</title><pubDate>Sun, 05 May 2024 03:56:22 GMT</pubDate><category>Обучение</category><description><![CDATA[Всем привет.
Айтишникам (а в особенности нам, программистам) достаточно часто приходится изучать новые технологии. Однако времени мало , а материалов много. Хочу поделиться тем, как изучаю новое я. Для примера возьмем Gradle, так как знаю, что многим трудно разобраться в этом инструменте.]]></description><content:encoded><![CDATA[
  <p id="yJ1h">Всем привет.<br />Айтишникам (а в особенности нам, программистам) достаточно часто приходится изучать новые технологии. Однако времени мало , а материалов много. Хочу поделиться тем, как изучаю новое я. Для примера возьмем <a href="https://gradle.org/" target="_blank">Gradle</a>, так как знаю, что многим трудно разобраться в этом инструменте.</p>
  <ol id="4Bm3">
    <li id="izb6"><strong>Определи цель изучения<br /></strong>Важно понимать для чего ты изучаешь новую технологию: работа, удовольствие, просто так, подготовка выступления. От этого будет зависеть то, какие материалы и в каком объеме нужно изучать. В нашем случае цель - понять как работает Gradle для ежедневного применения в работе программиста, то есть писать билд-скрипты, курочить настройки и собственно создавать JVM-билды.</li>
    <li id="IdDd"><strong>Найди обзор технологии<br /></strong>Сперва стоит посмотреть в официальной документации, однако <a href="https://docs.gradle.org/current/userguide/userguide.html" target="_blank">в нашем случае </a>документация предельно лаконична. Так что просто заходите на YouTube и ищете видео по нужной тематике.</li>
    <li id="dbwa"><strong>Изучи базовые концепции<br /> </strong>Одна из первых задач при изучении нового - создать в голове правильную модель, понять структуру того, что изучаешь. Тогда будет проще дальше наслаивать более сложные вещи и разбираться с проблемами. <br />Давайте рассмотрим запуск билдов. В нашем случае заходим <a href="https://docs.gradle.org/current/userguide/getting_started_eng.html#gradle_intro" target="_blank">сюда</a> и изучаем Core Concepts. Важно изучить <a href="https://docs.gradle.org/current/userguide/img/gradle-basic-1.png" target="_blank">вот эту картинку</a>, так как дальше очень многое объясняется с ее помощью. Также можно выписать себе основные термины, например: Project, Build Script, Task, Action, Plugin, etc. Я часто это делаю в виде некоего произвольного mind map.</li>
    <li id="j2XA"><strong>Пройди туториалы</strong><br />После изучения базовых концепций крайне важно замарать руки о какой-то пример. Берем <a href="https://docs.gradle.org/current/userguide/getting_started_eng.html#getting_started" target="_blank">туториал</a> и методично проходим, благо он тут очень понятный и качественный. Когда проходите туториал, выписывайте себе новые термины и вопросы.</li>
    <li id="KDKv"><strong>Закопайся в документацию<br /></strong>После изучения базовых концепций и прохождения туториалов вы получите те самые 20% знаний и навыков, нужных для выполнения 80% работы. В целом, на этом можно и закончить и перейти к главному - к применению. Но если у вас остались вопросы - ныряем глубже. Например, у меня были вопросы по тому как работает <a href="https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/htmlsingle/" target="_blank">Spring Boot Gradle Plugin</a>. Поэтому сначала я разобрался с тем что <a href="https://docs.gradle.org/current/userguide/custom_plugins.html" target="_blank">вообще есть плагины</a> (а в случае с Gradle плагины дают львиную долю функциональности), поделал примеры, ну а потом  перешел к интересующему меня плагину.</li>
    <li id="eo4t"><strong>Найди книгу, курс, видео</strong><br />Если вам не особо подходит формат изучения документации или документация кривая, то тогда ищите литературу/курс/видео, благо всего этого много. Но в случае с Gradle этот фокус может не пройти, ибо книги древние, а этот инструмент имеет дурную славу частой смены API. Так что тут возвращаемся к предыдущему пункту. Да и прокачать навык работы с документацией не будет лишним.</li>
    <li id="IYJc"><strong>Ищи ответы на сайтах<br /></strong>Если вы ленивы или напоролись на какую-то экзотику (а скорее всего неправильно поняли, что вам нужно сделать), то добро пожаловать на StackOverflow и подобные ресурсы. Однако см. пункт выше насчет устаревания и смены API.</li>
    <li id="SY77"><strong>Используй изученное <br /></strong>Учиться чтобы учиться, конечно, интересно, однако без закрепления на практике ваши усилия пропадут даром. Ваша мантра: &quot;изучил - примени&quot;.<br />Давайте предположим, что в вашем Gradle-проекте нужно компилировать файлы <a href="https://protobuf.dev/" target="_blank">protobuf</a>. Вы находите несколько примеров в сети и видите там примерно такие старые и  страшные вещи: <br /><code>plugins {<br />    id &quot;com.google.protobuf&quot; version &quot;0.8.10&quot;<br />    id &quot;java&quot;<br />}<br /><br />group &#x27;ru.chemelson&#x27;<br />version &#x27;1.0-SNAPSHOT&#x27;<br /><br />repositories {<br />    mavenCentral()<br />}<br /><br />dependencies {<br />    testCompile group: &#x27;junit&#x27;, name: &#x27;junit&#x27;, version: &#x27;4.12&#x27;<br />    compile group: &#x27;com.google.protobuf&#x27;, name: &#x27;protobuf-java&#x27;, version: &#x27;3.10.0&#x27;<br /><br />}</code><br /><br /><code>protobuf {<br />    protoc {<br />        artifact = &#x27;com.google.protobuf:protoc:3.10.1&#x27;<br />    }<br />}</code><br /><br />Выглядит непонятно, особенно тревожит то, откуда взялся блок protobuf, однако все достаточно просто, давайте посмотрим что за плагин Gradle мы используем: <code>id &quot;com.google.protobuf&quot; version &quot;0.8.10&quot;. </code>Ищем этот плагин и находим<a href="https://github.com/google/protobuf-gradle-plugin" target="_blank"> Protobuf plugin for Gradle</a>. А далее читаем README и видим: <code>The plugin adds a protobuf block to the project. It provides all the configuration knobs. </code>Иными словами, плагин добавляет в DSL Gradle необходимые настройки, согласно которым будут выполняться задачи (Task) для компиляции ваших .proto файлов в Java классы. <br />Идем дальше. Ваш тимлид говорит вам, что нужно вынести папку с .proto файлами в корень проекта. Идем в README и видим, что у вас есть 2 пути: либо добавлять папку как новый sourceSet, либо объявлять как зависимость вида:<br /><br /><code>dependencies {<br />  protobuf files(&#x27;myprotos/&#x27;)  <br />}<br /><br /></code>Вот так просто.<br />Ну а самые внимательные найдут в проекте плагина <a href="https://github.com/google/protobuf-gradle-plugin/tree/master/examples" target="_blank">папочку с примерами</a> и разберутся с их помощью. </li>
  </ol>
  <p id="72jJ">С помощью такой нехитрой методологии можно достаточно быстро и эффективно изучать и применять новые технологии. <br /></p>

]]></content:encoded></item></channel></rss>