Спят усталые игрушки, книжки спят… А вот Хабр не дремлет. Уже целый год прошёл с прошлого сезона Java. Стал ли за это время язык менее актуальным? Его всё ещё путают с JavaScript? Помогла ли Java 20 поставить новый рекорд длины Hello World? Чтобы ответить на эти и другие вопросы, мы запускаем новый сезон Java.

Программирование — это про целесообразность. Для многих простых задач достаточно подружиться со слонёнком. Однако когда хочешь сотворить настоящее, крупномасштабное чудо вроде национальной платёжной системы, без jar-птицы никак не обойтись — можете поверить опыту НСПК, партнёра этого сезона.

С 31 июля по 19 сентября мы будем говорить о чудесах больших и поменьше, о кровавых ритуалах энтерпрайза и защитных пентаклях тестовых окружений. Лучший кудесник, избранный народным голосованием, получит в награду Apple MacBook Air 13, а его имя навсегда останется на страницах нашей сказки.

Java и энтерпрайз

Наверное, Java на сегодня — самый «энтерпрайзный» из языков программирования. Обычно именно на нём реализуются большие сложные системы с высокими требованиями к надёжности. Многим нравится гибкость Python и простота JavaScript, другие хотят хайповать на Go или писать высоколобый функциональный код на Scala — и всё же кровавый энтерпрайз держится на (или за?) Java. Почему всё обстоит именно так?

Антон Будкевич

глава разработки IT-решений Мир Plat.Form aka @Wanderrer

Вопрос многогранный. Можно выделить несколько ключевых моментов:
1. Высокая производительность Java-платформы в принципе. Если сравнивать с другими распространёнными языками, такими как Python или PHP, — они проигрывают в производительности в десятки-сотни раз.
2. Большое сообщество. Многие вопросы, которые встают перед разработчиком, уже так или иначе в Java-сообществе кто-то решал.
3. Большая экосистема. Есть не только ответы на вопросы, как разработать что-то, но и готовые реализации. Экосистема библиотек, пакетов для реализации бизнес-задач.
4. Кадры. Разработчиков-джавистов объективно больше, чем программистов на других языках. На двух гошников, например, приходится 10 джавистов.

Сергей Петрелевич

ведущий разработчик Мир Plat.Form aka @Petrelevich

Один из ключевых факторов — обратная совместимость. Ни один из популярных языков и платформ не обладает таким свойством. Java появилась в 90-е годы, и до сих пор код, написанный в 90-е годы, функционирует. В банке, где я работал лет 6 назад, была система, написанная на первой версии Java, — и она до сих пор в деле. Причём это крупная система, тысячи серверов по всему миру, за 20 лет разработки над ней успели потрудиться порядка 100 человек со всех континентов.

В других языках бывает, что выходит третья версия — и объявляют, что вторая была сделана по ошибке, и теперь всё будет не так. Для системы, где срок разработки измеряется десятками лет, это была бы катастрофа. А когда есть гарантированная обратная совместимость, можно смело вкладывать сотни миллионов долларов в разработку, и система будет работать годами, столько, сколько надо.

Java и разработчик

Джависты любят делать всё обстоятельно. Говорят, если за столом попросить джависта передать хлеб — он начнёт строить хлебозавод. Врут, конечно, — он просто загрузит его с Maven Central. Пока другие холиварят по поводу того, чей язык лучше, джависты тихо и скромно пилят мегапроекты на своём любимом языке.

Сергей Петрелевич

ведущий разработчик Мир Plat.Form aka @Petrelevich

В Java ничего не устаревает — просто появляются новые инструменты, позволяющие решать новые задачи или старые, но по-другому.

Допустим, раньше все приложения были монолитными. Их масштабирование достигалось за счёт многопоточности и увеличения количества потоков. С появлением «двенадцати факторов» от Heroku и моды на микросервисную архитектуру масштабирование стало делаться не за счёт потоков, а за счёт процессов. Мы запускаем кучу реплик нашего процесса и достигаем тех же целей. Появился Kubernetes, появилась новая идеология, под это подстраивается в том числе и Java. Например, все мы ждём virtual threads в Java 21. Но старые подходы при этом никто не отменял, и у них по-прежнему есть своя область применимости.

