×Закрыть

Java-8 и порог вхождения

С одной стороны, код стал лаконичнее,
с другой, под этой красотой таятся грабли.

Поделитесь, плз, своим субъективным мнением по поводу того, как изменился порог вхождения в Джаву с появлением вот этих всех функциональных фишек со стримами и лямбдами.

Молодёжи будет легче всё это освоить?

LinkedIn

Лучшие комментарии пропустить

По-моему, порог никак не изменился. Для работы на джаве надо знать довольно много помимо собственно языка, и на этом фоне новшества восьмерки слишком малы, чтобы делать погоду.

граблей стало больше, как я понимаю.
покрывать код пифоманс-тестами теперь не роскошь, а необходимость.
Мда. Среднестатистическое джава приложение:
— получам ХТТП-запрос из сети
— парсим все в ПОДжО с помошью ревлексии
— пробрасываем через спринговые прокси и возможно какой-то АОП
— делаем бизнесс-логику
— передаем данные в какой-то мутный «ДАО-фремворк» (хибер или скорее спринг-дата + хибер)
— делаем сетивой запрос в БД
— и все в обратном порядке.
---
Сто пудов торвозить будут лямбды и стримы!
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

скоро джава 9 выйдет, а они всё 8-ую мусолят...

скоро джава 9 выйдет, а они всё 8-ую мусолят...

Скоро ... как скорый поезд :) (скажем спасибо ИБМу и РедНату)

Собеседование,
Вопрос: а как у вас с Джава-9?
— Никак, она ещё не вышла,
— Хм, плохо. Выйдет 9-я, а вы её не знаете.

документация и принципы/примеры работы уже есть, кто не ленивый (в отличии от меня :D ) может уже и знать %)

Типичное собеседование на синьера:
изменения в 9ке? — не знает. 8? ну стримы там добавили, кроме стримов тоже ничего не знает, да и стримы тоже не знает т.к. не пользовал их. Спринг? ну есть на проекте и в резюме, но на вопросы ответить — нет, какие там пост процессоры, кому они нужны? Скоупы бинов? С вас 2 штуки хватит.
Хибернейт? JPA? то же самое...
Да и вообще, 5-7-10 лет опыта, а тут такие вопросы глупые задают, что за мода пошла, и вообще он же программист, а не спринг конфигуратор...
Java core? ну так equals и hashcode отличить может друг от друга, многопоточность и JMM? да кому оно нужно? вы что часто этим пользуетесь?
GoF паттерны? SOLID? это у джуниоров спрашивайте, я уже давно выучил почти забыл, ладно расскажу вам про синглтон... RestFul/SOA Architecture/Microservices? тоже нет?
Jenkins, CI/CD? видели знаем. А как настроить? не ну там специальные девопсы были и вообще зачем оно надо?
Ну давайте хоть задачку попробуем на листике решить. — на листике код писать? пффф... ну окей...
Вот так как-то обычно и получается... а потом в сухом остатке человек немного знает java core и красиво нарисовал резюме... и что он делал свои 5-7-10 лет работы?

такой человек тебе гордо скажет что решал проблемы бизнеса :) и не важно что создал еще больше проблем

такой человек тебе гордо скажет что решал проблемы бизнеса

и частично таки он будет прав)
у нас тут на проекте новый иненер ошибвается , уже месяца 4 как, все команду на митинги тягал по лямбдам и стримам, в итоге зашел на гитхаб поискал, а от него два мерджа и оба там где он каике то зависимости из пом файла удалил) сука))))

Ксати

Типичное собеседование на синьера

повеселило ибо оочень много правды в этом есть)

такой человек тебе гордо скажет что решал проблемы бизнеса

Ну дык проблемы бизнеса тож ктото должен решать, а не ток всякой фигней заниматься, вроде постоянно повторять что такое

RestFul/SOA Architecture/Microservices/Jenkins, CI/CD

 И прочее из списка, ато вдруг внезапно собес проходить нужно...

Так они ж на одну решенную 10 новых делают...

а потом в сухом остатке человек немного знает java core и красиво нарисовал резюме... и что он делал свои 5-7-10 лет работы?

работу работал на работе)))

изменения в 9ке? — не знает.

И правильно делает!

какие там пост процессоры, кому они нужны

Шутка про бинфакторипостпроцессор.

Скоупы бинов? С вас 2 штуки хватит.

Так их действительно 2 (В не веб сприговых контекстах). Да, я помню про бинфакторипостпроцессор и про кастомные скоупы.

