Обновить

Бэкенд

Сначала показывать
Порог рейтинга

When to Make a Type.

Мартин Фаулер размышляет о ярких преимуществах выделения новых типов и мастерски формулирует лаконичный ответ на этот вопрос.

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

В деталях об этой идее, но немного с другого ракурса, пишет Эрик Эванс в книге "Предметно-ориентированное проектирование" (Domain-Driven Design).

Книга Эванса требует глубокого погружения в концепты DDD. Что такое доменный объект? Как он связан с реальными бизнес-сущностями? Что такое объект-значение? И т.д.

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

Рекомендую к ознакомлению!

Статья на сайте Мартина Фаулера: https://martinfowler.com/ieeeSoftware/whenType.pdf

Теги:
Рейтинг0
Комментарии0

Интерактивность в разработке.

Брэт Виктор отлично презентует своё видение мира. Попутно он затрагивает вопрос о необходимости моментального визуального отклика на изменения в исходном коде. Рассказывает о том, как интерактивность позволяет получить совсем иной опыт разработки. Более динамичный.

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

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

Впрочем, всегда есть, куда стремиться.

Презентация на Vimeo: https://vimeo.com/906418692

Теги:
Рейтинг0
Комментарии0

Демо Smalltalk-76.

Иногда просто поражает масштаб того, что разрабатывали в Xerox PARC.

На этом видео Дэн Инголлс презентует Smalltalk-76, объединённую интерактивную среду исполнения и сам язык программирования. Два в одном! И это в 1976 году!

Smalltalk исторически повлияет на большое количество современных ЯП с ООП. Отдельно стоит отметить яркое влияние на ЯП, где в основе лежит модель акторов.

В то время ООП было не столь про термины "инкапсуляция", "полиморфизм" и "наследование". Скорее про то, что всё есть "объект", а объекты общаются между собой исключительно путём обмена сообщениями.

Это — основа современной акторной модели.

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

Презентация на YouTube: https://youtu.be/NqKyHEJe9_w

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии8

HR, простите, но у меня не было выбора - Как я потратил несколько сотен часов на ИИ-ассистента для поиска работы

Привет, Хабр.

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

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

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

Что не так с процессом поиска

Проблема не в самом поиске, а в том, как он реализован.

1. Массовая рассылка вместо выбора.
Осознанный подбор вакансий быстро превращается в пролистывание списков и надежду на статистику.

2. Отклики как механика.
Сопроводительные письма отличаются формально: поменять название компании, чуть переписать вводную — и так десятки раз.

3. Неэффективные затраты времени.
Квалифицированный специалист тратит часы на задачи с минимальной ценностью, причём этот цикл повторяется при каждом новом поиске.

Инженерный взгляд

Если абстрагироваться, поиск работы — это:

  • входные данные (резюме, требования вакансии),

  • правила сопоставления,

  • повторяемые действия,

  • измеримые результаты.

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

Коротко о разработке

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

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

За 4+ месяца разработки мы:

  • несколько раз пересобрали архитектуру,

  • получили жёсткий фидбек,

  • убедились, что это не история про «просто прикрутить LLM».

Технические детали осознанно опускаю — при интересе разберу отдельно.

Что получилось в итоге

Сейчас OfferMate — это ассистент, который:

  • ищет релевантные вакансии на hh.ru и в Telegram,

  • автоматизирует отклики,

  • формирует сопроводительные письма под конкретные вакансии,

  • работает в фоне, минимально вовлекая пользователя.

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

Про сопроводительные письма

Корректнее говорить не «ИИ пишет письма», а что система:

  • анализирует резюме,

  • разбирает требования вакансии,

  • ищет пересечения,

  • и на их основе формирует текст.

Это не делает письмо идеальным, но делает его релевантным, что на практике влияет на отклик.

Куда дальше

Сейчас мы работаем над следующей версией проекта.

Рынок нестабилен: ограничения и API меняются, поэтому тестируем архитектуру без жёсткой зависимости от официальных интерфейсов и с упором на устойчивость.

