Спят усталые игрушки, книжки спят… А вот Хабр не дремлет. Уже целый год прошёл с прошлого сезона 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. Откройте, но не торопитесь читать ответ ;)
quaer
А можно без статьи поныть?
Подводный камень раз: как загрузить с оракла, так ява 20 jdk, а как захочешь запустить программку - там нагугливаться ява ком где предлагается ява 8. Как объяснить конечному пользователю? На какой версии прикажете писать и собирать? А уж на Android вообще весело.
Подводный камень два: когда же уже будет работать goto? Может, хоть в 21 яву включат? Блоки с метками проблемы не решают.
Подводный камень три: автоприведение типов и автобоксинг - зло.
Подводный камень четыре: нет готового механизма поддержания целостности локализации.
Подводный камень пять: IntelliJ стала ненасытна, Eclipse стал глючить.
programmerjava
Это какой-то троллинг ?
quaer
Давайте начнём с первого пункта. Как вы объясняете конечному пользователю как запустить программу, и желательно без использования командной строки?
Mapaxa864
javapackager
quaer
Итак, просто отдать jar файл, как всего несколько лет назад, предложить поставить jre и запустить двойным щелчком не получится? Предлагаете вместо пары сотен кБ jar файла отдавать файл мегабайтов под 40-50?
Давайте расширим вопрос дистрибьюции. Вы пользуетесь приложением и оно нормально работало с java 8, но вот вы обновились до java 17 и теперь оно не хочет запускаться. Ваши действия?
Далее, обфусцируете код, но выходит новая версия ProGuard и вот обфусцированное приложение не запускается, хотя ничего не менялось. Или собираете код под Android и релизная версия отказывается нормально работать. Ваши действия? Ну и можно расширить вопрос о защите от копирования.
Далее, вы хотите раздать .apk для Android. И тут оказывается, что ваш любимый фаловый менеджер отказывается устанавливать его. Ваши действия?
Согласны, что пункт первый достоин называться подводным камнем разработки на Java?
Mapaxa864
Так вам шашечки или ехать?
Стоит определиться, или вы хотите удобства, и отдавать пользователю установщик(!) который сделает всё сам; или же вы экономите трафик, отдавая пользователю сотню килобайт, а заодно объясняете потом как всё это запускать.
Емнип, javapackager позволяет включить в сборку необходимый jre.
Про обфускацю и андроид не сильно в курсе, тот комментировать нечего.
quaer
Мне непонятно, почему было просто, стало сложно.
Мне как пользователю, что делать?
Mapaxa864
Что стало сложнее?
Собирать? — так нынче есть много инструментов, которые автоматизируют часть рутины, которую приходилось делать руками.
Запускать? — ./java -jar file.jar Что тут могло усложниться?
Если разработчик озаботился этим вопросом, то у вас, как у пользователя, этой проблемы стоять не должно.
quaer
Раньше: заходишь на сайт оракла, качаешь jre, ставишь, потом просто двойным щелчком запускаешь jar файл. Сейчас ищешь где и что скачать нужной версии, потом где-нибудь находишь что-нибудь типа архива openJDK, распаковываешь его и тыкаешься, чтобы понять что и как надо запускать.
Сначала его надо озаботить.
Mapaxa864
Сейчас можно просто скачать дистрибутив программы, запустить его, и он всё установит (и саму программу, и джаву к ней, и все это автоматически). И можно будет запускать программу одни кликом.
Если кто-то решил не делать удобный дистрибутив — может вопрос к разработчику, а не к языку программирования?
eledev
Идею вы как запускаете с рабочего стола? Так и объясняйте.
quaer
А оно так перестало работать после того, как Oracle что-то там опять мудрить начала. Вот на днях надо было запустить. Идём в инет, забиваем в поиске "скачать jre 17", в результате поиска либо jdk, либо jre8. Да ещё эти jdk как простые архивы, без установщика. Вам понравится как пользователю прописывать всякие переменные среды, связывать расширения, прописывать аргументы запуска?