это у джуниоров спрашивайте, я уже давно выучил почти забыл

Не забыл, а обучился на обучающей выборке. «grind that knowledge into your fingers, eyes, and gut by working hard and practicing» ©

многопоточность и JMM? да кому оно нужно? вы что часто этим пользуетесь?

Посмотрел в код текущего проекта. Последний коммит, который содержал в себе ручную работу с потоками был в 2008 году.
(А указателей, ручного выделения памяти, и пушки нацеленной в колено вообще нет)

Вот так как-то обычно и получается... а потом в сухом остатке человек немного знает java core и красиво нарисовал резюме... и что он делал свои 5-7-10 лет работы?

Сидел 5 лет на проекте с 2 спрингом, 6 джавой, и

решал проблемы бизнеса

А если серьездно — не хотелось бы работать с человеком которого вы тут описали...

Хм, ну внезапно бывают проекты, не втискивающиеся в типичные rest/spring/hibernate

и на них происходит адский пиzдорез если по случайности людей наняли как всегда .

Java core,GoF,SOA Architecture/Microservices

Ось це какби потрібно. А ще алгоритми і структури даних, можливо ентерпрайз паттерни.
Решта зазвичай або не використовується, або уже задизайнено/натюнено і устаканилось і робиться за зразком. А якщо нема досвіду і треба зробити, невже в сраному Дженкінсі важко розібратись буде? Кожен подібні речі колись успішно робив вперше. У декого це «вперше» ще не настало.
Інше питання, знання трьох-/чотрирьох-/пятибуквенних абревіатур не означає, що людина буде адекватно писати чистий код і вибирати вірні стратегії рішення проблем. Як це взнати — хз.

А то понабирають компетентних СпрінгХібернейтТомкат кодерів, а будь-яка проблема, що не вписується в стандартну унилу крудовщину перетворюється в тонни гавнокоду.

но на вопросы ответить — нет, какие там пост процессоры, кому они нужны?

легко. Жеке Борисову, чтобы делать прикольные доклады. И лиду проекта, чтобы лекго по джавадоку author составить список людей на увольнение.

Скоупы бинов? С вас 2 штуки хватит.

Тут одним джавадоком не отделаешся, надо смотреть историю в конторле версий.

многопоточность и JMM? да кому оно нужно? вы что часто этим пользуетесь?

Многопоточность — хороший инструмент чтобы проверить на собеседовании способность кандидата думать.
А вот при продакшн работе получаем интересный парадокс: те кто способны этим пользоваться, стараются не пользоваться; а те кто «часто этим пользуетесь» как правило очень жестко лажают.

GoF паттерны? SOLID?

1) Возьмите оригинал книги ГоФ и читайте ее (в прямом смысле слова «от корки до корки») до тех пор пока не поймете почему «спрашивать паттерны» *нельзя* (я читал давно, но кажись там это было написано)
2) SOLID уже давно не в може, пацаны спрашиваю GRASP, уже лет 5 как

RestFul/SOA Architecture/Microservices?

... и еще много крутых слов написано на бампере
1) RestFul — пишется по другому. Очень интересная опечатка такая же как и Clojure/Closure
2) SOA Architecture — надо понимать что это термин скрывает за собой куда больше чем приложения которые между собой общаются удаленно (это то что под этим термином понимают те кто спрашивают его сейчас)
3) Microservices. Что Microservices? Скажет вам человек что знает Microservices. Как вы это проверите? И зачем?

Jenkins, CI/CD? видели знаем. А как настроить?

Тоже интересная формулировка «CI/CD». CD — это не то что может «настроить» 1 программист. Построение CD — это уже менеджерская задача.

Ну давайте хоть задачку попробуем на листике решить. — на листике код писать? пффф... ну окей...

Раскроете задачу/задачи которые вы даете решать на собесеовании на листике? У меня за 5-10 лет есть только одна более менее вменяемая, и ту даю для затравки, как начало для разговора.

Часто те, кто хорошо умеют настраивать Jenkins, в основном только этим и занимаются. А нанимали то по другому профилю.

Так я же о том и написал, java-core наше все, а остальное от лукавого, пусть этим занимается тимлид/девопс/менеджер...

Так я же о том и написал, java-core наше все, а остальное от лукавого, пусть этим занимается тимлид/девопс/менеджер...

Не зна что вы там писали, но написали вы сценку «как проводит собеседование человек, который вообще не понимает зачем он это делает».

java-core наше все

