pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Где эффективно учится программированию?

Лучший ответ: htmlacademy. Проверено на собственном опыте. При чем вы там найдет материалы и курсы как для начального уровня так и для продвинутого.

Худший ответ: Поступите в ВУЗ.
Вопрос: Как сделать случайной вывод ячейки из списка?

Лучший ответ: =ИНДЕКС(A1:A6;СЛУЧМЕЖДУ(1;6);1)

Худший ответ: Александр, спасибо огромное! Подскажите, а как эту формулу подружить со СЦЕПИТЬ?
Как в примере ниже, только чтобы сцеплялось не с конкретными ячейками, а из диапазона:
Вопрос: Стоит ли заказывать сборку компьютера в Ситилинке?

Лучший ответ: Если нет практики - лучше заказать :) Это исключит такие косяки, что мать не поддерживает проц, кулер не встает в корпус, БП вообще забыли при формировании заказа :)
(Два последних случая - вовсе не анекдот, а реальный случай. Есть у нас начальник отдела СПО, чел довльно умный, но очень воображулистый, считающий себя "невъе#нным айтишником". Он заказал себе новый комп, в котором:
- мать без встроенного видеоядра, а видеокарты в заказе нет
- кулер не полез в корпус
- БП в заказе не было
Комп админы ему в итоге собрали, но ржали мы над ним двумя отделами :D )

Худший ответ: все ответы даны выше и они правильные с моей точки зрения, послушайте их)
Вопрос: Чем плоха веб-студия как первая работа для php программиста?

Лучший ответ: Что то вы не то слышали.
А какая альтернатива? Самому? Вот самому с нуля - это действительно плохо.

Худший ответ: Студия студии рознь, программист программисту рознь. Буквально на днях ревьюил код двух прогеров с одной конторы. Одному из них разве что быть продавцом пятерочки, а второму разучить новые технологии и будет неплохой специалист. Вот так бывает даже. Новичку важно научиться понимать что есть хорошая разработка и стараться делать качественно. 
Идите в студию если берут и вас устраивает. Вам же нужно с чего-то начать. Даже 4 месяца это уже что-то.
Вопрос: Где кроется ошибка в коде php?

Лучший ответ: Потому что идет проверка на равенство $url и false. А они равны, если учитывать приведение типов, поэтому выполняется первый case. Вы как-то не так используете switch

Худший ответ: Пустая строка равна false при нестрогом сравнении.
Вопрос: Как и где посмотреть временный пароль root в MySQL под Ubunut 18.04?

Лучший ответ: В этой версии и дальше - нет временного пароля. После установки необходимо его создать:sudo mysql_secure_installation

Худший ответ: я так решал проблему
https://help.ubuntu.com/community/MysqlPasswordReset
Вопрос: Подменить IP в строке запроса?

Лучший ответ: Нужен роутер линуксовый, на нем squid в прозрачном режиме, у squid'а настраиваются правила url_rewrite (обычно через внешние модули) - там можно сделать все что угодно.

Худший ответ: Можно в вайле hosts прописать что куда перенаправлять.
Вопрос: Как заставить клавиатуру одновременно нажимать клавиши на двух компьютерах без дополнительного софта?

Лучший ответ: Сделайте свою физическую клавиатуру из двух arduino, каждая притворяется отдельной клавиатурой.
Два шнурка к компьютерам.
Одна кнопка, которая замыкает контакты GPIO на обеих платах одновременно, лучше с гальванической развязкой.
Нажали кнопку, каждая arduino отследила нажатие и послала клавишу/комбинацию клавиш на свой компьютер.

Худший ответ: Напишите свой драйвер клавиатуры или измените существующий.
https://habr.com/ru/post/139593/
Вопрос: Влияет ли такая архитектура бэкенда на скорость приложения?

Лучший ответ: 1. Кто сказал, что уникальный идентификатор должен называться именно id (удобно конечно, но не обязательно). Я лично приверженец иметь именно id и обязательно с автоинкрементом, но это для mysql отлично. Что там у Вас - мы и видимо Вы не знаете.
2. Кто Вам сказал, что id не используется? То что оно не попадает в json, который Вы получаете еще ничего не говорит.Как вы считаете это нормально? В чем плюсы или минусы? Может ли из-за этого подтормаживать?
Эти вопросы не могут иметь ответа при данном "обилии" информации. Надо понимать как реально и в чем хранятся данные.

