anetto1502

anetto1502

Канал про разработку на python и не только https://t.me/+0JMEYBjpMDJiYTMy
На Пикабу
Дата рождения: 29 августа
14К рейтинг 108 подписчиков 146 подписок 64 поста 25 в горячем
Награды:
За участие в Авторской неделе5 лет на Пикабу
2

Docker в каждый дом

Стрим FastAPI+Docker породил бурное обсуждение, а нужен ли докер в таком небольшом проекте. Наш ответ — обязательно! В современном мире разработки docker является такой же неотъемлемой частью разработки, как и git. Есть некоторые области без докера, например, разработка GUI, операционных систем или микроконтроллеров. Но весь backend, frontend и data science без докера вообще не живут. Давайте посмотрим, какие прямые выгоды даёт докер:

1. Всегда понятно, как запустить код. Dockerfile является однозначной инструкцией по сборке проекта. Bus-factor не мешает жить.

2. Легко включать новых людей в разработку. Инструкция в ридми сводится к docker build & docker run, что понятно даже junior-разработчикам.

3. Деплой можно производить где угодно. В пару команд можно запуститься на компе разработчика, на test или prod сервере, у заказчика на ноутбуке – и везде всё будет одинаково, нужен только сам Docker.

4. Проект одинаково себя ведёт везде. Это упрощает воспроизведение проблемы и сокращает время на багфикс.

5. Нет проблем с конфликтом зависимостей-библиотек. Вы можете на одной машине запустить проекты с условным django 3 и django 4, они никак друг другу не помешают.

6. Легко поднимать зависимости-компоненты. Для любой базы данных берётся готовый докер-образ, меняется конфиг и в одну команду запускается. С выходом на docker compose можно одной командой поднимать сборную солянку из backend, frontend, базы данных, nginx и Let's Encrypt.

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

8. Понятные внешние эффекты проекта. В команде docker run указаны проброшенные в контейнер каталоги и порты. Всё остальное изолированно.

В общем, со всех сторон одна польза. Минусы? Требуется изучить новый инструмент и best practices. Кажется, на этом всё. Даже дополнительных накладных расходов на виртуализацию нет. И помните – если docker вам мешает, скорее всего, вы что-то делаете неправильно.

Для запуска нескольких связанных контейнеров пользуйтесь compose, гайд тут. Если ещё нужно управлять множеством серверов, то посмотрите на kubernetes.

Показать полностью
4

Зачем нужны юнит-тесты

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

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

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

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

Кстати, ИИ нынче отлично умеет писать тесты. И полезно не забывать про антипаттерны тестирования ПО.

14

Ответ на пост «Пара мыслей по последней ситуации с ботофермой»8

Меня забавляет личная статистика публикаций. Тысячи лайков у скриншотов комментов и десятки или сотни лайков у авторских постов.

Топовый пост у меня - это скриншот комментов (8.8к лайков и 380к просмотров) про расчёты калорийности мух. Второй по популярности (2.1к лайков и 150к просмотров) у скриншота про названия еды у нищебродов и богатых. А контентные посты про разработку (например, про ООП или крутое видео про forkbomb в докере) собирают <300 лайков. Некоторые, на мой взгляд, крутые посты, например, как расширить технический кругозор остановились на рейтинге вообще в единицах.

При этом за мои авторские посты, в конце которых есть ссылка на канальчик DevFM в телеге, часто в комментарии приходят с хейтом про эту самую ссылку на канал. В лучших постах тупо картинка и ссылка на канал с мемами - это никого не триггерит. Авторские посты почему-то триггерят. Коммьюнити самостоятельно и довольно успешно выдавливает авторов с площадки. Что грустно.

7

Ответ на пост «10 миллионов Пикабушников»30

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

Когда-то давно, в золотые времена, на популярной площадке Пикабу существовала система минусов. Это была магия, которая позволяла сообществу саморегулироваться, выносить справедливые вердикты и поддерживать баланс добра и зла в мире интернет-дискуссий. Алексей, тогда ещё джун-программист, обожал эту систему. Он видел в ней не просто инструмент, а философию, воплощение справедливости в цифровом мире.

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