Интересный факт LinkedList — это двусторонняя очередь. Вот только зачем об этом знать программисту? Оно же даже не тред-сейв.

1. хоть вы и приняли все очень буквально, но сценка явно утрирована
2. стоит понимать что у каждого вопроса есть свой контекст, который тут явно не описывался, и по факту вопросы и темы вырваны из него.
3. у каждого интервью есть определенная цель и задачи, и если перед вами как перед интервьюером ставят задачу оценить уровень знания спринга, то скажите мне пожалуйста, чем плохи вопросы про скоупы бинов и бин пост процессоры?

Интересный факт LinkedList — это двусторонняя очередь. Вот только зачем об этом знать программисту? Оно же даже не тред-сейв.

В очень абстрактном мире так можно ответить на 95% вопросов, с Java-core не поспоришь, и то при желании можно. Но обычно от интервьюеров требуют конкретные оценки знаний кандидата по разным технологиям.

и если перед вами как перед интервьюером ставят задачу оценить уровень знания спринга

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

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

Человек будет заниматься написанием постпроцессоров и будет руками устанавливать скоуп бина? Если да, то снова же надо валить, ибо кодовая база в отвратном состоянии.

Но обычно от интервьюеров требуют конкретные оценки знаний кандидата по разным технологиям.

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

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

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

Тут скорее понимает ли человек, как работает спринг под капотом, или для него это просто магия, которая работает.
Для большинства задач этого не нужно, но иногда может секономить несколько часов времени.
Ну и выиграть футболку на Пазлере)

Для большинства задач этого не нужно, но иногда может секономить несколько часов времени.

1) Как часто это иногда наступает?
2) Сэкономить относительно чего? Относительно гадание что тут могло случится? Или относительно отдебажить сценарий?

Тут скорее понимает ли человек, как работает спринг под капотом, или для него это просто магия, которая работает.

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

Возвращаясь к dou.ua/...​rums/topic/20395/#1218019
Большинство вопросов из указанных там, по факту, проверяют только то насколько человек «интересуется окружающим его миром», читает ли он актуальные статьи, смотрит ли актальные видео связанные с работой.

Как часто это иногда наступает?

За последние 1,5 года 2 раза :)

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

Вот пришел ты на огромный проект, на котором уже допущено много глупостей... И тут понимание того, как работает спринг может тебе секономить время. Так как ты посмотрев на глупость сразу понимаешь, где она может аукнутся. Увидел необычную анотацию, нашел по проекту кастомный пост-процессор который с ней что-то делает. И возможно это тебе секономит чуть-чуть времени.

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

А еще проверяет относится ли этот человек к той категории людей, которые настолько долго не могут найти работу, что учат вопросы на собеседования.
Я бы не доверял человеку с 5 годами опыта, который заучивает названия паттернов, и их академические определения.

Так как ты посмотрев на глупость сразу понимаешь, где она может аукнутся.

А что если глупость сделана очень «профессионально»? Бытают такие отжиги (особенно с постпроцессорами и АОП) что код выглядит нормально, а сайдэффекты появляются в рантайме при подключении какой-то либы.
Уменее дебажить куда эффективнее знания спринга.

1) Как часто это иногда наступает?

Дайте угадаю, если часто то нужно валить?

Вот пример про спринг под капотом:
Большой проект, некие проектные библиотеки апдейтятся раз в 1-2 недели, и через раз ломают контексты, да так что починка может вылиться в апдейт на несколько дней.
И да вы правы, получить знания в спринге можно быстро, а вот получить умение эффективного траблшотинга уже нет.

1) Как часто это иногда наступает?
Дайте угадаю, если часто то нужно валить?

Не факт, резюме, конечно обновить стоит, но сначала просите прибавку + должность которая позволяет раздавать звиздюля.

Большой проект, некие проектные библиотеки апдейтятся раз в 1-2 недели,

Зачем?

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

Тем более зачем?

Большой проект, некие проектные библиотеки апдейтятся раз в 1-2 недели, и через раз ломают контексты, да так что починка может вылиться в апдейт на несколько дней.

Але ми ніхрена для усунення цієї ненормальної ситуації робити не будемо, а знайдемо супердевелоперів, які за допомогою гавна і палок бінпостпроцесорів і бінів з кастом скоуп будуть героїчно боротись з наслідками ? :)
P.S.
Хоча насправді нічого кримінального в задаванні на співбесіді питаннь по типу «як це працює під капотом», не бачу. Питання скоріше в почутті міри: добре, коли кандидат відрізняє масляний фільтр від радіатора, вимагати від нього описання фізики процесу запалювання не завжди доречно, а вимагати описання можливих типів і конструкції форсунок — скоріше за все недоречно.