Вместо вывода

Этот пост — попытка взглянуть на поиск работы как на инженерную задачу и попробовать решить её соответствующими методами.

Если интересно последить за проектом, все новости публикуем в этом Tg-канале:

👉 https://t.me/offermatecrew

Также буду рад вопросам и обсуждению в комментариях.
Если тема зайдёт — сделаю отдельный технический разбор.

Теги:
Всего голосов 9: ↑3 и ↓6-3
Комментарии11

Шаблонный сервис

Я всячески люблю, когда разработка идёт предсказуемо – и многое для этого делаю.  

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

Так зачем же нужен шаблонный сервис?

Легко ориентироваться в других сервисах. Иногда нужно залезть в сервис коллег, или поддерживаешь несколько сервисов. Никаких проблем – структура везде одинаковая, всё знакомо, не нужно тратить время на раскопки.

Быстрый старт. Стартуете новый сервис? Полчаса – и он готов. Никаких лишних приседаний.

Единые практики. Шаблон определяет, не только структуру, но и то, как мы, например, делаем ретраи, какие у нас зависимости. как устроен circuit breaker, обработка ошибок и т.д.    

Лучшие практики – в одном месте. Если появляется что-то классное, мы добавляем это в шаблон и новые сервисы сразу это наследуют.     

Обсервабилити, логирование, работа с секретами – готово из коробки. И меньше шансов, что кто-то забьёт на логирование до лучших времён»:)    

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

Просто экспериментировать. Создал веточку от шаблона – и прикручиваешь свою новую махарайку, не тратя время на базовую структуру.

Унификация линтинга. Конфиги линтеров лежат в шаблоне. Ничего настраивать не нужно, а код-ревью идёт быстрее – обо всём уже однажды договорились и зафиксировали.

Базовый CI/CD. Для шаблонного сервиса существует шаблонный ci/cd – и это очень удобно.

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

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

В общем – заходите, смотрите, ставьте звездочки. И если с чем-то не согласны – пишите в комменты, автор обязательно ответит 🙂

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Работаем из Java с устройствами с serial-интерфейсом (COM и USB) без JNI — по TCP.

Раньше пользовались rxtx, затем jssc. После очередных крэшей JVM в коде нативных библиотек решил не выбирать замену, а отказаться от них полностью.

В качестве прокси serial-TCP можно взять ser2net или поэкспериментировать с socat, но я запилил свое простое (Rust, mio), под конкретную задачу:

  1. Запускается из основного приложения, свой процесс для каждого устройства

  2. Конфигурация через аргументы запуска и переменные окружения

  3. Завершает работу при отсутствии или отключении устройства (для USB), отключении или отсутствия подключения TCP-клиента

В качестве TCP-клиента Netty. Для интеграции с легаси данные читаются в кольцевой буфер ( OneToOneRingBuffer из agrona), а оттуда уже используются по месту в удобное время.

За счет неблокирующего чтения и использования epoll в mio и Netty минимальные задержки, моментальное оповещение о наличии данных (без Thread.sleep) и об отключении USB-устройства.

Задержки настолько меньше, что пришлось адаптировать кривой код, который не был готов к тому, что драйвер железного serial-порта в Linux отдает данные порциями по 8 байт. Решилось реализацией ByteToMessageDecoder, где возможно, а где нет — буферизацией на стороне прокси и отправкой по таймеру.

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

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

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Dotfiles для NVIM v0.10.

За прошедший год меня несколько раз спрашивали: каким конфигом NVIM я пользуюсь?

Люблю брать дефолтный NVIM и накидывать минимум плагинов, которые чуть-чуть упрощают жизнь. Для локальной машины добавляю LSP, линтинг, авто-форматтеры и тему.

Единственная особенность конфига — прибиваю гвоздями версии плагинов, чтобы они были совместимы с NVIM v0.10. Некоторые плагины уже требуют v0.11+, но я на Debian Trixie и в стабильных репах живёт только v0.10. Бэкпортов пока не завезли...