Худший ответ: Тормозить фронт от отсутствия ID не будет... Но другой вопрос. Это опечатка?
{ Vasya:  { age: 30, married: true }, Petya: {}, .....
Или почему передается массив, как объект?
Вопрос: Как найти работу или стажировку начинающему python разработчику?

Лучший ответ: Если вы из Москвы, Питера, Новосиба, Казани, НН - то тыкаться по всем вакансиям, где требуется python(собственно, ничего нового).
Если вы из какого-то другого города, то ехать в города, что я указал выше, либо никак(смотреть местный рынок вакансий, и менять стек на тот, что востребован у вас на месте)

Худший ответ: средний срок устройства на работу с момента первого hello world среди моих друзей:
бекенд — 2 года
машинное обучение — 2 года
фронтенд (javascript) — от полугода до года
то что приглашают на собесы - хороший знак. значит можно хакнуть систему: выучить эти 10-15 повторяющихся из раза в раз вопросов и устроиться на работу. ­
Вопрос: Как сделать, чтобы gulp понимал es6?

Лучший ответ: В документации расписано, что нужно делать https://gulpjs.com/docs/en/getting-started/javascr...

Худший ответ: Можно связать gulp с webpack
Вопрос: Вопрос с собеседования — почему не меняется объект?

Лучший ответ: потому что в строке let products = obj.data
вы по сути в products вставляете ссылку на obj.data
а в строкеproducts = []
вы заменяете эту ссылку на другую
при этом содержимое obj.data тоже ссылка, и она остается прежней.другими словами: если вы записали на листок телефон своей девушки а потом найдя другую девушку, про старую решили забыть и зачеркнув ее номер написали номер новой девушки то прежня девушка никуда не исчезла? она ведь по прежнему сидит на своем номере телефона и ждет вашего звонка? (в данной ситуации products и есть этот листок с номером ))))
ЗЫ: был несколько невнимателен, не достиг моего мозга последний абзац вашего вопроса. Ответили вы верно.

Худший ответ: Оператор присваивания устанавливает значение переменной.  Значение переменной было "ссылочный тип", а стало "тип массив"  - действий с obj.data не производилось.
Вроде все верно ответили, единственное, что можно было бы  замолчать фразу "помещая уже имеющийся объект в переменную - мы создаем на него новый reference через эту переменную."
Вопрос: Что нужно студенту колледжа для стажировки и работы?

Лучший ответ: Советую вам набить портфолио для начала. Если негде взять реальные проекты - заходите на фриланс, ищите psd/figma макеты, что там выставляют заказчики и верстайте для себя. Без портфолио и опыта вы проигрываете в конкуренции.

Худший ответ: На данный момент я занимаюсь веб-разработкой(JS, Vue, SCSS, Git, Node.js)
??? Вы уже что-то написали на этом стэке?
Или 
let что_делать = "занимаюсь" == пытаюсь понять?усиленно_искать_стажировку(берут_студентов_старших_курсов)
: нахера_вам_стажировка;
Вопрос: Где и кто должен делать валидацию?

Лучший ответ: 1. Да, но не вручную, а через форму, которая за это отвечает - через RegistrationForm. Это же замечательный функционал, глупо его игнорировать. Один раз описываете правила валидации и форма работает.
2. Нет, они выполняют разные роли: форма занимается валидацией входящих данных, а AR-модель хранением. Я настоятельно не рекомендую тесно связывать формы с сущностями, т.е. наследовать одни от других. Их нужно держать раздельно: изменение AR-сущности User никогда не создаст вам проблем в формах, а изменение данных запроса и правил валидации формы RegistrationForm не навредит AR-сущности. Вы сможете менять их независимо друг от друга.
3. Вы должны передать провалидированные данные от контроллера в сервис. А вот как вы это сделаете полностью на ваше усмотрение: грубо массивом, особым value-объектом или предусмотреть передачу заполненной формы RegistrationForm в сервис, который сам сможет извлечь данные и выполнить работу. Важный момент: данные должны быть полностью проверены. Сервис при этом может даже не знать кто его использует, главное соблюдать публичный интерфейс.

Худший ответ: Это хороший вопрос.
Когда форма сама занимается своей валидацией, то тут вариантов немного. Остаемся в контроллере.
Но по-хорошему, если отвлечься от конкретных велосиепедов, плотно увязывающих вывод ХТМЛ и валидацию входящих в модель данных, то в AccountService должен быть метод validate().
Соответственно, из любого места, где нам надо создать юзера, сначала дергаем validate(), а потом по результатам либо выдаем ошибку, либо дергаем create()
Вопрос: Как стать Python Middle Developer?

Лучший ответ: Пойти работать(не фриланс)

Худший ответ: Junior: спрашивает "как мне это сделать?"
Middle: объясняет джуну, как сделать и интересуется у сеньёра "что ещё надо сделать?"
Senior: организует список задач (мидлу и джуну), объясняет, почему это делать не надо, а лучше сделать вот это. И делает.
Как-то так.
Вопрос именно опыта. Причём не только и не столько в Python, сколько вообще в IT и вокруг. Надо и админить хоть немного, и языки расширять и технологиями интересоваться. Книжки читать. И не только технические. 
Софт-скиллз эти самые уметь...
Вопрос: Как правильно настроить Git для Laravel?

Лучший ответ: Все нормально, благодаря настроенному .gitignore эти файлы и должны попадать, при git add . гит добавляет все файлы, но не скрытые (они начинаются с точки). Поэтому так и получается.

Худший ответ: Да, нужно настроить gitignore. .
env.examle может быть в репозитории,
.gitignore тоже нужен,
.editorconfig нужен в репо (универсальные настройки для ИДЕ и редакторов кода),
.gitattributes в репо.
Сначала настраивается гитигнор, потом оставшиеся файлы, которые не заигнорены, добавляете в гит.
При этом, если вы работаете в phpStorm, у вас в проекте будет папка .idea, которую следует добавить в гитигнор, потому что это настройки конкретной ИДЕ, которые нужны только вам.
Вопрос: Кому принадлежат права при работе в компании со стандартным трудовым договором?

Лучший ответ: Если его создали вы - вы обладатель авторских прав в любом случае, ибо авторские права неотделимы. 
Если в договоре не оговорено специально про исключительные права, то - 
поскольку создавался продукт на рабочем месте и вам платили это зарплату - предприятию принадлежат исключительные права.
Предприятие решает как им распоряжаться.Могут ли без вас менять код, если вы не давали разрешения на это? Обладатель исключительных прав решает что делать с кодом - продавать, передавать, модифицировать.

Худший ответ: Посмотрите мой ответ здесь: Забирает ли формулировка в ТД права на не относящиеся к работе результаты интеллектуальной деятельности у Работника?
В дополнение - если Вы не отчуждали свои права на авторское произведение (программу), то права принадлежат Вам. В этом случае использовать без Вашего разрешения код или его часть - нельзя.
С другой стороны, если Вы пойдёте в суд - будьте готовы предоставить всю доказательную базу, подтверждающую Вашу правоту.
Вопрос: С какими подводными камнями можно столкнуться при разработке интернет-магазина на WooCommerce?

Лучший ответ: Все строго индивидуально.
Если решили делать магазин на ВП, то однозначно woocommerce
Если есть острая необходимость сделать на фреймворке и позволяет бюджет, то выберите тот фреймворк, которым вы лучше владеете. Yii2, Laravel, Symfony, Django, Spring, R&R и т.д.
Вопрос в том, нужен ли фреймворк (что нужно вам такого специфического, чего нет в ВП и вукомер и нужно написать с нуля)

Худший ответ: Не советую делать магазин на WooCommerce, если есть деньги делайте на Битрикс или же Cs-cart, если денег нет то делайте на OpenCart. модулей и плагинов бесплатных и платных (за копейки) огромное количество в интернете поэтому сможете настроить так как хотите свой магазин.
Вопрос: Что нужно знать для программирования железа?

Лучший ответ: Вообще, если вы хотите быть именно программистом, то знание как паять и деталей схемотехники не нужны. Обычно в более менее приличных конторах разделяют схемотехника и программиста. Но в небольших конторах, это может совмещаться, однако это сильно влияет на качество.
Поэтому если вы хотите быть специалистом высокого класса, то лучше разделить две эти вещи, схемотехника и программирование. 
В целом программирования для микроконтроллеров можно как и любую другую разработку разделить на уровни.
Для простоты скажем это Уровень железа (Hardware Abstact Level (HAL)) и уровень приложения (Application или Business Level)
Для того, чтобы заниматься уровнем железа необходимо: В первую очередь знать как работает микроконтроллер, и всякая периферия от простых портов, UART, ADC, SPI и до USB, Ethernet и Bluetooth. Для этого необходимо почитать соответствующую литературу, можно статьи, коих много в интернете.  
И после этого ознакомления, самое главное, необходимо изучить оригинальные спецификации на все это, потому что только там есть правда.Необходимо знать язык программирования, для начала Си, но лучше сразу начать с С++ :). Ассемблер вам понадобиться в настоящих приложениях очень редко, только если, вы скажем, захотите написать свою RTOS . Т.е. особо без надобности изучать ассемблер не надо, но как работает ПО прошитое в микроконтроллер и сам микроконтроллер вы знать должны (Стек, как происходит вызов функций, как выполняется прерывание, как создаются динамические объекты, что такое куча и т.д.) 
Для того, чтобы заниматься уровнем приложения:  строго говоря можно про аппаратуру знать постольку поскольку, например, если у вас уже написал HAL для UART, то вам не надо знать, какие там регистры используются для установки четности или скорости, вы просто будете вызывать соответствующие функции  HAL однако тут необходимо знать дополнительно много всего, включая С++ и, например, паттерны проектирования, Операционные системы реального времени, парадигмы программирования ( к примеру, ООП, метапрограммирование) и т.д. 
В общем и целом, если контора небольшая то, для "программирования железа" необходимо уметь все от разработки схем и оптимизации кода на ассемблере до Метапрограммирования... Таких людей в жизни я не видел. Есть люди которые знают это все, но знания очень поверхностные, есть которые хорошо знают одну часть, но не очень другую.
Обычно все таки людей разделяют на схемотехника и программиста, который делает все от HAL до бизнес логики.
В идеале, должны быть 3 человека, схемотехник, программист низкого уровня (HAL, стеки, драйвера), программист бизнес логики

Худший ответ: Это зависит от проекта. Там ещё и осциллограф нужен.
Вопрос: Как на flexbox сделать две неравные колонки?

Лучший ответ: предлагаю три дива. все дисплей флекс
в первом диве блоки 1  и 2  . только направление reverse(тогда блок 1 будет справа, блок 2 -слева)
во втором диве   3 и 4 
в третьем диве блоки 5 и 6 ,  flex-direction: column;   align-items: flex-end; 
у первых двух блоков flex-wrap: wrap;
у всех вложенных блоков width:100%   на мобилках  и 50% - на  десктопах
https://codepen.io/Lareta/pen/dxoVJb

Худший ответ: Так сделайте 2 обертки в виде колонок и внутри каждой делайте строки, по сколько нужно, а при необходимом брэйкпоинте просто родителей-колонок перестройте в строки
Вопрос: Как в Java закодировать строку?

Лучший ответ: Как-то плохо вы рыли, google почти 12 миллионов результатов выдаёт на запрос "java md5".
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(a.getBytes());
byte[] digest = md.digest();
P.S. MD5 - это не шифрование, а хэширование.

Худший ответ: Плохо гуглите, https://javadevblog.com/prymer-heshyrovanyya-md5-v...
Вопрос: Стоит ли изучать nuxt.js?

Лучший ответ: На nuxt пишем проект уже пол года, все с ним отлично. Даже не понятно, как он может отдалиться от vue, если это обычная реализация ssr по стайлгайдам vue. Можете использовать его и не волноваться. Писать проект вы будете на обычном vue, а nuxt лишь поможет избежать гемора с настройкой ssr. А если увидите, что кто-то пишет будто он не гибкий - не верьте, там можно все настроить и перенастроить. Даже самые глубинные вещи. Тем более, это самая популярна ssr реализация для vue с большим комьюнити, которые уже все изучили и написали все необходимые вещи, которые могут понадобится при разработке.

Худший ответ: Nuxt очень перспективная штука. Сделал несколько проектов. Не знаю, в чем они от Vue ушли... просто многие рутинные вещи под капот спрятали. Настройка проекта производится в nuxt-config вместо файла webback. Если нужна полная гибкость и прозрачность, лучше устанавливать все вручную без всяких сборок. Но для большинства задач это не требуется.
Вопрос: Есть ли разница в изданиях «Изучаем программирование на JavaScript» Э.Фриман 2015 и 2018?

Лучший ответ: 1) Да, есть.
2) Только ES5.
3) Запрещено правилами сервиса.

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

Лучший ответ: Куки или localstorage
Хранить в виде токена, например, а не просто залогинен или нет.
И проверяться что это за пользователь скрывается за этим токеном - должен сервер обязательно. А не браузер.

Худший ответ: Куки
Вопрос: Как выйти в интернет не через vpn?

Лучший ответ: повторю свой ответ на предыдущий ваш вопрос. Настраивайте роутинг и маскарад. В этом случае вам нужен source routing, без особых извращений - либо микротик, либо опенврт....

Худший ответ: Я бы решал такую задачу добавлением второго роутера
(у пользователя справа только шлюзом другой роутер прописан)
Вопрос: Какой язык программирования стоит изучить, удовлетворяющий условиям?

Лучший ответ: Сначала начал было отвечать по существу, но ответ: никакой. Вы перечислили абсолютно разные сферы.
Может, конечно, Java подошла бы, но что-то как-то так.

Худший ответ: JS или Python но с натяжкой - потому что микроконтроллеры и нейросети две несовместимые области.
Вопрос: Для чего тег label в html?

Лучший ответ: простым языком коротко:
у каждого label есть аттрибут for, который должен совпадать с id инпута или селектора
если этот аттрибут совпадает, то пользователю не нужно целиться в чекбокс, достаточно нажать на текст, заключенный в тегах label, и значение чекбокса сменится на противоположный

Худший ответ: Вот пример https://jsfiddle.net/6zgostLc/
Вопрос: Как мне расположить объект точно в центре, независимо от экрана пользователя?

Лучший ответ: попробуйте
  body{
display: flex;
justify-content: center;
align-items: center;
}
или второй вариант:
.btn-group-vertical{
position: absolute;
top:50%;
left:50%;
transform: translate(-50%, -50%);
}

Худший ответ: Первый способ:body {
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
}Второй способ:.btn-group-vertical {
    position: absolute;
    top: calc(50% - 56px);
    left: calc(50% - 38px);
}
56px - половина высоты блока с кнопками
38px - половина ширины блока с кнопками
Вопрос: Нужно ли для Linux разбивать жесткий диск на 2 раздела?

Лучший ответ: Не обязательно, но удобно при переустановке системы. Достаточно переформатировать системный раздел и примонтировать /home со всеми пользовательскими данными.

Худший ответ: обязательно,это тебе сэкономит кучу времени  нервишек
Вопрос: Коммутатор для ядра в средний офис?

Лучший ответ: Берите какой-нибудь Микрот тысяч за 20-30, шикарно зайдёт.

Худший ответ: Мы используем cisco WS-C4507R+E (MPC8572) 
200 Gigabit Ethernet interfaces
4 Ten Gigabit Ethernet interfaces
 не помню чтоб были проблемы.
Вопрос: Сколько жрет мышка?

Лучший ответ: Вопрос лишён смысла, потому что мыши потребляют по-разному. При этом, в свойствах USB-устройств это просто написано прямым текстом, когда они подключены. Включайте и смотрите. Только что-то мне подсказывает, что хрен вы её переделаете, раз у вас такие вопросы возникают.

Худший ответ: Смотрите какая ёмкость у большинства беспроводных мышек. Как правило это указано в их характеристиках
Вопрос: Максимальное поддерживаемое количество RAM 8GB?

Лучший ответ: Но на сайте intel 
смотреть надо на сайте производителя всего ноута - тобишь леново. Ограничение идет не только от проца, но и от материнки и биоса.

Худший ответ: Прямо в магазине проверь до покупки памяти.
В нормальных магазинах идут навстречу в подобных ситуациях.
Вопрос: Развеете мои стереотипы по ubuntu, linux mint?

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