Конечно, есть определённая инерционность, запаздывание. Вспомнить хотя бы, когда в других языках появились лямбды и когда они приехали в Java. Но это плата за обратную совместимость, ничего не поделаешь.

Антон Будкевич

глава разработки IT-решений Мир Plat.Form aka @Wanderrer

На любом языке можно решить любую задачу, хоть на Visual Basic. Вопрос не столько в скорости обработки транзакций, сколько в стоимости разработки. В изменчивости бизнес-функциональности. Мы много дорабатываем наши системы, и скорость, надёжность, стоимость этих доработок для нас критичны.

Важен не столько сам язык, сколько его экосистема, инструменты, комьюнити. Больше разработчиков на языке — больше комьюнити — больше мощных инструментов. Например, в Go нет аналога Spring. И, допустим, веб-клиент на Go написать посложнее, потребуется больше кода. Грубо говоря, у нас это одна строчка, а в Go понадобилось бы пять.

Впрочем, джависты сами про себя всё знают. А читателю, возможно, интересно, насколько сложно стать Java-разработчиком в 2023 году.

Александр Ланцов

ведущий разработчик Мир Plat.Form

Сейчас на джуновские позиции очень большой конкурс. Молодые и перспективные специалисты, по большому счёту, все одинаково умные. И конкурировать им приходится через время, которое они готовы потратить на подготовку.

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

Владимир Петров

aka @vvpetrov91

Java — как швейцарский нож: на ней можно разрабатывать Android, десктопные приложения, веб, программировать микроконтроллеры и т. п. Однако основная фишка джавы — это универсальность («написал однажды — работает везде») и возможность работы в многопоточной среде. Большая доля рынка джавы — это крупные предприятия, высоконагруженный бизнес-бэкенд, куча интеграций.

Важное качество для wannabe-джависта — усидчивость и стремление к результату в долгосрочной перспективе. Быстренько наклепать сайтик можно на питоне. То же самое можно сделать и на джаве, — работать это скорее всего будет даже лучше, но время, затраченное на разработку, будет больше.

Вторым качеством можно выделить стремление к совершенству. Джава очень многогранна, и код, написанный на ней, можно улучшать бесконечно. Написать простой алгоритм, потом можно переписать его на более низком уровне, потом прикрутить асинхронность и многопоточность — можно даже JVM затюнить.

Java и евангелист

Некоторые люди не просто используют Java, но и хотят обратить в свою веру других. А тех, кто уже обращён, — мотивировать к росту в этой области. Победитель прошлого сезона Java расскажет, почему в 2023 году этот язык особенно хорош (и в каких областях — не очень).

Олег Чирухин

победитель прошлого сезона Java aka @olegchir

У Java поменялся релизный цикл, и теперь новые версии выходят дважды в год. Это позволило выпустить множество новой функциональности, в том числе той, которую ждали годами. Например, в Java 21 у нас появятся Virtal Threads, которые позволят улучшить эффективность использования оборудования. Сегодня Java — это крутой, современный, динамично развивающийся язык, выгодным преимуществом которого является то, что он не оторвался от своих изначальных ценностей: совместимости между версиями, фокусом на производительность и безопасность, использование строго типизированного языка с поддержкой IDE и так далее. Безусловно, далеко не всем системам нужна безопасность или необходимо думать о производительности. Например, у браузерного фронтенда совершенно другие ценности. Но если вы совпадаете по ценностям с Java, то это идеальный выбор.

Есть ряд областей, в которых Java уже нормально можно использовать, но уровень применения не очень большой. Например, инфраструктура для создания умных домов, в том же Eclipse IOT есть много готовых наработок. На Java можно работать с машинным обучением и большими данными: в качестве примера — Apache Spark MLlib, предназначенный для сборки пайплайнов машинного обучения с использованием навыков работы со Spark, которые уже имеются у data-инженеров.