В общем как-то так, вот репа на GitHub.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Podman, OCI и HEALTHCHECK.

Восстанавливал работоспособность одной репы и столкнулся с забавной особенностью.

Compose файлы, которые там есть — предельно простые. Есть цепочка сервисов, которые запускаются друг за другом. Первым стартует БД, никаких проблем. Вторым — сервис с API для загрузки данных в БД. Опять никаких проблем. Третьим — контейнер с wrk для нагрузочного тестирования. И вот тут загвоздка. Контейнер зависал в бесконечном состоянии "Created".

Подебажил. Оказалось, что при сборке образа API никак не фиксировался HEALTHCHECK! Podman по-умолчанию использует именно OCI спеку контейнеров, а не Docker, и там нет поддержки HEALTHCHECK. Из-за этого не срабатывал condition: service_healthy в Compose-файле, подвешивая контейнер с wrk.

Чтобы решить эту проблему, нужно явно указать формат спеки как Docker при сборке Dockerfile/Containerfile. У Podman это выглядит так:

podman build --format docker .

А вот так для Podman Compose:

podman-compose --podman-build-args='--format docker' build

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

export BUILDAH_FORMAT=docker

Вот такие пироги :)

Теги:
Всего голосов 7: ↑7 и ↓0+9
Комментарии2

Раздолбайский дух Sanic.

Как выглядела версия 18.12.0
Как выглядела версия 18.12.0

Обновлял свои сэмплы простеньких API-сервачков. Версия на Sanic отказывалась работать, так что закатал рукава и пошёл читать их маны. Захожу на сайт, а тут... Батюшки! Всё чинно, благородно, серьёзно так. Я отлично помню, что рисовал их дебаг в консоли. Эх, куда дели раздолбайский дух? :)

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0
кол-во задаваемых вопросов на StackOverflow
кол-во задаваемых вопросов на StackOverflow

StackOverflow сдаёт позиции. Количество задаваемых вопросов на StackOverflow близится к полному нулю

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

Больше интересного тут

Теги:
Всего голосов 6: ↑4 и ↓2+2
Комментарии0

Музыка для инженера

Для развития потока и фокуса нужна другая музыка – структурная, глубокая, архитектурная. От while(true) ритма Can до шатающихся под дождём битов Burial.

Собрал стек: 4 культовых альбома + walking playlist (Фазы 1-3).

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

Теги:
Всего голосов 3: ↑2 и ↓1+2
Комментарии8

Слышу уже от второго человека, что язык Rust не дает нормально работать с указателями в связанных списках, деревьях и графах (в моей вселенной ЯП без этого - это как свадьба без невесты). Взял ChatGPT, задал промпт: "write a code to insert a node into a doubly linked list in rust". Оно сгенерило нечто с кучей дополнительных слов, которых не было ни в Си, ни в Паскале 40 лет назад: borrow, as_ref, and_then, upgrade, map, downgrade, Some, clone, borrow_mut. Это все реально нужно или они там совсем озверели?

Теги:
Всего голосов 18: ↑13 и ↓5+11
Комментарии59

StingrayTV Alice стал ещё лучше - теперь оно уже почти production-ready, с кучей фиксов и улучшений.

В частности:

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

  2. Теперь StingrayTV Alice использует bridge-сеть Docker'а, а для работы с mDNS теперь используется ретранслятор, соединяющий контейнер и mDNS-сеть вместе через выделенный контейнер. Это позволило окончательно разграничить сетевой стек в контейнерах, и улучшить общую безопасность.

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

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Ближайшие события

Как автоматизировать Photoshop через кодинг

Когда говорят об автоматизации, чаще всего имеют в виду Python. Но важно понимать: Photoshop не выполняет Python-код напрямую.

Зато у него есть встроенная поддержка скриптов — Photoshop умеет исполнять код на JavaScript (ExtendScript).