Когда решение таких проблем будут автоматизироваться, профессия программист перестанет существовать.

Если на собесе спрашивают только про спринг, то это верный знак унылого проекта

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

Вы снова не вникая в контекст делаете выводы.

Человек будет заниматься написанием постпроцессоров

Постпроцессоры это скорее вопрос со звездочкой, который вытекает из жизненного цикла бина.

и будет руками устанавливать скоуп бина?

Просто интересно, как вы с этим справляетесь в своем проекте?

В примере с постпроцессорами, сможет ли он быстро в них разобраться если понадобится.

Т.е. если спросили знает ли кандидат что-то про пост процессоры, то мы уже больше не сможем узнать способен ли он в них разобраться?
Не знаю как вы, но я например по одному вопросу аж никак это определить это не смогу...

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

Это все хорошо, но не противоречит желанию оценить знания кандидата более подробно.

Вот есть например такой вопрос: как создать иммутабельный класс?
По сути имьютбл классы тоже никто каждый день не пишет, если только не работает плотно с многопоточностью или аккой, но ответ можно дать немного пораскинув мозгами и вспомнив основы java, что кстати вполне наглядно показывает как мышление так и знание в языке.

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

Спринг и хибернейт нифига не новомодные технологии

Этот тред начался с комментария про Java-9

Ну, про Java 9 закончил читать с мыслью «Бесперспективняк, мб через год-два почитаю» после того, как прочитал про изменение к доступу к приватным полям через рефлекшн... (Кстати, в спринге запущеном на 9 джаве как работает @Autowired в приватные поля)?

А вопросы по новомодным технологиям и т.п. задают для того чтобы узнать готов ли разработчик на них писать завтра же

Большинство разработчиков готовы писать завтра-же на чем угодно. А разобратся на уровне код-макаки с большинством новых-страшных технологий модно за 2-3 дня. Что-бы разобратся глубже — с ними надо глубоко работать. На пет проекте на 8 часов в неделю это достаточно тяжело.

Кстати, в спринге запущеном на 9 джаве как работает @Autowired в приватные поля

В 9-ке выпиляли setAccessible? ... Хотя какая разница, все адекватные люди пользуются инджектом через конструктор.

Ага, кидает эксцепшн. Собственно из-за этого и большая часть слёз

Ага, кидает эксцепшн. Собственно из-за этого и большая часть слёз
Хотя какая разница, все адекватные люди пользуются инджектом через конструктор.

Угу, неадекватных оказалось много)

Угу, неадекватных оказалось много)

Тут 2 причины:
1) Исторически спринг начал евангелизировать инджект через конструктор пару лет назад и то не очень активно.
2) Почему-то на собеседованиях очень редко просять обяснить почему и когда лучше какой инджект использовать (и то только с целью по...ть что человек какое-то место где автовайрд можно повесить). А в основном пытаются под...ть на дурацких вопросах.

1) прокол авторов спринга
2) подискутировать как лучше, можно и без глубоких познаний в спринге у кандидата. Меня периодически спрашивали по технологиям, о которых я сразу говорил, что что-то слышал или поверхностный опыт, отвечал, что если подумать логически, то надо так то. Интервьюверов устраивало.

подискутировать как лучше, можно и без глубоких познаний в спринге у кандидата.

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

Это поведение зависит от конфигураций, и по идеи не должно влиять на легаси код который не использует модуляризацию.

Куча старых либ сразу посыпались

Как будто спринг — единственная причина использовать

setAccessible

Есть много ситуаций, когда это надо делать не от легкой жизни... И альтернативы этому могут измерятся в человеко-годах.

Есть много ситуаций, когда это надо делать не от легкой жизни... И альтернативы этому могут измерятся в человеко-годах.

Расскажите подробнее, пожалуйста

Древняя либа написанная в 2004 году индусом, который в 2015 году умер от старости содержит баг, который можно исправить подсовыванием в приватное поле одного обьекта из этой библиотеки своего обработчика, вместо захардкоженого.
Библиотеку нужно использовать, так как кроме всего она решает какие-то бизнес-задачи, которые уже никто не понимает. Но решает правильно. Исходников нет.

В общем, сценарий понятен, если предположить что система для фин организации.

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