Если говорить о потерянных областях, то это мобильная разработка. На Android стали повсеместно использовать Kotlin. Строго говоря, на Android никогда и не было «настоящей» Java — там всегда был компилятор, который собирал код на Java во что-то своё, что живёт по своим правилам и необязательно регулируется спецификацией языка и виртуальной машины, как в OpenJDK. Но теперь это вообще свой отдельный мир. В какой-то другой параллельной реальности, Android бы перешёл с «не совсем настоящей Java» на «полностью настоящую Java», но в нашей версии мультивселенной этого не случилось. У нас случился Kotlin. Может быть, и к лучшему.

Когда Java только появлялась, была большая ставка на использование в браузере через апплеты. Сейчас же, многие Java-разработчики никогда и не видели никаких апплетов. Современный браузерный фронтенд делается на чем-то с условным названием JavaScript (в реальности это множество технологий — от TypeScript с миллионом фреймворков на клиенте, до Node.js и Deno на бэкенде). Всё это заворачивается в «рамочки» от Electron или его мобильных аналогов и получаются «почти нативные» приложения.

Java-интерфейсы всё ещё используются там, где они жизненно необходимы, где важна максимальная переносимость и сопровождение на протяжении десятилетий — IDE, торговые терминалы и так далее. Swing, SWT, JavaFX никуда не делись и продолжают развиваться в рамках крупных и общественно-важных продуктов. Тем не менее в ближайшие пять лет мы вряд ли увидим Java в роли основной технологии разработки веб-сайтов. Возможно, с развитием Web Assembly что-то изменится, но пока воз и ныне там.

Java и авторы Хабра

Наверное, некоторые читатели уже задумались — о чём бы таком написать на этот сезон, чтобы собрать много лайков и забрать суперприз… Вряд ли это хорошая постановка вопроса. Писать надо о том, что хорошо знаешь, что интересно самому, — тогда выйдет хорошая статья. Зайдёт ли она аудитории лучше, чем все остальные, — на то уже воля случая. Впрочем, некоторыми идеями наши спикеры всё же хотят поделиться.

Антон Будкевич

глава разработки IT-решений Мир Plat.Form aka @Wanderrer

Мне было бы интересно почитать о том, как Java со своими фреймворками взаимодействует с другими компонентами. Kafka, Kubernetes, Cassandra, ClickHouse, PostgreSQL — мне интересно было бы почитать, как всё это работает как единое целое, и как бизнес-логика абстрагирована от инфраструктурных компонентов. Как можно наладить взаимодействие одним импортом правильной библиотеки — или, наоборот, как кто-нибудь написал свой велосипед для работы с Kafka, который лучше, чем что-то.

Правила сезона

  • Сезон Java будет проходить с 31 июля по 15 сентября. 

  • К участию допускаются статьи, опубликованные с 24 июля в хабе Java, у которых выставлен тег «Сезон Java one love». 

  • Побеждает статья с наивысшим рейтингом. Голосование идёт в течении всего сезона, результаты фиксируются по его завершению.

  • Допускается несколько статей от одного автора.

  • Участвовать могут даже авторы из «Песочницы».

Требования к статьям

  • В сезоне участвуют статьи, посвящённые языку программирования Java, его применению в различных задачах, неочевидным нюансам и подводным граблям. 

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

  • Статьи должны быть полезны Java-разработчику, помогать ему в решении конкретных задач или давать ему более глубокое понимание фундаментальных особенностей языка. Абстрактно-философские рассуждения в сезоне участвовать не будут.

  • Реклама и антиреклама запрещены. Уместные упоминания продуктов и брендов допустимы, но если статья целиком посвящена пиару — она не будет допущена к участию в конкурсе.

Автору самой заплюсованной статьи достанется Apple MacBook Air 13, а также грант в 30 000 ₽ на подготовку следующего крутого поста.

Статьи-участники

Одна из возможных версий переезда с MySQL на PostgreSQL

