Обновить
52
5

Пользователь

Отправить сообщение

Вы не на том фокусируетесь. Смотрите на ситуацию глазами человека при деньгах, который оказался в ситуации нормализации насилия, беззакония и кучи достопочтенных джентльменов с ПТСР на свободе. Такой человек это потенциальная жертва или разбоя или рэкета. Ситуация один в один с первыми годами рыночных реформ. Одна разница - тогда не было класса наемных работников с доходом кратно выше среднего. Нищих инженеров доить было бесполезно, доили ларечников и челноков. А теперь такой класс есть - это айтишники. Когда их начнут доить - вопрос времени.

Все потуги перекрываются одной такой новостью. Минцифры, как вы считаете, когда достопочтенные ветераны узнают, что в соседнем подъезде живет айтишник Коля, который каждый месяц домой по 300к приносит, то как скоро они вежливо предложат Коле организовать ежемесячные выплаты в Фонд Поддержки Ветеранов Донбасса? Чем Коля будет утешать неудовлетворенность таким раскладом? Льготной ипотекой или подпиской на Яндекс Музыку?

Попробуйте чисто ради тяги к открытиям. Я для себя такие плюсы JOOQ отметил:

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

  • Нет рефлексии и программирования на аннотациях

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

  • Помощь от компилятора, как отметили в соседнем комменте

  • Полный контроль над маппингом из кортежа в джава-объект

  • Когда совсем уж хитровылизанный запрос, то можно в обход DSL записать его как обычный SQL-квери

Недостатки:

  • Писать вычурные аналитические запросы с CTE и оконками неудобно. Больше воюешь с DSL, а не с самой задачей. Но в то же время я еще ни разу не сдавался и таки писал запрос на DSL.

  • Раньше джук писал запросы, которые ок для Пострегрса, но не ок для Кликхауса. Буквально лишняя пара круглых скобок - и Кликхаус не может распарсить вопрос. Но это наверное уже исправили или к Клике или в Джуке.

А у меня вообще нет ответа. Думаете, я жду ответа min=2, max=22 что ли? Но в жизни есть ситуации, когда пул таки есть и его таки надо настроить. И я как раз хочу услышать примерно такой разбор. Если бы вы ответили мне таким образом, я бы считал этот вопрос закрытым.

алгоритмические секции Яндекса значительно выигрывают, потому что все знают, что там будет Литкод или что-то в его стиле.

Я не знаю, как там в PHP тусовке, но у нас если в требованиях к вакансии написано, например, знание PostgreSQL, то как бы тоже не сюрприз, что будут спрашивать. База реляционной алгебры, нормальные формы, база синтаксиса SQL, джойны, группировки, оконные функции, индексы, транзакции, изоляция транзакций, виды локов.

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

Многолетний опыт разработки на PHP мне тогда не помог от слова совсем.

Однажды будучи сеньором-помидором, я пошел на собес. Меня срезали на вопросе про оптимистичные блокировки в БД. К тому времени я имел 5 лет опыта разработки, а вот про технику оптимистичных блокировок не слышал даже. Не было в моих крудошлепских системах такого. Тогда я тоже решил, что меня "завалили" и "многолетний опыт разработки на Java мне тогда не помог от слова совсем".

Теперь я понимаю, что у меня спросили банальщину, а я не смог даже предположить, что это и как реализуется. Еще я понимаю, что иногда N лет опыта, это 1 год опыта, повторенный N раз. Это побудило меня прочитать "Книжку с кабанчиком" и сделало меня лучше, как инженера. Желаю и вам смотреть на неудачный собес прежде всего как на карьерную консультацию, а не как на экзамен, где "валят".

Упустил момент про легаси базу. Но тогда можно вызвать сначала nextval. В общем в итоге получается ровно то же, что у вас.

val newId = dsl.nextval(MY_TABLE_SEQ)
dsl.insertInto(TABLE_NAME)
  .columns(ID, COLUMN2, ...)
  .values(newId, value2, ...)
  .execute()
return newId

Обратите внимание на JOOQ в следующий раз. Ноль магии аннотаций, максимум помощи строгой типизации. Вот код, который инсертит и возвращает ID новых строк. Это Котлин, но разницы никакой.

val newIds: List<Long> = dsl.insertInto(TABLE_NAME)
  .columns(COLUMN1, COLUMN2, ...)
  .values(value1, value2, ...)
  .onConflictDoNothing()
  .returning(ID)
  .fetch()
  .map{it[ID]}

К слову, можно возвращать строки целиком, если есть задача сразу же вернуть новые энтити. И классы энтити аннотировать никак не надо.

Короче, вам не нравится, что вас судит такой же человек, как и вы, а не высший абсолют. Увы, ваши сертификаты выдавал такой же человек. И программу получения сертификата выдумывал человек. И всю эту технику придумал тоже человек, отчего она вечно несовершенна.

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

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