Это не «JS как в браузере» и не замена Python. Это родной язык автоматизации Photoshop, с прямым доступом к:

  • слоям

  • тексту

  • смарт-объектам

  • экспорту файлов

  • истории документа

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

Что это даёт на практике

Через код можно:

  • массово менять текст в PSD

  • генерировать сотни изображений из одного шаблона

  • автоматизировать экспорт

  • исключить Actions и Variables с их ограничениями

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

Пример задачи

Есть:

  • один PSD

  • текстовый слой

  • значения 1 м → 100 м

Нужно:

  • автоматически подставить значения

  • сохранить 100 PNG-файлов

  • вернуть PSD в исходное состояние

Пример скрипта для Photoshop (JSX)

#target photoshop

var doc = app.activeDocument;
var layerName = "1 м"; // имя текстового слоя
var outputFolder = Folder.selectDialog("Выбери папку для сохранения");

if (!outputFolder) {
    alert("Папка не выбрана");
    exit();
}

function findTextLayer(layerSet) {
    for (var i = 0; i < layerSet.layers.length; i++) {
        var layer = layerSet.layers[i];
        if (layer.kind == LayerKind.TEXT && layer.name == layerName) {
            return layer;
        }
        if (layer.typename == "LayerSet") {
            var found = findTextLayer(layer);
            if (found) return found;
        }
    }
    return null;
}

var textLayer = findTextLayer(doc);
if (!textLayer) {
    alert("Текстовый слой не найден");
    exit();
}

for (var i = 1; i <= 100; i++) {
    textLayer.textItem.contents = i + " м";

    var file = new File(outputFolder + "/pkabel_4x2_5_" + i + "m.png");

    var opts = new PNGSaveOptions();
    opts.compression = 9;

    doc.saveAs(file, opts, true, Extension.LOWERCASE);
}

// откат без сохранения
doc.activeHistoryState = doc.historyStates[0];

alert("Готово!");
Теги:
Всего голосов 3: ↑3 и ↓0+4
Комментарии0

Звёзды разработки и практикующие инженеры разбирают горячие темы — от FAIL до GOD. Встречайте tech-шоу «АйТир Лист» от МойОфис.

В нашем шоу мы берём одну область в разработке, выбираем самые обсуждаемые технологии, практики и подходы — и раскладываем их по шкале от FAIL до GOD.
Формат простой: эксперты защищают свои позиции, спорят, соглашаются и не соглашаются. 14 табличек, 14 поводов для споров и честный экспертный рейтинг без попытки всем понравиться.

Первый выпуск — опенсорс для фронтенда

Дебютный эпизод мы посвятили популярным опенсорс-решениям для фронтенда: от инструментов, которые давно пора отпускать, до стандартов индустрии.

В выпуске:

  • Александр Коротаев — эксперт по фронтенду и креативному кодингу

  • Алексей Золотых — тимлид команды веб-редакторов МойОфис

  • Ведущий — Эдгар Акопян

Обсуждаем инструменты, которые формируют повседневную фронтенд-разработку, и честно отвечаем на вопрос: что сегодня выглядит как GOD-tier, а что застряло на уровне MVP или FAIL.

Смотрите выпуск: YouTube | RuTube | VK

Второй выпуск — фичи и идиомы C++

Во втором эпизоде «АйТир Листа» — уже не инструменты, а язык.
Мы устроили полноценную битву мнений вокруг фич и идиом C++: 14 табличек превращаются в 14 поводов для дебатов, где каждая возможность языка проходит через экспертную оценку.

В выпуске:

  • Данил Черепанов — архитектор редакторов МойОфис

  • Антон Полухин — эксперт-разработчик C++ техплатформы городских сервисов Яндекс

  • Ведущий — Эдгар Акопян

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

Смотрите и делитесь мнением: YouTube | RuTube | VK