Всем привет! Меня зовут Станислав, я Java-разработчик в Rocket Science, outsource-компании, специализирующейся преимущественно на финтех-проектах. С 2019 года я веду проект бэкенда для внутренних мобильных приложений (которыми пользуются сотрудники) одного крупного банка. Когда мы начинали проект, у DBA были компетенции только в Oracle и MySQL, а в последние пару лет, наоборот, фокус в организации сместился в сторону PostgreSQL и появилась тенденция по переезду в него разных внутренних сервисов. Нашей команде было вполне комфортно на MySQL, но мы прикинули, что переезд в PostgreSQL позволит нам решить ряд попутных технических вопросов, и ввязались в эту авантюру. В этой статье я расскажу, какие подводные камни ждали нас на этом пути


Разница между загрузкой и инициализацией классов в Java на любопытном примере

Привет, сегодняшняя статья будет о некоторых тонкостях загрузки и инициализации классов и немного о производительности (совсем чуть-чуть и в самом конце). Поводом для написания статьи стал вопрос на StackOverflow. Откройте, но не торопитесь читать ответ ;)

Спят усталые игрушки, книжки спят… А вот Хабр не дремлет. Уже целый год прошёл с прошлого сезона Java. Стал ли за это время язык менее актуальным? Его всё ещё путают с JavaScript? Помогла ли Java 20 поставить новый рекорд длины Hello World? Чтобы ответить на эти и другие вопросы, мы запускаем новый сезон Java.

Программирование — это про целесообразность. Для многих простых задач достаточно подружиться со слонёнком. Однако когда хочешь сотворить настоящее, крупномасштабное чудо вроде национальной платёжной системы, без jar-птицы никак не обойтись — можете поверить опыту НСПК, партнёра этого сезона.

С 31 июля по 19 сентября мы будем говорить о чудесах больших и поменьше, о кровавых ритуалах энтерпрайза и защитных пентаклях тестовых окружений. Лучший кудесник, избранный народным голосованием, получит в награду Apple MacBook Air 13, а его имя навсегда останется на страницах нашей сказки.

Java и энтерпрайз

Наверное, Java на сегодня — самый «энтерпрайзный» из языков программирования. Обычно именно на нём реализуются большие сложные системы с высокими требованиями к надёжности. Многим нравится гибкость Python и простота JavaScript, другие хотят хайповать на Go или писать высоколобый функциональный код на Scala — и всё же кровавый энтерпрайз держится на (или за?) Java. Почему всё обстоит именно так?

Антон Будкевич

глава разработки IT-решений Мир Plat.Form aka @Wanderrer

Вопрос многогранный. Можно выделить несколько ключевых моментов:
1. Высокая производительность Java-платформы в принципе. Если сравнивать с другими распространёнными языками, такими как Python или PHP, — они проигрывают в производительности в десятки-сотни раз.
2. Большое сообщество. Многие вопросы, которые встают перед разработчиком, уже так или иначе в Java-сообществе кто-то решал.
3. Большая экосистема. Есть не только ответы на вопросы, как разработать что-то, но и готовые реализации. Экосистема библиотек, пакетов для реализации бизнес-задач.
4. Кадры. Разработчиков-джавистов объективно больше, чем программистов на других языках. На двух гошников, например, приходится 10 джавистов.

Сергей Петрелевич

ведущий разработчик Мир Plat.Form aka @Petrelevich

Один из ключевых факторов — обратная совместимость. Ни один из популярных языков и платформ не обладает таким свойством. Java появилась в 90-е годы, и до сих пор код, написанный в 90-е годы, функционирует. В банке, где я работал лет 6 назад, была система, написанная на первой версии Java, — и она до сих пор в деле. Причём это крупная система, тысячи серверов по всему миру, за 20 лет разработки над ней успели потрудиться порядка 100 человек со всех континентов.

В других языках бывает, что выходит третья версия — и объявляют, что вторая была сделана по ошибке, и теперь всё будет не так. Для системы, где срок разработки измеряется десятками лет, это была бы катастрофа. А когда есть гарантированная обратная совместимость, можно смело вкладывать сотни миллионов долларов в разработку, и система будет работать годами, столько, сколько надо.