Смотрите, вакансия подразумевает, что человек шарит в многопоточке. Приходит кандидат со строчкой в резюме "знаю Java Concurrency". Один из моих вопросов такой. Вы создаете пул потоков. Как будете выбирать максимальный и минимальный размер пула.

Что из этого миф?

  • Миф, что нам нужен человек со знанием многопоточки?

  • Миф, что вопрос о пулах потоков показывает, что человек с ними работал и вообще тюнил системы под перфоманс?

  • Миф в том, что реальные джава-приложения не используют пулы потоков?

  • Миф в том, что пулы существуют?

  • Миф в том, что в джаве есть многопоточка?

  • Миф в том, что мы пишем на джаве?

  • Миф в том, что я вообще работаю в этой компании?

  • Миф в том, что компания существует?

Ну так зато у него и тачка крутая, и живет в роскоши. Все честно, я считаю.

Горевать о заблудших душах - дело Папы Римского. Вот он горюет, а я программы пишу и собеседую иногда. Такое вот у нас разделение обязанностей.

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

Все ищут простые пути. Одних я должен брать прям сразу за то, что у них сертификат есть. Других я должен брать прям сразу за то, что они на литкоде дерево вращают со скоростью пульсара. Третьих я должен хватать за то, что они зазубрили статьи а ля "100 вопросов и ответов на Java-собеседовании".

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

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

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

так ли уж нужно разжевывать каждый из них в отдельности?

Я сейчас менторю джуна, который, естественно, пишет дикий говнокод и нарушает SOLID на каждом шагу. Как я должен поступить по вашему? Просто сказать "пиши хорошо, плохо не пиши"? Нет, я разжевываю с ним каждый кейс. Что именно тут нарушается, почему это плохо, как сделать лучше. Эту передачу опыта я и имею в виду под просвещением. Я не в курсе, почему кто-то из минусующих и дискутирующих решил, что я предлагаю писать на хабре жалкие статьи а ля "что такое SRP на примере Delphi"

весь SOLID сводится к одной простой формуле ... И это по большому счету все. Вы правда думаете, что тут нужно какое-то отдельное просвещение

Ну знаете. Для кого-то и тригонометрия это "по большому счету" пара базовых формул, из которых выводятся все остальные. А для кого-то это сложная тема, которую разжевывают аж с 8 класса и продолжают в вузе. И вот когда нарешал пару тысяч примеров, то понимаешь, что все довольно элементарно. Чем навык писать по SOLID принципиально хуже, чем любой другой навык, что ему не нужно просвещать?

а сроки и стоимость разработки — как раз зачастую второе требование к софту, сразу после функциональности

Я еще не видел ни одного внятного доказательства, что писать по SOLID как-то принципиально дольше и сложнее, чем писать по "хуяк и в продакшн". Опять же вопрос практики. Если знаешь, что делать, - сходу пишешь быстро. Рефакторинг спагетти после бессистемного кодинга - это тоже как бы "сроки и стоимость", за которые заплатит бизнес.

Вы имеете ввиду наследование как выражения отношения is-a (которое extends в джаве) или subtyping в широком понимании (наследование классов, реализация интерфейсов)? Если subtyping вообще, то да, сразу так и не скажешь, как тут красиво OCP применить. Но если же нет, то ряд паттернов ООП как раз и строится на том, что наследованию предпочитается композиция и новый функционал добавляется без изменения старого. Это прокси, декоратор, стратегия.

Увы, SOLID так и не стал дефолтной философией разработки даже спустя 20 лет. По-прежнему доминирующий подход это методика Скарлетт О'Хары: "хуяк хуяк и в продакшн, а о проблемах я подумаю завтра". Поэтому просвещение все еще необходимо, но не в таких жалких формах.

мы не такие привлекательные для Senior’ов, как Avito, VK, Яндекс и прочие. Мы не можем постоянно Артему повышать зарплату.

Мы предлагаем Артему начать передавать свои знания в Центре Экспертизы

Круто? Круто.

Честно говорю, очень сомнительное решение и умозаключение. Сеньоров в техгигантах может привлекать совсем не зарплата, а именно что задачи топового уровня. Грубо говоря, если бэкенд вашей компании это апишки с CRUD и какие-то загрузки-выгрузки по крону, то из этого вырастаешь за год-два. Отрефакторил, отточил производительность, переписал на grpc, ну максимум переписал не реактивный стек. Все, нет больше вызовов. А у компании нет других задач. В этой ситуации энтузиасту кодинга что идти менеджить, что идти джунов учить - на самом деле одна и та же грустная перспектива, которая совсем не каждому подходит.

Информация

В рейтинге
856-й
Зарегистрирован
Активность

Специализация

Бэкенд разработчик
Старший
Java
Kotlin