Худший ответ: Ubuntu - допиленный до юзабельного состояния debian, который олдфаги очень любят ставить везде ибо "надёжно и стабильно", а по факту без допиливания руками там ничего и не работает из коробки
Вопрос: Почему в Symfony 3.4 через cli маппятся связи, а через web нет?

Лучший ответ: Певая возможная причина.
У вас окружение разное.
export SYMFONY_ENV=prod или запуск команды с ключем -e prod (В этом случае она действительно в прод окружении запуститься)
Если это так, то смотреть namingStrategy для доктрины.
Убить кэш (командой доктриновской)
Вторая причина.
Если вы на 150% уверены, что окружения действительно одни и те же, то смотреть слушателей на KernelEvents.
Затем смотреть расширения доктрины, если такие есть.
Третья причина.
Настройки кэша и использование данных из Request в качестве ключей (Из консоли Request не доступен) для кэша доктрины. Банальный мемкеш, где превиксом является доменное имя.
Пятая
Маловероятная... Одновременное использование нескольких драйверов маппинга (аннотации, yaml)
Изменения в папке вендоров (compoer validate)
...
Рассуждения.
Судя по всему вы через что-то деплоете (по структуре папок)
Шары не напутаны для проекта?
Кэш точно инвалидирован?
Симлинки верно указывают?
Права юзверя, группы на файлы кэша из веб морды/консоли?
Хост точно тот?
Веб сервер (nginx точно на current дирекиорию смотрит)?
...
Гадать крайне долго можно, но 90%, что разное окружение и проблемы с кэшем

Худший ответ: Почему-то некорректно маппит имя свойства со статусом. Попробуйте name для связи со статусом явно задать.
Вопрос: Можно ли починить такой фонарь?

Лучший ответ: Можно. Отдайте на ремонт человеку разбирающемуся.

Худший ответ: Раз без зарядки не горит - проблемы с аккумулятором. Или отвалился или сдох от удара, третьего не дано.
Возьмите мультиметр, померяйте напряжение на аккумуляторе. Если ноль - меняйте аккумулятор.
Вопрос: Как правильно задать анимацию небольшого вращения-"покачивания" в canvas?

Лучший ответ: Можно угол поворота сделать функцией синуса от прошедшего времени.  Примерно так:var ts0;
function draw(ts) {
    // ...
    if(!ts0) ts0 = ts;
    const dt = ts - ts0; // сколько прошло миллисекунд
    //  ...
    ctx.translate(500, 180 + Math.sin(dt/352)*3); 
    ctx.rotate( Math.sin(dt/630) / 40 ); Тут помимо поворота ещё по вертикали слегка покачивается. Так же, плавной синусоидой, но с другим периодом, чтобы не выглядело циклично.Рабочий пример.
В функцию, вызываемую по requestAnimationFrame() параметром передаётся текущее время, так что можно не заморачиваться с созданием нового объекта Date, а использовать этот параметр.
Из соотношения координат в  ctx.drawImage(cloud, -350, -250); с размерами картинки определяется центр, относительно которого получится вращение. Желательно его подобрать так, чтобы они приходился на визуальный центр масс тучи.

Худший ответ: Держите. Коэффициенты для изменения скорости и амплитуды - их вы, думаю, сможете подобрать самостоятельно.
Вопрос: Как перезагрузить UITableView после dismiss другого ViewController'a?

Лучший ответ: Вам нужны обсерверы. Подробнее тут.
У кордаты они пугающие, я люблю от Realm. 

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

Делегаты, нотификации, viewWillAppear - решения на грани костылей, да простит меня мой коллега.

Худший ответ: Есть много способов это сделать.

Самый простой - обновлять таблицу при появлении CategoriesViewController:
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    tableView.reloadData()
}

Если нужно дополнительно добавлять какую-то информацию из AddCategoryVC, можешь держать CategoriesViewController в качестве делегата внутри AddCategoryVC. Для этого:
1) Описываешь протокол для делегата:
protocol AddCategoryVCDelegate: AnyObject {
    func addCategoryDismissed()
}
2) Хранить в AddCategoryVC делегата (его нужно будет задать при создании контроллера, это будет твой CategoriesViewController):
weak var delegate: AddCategoryVCDelegate?
3) И вызывать его в dismiss completion:
dismiss(animated: true) {
    self.delegate?.addCategoryDismissed()
}