А что если найдется баг, что в ифе нужно условие подправить? Будем байт-код патчить?

Декомпилировать и поправить. С джавой 2004 года древний jad без проблем управится.

Був би дуже вдячний усім відповідальним за рекрутинг, якби вони щоразу задаючи таке питання, додавали коментар типу: «так, ми шукаємо людину з широким кругозором для того щоб сапортити жахливий гамнокод 15-річної давності».

А то нагадало ситуацію у однієї людини, котру питали як зробити кол до restful api щоразу відкидаючи відповіді з коментарем «а ще як» допоки він не даунгрейднувся аж до HttpURLConnection. А потім виявилось, що код так і написаний.

еще полно старого кода который написан по другому

и если перед вами как перед интервьюером ставят задачу оценить уровень знания спринга
Вы снова не вникая в контекст делаете выводы.

Какой контекст я упустил?

и будет руками устанавливать скоуп бина?
Просто интересно, как вы с этим справляетесь в своем проекте?

Очень просто: у бинов есть только один скоуп — синглтон! Никакого прототайпа, реквеста, сессионных или, не дай бог, тред скоупов нет.

Т.е. если спросили знает ли кандидат что-то про пост процессоры, то мы уже больше не сможем узнать способен ли он в них разобраться?

Проблема в том что если кандидат не ответил (как в вашем примере) на вопрос про постпроцессоры, то это не значит ровным счетом ничего.

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

Я согласен, предполагая что вы пропустили «не» после «и т.п. задают».
Проблема в том что человек может __интересоваться не тем что вы спрашиваете__. Поэтому если человек не ответил на 1 такой вопрос, то проще поставить вопрос «А расскажите что вы прочитали за последний месяц».

Вот есть например такой вопрос: как создать иммутабельный класс?

Интересно что в своем опусе, вы как-то упустили вопросы из этой серии :)

Какой контекст я упустил?

Наверное не вы упустили, а мы явно не обозначили, так что мы обсуждаем скорее всего отличающиеся ситуации.
Но давайте представим вариант когда нужно набрать пару команд разработчиков, для чего проводится множество интервью разными интервьюверами. Как потом анализировать результат и принимать решение? Пете понравился Вася, потому что он хороший парень и на C 10 лет писал, явно опытный разработчик, и наверное быстро выучит спринг который он не знает, но для проекта обязателен. Что делать если кто-то уже прособеседовал такого же Васю, но который отлично знает спринг или сильнее в базах данных?

Проблема в том что если кандидат не ответил (как в вашем примере) на вопрос про постпроцессоры, то это не значит ровным счетом ничего.

Все зависит от того что уже обсудили, но если ответит то думаю плюсом к скилам по спрингу это все таки можно считать.

Я согласен, предполагая что вы пропустили «не» после «и т.п. задают».

Действительно пропустил.

Проблема в том что человек может __интересоваться не тем что вы спрашиваете__. Поэтому если человек не ответил на 1 такой вопрос, то проще поставить вопрос «А расскажите что вы прочитали за последний месяц».

Согласен.

Интересно что в своем опусе, вы как-то упустили вопросы из этой серии :)

Но и на подробное описание вопросов и тем на 1-1.5 часовое интервью это вроде тоже не похоже?

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

Ситуация таки из серии «валить надо с этого места» (как я и говорил). Пару команд сразу набрать не возможно, можно набрать людей в количестве необходимом для пары команд.
Получим полный бардак на несколько итераций.
Взять лидов синьоров и пусть подбирают под себя команды.

Как потом анализировать результат и принимать решение?

1) Решение __должно__ быть субъективно. Каждый интервьюер должен еще и ответить на вопрос «Хочу ли я работать с этим человеком?»
2) Все интервьюеры должны иметь одинаковое представление о том чем будет заниматься нанятый человек. Красный флаг (очень часто) тут если в описании этого понимания присутствуют названия конкретных технологий.
3) Должно быть по крайней мере 2 интервьюера. Если нет желания чего-то думать, то берем 3 штуки и дальше голосование.

Но и на подробное описание вопросов и тем на 1-1.5 часовое интервью это вроде тоже не похоже?

Ну минут на 40-60 вопросов там хватит, в предположении что кандидат пытается что-то отвечат, а не коротко «не знаю».

нередко бывает что интервьювер вообще левый человек и не из той команды куда хайрят, его попросили оценить скиллы — он сделал. а пункты 1 и 2 ему пофигу, т.к. он с ним работать не будет, и чем будет заниматься тоже не знает. меня часто привлекали как независимого интервьювера. по большому счету мне (как интервьюверу) вообще пофиг наймут человека или нет, поэтому палки в колеса я ему вставлять нарочно не буду чтоб «завалить».

нередко бывает что интервьювер вообще левый человек и не из той команды куда хайрят,

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

поэтому палки в колеса я ему вставлять нарочно не буду чтоб «завалить».

«Палки в колеса» не будет вставлять любой адекватный человек :)

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

существующих людей в ней нет
более-менее похожие технологии.

Людей нет, а решение об используемых технологиях уже кто-то принял. ... Точно не галера.

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

так и появляются на предприятии всякие САПы и прочее глюкалово

Тогда обычно участвует лид будущей команды.

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

так что пока будут мусолить 9-ю, некоторые только перейдут на 8-ю в продакшене

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

В основном в случае когда они завязаны на какую-то САПовскую ДжВМ или типа того. Старая версия джавы — это дырка в безопасности. Но думаю, даже с учетом этого, софта на старых версиях будет процентов 20-25.

Когда Оракл объявляет EOL, таки переходят на следующую

Вроде и кажется, что Java 8 проста, но достаточно сюрпризов и неожиданностей. Об Optional я написал небольшую статью it-simulator.com/#/articlefull/274

полезная статья.
С Джавой нужен глаз-да-глаз: тут читаем, тут не читаем, тут рыбу заворачивали.
youtu.be/hOrLrLPsv1k?t=32s

Сделать всё круто, но кое-где криво -это старая традиция ещё со времён Sun.

c Параллельными Стримами тоже не всё однозначно, есть грабли:
www.coopsoft.com/ar/Calamity2Article.html

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

Да ладно, с Optional всё как раз ясно-понятно как и со стримами. Тут более запутаная вещь есть stackoverflow.com/...​cute-in/46062939#46062939

По-моему, порог никак не изменился. Для работы на джаве надо знать довольно много помимо собственно языка, и на этом фоне новшества восьмерки слишком малы, чтобы делать погоду.

когда Джава была простым языком (JDK 1.4), даже и тогда всё было непросто,
и даже без Спрингов\Хибернейтов бывало ппц непросто.

Теперь же, Джава уже не простой язык, имхо.

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

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

Новые фичи восьмерки требуют двух-трех дней изучения. Это капля в море по сравнению с тем, сколько времени требуется на вхождение в джаву с нуля. Более того, если мы говорим о вхождении, то на собеседованиях от джунов ждут хорошие знания Кора, а дженерики, многопоточность и т.п. могут спросить только для галочки.

Новые фичи восьмерки требуют двух-трех дней изучения.
Вам или новичку? Я ниже писал, как только я начал читать о лямбде и стримах, понял, что надо подтягивать то, что хотел оставить на позже. А по многопоточности мне к примеру давали тз очень даже не для галочки.

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

Для того, чтобы знать о новых фитчах — да, два-три дня достаточно. Что уметь использовать — где-то пару недель знакомства.

вот, не благодарите

Много интересного- но все же это не rocket science.

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

стримы и лямбды это просто мелочь по сравнению со всем остальным

стримы в джаве довольно таки куцые

scala

Это про какие стримы ?

col.stream().filter().map() и так далее

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

это как с котами, смотря как приготовить

Стал немного выше, так, как для освоения новых фич надо хорошо знать основу.
До 8 java разбор разных анонимных классов и подобного можно было оставить на потом, а теперь надо знать.

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

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

Вопрос был по порогу вхождения. Спасибо за ответ.

как изменился порог вхождения в Джаву с появлением вот этих всех функциональных фишек со стримами и лямбдами.
Для начала нужно одбросить, в основном маркетологические, бредни про «функциональные фишки». Если это сделать, то приходит понимание что ничего не помянялось в плане порога вхождения. За счет чего он должен значимо вырости не понятно. За счет АПИ для 5 классов и пары довольно простых синтаксических конструкций? Так это соизмеримо с апдейтом любого фреймворка.
С одной стороны, код стал лаконичнее,
с другой, под этой красотой таятся грабли.
Основная проблема — это люди которые еще «не наигрались». Например, вместо построения стрима (даже если там простая мап-коллект операция), заменяют цикл на метод forEach в котором набрасывают с список и радуются что заюзали новое АПИ.
заменяют цикл на метод forEach в котором набрасывают с список и радуются что заюзали новое АПИ.
некоторые люди просто не любят for-statement

хотя сам по себе forEach тоже плохо, лучше map или reduce

map не терминальная операция, не является эквивалентом.

ясен пень, но пости всегда вы либо делаете ремап либо аггрегируете данные

а коллект то зачем? Чтоб рядом ещё стрим открыть и потом ещё?

а коллект то зачем?
Потому что мап или фильтер какой-то, как вы написали выше, «не терминальная операция» :)
Чтоб рядом ещё стрим открыть и потом ещё?
Вот этот посыл не очень понял.

Да постоянно же встречается когда один метод выполняет стримовые операции, нпример тот же мап, затем собирает результат в какой-то лист и уже этот лист передаёт дальше, где тоже открывается стрим, выполняется, например фильтр и коллект затем снова и снова.
Думаю от этого и появляются мысли что стримы тормозят, текут и прочее. Т.е. когда создания стрима+коллект в коде больше ччем полезных действий.
Идея то была раз открыть стрим и закрыть его терминальной операцией совсем на выходе.

чаще всего чтоб вернуть обычный List<>

у forEach есть недостаток — в нем можно использовать только финальные переменные, а в обычном цикле любые.
это приводит к извращениям типа атомиков для того чтобы инкрементировать простую переменную внутри лямбды. и нафига извращения ради извращений?

я поначалу когда осваивал восьмерку тоже пихал всю эту функциональную хрень куда только можно. потом меня коллеги убедили (и я частично согласился), что тотальная лямбдизация запутывает код и делает его менее читабельным

но, каюсь, вообще я люблю лямбды и если мой полет души не прервут на код ревью, могу такой жести нагородить что сам через год хрен пойму что написал :-))))

та насрать если чесно, я бы еще больше накинул вкусного что бы народ испужался
после haskell не страшно бгггг

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

Посмотри на Го. Мне он решительно не нравится, но если напрягают разные модные свистелки, Го — как раз то что нужно. Как С со сборщиком мусора и многопоточностью. Проще некуда.

Забыли добавить что он без дебаггера. Или что-то поменялось? И на C не было/нет многопоточности?

Дебаггер уже сделали по требованиям трудящихся — github.com/derekparker/delve . Встроен во все популярные IDE для go.

надеюсь ты им не пользуешься?

Не пользуюсь — дебаггер для слабаков :)

И на C не было/нет многопоточности?
Есть, но ей намного сложнее пользоваться по сравнению с:

go doThisInGoroutine(foo, bar, baz)

Мене нові фічі порадували. До того писав за допомогою Апач коммонс колекшнс тому особливих проблем з розумінням не мав. Щодо молоді — не знаю, мабуть, що важче буде, але не дуже.

чисто имхо, новичкам придётся осваивать 2 Джавы:
— старую-добрую
— новую-модную

т.о., она теперь оправдывает своё название: Java-2
(или лучше Java х2)
***
мои первые впечатления от Джавы −8 были условно такими:
— а чо это вы сделали с моей любимой Джавой? она какая-то не такая, вся посинела.
— она стала круче, вот и вот, правда круто?
— хм, а почему у неё топор из спины торчит?
— а это функционально.
— маать вашу за ногу.

как-то так, но потом сживаешься со всем этим,
программист-же не собака, привыкает.

Меня всегда интересовал вопрос оно то можно и лаконично, но а как с перформансом ;)

граблей стало больше, как я понимаю.
покрывать код пифоманс-тестами теперь не роскошь, а необходимость.

Шипилев показывал, что все не так уж и плохо. Даже хорошо. Так что если вопрос не в милиссеках то пользуйтесь без проблем.

граблей стало больше, как я понимаю.
покрывать код пифоманс-тестами теперь не роскошь, а необходимость.
Мда. Среднестатистическое джава приложение:
— получам ХТТП-запрос из сети
— парсим все в ПОДжО с помошью ревлексии
— пробрасываем через спринговые прокси и возможно какой-то АОП
— делаем бизнесс-логику
— передаем данные в какой-то мутный «ДАО-фремворк» (хибер или скорее спринг-дата + хибер)
— делаем сетивой запрос в БД
— и все в обратном порядке.
---
Сто пудов торвозить будут лямбды и стримы!

Но есть маленькая плюшка в виде параллельных стримов, правда малоприменимая в энтерпрайзе

например нельзя шарить хайбернейтовский коннекшн , а без этого оно бесполезно. что это за код в ентерпрайзе который не обращается к базе данных?