В следующих выпусках продолжим разбирать технологии без скидок на хайп и «так исторически сложилось». Предлагайте темы, а если готовы к жарким спорам – становитесь участниками нашего шоу) А как стать? Пишите в комменты с какой темой бы хотели поспорить!


Теги:
Всего голосов 12: ↑12 и ↓0+12
Комментарии0

Мне навеяло темой: "Что должно быть на каждой PCB с микроконтроллером":

В чем счастье эмбеддед программиста.

Больше 20 лет назад мы с товарищем, специалистом по схемотехнике — цифровой, аналоговой, любой, и конструкции плат, должны были прикрутить маленький экранчик (10х10 сантиметров примерно) для визуализации ввода к нашему секретному девайсу. И все было как обычно, он принес(прислал) мне описание контроллера экрана, я проверил схему подключения к атмеге (какая-то 8-ми битная микруха АТ серии там была), которую он нарисовал, на предмет программной управляемости (необходимости, достаточности и удобства конструкции). Он развел, вытравил, спаял, скрутил, собрал, проверил цепи,... я всего не знаю что там надо делать, я преклоняюсь перед талантом людей, которые все это знают и грамотно делают, иначе мне бы было не на чем работать! И в один прекрасный день мы собрались вдвоем (для меня это была как бы халтурка) чтобы включить, запрограммировать и окончательно проверить что схема и все необходимые функции программного управления работают и можно снять характеристики, все проверить для того чтобы написать уже пользовательскую программу. Я сначала всегда пишу программу, которая проверяет возможности железа: схемотехнику обвязки и возможности аппаратных модулей встроенных в контроллер-процессор, тайминги, какие-то взаимные ограничения на использование ног, периферийных юнитов, кросстайминги, просто свое понимание работы периферии полученное из теоретического описания. Все требует проверки на практике, на работающей железке с работающей программой.

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

Мы подключили программатор и загрузили прошивку! Ожидая что на экране что-то появится. Дисплей имел и графический режим управления, в котором можно было зажигать любые пиксели по координатам, но нас вполне устраивал символьный режим с курсором, в котором у нас было где-то 8 строк по 10 символов. И, как это обычно бывает, ничего не произошло, экран остался безжизненным. Первым делом надо проверить что прошивка работает - поморгать светодиодом, если нет светодиодов просто посмотреть запрограммированный сигнал на каком то выводе процессора осциллографом - все было в порядке, все сигналы на месте. Я начал строить предположения о том, что я мог неправильно понять и, соответственно неправильно настроить-сконфигурировать-передать-принять-перепутать порядок посылок при инициализации дисплея. На это ушел может быть час или два - я дотошно перебирал варианты, вплоть до самых невероятных - ничего не помогало, экран оставался мертвым. Я рассказал напарнику, что называется на пальцах, последовательность операций, которые выполняет моя прошивка. Что-то мы дополнительно проконтролировали по тестовым пинам, нигде логика не была нарушена, все сомнительные варианты мы перепроверили под контролем напарника. Экран оставался мертвым...

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

Сложно передать мои эмоции когда я сказал ему: "Какой же ты... молодец, что догадался прикрутить эту регулировку яркости! Без нее бы у нас так ничего и не получилось, сегодня, с этим экраном!". Прошло столько лет, а я не могу забыть эту историю.

Всем удачи в Новом Году. Пусть у вас всегда будут в наличии необходимые регулировки, особенно аналоговые.

Теги:
Всего голосов 12: ↑11 и ↓1+14
Комментарии7

Вышла новая версия fq 0.16.0

fq - это инструмент, язык и декодер для работы с двоичными данными. Конечная цель проекта — объединить в одном инструменте функции jq, hexdump, dd и gdb.

Поддерживаем массу форматов, полный список: https://github.com/wader/fq/blob/master/doc/formats.md

Написан на Golang.

Демонстрация работы
Демонстрация работы

GitHub: https://github.com/wader/fq

ChangeLog: https://github.com/wader/fq/releases/tag/v0.16.0

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Философия IT-собеседований: взгляд разработчика и DevOps-инженера