Java и разработчик

Джависты любят делать всё обстоятельно. Говорят, если за столом попросить джависта передать хлеб — он начнёт строить хлебозавод. Врут, конечно, — он просто загрузит его с Maven Central. Пока другие холиварят по поводу того, чей язык лучше, джависты тихо и скромно пилят мегапроекты на своём любимом языке.

Сергей Петрелевич

ведущий разработчик Мир Plat.Form aka @Petrelevich

В Java ничего не устаревает — просто появляются новые инструменты, позволяющие решать новые задачи или старые, но по-другому.

Допустим, раньше все приложения были монолитными. Их масштабирование достигалось за счёт многопоточности и увеличения количества потоков. С появлением «двенадцати факторов» от Heroku и моды на микросервисную архитектуру масштабирование стало делаться не за счёт потоков, а за счёт процессов. Мы запускаем кучу реплик нашего процесса и достигаем тех же целей. Появился Kubernetes, появилась новая идеология, под это подстраивается в том числе и Java. Например, все мы ждём virtual threads в Java 21. Но старые подходы при этом никто не отменял, и у них по-прежнему есть своя область применимости.

Конечно, есть определённая инерционность, запаздывание. Вспомнить хотя бы, когда в других языках появились лямбды и когда они приехали в Java. Но это плата за обратную совместимость, ничего не поделаешь.

Антон Будкевич

глава разработки IT-решений Мир Plat.Form aka @Wanderrer

На любом языке можно решить любую задачу, хоть на Visual Basic. Вопрос не столько в скорости обработки транзакций, сколько в стоимости разработки. В изменчивости бизнес-функциональности. Мы много дорабатываем наши системы, и скорость, надёжность, стоимость этих доработок для нас критичны.

Важен не столько сам язык, сколько его экосистема, инструменты, комьюнити. Больше разработчиков на языке — больше комьюнити — больше мощных инструментов. Например, в Go нет аналога Spring. И, допустим, веб-клиент на Go написать посложнее, потребуется больше кода. Грубо говоря, у нас это одна строчка, а в Go понадобилось бы пять.

Впрочем, джависты сами про себя всё знают. А читателю, возможно, интересно, насколько сложно стать Java-разработчиком в 2023 году.

Александр Ланцов

ведущий разработчик Мир Plat.Form

Сейчас на джуновские позиции очень большой конкурс. Молодые и перспективные специалисты, по большому счёту, все одинаково умные. И конкурировать им приходится через время, которое они готовы потратить на подготовку.

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

Владимир Петров

aka @vvpetrov91

Java — как швейцарский нож: на ней можно разрабатывать Android, десктопные приложения, веб, программировать микроконтроллеры и т. п. Однако основная фишка джавы — это универсальность («написал однажды — работает везде») и возможность работы в многопоточной среде. Большая доля рынка джавы — это крупные предприятия, высоконагруженный бизнес-бэкенд, куча интеграций.

Важное качество для wannabe-джависта — усидчивость и стремление к результату в долгосрочной перспективе. Быстренько наклепать сайтик можно на питоне. То же самое можно сделать и на джаве, — работать это скорее всего будет даже лучше, но время, затраченное на разработку, будет больше.

Вторым качеством можно выделить стремление к совершенству. Джава очень многогранна, и код, написанный на ней, можно улучшать бесконечно. Написать простой алгоритм, потом можно переписать его на более низком уровне, потом прикрутить асинхронность и многопоточность — можно даже JVM затюнить.

Java и евангелист

Некоторые люди не просто используют Java, но и хотят обратить в свою веру других. А тех, кто уже обращён, — мотивировать к росту в этой области. Победитель прошлого сезона Java расскажет, почему в 2023 году этот язык особенно хорош (и в каких областях — не очень).

Олег Чирухин

победитель прошлого сезона Java aka @olegchir

