HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>13 апр 2023</li>
2 <ul><li>13 апр 2023</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Владимир Плизга - о программировании на советском калькуляторе, любительском спорте и графе микросервисов.</p>
4 </ul><p>Владимир Плизга - о программировании на советском калькуляторе, любительском спорте и графе микросервисов.</p>
5 <p>Иллюстрация: Ostancov Vladislav / Shutterstock / wirestock / freepik / rawpixel / Freepik / Дима Руденок для Skillbox Media</p>
5 <p>Иллюстрация: Ostancov Vladislav / Shutterstock / wirestock / freepik / rawpixel / Freepik / Дима Руденок для Skillbox Media</p>
6 <p>Журналист, редактор. Фанат виртуальности во всех её видах - потому о ней и пишет.</p>
6 <p>Журналист, редактор. Фанат виртуальности во всех её видах - потому о ней и пишет.</p>
7 <p>Ведущий бэкенд-инженер в Tibbo Systems. Занимается развитием AggreGate - интеграционной low-code-платформы для IoT. До этого 10 лет работал в финтехе над серверной частью интернет-банков и сопутствующих сервисов. Автор<a>нескольких open-source-инструментов</a>для тестировщиков и разработчиков. Докладчик конференций JUG.ru, CodeFest, IT Nights и других, автор статей по различным темам вокруг Java. Член программного комитета сибирской Java‑конференции SnowOne.<a></a></p>
7 <p>Ведущий бэкенд-инженер в Tibbo Systems. Занимается развитием AggreGate - интеграционной low-code-платформы для IoT. До этого 10 лет работал в финтехе над серверной частью интернет-банков и сопутствующих сервисов. Автор<a>нескольких open-source-инструментов</a>для тестировщиков и разработчиков. Докладчик конференций JUG.ru, CodeFest, IT Nights и других, автор статей по различным темам вокруг Java. Член программного комитета сибирской Java‑конференции SnowOne.<a></a></p>
8 <a></a><ul><li><a>Почему Java?</a></li>
8 <a></a><ul><li><a>Почему Java?</a></li>
9 <li><a>Чем IT похожи на спорт</a></li>
9 <li><a>Чем IT похожи на спорт</a></li>
10 <li><a>Чего нам не хватает в столичных конференциях и почему мы решили сделать собственную</a></li>
10 <li><a>Чего нам не хватает в столичных конференциях и почему мы решили сделать собственную</a></li>
11 <li><a>Чем IT в финтехе отличаются от других</a></li>
11 <li><a>Чем IT в финтехе отличаются от других</a></li>
12 <li><a>Как поддерживать высокое качество кода</a></li>
12 <li><a>Как поддерживать высокое качество кода</a></li>
13 <li><a>Зачем нужны технические спринты</a></li>
13 <li><a>Зачем нужны технические спринты</a></li>
14 <li><a>Как администрировать микросервисы</a></li>
14 <li><a>Как администрировать микросервисы</a></li>
15 <li><a>Как будет развиваться Java</a></li>
15 <li><a>Как будет развиваться Java</a></li>
16 <li><a>Что круче - Java, Kotlin, Scala или Groovy?</a></li>
16 <li><a>Что круче - Java, Kotlin, Scala или Groovy?</a></li>
17 </ul><p>В IT я пришёл, наверное, классе в пятом: нашёл в закромах, оставшихся от дяди, старинный советский калькулятор Б3-34. В нём можно было программировать на языке, представляющем некое подобие ассемблера. Какие-нибудь примитивные программки для упрощения рутинных бухгалтерских задач или, например, для подсчёта кубического корня.</p>
17 </ul><p>В IT я пришёл, наверное, классе в пятом: нашёл в закромах, оставшихся от дяди, старинный советский калькулятор Б3-34. В нём можно было программировать на языке, представляющем некое подобие ассемблера. Какие-нибудь примитивные программки для упрощения рутинных бухгалтерских задач или, например, для подсчёта кубического корня.</p>
18 <p>Это пересказ выпуска подкаста "Люди и код" с Владимиром Плизгой. Послушать его можно<a>здесь</a>.</p>
18 <p>Это пересказ выпуска подкаста "Люди и код" с Владимиром Плизгой. Послушать его можно<a>здесь</a>.</p>
19 <p>Потом у меня появился 486-й компьютер, я переполз на Turbo Basic, позже - на Pascal, ну и пошло-поехало. Приход в Java не был каким-то прямо осознанным. Мы, конечно, проходили её в университете, но тогда она не произвела на меня особого впечатления. А когда впервые всерьёз задумался о выборе работы - понял, что это востребованная область. Моих знаний на тот момент едва хватало, чтобы заступить на позицию джуниора. Тем не менее я смог пополнить команду молодых специалистов ЦФТ и начал её укреплять. Возможно, мой опыт пригодится кому-то ещё.</p>
19 <p>Потом у меня появился 486-й компьютер, я переполз на Turbo Basic, позже - на Pascal, ну и пошло-поехало. Приход в Java не был каким-то прямо осознанным. Мы, конечно, проходили её в университете, но тогда она не произвела на меня особого впечатления. А когда впервые всерьёз задумался о выборе работы - понял, что это востребованная область. Моих знаний на тот момент едва хватало, чтобы заступить на позицию джуниора. Тем не менее я смог пополнить команду молодых специалистов ЦФТ и начал её укреплять. Возможно, мой опыт пригодится кому-то ещё.</p>
20 <p>В моей нынешней компании Java используется для интеграции и обработки данных с различных устройств.</p>
20 <p>В моей нынешней компании Java используется для интеграции и обработки данных с различных устройств.</p>
21 <p>Java хороша своей кросс-платформенностью. Ту же платформу AggreGate, над которой я сейчас работаю, приходится разворачивать в самых разных окружениях, начиная от полевых устройств, которые работают с конечными датчиками или исполнительными устройствами, и заканчивая полноценными хабами в дата-центрах, собирающими данные от промежуточных коллекторов. Здесь нужны надёжные, стабильные, предсказуемые рабочие лошадки, работающие в разных окружениях, под разными нагрузками, в разных конфигурациях - причём как в аппаратных, так и в программных.</p>
21 <p>Java хороша своей кросс-платформенностью. Ту же платформу AggreGate, над которой я сейчас работаю, приходится разворачивать в самых разных окружениях, начиная от полевых устройств, которые работают с конечными датчиками или исполнительными устройствами, и заканчивая полноценными хабами в дата-центрах, собирающими данные от промежуточных коллекторов. Здесь нужны надёжные, стабильные, предсказуемые рабочие лошадки, работающие в разных окружениях, под разными нагрузками, в разных конфигурациях - причём как в аппаратных, так и в программных.</p>
22 <p>Для подобных задач, возможно, подошёл бы и другой язык JVM-стека, но была выбрана именно Java, в основном за наличие большой, надёжной и динамичной "экосистемы" инструментов вокруг неё.</p>
22 <p>Для подобных задач, возможно, подошёл бы и другой язык JVM-стека, но была выбрана именно Java, в основном за наличие большой, надёжной и динамичной "экосистемы" инструментов вокруг неё.</p>
23 <em>Кадр: фильм "Чудо" / Walt Disney Studios Motion Pictures</em><p>Будучи и программистом, и спортсменом-любителем, я заметил между этими активностями нечто общее. Зайдём издалека. Полагаю, большинство разработчиков - не просто исполнители: "Мне дали задачку, я её пилю с девяти до шести, потом встаю, ухожу и забываю".</p>
23 <em>Кадр: фильм "Чудо" / Walt Disney Studios Motion Pictures</em><p>Будучи и программистом, и спортсменом-любителем, я заметил между этими активностями нечто общее. Зайдём издалека. Полагаю, большинство разработчиков - не просто исполнители: "Мне дали задачку, я её пилю с девяти до шести, потом встаю, ухожу и забываю".</p>
24 <p>Если ты испытываешь хоть какую-то страсть к своей профессии, ты наверняка понимаешь, что бывают разные уровни вовлечённости. Есть рутина, а есть вещи, от которых, что называется, прёт. Тебе нравится это делать, открывать что-то новое, выходить за рамки поставленной задачи.</p>
24 <p>Если ты испытываешь хоть какую-то страсть к своей профессии, ты наверняка понимаешь, что бывают разные уровни вовлечённости. Есть рутина, а есть вещи, от которых, что называется, прёт. Тебе нравится это делать, открывать что-то новое, выходить за рамки поставленной задачи.</p>
25 <p>Разумеется, накопление подобных скиллов постепенно приводит к мысли, что знаниями нужно делиться - причём как с небольшой группой товарищей или коллег на митапе, так и с огромной аудиторией на конференции.</p>
25 <p>Разумеется, накопление подобных скиллов постепенно приводит к мысли, что знаниями нужно делиться - причём как с небольшой группой товарищей или коллег на митапе, так и с огромной аудиторией на конференции.</p>
26 <p>Со временем вырабатываются три совершенно разных режима работы. Первый - когда ты просто накапливаешь опыт: решаешь повседневные задачи, делаешь то же самое, что и большинство твоих коллег. Второй - ты осознаёшь, что твои знания и навыки могут быть полезны другим людям, и начинаешь агрегировать этот опыт, чтобы передать другим. Это требует иных навыков, подходов или даже мышления. Наконец, третий -кульминация процесса, когда ты пишешь статью, где-то выступаешь или как-то ещё участвуешь в публичной деятельности, делясь своим опытом с "братьями по оружию".</p>
26 <p>Со временем вырабатываются три совершенно разных режима работы. Первый - когда ты просто накапливаешь опыт: решаешь повседневные задачи, делаешь то же самое, что и большинство твоих коллег. Второй - ты осознаёшь, что твои знания и навыки могут быть полезны другим людям, и начинаешь агрегировать этот опыт, чтобы передать другим. Это требует иных навыков, подходов или даже мышления. Наконец, третий -кульминация процесса, когда ты пишешь статью, где-то выступаешь или как-то ещё участвуешь в публичной деятельности, делясь своим опытом с "братьями по оружию".</p>
27 <p>Это очень похоже на то, чем занимаются спортсмены-любители, когда они не просто тренируются, но и ставят перед собой цели в виде каких-то конкретных личных рекордов и соревнований.</p>
27 <p>Это очень похоже на то, чем занимаются спортсмены-любители, когда они не просто тренируются, но и ставят перед собой цели в виде каких-то конкретных личных рекордов и соревнований.</p>
28 <p>Мне наиболее близок пример циклических видов спорта: бег, плавание, велосипед, лыжные гонки и тому подобное. После череды тренировок наступает понимание, что прогресс есть, а потом - что его можно "опубликовать", то есть зафиксировать в виде рекорда или соревнования. Это во многом напоминает те же три режима работы, только в спорте.</p>
28 <p>Мне наиболее близок пример циклических видов спорта: бег, плавание, велосипед, лыжные гонки и тому подобное. После череды тренировок наступает понимание, что прогресс есть, а потом - что его можно "опубликовать", то есть зафиксировать в виде рекорда или соревнования. Это во многом напоминает те же три режима работы, только в спорте.</p>
29 <p>Любая конференция - это в первую очередь возможность погрузиться на какое-то время в атмосферу профессиональной движухи с максимальной концентрацией и отдачей.</p>
29 <p>Любая конференция - это в первую очередь возможность погрузиться на какое-то время в атмосферу профессиональной движухи с максимальной концентрацией и отдачей.</p>
30 <p>Мы начинали делать<a>SnowOne</a>в период, когда единственным серьёзным форматом был офлайн. Очень важно было дать людям возможность сменить обстановку, зайти в конференцию полностью. В Новосибирске ничего подобного для Java-разработчиков не было.</p>
30 <p>Мы начинали делать<a>SnowOne</a>в период, когда единственным серьёзным форматом был офлайн. Очень важно было дать людям возможность сменить обстановку, зайти в конференцию полностью. В Новосибирске ничего подобного для Java-разработчиков не было.</p>
31 <p>Первой попыткой была посвящённая JVM секция в составе IT-фестиваля<a>CodeFest</a>, которую по части программы возглавлял Иван Углянский. Тогда удалось пригласить известных спикеров, в целом всё получилось, но мы были несколько сжаты тем форматом, который нам предлагали.</p>
31 <p>Первой попыткой была посвящённая JVM секция в составе IT-фестиваля<a>CodeFest</a>, которую по части программы возглавлял Иван Углянский. Тогда удалось пригласить известных спикеров, в целом всё получилось, но мы были несколько сжаты тем форматом, который нам предлагали.</p>
32 <p>На следующий год, поняв, что потребность в хардкорных конференциях по-прежнему сохраняется, мы решились провести собственную. Назвали её SnowOne - по аналогии с <a>JavaOne</a>, проходившей прежде под эгидой Oracle. Мы успели аккурат перед началом ковидных ограничений. Для многих из наших спикеров это была последняя офлайн-конференция перед грядущим перерывом на полтора-два года.</p>
32 <p>На следующий год, поняв, что потребность в хардкорных конференциях по-прежнему сохраняется, мы решились провести собственную. Назвали её SnowOne - по аналогии с <a>JavaOne</a>, проходившей прежде под эгидой Oracle. Мы успели аккурат перед началом ковидных ограничений. Для многих из наших спикеров это была последняя офлайн-конференция перед грядущим перерывом на полтора-два года.</p>
33 <p>Фишка SnowOne в том, что программный комитет состоит исключительно из практикующих разработчиков. Мы приглашаем только тех спикеров, на чьи выступления пошли бы сами.</p>
33 <p>Фишка SnowOne в том, что программный комитет состоит исключительно из практикующих разработчиков. Мы приглашаем только тех спикеров, на чьи выступления пошли бы сами.</p>
34 <em>Фото: Simon Law / Flickr</em><p>В финтехе, по сравнению с другими отраслями, во много раз больше внимания уделяют безопасности.</p>
34 <em>Фото: Simon Law / Flickr</em><p>В финтехе, по сравнению с другими отраслями, во много раз больше внимания уделяют безопасности.</p>
35 <p>У типичного банка огромное число интеграций со сторонними сервисами. Одни обеспечивают его поддержкой платежей, другие - контролем и антифрод-мониторингом, третьи - обменом какими-нибудь реестрами. И всё это должно быть надёжно защищено.</p>
35 <p>У типичного банка огромное число интеграций со сторонними сервисами. Одни обеспечивают его поддержкой платежей, другие - контролем и антифрод-мониторингом, третьи - обменом какими-нибудь реестрами. И всё это должно быть надёжно защищено.</p>
36 <em>Кадр: фильм "Сноуден" / Endgame Entertainment</em><p>Второй, не менее важный, аспект - производительность. Финтех в первую очередь ассоциируется с трейдинговыми платформами, где сто тысяч миллионов транзакций в секунду и всё летает. Я работал над предоплаченными картами - в более спокойном секторе финтеха, где нагрузки были ниже, но требования к удобству - очень высоки. Тысячи людей приходят с деньгами и рассчитывают, что этими деньгами они смогут легко распоряжаться - видеть их, переводить, оплачивать всевозможные услуги. При этом вход в приложение должен быть максимально быстрым, чтобы пользователь мог открывать приложение или сайт на одном дыхании. Загрузка выписок и истории операций - другой огромный головняк для бэкенда, но пользователя, естественно, это волновать не должно.</p>
36 <em>Кадр: фильм "Сноуден" / Endgame Entertainment</em><p>Второй, не менее важный, аспект - производительность. Финтех в первую очередь ассоциируется с трейдинговыми платформами, где сто тысяч миллионов транзакций в секунду и всё летает. Я работал над предоплаченными картами - в более спокойном секторе финтеха, где нагрузки были ниже, но требования к удобству - очень высоки. Тысячи людей приходят с деньгами и рассчитывают, что этими деньгами они смогут легко распоряжаться - видеть их, переводить, оплачивать всевозможные услуги. При этом вход в приложение должен быть максимально быстрым, чтобы пользователь мог открывать приложение или сайт на одном дыхании. Загрузка выписок и истории операций - другой огромный головняк для бэкенда, но пользователя, естественно, это волновать не должно.</p>
37 <p>В этом секторе пользователь априори не будет терпеть. Если ему что-то не нравится, он просто уйдёт. Поэтому приходится бороться, отстраивать какие-то мелочи, шлифовать фичи. Это проявляется не только во внешнем виде, дизайне или продуманности поведения, но и во многих внутренних компонентах.</p>
37 <p>В этом секторе пользователь априори не будет терпеть. Если ему что-то не нравится, он просто уйдёт. Поэтому приходится бороться, отстраивать какие-то мелочи, шлифовать фичи. Это проявляется не только во внешнем виде, дизайне или продуманности поведения, но и во многих внутренних компонентах.</p>
38 <p>В IoT все эти аспекты тоже важны, но приоритеты зачастую другие. Здесь важно обеспечить максимальную совместимость, покрытие всевозможных устройств, поддержку драйверов и их интеграцию с другими системами - ERP, MES и так далее.</p>
38 <p>В IoT все эти аспекты тоже важны, но приоритеты зачастую другие. Здесь важно обеспечить максимальную совместимость, покрытие всевозможных устройств, поддержку драйверов и их интеграцию с другими системами - ERP, MES и так далее.</p>
39 <p>Я бы, наверное, начал с покрытия модульными тестами. Чтобы сделать его "честным", приходится прибегать к каким-то более изощрённым инструментам вроде мутационных тестов.</p>
39 <p>Я бы, наверное, начал с покрытия модульными тестами. Чтобы сделать его "честным", приходится прибегать к каким-то более изощрённым инструментам вроде мутационных тестов.</p>
40 <p>В прошлой команде мы постепенно пришли к этому инструменту, и он действительно указал нам на некоторые места, в которых мы сами себя обманывали. Несмотря на высокие показатели Java Code Coverage, по факту проверки в тестах были фиктивными.</p>
40 <p>В прошлой команде мы постепенно пришли к этому инструменту, и он действительно указал нам на некоторые места, в которых мы сами себя обманывали. Несмотря на высокие показатели Java Code Coverage, по факту проверки в тестах были фиктивными.</p>
41 <p>Отдельная песня - статический анализ. Какими бы навороченными и опытными мы ни были, мы всё равно ошибаемся и на код-ревью надеяться не стоит. Поэтому я использовал<a>SonarQube</a>как один из этапов выпуска каждой фичи.</p>
41 <p>Отдельная песня - статический анализ. Какими бы навороченными и опытными мы ни были, мы всё равно ошибаемся и на код-ревью надеяться не стоит. Поэтому я использовал<a>SonarQube</a>как один из этапов выпуска каждой фичи.</p>
42 <p>Не менее важно и бороться с техническим долгом. В прошлой команде мы проводили периодические встречи, на которых обсуждали те задачи, с которыми к нам не придёт бизнес, - то, что мы хотели бы сами привнести в продукт. Конечно, без поддержки со стороны бизнеса у нас бы ничего не получилось, но здесь его роль заключалась только в согласовании. В результате постоянных дебатов и дискуссий мы всё-таки могли вкраплять эти задачи в бэклог - в основной и производственный - и делать их, за счёт этого поддерживая качество продукта на должном уровне.</p>
42 <p>Не менее важно и бороться с техническим долгом. В прошлой команде мы проводили периодические встречи, на которых обсуждали те задачи, с которыми к нам не придёт бизнес, - то, что мы хотели бы сами привнести в продукт. Конечно, без поддержки со стороны бизнеса у нас бы ничего не получилось, но здесь его роль заключалась только в согласовании. В результате постоянных дебатов и дискуссий мы всё-таки могли вкраплять эти задачи в бэклог - в основной и производственный - и делать их, за счёт этого поддерживая качество продукта на должном уровне.</p>
43 <p>Бывают крупные задачи - например, обновление Java сразу на несколько версий. Такие задачи между делом не втащишь: "продать" их заодно с другими бизнесовыми задачами в двухнедельный спринт - такое себе мероприятие.</p>
43 <p>Бывают крупные задачи - например, обновление Java сразу на несколько версий. Такие задачи между делом не втащишь: "продать" их заодно с другими бизнесовыми задачами в двухнедельный спринт - такое себе мероприятие.</p>
44 <p>Мы проводили для этого технические спринты. Они устраивались в конце года, после того как объявлялся код-фриз и релиз-фриз. Пользуясь этой методикой, мы реализовали несколько больших фич, которые бы иначе никак не создали. Например, те же мутационные тесты или инструменты визуализации в микросервисной архитектуре.</p>
44 <p>Мы проводили для этого технические спринты. Они устраивались в конце года, после того как объявлялся код-фриз и релиз-фриз. Пользуясь этой методикой, мы реализовали несколько больших фич, которые бы иначе никак не создали. Например, те же мутационные тесты или инструменты визуализации в микросервисной архитектуре.</p>
45 <p>Такую практику я бы многим порекомендовал. По возможности, конечно, хорошо бы согласовать её с бизнесом. Может быть, это будет непросто, но необходимо, потому что без неё, скорее всего, технический долг победить не удастся.</p>
45 <p>Такую практику я бы многим порекомендовал. По возможности, конечно, хорошо бы согласовать её с бизнесом. Может быть, это будет непросто, но необходимо, потому что без неё, скорее всего, технический долг победить не удастся.</p>
46 <p>Мы в своё время начали с первого приходящего в голову решения - с картинки. Это было нормальное решение - но только до тех пор, пока у нас не стало порядка 15 микросервисов и картинка почему-то перестала обновляться.</p>
46 <p>Мы в своё время начали с первого приходящего в голову решения - с картинки. Это было нормальное решение - но только до тех пор, пока у нас не стало порядка 15 микросервисов и картинка почему-то перестала обновляться.</p>
47 <p>Сначала мы думали, что всё дело в нашей лени. А потом поняли, что, во-первых, её объективно стало тяжело обновлять, а во-вторых, она стала очень сложной и для тех, кто на неё смотрит. Требовалось другое решение.</p>
47 <p>Сначала мы думали, что всё дело в нашей лени. А потом поняли, что, во-первых, её объективно стало тяжело обновлять, а во-вторых, она стала очень сложной и для тех, кто на неё смотрит. Требовалось другое решение.</p>
48 <p>Покопавшись, мы остановились на <a>Neo4j</a>. Переложили всё многообразие микросервисов и взаимодействий между ними, которое у нас было на тот момент, в виде запросов на языке Cypher в Neo4j и сохранили в саму базу данных. А встроенный визуализатор в Neo4j Browser стали использовать как универсальный справочник.</p>
48 <p>Покопавшись, мы остановились на <a>Neo4j</a>. Переложили всё многообразие микросервисов и взаимодействий между ними, которое у нас было на тот момент, в виде запросов на языке Cypher в Neo4j и сохранили в саму базу данных. А встроенный визуализатор в Neo4j Browser стали использовать как универсальный справочник.</p>
49 <p>И всё сразу зажило. В любой момент времени мы видели, сколько у нас микросервисов и как они выглядят, а также получали ответ на множество частных вопросов: где у нас используется SSL, а где нет, какие интеграции у нас построены на TCP, какие микросервисы ходят в базу и так далее. Даже обучение новичков стало проходить намного проще. Уже после моего ухода коллеги научились обновлять эту базу автоматически через аннотации в коде и сейчас успешно применяют этот инструмент в нескольких проектах.</p>
49 <p>И всё сразу зажило. В любой момент времени мы видели, сколько у нас микросервисов и как они выглядят, а также получали ответ на множество частных вопросов: где у нас используется SSL, а где нет, какие интеграции у нас построены на TCP, какие микросервисы ходят в базу и так далее. Даже обучение новичков стало проходить намного проще. Уже после моего ухода коллеги научились обновлять эту базу автоматически через аннотации в коде и сейчас успешно применяют этот инструмент в нескольких проектах.</p>
50 <p>Вскользь упомяну ещё об одной практике, связанной с именованием микросервисов. Насколько я знаю, обычно народ сильно не заморачивается: микросервис называют по его предназначению - Handler, Dispatcher и так далее. Мы начинали с того же, но потихоньку пришли к тому, что названия получаются длинными и постепенно утрачивают смысл.</p>
50 <p>Вскользь упомяну ещё об одной практике, связанной с именованием микросервисов. Насколько я знаю, обычно народ сильно не заморачивается: микросервис называют по его предназначению - Handler, Dispatcher и так далее. Мы начинали с того же, но потихоньку пришли к тому, что названия получаются длинными и постепенно утрачивают смысл.</p>
51 <p>Поэтому мы пошли другим путём и поначалу стали всей командой выбирать названия на основе так называемых производных ассоциаций. То есть брать основное понятие, которое у нас ассоциируется с новым микросервисом, и пытаться изложить его в виде существующих слов. Так получилась куча креативных названий. Более или менее на слуху, наверное, микросервис "Пушкин", который, как нетрудно догадаться, занимается пушами, или микросервис "Кварк" для QR-кодов.</p>
51 <p>Поэтому мы пошли другим путём и поначалу стали всей командой выбирать названия на основе так называемых производных ассоциаций. То есть брать основное понятие, которое у нас ассоциируется с новым микросервисом, и пытаться изложить его в виде существующих слов. Так получилась куча креативных названий. Более или менее на слуху, наверное, микросервис "Пушкин", который, как нетрудно догадаться, занимается пушами, или микросервис "Кварк" для QR-кодов.</p>
52 <p>Начиная с десятой версии Oracle стал сильно вкладываться в фичу JVM, которая называется CDS/AppCDS (class data sharing / application class data sharing). Это, как мне кажется, очень интересная оптимизация, позволяющая расшаривать заранее верифицированные и распарсенные классы между разными инстансами виртуальной машины.</p>
52 <p>Начиная с десятой версии Oracle стал сильно вкладываться в фичу JVM, которая называется CDS/AppCDS (class data sharing / application class data sharing). Это, как мне кажется, очень интересная оптимизация, позволяющая расшаривать заранее верифицированные и распарсенные классы между разными инстансами виртуальной машины.</p>
53 <p>Идея в том, чтобы позволить машинам обойтись без верификации и парсинга, беря готовые данные, и не тратить ни процессорное время, ни память. Там куча своих сложностей, но в целом, я думаю, фича всё-таки жизнеспособная и найдёт себе применение - если не со Spring Boot (к которому я её примерял), то с другими фреймворками или библиотеками. Я знаю, что IntelliJ IDEA уже использует её "под капотом" для ускорения запуска.</p>
53 <p>Идея в том, чтобы позволить машинам обойтись без верификации и парсинга, беря готовые данные, и не тратить ни процессорное время, ни память. Там куча своих сложностей, но в целом, я думаю, фича всё-таки жизнеспособная и найдёт себе применение - если не со Spring Boot (к которому я её примерял), то с другими фреймворками или библиотеками. Я знаю, что IntelliJ IDEA уже использует её "под капотом" для ускорения запуска.</p>
54 <p>Наверное, самая ожидаемая новинка - легковесные потоки Project Loom. Это то, в чём Java обещает догнать, а в чём-то и перегнать языки, в которых это было изначально, - например, Go. Можно будет не аллоцировать те тяжеловесные потоки, которыми управляет сама ОС, а держать их внутри JVM.</p>
54 <p>Наверное, самая ожидаемая новинка - легковесные потоки Project Loom. Это то, в чём Java обещает догнать, а в чём-то и перегнать языки, в которых это было изначально, - например, Go. Можно будет не аллоцировать те тяжеловесные потоки, которыми управляет сама ОС, а держать их внутри JVM.</p>
55 <p>Ещё одна фича - pattern matching, которая сильно упрощает кодирование. Повторяющиеся конструкции теперь можно писать гораздо быстрее и лаконичнее, а код при этом становится более читабельным.</p>
55 <p>Ещё одна фича - pattern matching, которая сильно упрощает кодирование. Повторяющиеся конструкции теперь можно писать гораздо быстрее и лаконичнее, а код при этом становится более читабельным.</p>
56 <p>И ещё мне не терпится начать использовать полноценные текстовые блоки. Они появились сравнительно недавно и сейчас уже полностью доступны. К сожалению, мне сильно не хватает интерполяции строк, которая есть в других языках. Например, в Kotlin, где она используется во весь рост.</p>
56 <p>И ещё мне не терпится начать использовать полноценные текстовые блоки. Они появились сравнительно недавно и сейчас уже полностью доступны. К сожалению, мне сильно не хватает интерполяции строк, которая есть в других языках. Например, в Kotlin, где она используется во весь рост.</p>
57 <p>Как старовер, я остаюсь на Java. Хотя, если мы говорим о продукте в "чистом поле", мне больше нравится Kotlin. Почему бы и нет - пишем меньше, получаем больше, всё красиво, круто, молодёжно, современно.</p>
57 <p>Как старовер, я остаюсь на Java. Хотя, если мы говорим о продукте в "чистом поле", мне больше нравится Kotlin. Почему бы и нет - пишем меньше, получаем больше, всё красиво, круто, молодёжно, современно.</p>
58 <p>Если же речь идёт об уже состоявшемся продукте, я придерживаюсь более консервативной точки зрения и не тороплюсь устраивать "зоопарк". Даже ради крутых фич и компактности кода вносить новый язык в уже существующий продукт - на мой взгляд, сомнительная затея. Тут нужно многое взвесить.</p>
58 <p>Если же речь идёт об уже состоявшемся продукте, я придерживаюсь более консервативной точки зрения и не тороплюсь устраивать "зоопарк". Даже ради крутых фич и компактности кода вносить новый язык в уже существующий продукт - на мой взгляд, сомнительная затея. Тут нужно многое взвесить.</p>
59 <p>И ещё один аргумент - совместимость языка с существующей экосистемой: составом фреймворков и библиотек, которые уже есть в продукте. Несмотря на разговоры о том, что Kotlin на 100% совместим - просто пиши всё то же самое и будет у тебя на Java работать, я знаю несколько довольно показательных примеров, где Kotlin показывает себя не с лучшей стороны. Особенно когда речь заходит о работе на Spring Boot. Это касается и работы с обнуляемыми объектами, и с механизмами проксирования, и с некоторыми другими фишками. Не окажется ли так, что время, сэкономленное на написании типичных геттеров и сеттеров, мы потом убьём на отлов безумных багов?</p>
59 <p>И ещё один аргумент - совместимость языка с существующей экосистемой: составом фреймворков и библиотек, которые уже есть в продукте. Несмотря на разговоры о том, что Kotlin на 100% совместим - просто пиши всё то же самое и будет у тебя на Java работать, я знаю несколько довольно показательных примеров, где Kotlin показывает себя не с лучшей стороны. Особенно когда речь заходит о работе на Spring Boot. Это касается и работы с обнуляемыми объектами, и с механизмами проксирования, и с некоторыми другими фишками. Не окажется ли так, что время, сэкономленное на написании типичных геттеров и сеттеров, мы потом убьём на отлов безумных багов?</p>
60 <p>Ну а в целом у меня нет каких-то предустановленных принципов, по которым бы я строго выступал против одного языка или строго за другой. Предлагаю исходить из ситуации.</p>
60 <p>Ну а в целом у меня нет каких-то предустановленных принципов, по которым бы я строго выступал против одного языка или строго за другой. Предлагаю исходить из ситуации.</p>
61 <a>Научитесь: Профессия Java-разработчик + ИИ Узнать больше</a>
61 <a>Научитесь: Профессия Java-разработчик + ИИ Узнать больше</a>