В скале со временем на перформанс тупо забиваешь) .
Ну не совсем тупо, алгоритмическая оптимизация есть, но считать сколько объектов выделолось для того чтобы простой редьюс сделать — не барское это дело :-)

но считать сколько объектов выделолось для того чтобы простой редьюс сделать — не барское это дело :-)
И это правильно в некотором смысле:
Какая разница сколько чего создалось, если оно чистится за __приемливое__ время? Какая разница насколько длинная цепочка вызовов, если она отрабатывает за __приемливое__ время? Почему-то никто (помимо ХТФ и тд) не парится про итеретор для цикла или про аррейлисты вместо массивов.

Давайте, пожалуйста, обсуждать перфоманс языка после IO перфоманса. А так-то конечно все эти Groovy, лямбды, AOP и прочий Lombok добавляют лаконичности и выразительности, но ценой миллисекунд же!

Или у вас именно такой проект, что большие объёмы данных в памяти обрабатываются?

В новых требованиях SLA прописаны до миллисекунд. Можно сказать каждая наносекунда на счету.

Оу! Я с таким не работал, плохо представляю специфику. Если не затруднит, пару вопросов. А как же всё таки с IO? Всё закешировано? Или вообще IO нет? Трейдинг? Почему Java в конце концов? Как с GC?

Я почему-то думал, что если нано-милисекунды, то такие вещи делают в железе на ASMе-С.

Не трейдинг, но рядом. Потому джава и не на железе.
В начале дня все в память а потом слушаем риалтайм апдейты. В текущей системе используется Oracle Coherence. Все впринципе весьма быстро, но надо намного быстрее :)

Проблемы: неконтролируемое использование потоков фреймворками, тем же кэшэм. Что влечет за собой спайки в SLA и огромная нагрузка на GC той же природы.

Недавно бизнес захотел все сделать быстро, понимает что все не моментально будет. Вот смотрим в сторону LMAX подобных подходов сейчас.

Недавно бизнес захотел все сделать быстро

знакомо.
при том, что метрология, как предметная область в целом, и SLA tools — адокъ тот ещё,
доводилось пилить, но не для банка, к счастью.
Один проект был «пожилым стартапом», второй «кацапским распилом»,
такие мсье, шо хай им грець.

Основными проблемами было:
— а для чего вам это надо?
— не скажем, вы вот делайте, а мы не скажем зачем
или
— вот сделайте сюда график, красненьким и зелёненьким.
— а эти данные на сервере есть? как их аггрегировать, откуда?
— а мы х*йегознает, вы нам график красненьким и зелёненьким, и быстренько.
— ну нате, вот.
— а чёто неточный он у вас.

Быстренько, я т мел ввиду по отношению к приложению. Чтобы быстро работало :))

А на счёт методологий — то это даже не смешно, когда работаешь во Фронт Офисе:)

Можно сказать каждая наносекунда на счету.
ИМХО Java как то не выглядит наилучшим инструментом

Системе лет 10 не я придумал. Иначе бы попросил Ви на Го все написать ;)

ваяют на Джаве и трейдинг и SLA, и живёт норм

Видел интересные штучки. Когда кабель соединяют с коробкой где уже все есть и быстро работает. Грубо вместо кабеля с сетевой коробочка котора все делает мгновенно.

Да знаю что ваяют, но все равно удивляет

чего только не ваяют.
я видел аппликейшн на Джаве который не использует стандартные коллекции (и вообще никакие стандартные библиотеки), чтоб не вызывался сборщик мусора. вместо этого используются кастомные аллокаторы памяти, по сути как в Си.
и все это работает (сюрприз!) в трейдинговой системе «одного крупного инвестиционного банка».
только не пойму нафига они все это слепили на Джаве, если на C++ было бы шустрее

Наверняка это слипили сишники, которых пересадили на джаву.

foreach цикл и явное использование итераторов самые быстрые. Бенчмарки и разборы граблей в сети есть.

Не понимаю. Код понятнее и лаконичнее. Может даже lazy выполнение, которое отменится вообще. Задержки на IO, навскидку, на 4 порядка больше(!). Если это так, как практически заметить быстроту foreach цикла-то?!

Если нет, и борьба идёт за наносекунды, как в треде выше, то почему вообще Java?

Я только ответил на вопрос без учета IO и т.д.

Серьезно ?
То ты скалу еще не юзал.
Я уже который год пишу на скале, и каждый год понимаю что не знаю о ней почти ничерта ).

Подписаться на комментарии