У Java поменялся релизный цикл, и теперь новые версии выходят дважды в год. Это позволило выпустить множество новой функциональности, в том числе той, которую ждали годами. Например, в Java 21 у нас появятся Virtal Threads, которые позволят улучшить эффективность использования оборудования. Сегодня Java — это крутой, современный, динамично развивающийся язык, выгодным преимуществом которого является то, что он не оторвался от своих изначальных ценностей: совместимости между версиями, фокусом на производительность и безопасность, использование строго типизированного языка с поддержкой IDE и так далее. Безусловно, далеко не всем системам нужна безопасность или необходимо думать о производительности. Например, у браузерного фронтенда совершенно другие ценности. Но если вы совпадаете по ценностям с Java, то это идеальный выбор.

Есть ряд областей, в которых Java уже нормально можно использовать, но уровень применения не очень большой. Например, инфраструктура для создания умных домов, в том же Eclipse IOT есть много готовых наработок. На Java можно работать с машинным обучением и большими данными: в качестве примера — Apache Spark MLlib, предназначенный для сборки пайплайнов машинного обучения с использованием навыков работы со Spark, которые уже имеются у data-инженеров.

Если говорить о потерянных областях, то это мобильная разработка. На Android стали повсеместно использовать Kotlin. Строго говоря, на Android никогда и не было «настоящей» Java — там всегда был компилятор, который собирал код на Java во что-то своё, что живёт по своим правилам и необязательно регулируется спецификацией языка и виртуальной машины, как в OpenJDK. Но теперь это вообще свой отдельный мир. В какой-то другой параллельной реальности, Android бы перешёл с «не совсем настоящей Java» на «полностью настоящую Java», но в нашей версии мультивселенной этого не случилось. У нас случился Kotlin. Может быть, и к лучшему.

Когда Java только появлялась, была большая ставка на использование в браузере через апплеты. Сейчас же, многие Java-разработчики никогда и не видели никаких апплетов. Современный браузерный фронтенд делается на чем-то с условным названием JavaScript (в реальности это множество технологий — от TypeScript с миллионом фреймворков на клиенте, до Node.js и Deno на бэкенде). Всё это заворачивается в «рамочки» от Electron или его мобильных аналогов и получаются «почти нативные» приложения.

Java-интерфейсы всё ещё используются там, где они жизненно необходимы, где важна максимальная переносимость и сопровождение на протяжении десятилетий — IDE, торговые терминалы и так далее. Swing, SWT, JavaFX никуда не делись и продолжают развиваться в рамках крупных и общественно-важных продуктов. Тем не менее в ближайшие пять лет мы вряд ли увидим Java в роли основной технологии разработки веб-сайтов. Возможно, с развитием Web Assembly что-то изменится, но пока воз и ныне там.

Java и авторы Хабра

Наверное, некоторые читатели уже задумались — о чём бы таком написать на этот сезон, чтобы собрать много лайков и забрать суперприз… Вряд ли это хорошая постановка вопроса. Писать надо о том, что хорошо знаешь, что интересно самому, — тогда выйдет хорошая статья. Зайдёт ли она аудитории лучше, чем все остальные, — на то уже воля случая. Впрочем, некоторыми идеями наши спикеры всё же хотят поделиться.

Антон Будкевич

глава разработки IT-решений Мир Plat.Form aka @Wanderrer

Мне было бы интересно почитать о том, как Java со своими фреймворками взаимодействует с другими компонентами. Kafka, Kubernetes, Cassandra, ClickHouse, PostgreSQL — мне интересно было бы почитать, как всё это работает как единое целое, и как бизнес-логика абстрагирована от инфраструктурных компонентов. Как можно наладить взаимодействие одним импортом правильной библиотеки — или, наоборот, как кто-нибудь написал свой велосипед для работы с Kafka, который лучше, чем что-то.

Правила сезона

  • Сезон Java будет проходить с 31 июля по 15 сентября. 

  • К участию допускаются статьи, опубликованные с 24 июля в хабе Java, у которых выставлен тег «Сезон Java one love». 

  • Побеждает статья с наивысшим рейтингом. Голосование идёт в течении всего сезона, результаты фиксируются по его завершению.

  • Допускается несколько статей от одного автора.

  • Участвовать могут даже авторы из «Песочницы».

Требования к статьям

  • В сезоне участвуют статьи, посвящённые языку программирования Java, его применению в различных задачах, неочевидным нюансам и подводным граблям. 

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

  • Статьи должны быть полезны Java-разработчику, помогать ему в решении конкретных задач или давать ему более глубокое понимание фундаментальных особенностей языка. Абстрактно-философские рассуждения в сезоне участвовать не будут.

  • Реклама и антиреклама запрещены. Уместные упоминания продуктов и брендов допустимы, но если статья целиком посвящена пиару — она не будет допущена к участию в конкурсе.

Автору самой заплюсованной статьи достанется Apple MacBook Air 13, а также грант в 30 000 ₽ на подготовку следующего крутого поста.

Статьи-участники

Одна из возможных версий переезда с MySQL на PostgreSQL

Всем привет! Меня зовут Станислав, я Java-разработчик в Rocket Science, outsource-компании, специализирующейся преимущественно на финтех-проектах. С 2019 года я веду проект бэкенда для внутренних мобильных приложений (которыми пользуются сотрудники) одного крупного банка. Когда мы начинали проект, у DBA были компетенции только в Oracle и MySQL, а в последние пару лет, наоборот, фокус в организации сместился в сторону PostgreSQL и появилась тенденция по переезду в него разных внутренних сервисов. Нашей команде было вполне комфортно на MySQL, но мы прикинули, что переезд в PostgreSQL позволит нам решить ряд попутных технических вопросов, и ввязались в эту авантюру. В этой статье я расскажу, какие подводные камни ждали нас на этом пути


Разница между загрузкой и инициализацией классов в Java на любопытном примере

Привет, сегодняшняя статья будет о некоторых тонкостях загрузки и инициализации классов и немного о производительности (совсем чуть-чуть и в самом конце). Поводом для написания статьи стал вопрос на StackOverflow. Откройте, но не торопитесь читать ответ ;)

Комментарии (12)


  1. quaer
    31.07.2023 16:54
    -8

    В сезоне участвуют статьи, посвящённые языку программирования Java, его
    применению в различных задачах, неочевидным нюансам и подводным
    граблям.

    А можно без статьи поныть?

    Подводный камень раз: как загрузить с оракла, так ява 20 jdk, а как захочешь запустить программку - там нагугливаться ява ком где предлагается ява 8. Как объяснить конечному пользователю? На какой версии прикажете писать и собирать? А уж на Android вообще весело.

    Подводный камень два: когда же уже будет работать goto? Может, хоть в 21 яву включат? Блоки с метками проблемы не решают.

    Подводный камень три: автоприведение типов и автобоксинг - зло.

    Подводный камень четыре: нет готового механизма поддержания целостности локализации.

    Подводный камень пять: IntelliJ стала ненасытна, Eclipse стал глючить.


    1. programmerjava
      31.07.2023 16:54

      Это какой-то троллинг ?


      1. quaer
        31.07.2023 16:54

        Давайте начнём с первого пункта. Как вы объясняете конечному пользователю как запустить программу, и желательно без использования командной строки?


        1. Mapaxa864
          31.07.2023 16:54
          +1

          Как вы объясняете конечному пользователю как запустить программу, и желательно без использования командной строки?

          javapackager


          1. quaer
            31.07.2023 16:54

            Итак, просто отдать jar файл, как всего несколько лет назад, предложить поставить jre и запустить двойным щелчком не получится? Предлагаете вместо пары сотен кБ jar файла отдавать файл мегабайтов под 40-50?

            Давайте расширим вопрос дистрибьюции. Вы пользуетесь приложением и оно нормально работало с java 8, но вот вы обновились до java 17 и теперь оно не хочет запускаться. Ваши действия?

            Далее, обфусцируете код, но выходит новая версия ProGuard и вот обфусцированное приложение не запускается, хотя ничего не менялось. Или собираете код под Android и релизная версия отказывается нормально работать. Ваши действия? Ну и можно расширить вопрос о защите от копирования.

            Далее, вы хотите раздать .apk для Android. И тут оказывается, что ваш любимый фаловый менеджер отказывается устанавливать его. Ваши действия?

            Согласны, что пункт первый достоин называться подводным камнем разработки на Java?


            1. Mapaxa864
              31.07.2023 16:54

              Итак, просто отдать jar файл, как всего несколько лет назад, предложить поставить jre и запустить двойным щелчком не получится? Предлагаете вместо пары сотен кБ jar файла отдавать файл мегабайтов под 40-50?

              Так вам шашечки или ехать?


              • "разбираться с зависимостями, версиями и остальным слишком сложно"
              • "отдавать много трафика — это плохо"

              Стоит определиться, или вы хотите удобства, и отдавать пользователю установщик(!) который сделает всё сам; или же вы экономите трафик, отдавая пользователю сотню килобайт, а заодно объясняете потом как всё это запускать.


              Давайте расширим вопрос дистрибьюции. Вы пользуетесь приложением и оно нормально работало с java 8, но вот вы обновились до java 17 и теперь оно не хочет запускаться. Ваши действия?

              Емнип, javapackager позволяет включить в сборку необходимый jre.


              Про обфускацю и андроид не сильно в курсе, тот комментировать нечего.


              1. quaer
                31.07.2023 16:54

                Так вам шашечки или ехать?

                Мне непонятно, почему было просто, стало сложно.

                Емнип, javapackager позволяет включить в сборку необходимый jre.

                Мне как пользователю, что делать?


                1. Mapaxa864
                  31.07.2023 16:54

                  почему было просто, стало сложно.

                  Что стало сложнее?
                  Собирать? — так нынче есть много инструментов, которые автоматизируют часть рутины, которую приходилось делать руками.
                  Запускать? — ./java -jar file.jar Что тут могло усложниться?


                  Мне как пользователю, что делать? ъ

                  Если разработчик озаботился этим вопросом, то у вас, как у пользователя, этой проблемы стоять не должно.


                  1. quaer
                    31.07.2023 16:54

                    Запускать? — ./java -jar file.jar Что тут могло усложниться?

                    Раньше: заходишь на сайт оракла, качаешь jre, ставишь, потом просто двойным щелчком запускаешь jar файл. Сейчас ищешь где и что скачать нужной версии, потом где-нибудь находишь что-нибудь типа архива openJDK, распаковываешь его и тыкаешься, чтобы понять что и как надо запускать.

                    Если разработчик озаботился этим вопросом, то у вас, как у пользователя, этой проблемы стоять не должно.

                    Сначала его надо озаботить.


                    1. Mapaxa864
                      31.07.2023 16:54

                      Раньше: заходишь на сайт оракла, качаешь jre, ставишь, потом просто двойным щелчком запускаешь jar файл. Сейчас ищешь где и что скачать нужной версии, потом где-нибудь находишь что-нибудь типа архива openJDK, распаковываешь его и тыкаешься, чтобы понять что и как надо запускать.

                      Сейчас можно просто скачать дистрибутив программы, запустить его, и он всё установит (и саму программу, и джаву к ней, и все это автоматически). И можно будет запускать программу одни кликом.
                      Если кто-то решил не делать удобный дистрибутив — может вопрос к разработчику, а не к языку программирования?


        1. eledev
          31.07.2023 16:54
          +1

          Идею вы как запускаете с рабочего стола? Так и объясняйте.


          1. quaer
            31.07.2023 16:54

            А оно так перестало работать после того, как Oracle что-то там опять мудрить начала. Вот на днях надо было запустить. Идём в инет, забиваем в поиске "скачать jre 17", в результате поиска либо jdk, либо jre8. Да ещё эти jdk как простые архивы, без установщика. Вам понравится как пользователю прописывать всякие переменные среды, связывать расширения, прописывать аргументы запуска?