Привет, Хабр! Мой пост носит дискуссионный характер. В веб-разработке, администрировании и DevOps я уже 17 лет. Долгое время работал «на себя», оказывая помощь клиентам, с которыми выстроены надёжные взаимоотношения, но текущие реалии рынка подтолкнули к поиску работы по ТК, об этом я и хочу поговорить.

Обо мне: 40 лет, из которых 17 лет в коммерческой разработке. Прошел долгий путь как в fullstack-разработке (web), так и в создании embedded-решений (каршеринг), администрировании и DevOps.

Раньше мой процесс найма редко выходил за рамки одного интервью. Сейчас же я регулярно сталкиваюсь с многоступенчатыми отказами, иногда даже на этапе HR-скрининга. Этот контраст заставил меня задуматься: что делает найм эффективным, а что превращает его в фарс? Решил систематизировать свои наблюдения и поделиться тем, что в современных собеседованиях кажется здравым, а что — откровенно лишним.

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

  1. Диалог на равных.
    Мое лучшее интервью: техлид не мучил теорией, а предложил обсудить реальную дилемму, которую он решает в данный момент (внедрение NoSQL-хранилища ради одного специфичного сервиса, т.е. доп. точка отказа vs производительность). Без таймера и стресса мы искали решение. Итог — оффер и годы отличной работы.

  2. Проверка логики, а не памяти.
    Люблю кейсы в духе: «Вот дано А, почему происходит Б?». Из банального: может ли Вася из другого города достучаться до вашего локального IP? Это показывает понимание базы лучше любого теста.

  3. Ценность универсальных знаний.
    Универсальные знания долгое время позволяли быстро находить решение практически любой проблемы от хардверной, до нарушения самых элементарных паттернов проектирования в коде и эффективно их устранять. Мне нравятся задачи, где проблема может быть скрыта на любом уровне и нравятся клиенты, понимающие, как я могу снять их головную боль обеспечив работоспособность ПО в любой среде и условиях.

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

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

  2. Вакансии-обманки.
    Зачем заманивать стеком DevOps (Linux, Nginx, Ansible, Terraform, Puppet, Docker, Kubernetes, MySQL, PostgreSQL, Elasticsearch, Logstash, Kibana, Zabbix), если по факту сообщаете, что ничего этого не будет, а ищите классического сисадмина 9-18? — Давайте адкеватный запрос, а не тратьте время.

  3. Терминологическая каша. Сложно отвечать экспертно, когда интервьюер путает CI и OCI или Redis и Rabbit. Если нет погружения в контекст, конструктивного диалога не выйдет. Готовиться к собеседованию должен не только соискатель, но и тот, кто нанимает.

  4. Отсутствие пунктуальности.
    Для меня было шоком, что фаундер может просто не явиться на собседование, или рекретер забывает о диалоге и назначенной встрече. У вас там всё нормально?) Хотя рекрутер мало чем отличается от агента недвижимости, но фаундер забывающий про собеседование для меня персонаж странный.

  5. Узкая специализация.
    Раньше, как мне кажется, ценилась универсальность, способность разработчика понимать инфраструктуру, а инженера/админа — код. Сегодня индустрия уходит в жесткую сегментацию, видимо, для более точного просчёта рисков. А я считаю, что именно универсальность — это страховка проекта от того, что решение будет принято в вакууме одного стека, без учета общей картины.

Теги:
Всего голосов 6: ↑6 и ↓0+7
Комментарии2

Нагрузочное тестирование YMatrix

В партнерском материале расширяются результаты нагрузочного тестирования из статьи «Нагрузочное тестирование GP6 vs GP7 vs Cloudberry» и презентуются результаты тестирования YMatrix. Это дополнение к предыдущей статье, призванное сформировать понимание сравнимости результатов различных форков GreenPlum.

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0

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

У нас недавно выходили подборки полезных образовательных материалов для тех, кто хочет расти в ИТ. Заглядывайте:

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии0