18 июля 2025

О стабильности у программистов

Время идет. Даже бежит. Меняются языки программирования. Меняются фреймворки. А программисты не меняются...

Третьего дня (как человек не молодой, могу позволить себе так выразиться) в чате одного проекта, где я отвечаю за базу данных, разработчикам задали вопрос:
- Подскажите пожалуйста, есть ли в агрегации обработка на null? не упадет, если какое-то значение null будет?
Вопрос был задан, т.к. месяц или два тому назад в агрегации уже всплывала проблема с NULL. Ответил разработчик, который считает себя сеньором:
- Перепроверил. Агрегация применяется после наполнения модели с существующими данными. А там главный риск это поле value и мы чекаем его на наллы: Value = reader.IsDBNull(3) ? 0 : reader.GetDouble(3). думаю всё ок будет.
Приведенная строка кода навела меня на мысль, что сумма в агрегации считается в цикле на бэке. Сказать, что был я удивлен - это значит ничего не сказать.
Я: - Зачем тянуть на клиента строки с null? Просто добавьте в условие запроса "value is not null". Да и в общем подход с циклом в программе - это рукожопство. Вы тащите через сеть кучу данных, чтобы суммировать в приложении. Вангую, что еще и все поля тащите. Для определения суммы надо использовать в запросе агрегатную функцию SUM.
Сеньор: - Переделывать это трудоемко и потребует много времени, которого теперь нет.
Я: - Расскажи мне, что тут трудоемко? Изменить запрос, чтобы читал не все поля, а только сумму VALUE и выкинуть цикл подсчета суммы.
Сеньор: Не, сама идея ок. у меня будет несколько вопросов. как свободнее чуть будем, предлагаю созвониться. можно на троих, Сереже наверное тоже будет интересно.

Это попахивает каким то анекдотом: "Скольким программистам надо созвониться, чтобы написать запрос с SUM(value)? Как минимум 3...". Больше сеньор ситуацию не комментировал. Вероятно он снова решил, что я создаю токсичную обстановку в чате проекта задавая ему подобные провокационные вопросы. 20-25 лет тому назад я иногда встречал подобный код, где из базы данных читались строки, а потом в цикле считалась сумма значений одного из полей. Современные сеньоры оказывается делают тоже самое. Стабильность...

P.S. В запросе у него действительно были перечислены все поля таблицы. Нам повезло, что в таблице нет BLOB'ов. Вчера я расписал подробно сеньору task на реализацию агрегации данных выполнением одного запроса "INSERT INTO SELECT" с использованием SUM().

2 комментария:

  1. Вот так проявляется различие между умом и квалификацией. Многие люди умеют что-то делать, но не привыкли задумываться о том, что именно они делают. Они являются заложниками шаблонов, пусть даже и весьма нетривиальных. А если какой-то шаблон потерялся-забылся, то его место заполняется каким-то строительным мусором. :(

    ОтветитьУдалить
  2. Анонимный18 июля, 2025 18:25

    Сразу надо писать ФИО сеньора, так как страна должна знать героя в лицо! т.е. HR'ы должны знать ;)

    ОтветитьУдалить