Тем временем карьера Алексея шла в гору. Он прошёл путь от джуна до миддла, затем стал сениором, а потом и техлидом. Его код работал в крупнейших компаниях мира, его решения меняли жизни миллионов людей. Он стал программистом всего мира, как он сам шутил. Но в глубине души он всегда помнил о минусах. Каждый раз, когда он сталкивался с несправедливостью в сети, он вздыхал и думал: "Если бы только минусы вернулись..."

Шли годы. Алексей старел, но его надежда оставалась молодой. Он рассказывал о минусах своим коллегам, новому поколению программистов, но они лишь пожимали плечами. Для них это была древняя история, как легенда о потерянном сокровище. Алексей же продолжал верить. Он даже написал скрипт, который каждое утро проверял, не вернулись ли минусы на Пикабу. Но каждый раз ответ был один и тот же: False.

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

Но история на этом не закончилась. Легенда о минусах жила. Новые поколения программистов, вдохновлённые рассказами об Алексее, продолжали мечтать о их возвращении. Они писали посты, создавали мемы, даже пытались разработать свои системы минусов. И хотя минусы так и не вернулись, надежда на их возвращение осталась. Где-то в глубине интернета, в сердцах тех, кто верит в справедливость, минусы продолжают жить. И, возможно, однажды они снова появятся, чтобы завершить историю, которую начал Алексей.

Админы DevFM грустят

Показать полностью
11

Состояние индустрии разработки от JetBrains 2024

С 2017 года JetBrains проводит опросы, на базе которых готовит отчёты о состоянии индустрии. В 2024 году опросили 23к разработчиков. В отчёте есть разное интересное, имеет смысл ознакомиться с ним целиком. Мы же с вами посмотрим на отдельные моменты, которые я считаю самыми примечательными.

В топе языков всё стабильно, там JavaScript, Python, Java. Впервые Go обогнал PHP, последний уже довольно давно увядает.

Состояние индустрии разработки от JetBrains 2024 IT, Программирование, Тренд, Обучение, Jetbrains, Telegram (ссылка), Длиннопост

Да, я знаю, что HTML не язык программирования. И SQL я бы сюда не включал. Но кто я, а что JetBrains?

Интересен блок с планами. Для каждого языка можно выбрать "мой основной язык" или "планирую использовать". Основной язык Python у 35% разработчиков, ещё 6% планируют его использовать. Самые большие планы на внедрение у Go (10%) и Rust (11%). Интересно, реализуется ли это.

Состояние индустрии разработки от JetBrains 2024 IT, Программирование, Тренд, Обучение, Jetbrains, Telegram (ссылка), Длиннопост

Даже у Shell 2%. Никто не планирует писать на PHP

На рынке РФ вроде Rust не очень востребован, и число вакансий это пока подтверждают.

Состояние индустрии разработки от JetBrains 2024 IT, Программирование, Тренд, Обучение, Jetbrains, Telegram (ссылка), Длиннопост

По России вакансий Rust кот наплакал

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

Состояние индустрии разработки от JetBrains 2024 IT, Программирование, Тренд, Обучение, Jetbrains, Telegram (ссылка), Длиннопост

Promise Index языков

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

Состояние индустрии разработки от JetBrains 2024 IT, Программирование, Тренд, Обучение, Jetbrains, Telegram (ссылка), Длиннопост

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

В топе баз данных тоже всё стабильно: MySQL, PostgreSQL, MongoDB, SQLite, Redis. Приятно, что ClickHouse от Яндекса потихоньку растёт. Странно, что Elasticsearch впервые в этом году добавили в опрос.

Состояние индустрии разработки от JetBrains 2024 IT, Программирование, Тренд, Обучение, Jetbrains, Telegram (ссылка), Длиннопост

Связка PostgreSQL + MongoDB + Elasticsearch топ. Не является инвестиционной рекомендацией

Дальше моё любимое. Не использует виртуализацию 25% респондентов. 50% с докером, дальше есть нюансы.

Состояние индустрии разработки от JetBrains 2024 IT, Программирование, Тренд, Обучение, Jetbrains, Telegram (ссылка), Длиннопост

Удивлён, что докера не 90%

Проникновение искусственного интеллекта в разработку довольно сильное. 70% пробовали, а 50% постоянно используют ChatGPT. Можно позалипать на цифры постоянного использования у других игроков: 26% у GitHub Copilot, 7% Google Gemini, 5% JetBrains AI, 3% Anthropic, 1% Tabnine, 2% локальный AI, 3% Codeium, 1% Blackbox AI. 1% Llama, 1% Gemini, 1% Cursor. Есть куда расти. Про остальных игроков я не слышал.

Состояние индустрии разработки от JetBrains 2024 IT, Программирование, Тренд, Обучение, Jetbrains, Telegram (ссылка), Длиннопост

Странно, что GitHub Copilot (который по факту принадлежит Microsoft) отличается от Microsoft 365 Copilot. Или я не шарю?

Занятная статистика по профиту от ИИ. Теперь ИИ является не только чатботом, но и заменой поисковику, помощником кодера, автоматизатором рутинных задач. Интересно, а есть ли уже бот, который code review в MR проводит? Если кто такое видел или использовал, поделитесь впечатлениями.

Состояние индустрии разработки от JetBrains 2024 IT, Программирование, Тренд, Обучение, Jetbrains, Telegram (ссылка), Длиннопост

Мы-то знаем, что 2% Other — это правило 34

В блоке Developers' Life интересная статистика про затраты времени на код и на коммуникацию (созвоны, чаты, почта). Вроде опрос разработчиков, но 5% ребят тратят на код меньше 20% времени. Пикабу читают, наверное.

Состояние индустрии разработки от JetBrains 2024 IT, Программирование, Тренд, Обучение, Jetbrains, Telegram (ссылка), Длиннопост

Слева затраты на код, справа на коммуникации

76% разработчиков изначально в ИТ, и 22% перешли в ИТ откуда-то. Мне был бы интересен срез по годам. В 2023 году картина была аналогичной, а дальше копать лень.

Состояние индустрии разработки от JetBrains 2024 IT, Программирование, Тренд, Обучение, Jetbrains, Telegram (ссылка), Длиннопост

22% вкатунов. Хотя чёрт его знает, что значит another field

Интересен вопрос "самая сложная часть вашей работы". 38% отмечают понимание потребностей пользователей, 34% коммуникацию с командой (и ещё 16% с другими разработчиками). Проблема 32% в разборе чужого кода, и у 16% проблема в отладке. Непосредственно в написании кода сложности только у 15%, и в первую очередь эту часть сможет взять на себя ИИ. Остальные сложности, вероятно, пока останутся. А вообще всё выше подводит нас к важности софт скиллов, и об этом мы стали чаще писать статьи (например, как папки в телеграм для разработчика удобно настроить).

Состояние индустрии разработки от JetBrains 2024 IT, Программирование, Тренд, Обучение, Jetbrains, Telegram (ссылка), Длиннопост

Жалкие 15% проблем в написании кода

Остальное время код компилируется, как известно

Состояние индустрии разработки от JetBrains 2024 IT, Программирование, Тренд, Обучение, Jetbrains, Telegram (ссылка), Длиннопост

«Эй, ты воруешь ЖК‐мониторы?» — «Да, но я делаю это, пока мой код компилируется».

Иронично, что при этом 50% разработчиков работают в команде всего лишь из 2-7 человек. Одиночек и ещё 8%. И даже им сложно с коммуникацией, бедные команды по 10+ человек

Состояние индустрии разработки от JetBrains 2024 IT, Программирование, Тренд, Обучение, Jetbrains, Telegram (ссылка), Длиннопост

А виртуальные личности считаются в составе команды?

Почему-то в обзоре 2024 года этого вопроса нет, поэтому вот вам картинка из 2023. На какой операционной системе вы программируете?

Состояние индустрии разработки от JetBrains 2024 IT, Программирование, Тренд, Обучение, Jetbrains, Telegram (ссылка), Длиннопост

43% линукса. И ещё 42% тоже линукса, но на макбуках

Такое вот моё мнение об обзоре индустрии. Что вам запомнилось, а я это пропустил?

В DevFM пишу о полезном для разработчика: о базах данных, об архитектурных схемах, записываю видео по FastAPI + Docker для начинающих. А ещё у нас есть бесплатный курс cli-for-dev по Linux на степике.

Показать полностью 15
15

Продолжение поста «Задача на собеседовании — проектируем динамическую фильтрацию»1

В прошлом посте описана задача, которую мы предлагали на собеседовании для разработчиков. Сама задача взята из практики, то есть это прямо то, чем в будущем предстояло заниматься собеседуемому, разве что с упрощением предметной области. Задача была такая: спроектировать фильтрацию результатов поиска товаров с учётом ограничений.

В задачах на проектирование чего-либо интервьюера интересует не столько сам ответ, сколько ход ваших мыслей. Вы можете не дойти до правильного ответа, или дойти с подсказкой. Рассмотрим потенциальные решения задачи и покритикуем их:
💡 Давайте присылать все данные на фронт и фильтровать там.
🚫 1кк записей передавать нецелесообразно. Более того, даже хранить фильтры на фронте не выйдет, так как они динамические и определяются конкретной выборкой. В любом случае, фильтровать должен бекенд.

💡В postgres можно спроектировать схему для хранения фильтров в связке со списком товаров, к которым эти фильтры можно применять.
🚫 Здесь не стали приводить конкретики, но отметим, что при таком подходе будут проблемы с динамическим обновлением счетчиков. А ещё такое решение несёт сложную ментальную нагрузку на разработчика.

💡Сведём задачу фильтрации к фасетному поиску. Для этого каждую единицу товара мы характеризуем набором конкретных признаков.
✅ В базе данных нам нужно завести отдельную колонку, где для каждого товара явно хранить набор его признаков и их значений. Для агрегации, подсчета количества и быстрого поиска по выбранным фильтрам можно использовать мощный механизм полнотекстового поиска.

Пример реализации такого решения с использованием полнотекстового поиска в postgres приведен в статье Faceted search using PostgreSQL full text search.

В DevFM пишу о полезном для разработчика: о Docker, инструментах вроде Raycast, об архитектурных схемах, записываю видео по FastAPI + Docker для начинающих. А ещё у нас есть бесплатный курс cli-for-dev по Linux на степике.

Показать полностью
7

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

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

Если вам на собеседовании поставили задачу в такой размытой формулировке, не пытайтесь сразу приступать к её решению. В первую очередь уточните требования и ограничения. Задумайтесь на минуту, какие вопросы следует задать.

После уточнения задачи получаем следующие вводные:
— имеется клиент-серверное приложение интернет-магазина с возможностью поиска товаров;

— количество записей в результате поиска может доходить до 1кк;

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

— у разных категорий товаров разный набор фильтров;

— после применения конкретного фильтра появляется новая выборка и для нее также должны отображаться только актуальные фильтры. Рассмотрим на примере. Для телефонов должны быть фильтры "производитель" и "операционная система". После применения фильтра "производитель: Apple" в фильтрах ОС уже не может быть значения Android;

— для каждого значения фильтра необходимо отображать количество подходящих товаров. После выбора одного фильтра все счётчики должны пересчитываться. Было "производитель": "Apple: 10", "Xiaomi: 20", "Встроенная память": "128 Гб: 10", “256 Гб: 20". Выбрали "128 Гб", после применения станет, например, "производитель": "Apple: 7", "Xiaomi: 19". То есть 3 модели Apple и 1 модель Xiaomi не попали под выбранный фильтр.

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

Как на настоящем собеседовании, уточняющие вопросы можно задать в комментариях. Наше решение задачи в 20:00 среды.

В DevFM пишу о полезном для разработчика: о Docker, инструментах вроде Raycast, об архитектурных схемах, записываю видео по FastAPI + Docker для начинающих. А ещё у нас есть бесплатный курс cli-for-dev по Linux на степике.

Показать полностью
Отличная работа, все прочитано!