Pull to refresh

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

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

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

Читать далее
Total votes 29: ↑29 and ↓0+29
Comments23

Comments 23

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

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

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

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

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

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

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

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

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

javapackager

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

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

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

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

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

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

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


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

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


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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

Oracle идёт за баню. В поиск вбивайtе Amazon Coretto.

С юзерской перспективы самый неглючащий вариант, особенно на некоторых линуксах где умудрились убить OpenJDK.

Спасибо за вариант. Но как насчёт jre? Зачем пользователю jdk?

Есть же лаунчеры. launch4j откроет сайт где надо скачать. Можно запихнуть в установщик для вашей любимой ОС. Можно скомпилировать в нативный код.
Зачем вы придумываете проблемы на ровном месте?

Даже для c++ программы иногда требуется скачивать c++ redistributable. Большинство программ требуют скачивать окружение. Претензии именно к джаве - непонятны.

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

Что такое целостность локализации? ResourceBundle существует уже миллион лет

IntelliJ стала ненасытна

У JetBrains - самые популярные инструменты и они не только для Java-ы. Будете писать на руби - возьмёте ту же самую IDE.

Зачем вы придумываете проблемы на ровном месте?

Система доставки результата пользователю - часть инфраструктуры языка, без которой он бесполезен. Вряд ли вы не сталкивались с ситуацией, когда программа просит какую-нибудь отсутствующую библиотеку или она не той версии. Это как раз одна из проблем доставки.

Претензии именно к джаве - непонятны.

Речь идёт о подводных камнях языка. Раз речь о яве - то о ней и разговор.

Что такое целостность локализации? ResourceBundle существует уже миллион лет

Вы к этому ResourceBundle обращаетесь по строковому ключу ресурса. Так? А как сделать так, чтобы во-первых к ключу обязательно имелся локализованный ресурс, а во-вторых не используемых ресурсов там не было? А ещё и чтобы при наведении курсора показывался локализованный текст на выбранном по умолчанию языке.

Джавист уже лет 5 (самоучка на своих коммерческих проектах), люблю кодить только на ней, в итоге никуда не берут джавистом ни джуном, ни мидлом, ни сеньёром. Дошло до того, что жрать уже нечего - работать с говнокодом и всякими сайтиками на всяких PHP больше не могу и вот уже полгода каждый день ловлю по 50 отказов потому что "не узкопрофильный java специалист с аналогичным опытом".
Куда угодно берут с моим опытом, но на моём месте вайтишники...

Вселенная дает подсказку - исправь резюме, удали не профильный опыт и стань "узкопрофильным java специалистом", про остальной опыт расскажешь, если будет интерес и вопросы у компаниии нанимателя.

У меня слишком много смежного опыта. Например веб я всегда делал на php. Если его удалить, то подумают, что я в вебе не разбираюсь, а я в нём разбираюсь не хуже сеньёров джавистов, так как фул стек разраб на 4-5 проектах был. С БД и девопсом таже херня.

Стажером за еду берут довольно легко. Галеры, стартапы, продуктовые фирмы, да что угодно.

Писать и прочие CS знания нужны на уровне выпускника средненького ВУЗа. Ничего этакого. Мердж сорт в самом примитивном виде напишите на доске? А как мапа работает расскажете? Заученный текст не нужен, его любой интервьюер узнает и зарубит. Мемасик из раннего Профунктора если вам показать сможете хотя бы пару слов сказать о нем? И все такого же уровня. За хороший рассказ про хороший мемасик я даже джуна бы дал не глядя, не смотря вообще ни на что больше.

Мемасик из раннего Профунктора если вам показать сможете хотя бы пару слов сказать о нем?

Там достаточно нормальных. О которых без дополнительного контекста поговорить можно.

UFO just landed and posted this here
Sign up to leave a comment.