Pull to refresh
24
0
Vladimir @vldmrmlkv

ищу работу

Send message

Советы по программированию, которые бы я дал себе 15 лет назад

Level of difficultyMedium
Reading time8 min
Views9K


У меня наконец-то появилось ощущение, что я хороший программист, поэтому было бы неплохо записать советы вида «как бы я смог добиться этого быстрее?». Не буду утверждать, что все эти советы отлично подойдут всем, но для меня они были бы хорошими.

▍ Если ты (или твоя команда) постоянно стреляешь себе в ногу, то почини ружьё


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

Когда я занимался разработкой для iOS, то использовал CoreData и подписывался на изменения нескольких view. Обратный вызов подписки поступал в тот же поток, из которого было запущено изменение. Иногда это был основной поток, а иногда — фоновый. В разработке для iOS важно то, что вносить изменения в UI можно только в основном потоке, иначе приложение вылетит. Поэтому подписка могла работать нормально, но потом ломалась, когда кто-то запускал изменение из фонового потока или вы позже добавляли обновление UI.

Все без раздумий воспринимали это как что-то само собой разумеющееся, и об этом часто говорили в ревью для новичков в команде. Время от времени кто-нибудь ошибался, и мы добавляли DispatchQueue.main.async, когда видели отчёт о сбое.

Я решил это исправить. У меня ушло десять минут на внесение изменений в слое подписки, теперь подписчики вызывались в основном потоке, что позволило избавиться от целого класса сбоев и сняло с нас часть умственной нагрузки.
Читать дальше →
Total votes 32: ↑30 and ↓2+40
Comments9

Нетворкинг для интровертов — гайд для стеснительных

Reading time5 min
Views6.5K

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

Читать далее
Total votes 24: ↑12 and ↓12+8
Comments17

10 советов по нетворкингу для людей, которые его терпеть не могут

Reading time12 min
Views200K
Представьте себя в большом конференц-зале, набитом сотнями специалистов с бэйджиками на груди. Стаи тревожно выглядящих людей в перерыве слоняются мимо столов с закусками, уставленными печеньками и пирожками. Другие – вальсируют сквозь лабиринт тумб партнёров, рядом с которыми мужчины и женщины в деловых нарядах колдуют над аккуратно выложенными рекламными брошюрами и фирменными ручками. Третьи стоят, уставившись в свои телефоны…

Вы пришли на мероприятие лично, хотя могли потом посмотреть его в записи в любимых тапочках дома или в вагоне метро по пути на работу. Вы сделали это с какой-то целью, не правда ли? Пообщаться с какими-то важными специалистами; послушать, как решают аналогичные проблемы с анализом больших данных в Hadoop или уменьшают глюки отслеживания Google Analytics более опытные специалисты; познакомиться с новым потенциально интересным стартапом или журналистом, а может, вы сами – стартап и пришли искать полезные знакомства; окучить множество новых клиентов; найти и замотивировать будущих сотрудников. Ваша задача – в течение следующих нескольких часов оставить положительное неизгладимое впечатление на максимальное количество людей. Уже начинает посасывать под ложечкой?
Читать дальше →
Total votes 36: ↑28 and ↓8+20
Comments13

Python — Эволюция создания объектов (вторая часть)

Level of difficultyMedium
Reading time7 min
Views2.4K

Как упростить себе жизнь или почему ты должен уметь создавать объекты правильно?

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

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

Читать далее
Total votes 5: ↑4 and ↓1+5
Comments2

Python — Эволюция создания объектов (первая часть)

Level of difficultyMedium
Reading time10 min
Views7.2K

Как упростить себе жизнь или почему ты должен уметь создавать объекты правильно?

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

В вопросе "как создавать объект?" я сторонник эволюционного подхода. Я не стремлюсь использовать порождающие паттерны при первой возможности. У меня есть простой набор вопросов самому себе, который помогает мне принять решение, стоит ли изменить способ создания объекта или нет.

Читать далее
Total votes 11: ↑10 and ↓1+10
Comments10

Python — тестирование с помощью pytest(ч.1)

Level of difficultyMedium
Reading time9 min
Views2.9K

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

Читать далее
Total votes 13: ↑10 and ↓3+9
Comments21

Мои взгляды на программирование на июль 2024 года

Reading time5 min
Views7.7K
Эта статья – собрание убеждений о разработке ПО, которые выработались у меня на сегодняшний день. Всё основано на личном опыте.

Подход к задачам


Основная часть моей работы – разбираться с тикетами, и я до сих пор продолжаю совершенствоваться в этом деле. Вот несколько вещей, которые я открыл для себя в процессе.
  • Разные задачи, проекты и команды требуют разных подходов. Например, сделать пейсмейкер без автоматических тестов было бы безответственным решением – кто-то может от этого пострадать. И вместе с тем, глупо изводиться по поводу автоматических тестов на геймджеме, куда вы отправились на выходных. Содержание понятия «хороший код» меняется в зависимости от контекста, и нужно адаптировать свой подход под конкретную ситуацию.
  • Делайте марш-броски. Бывает, что я ставлю себе цель довести какую-то функциональность до готовности в кратчайшие сроки, пусть даже срезая углы где только можно, с кодом ужасного качества и TODO на каждом шагу. Когда у меня появится что-то рабочее, тогда и буду приводить всё в должный вид. Я пришел к выводу, что это хороший способ обозначить для себя проблемные зоны, а также неплохой путь к ускорению процесса разработки. На эту тему есть статья «Выбросьте первый набросок кода».
  • Если я бьюсь головой об задачу и никак не могу сдвинуться с мертвой точки, значит, необходимо оторваться от нее на какое-то время.
  • Прежде чем начать работу над сложной задачей, я задаю себе вопрос: «А что если вообще этого не делать?» Как правило, вопрос оказывается глупым и выполнять задачу все-таки приходится. Но примерно в пяти процентах случаев я осознаю, что определенную часть работы можно спокойно пропустить.

Читать дальше →
Total votes 15: ↑13 and ↓2+16
Comments26

Обзор и гайд по Tortoise ORM: собрал в одну статью все, что надо знать об инструменте и своем опыте работы с ним

Level of difficultyMedium
Reading time26 min
Views3.6K

Привет, Хабр! Меня зовут Даниил Лихачев, я Python backend developer в диджитал-продакшене Далее. Сегодня я хотел бы представить вашему вниманию асинхронную библиотеку для работы с базами данных под названием Tortoise ORM. Это обзорная статья, чтобы показать, что из себя представляет данная библиотека и для каких проектов она подойдет. Также на основе своего опыта постараюсь осветить аспекты, в которых Tortoise ORM хороша и удобна, а также те, в которых ее возможностей может не хватать и как это обойти. Также бонусом предоставлю свой шаблон в стеке FastAPI + Tortoise ORM.

Читать далее
Total votes 15: ↑14 and ↓1+17
Comments16

FastStream — новый убийца Celery?

Level of difficultyEasy
Reading time7 min
Views10K

FastStream - это относительно новая блестящая игрушка в руках Python'истов, которая создана специально для работы с брокерами сообщений.

В Python сложилось устойчивое убеждение, что если мы работаем с MQ - то нам нужен Celery, но он слегка устарел. Именно поэтому люди пытаются выкинуть "деда" и затащить вместо него любой новый многообещающий MQ-инструмент. Кроме того, культ Celery настолько силен в умах, что практически все новые библиотеки для работы с MQ пытаются стать его "убийцей" и заменой.

Однако, это не совсем верно. Существует огромный пласт проектов, которым нужен не фреймворк для менеджмента задач, а просто "голый" функционал Kafka/RabbitMQ/NATS/whatever для межсервисного взаимодействия. И все эти проекты вынуждены довольствоваться "сырыми" python-клиентами к своим брокерам, а всю обвязку вокруг этих клиентов писать самостоятельно. FastStream целится как раз в эту нишу.

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

Читать далее
Total votes 27: ↑26 and ↓1+28
Comments23

Пишем свой GraphQL клиент на Python

Level of difficultyMedium
Reading time28 min
Views7.1K

Эта статья родилась из опыта использования GraphQL в проекте одного из крупнейших аэропортов РФ. Проект посвящен созданию системы по автоматизации обслуживания рейсов и управлению ресурсами аэропорта в реальном времени (MRMS система).

Проект реализован на базе микросервисной архитектуры, где модель данных аэропорта представлена в виде GraphQL API, а сервер, предоставляющий API, написан на java. Клиентами этого API являются не только web/mobile, но и сервисы на java, golang и python.

Статья написана как пошаговое руководство по созданию своего GraphQL клиента на python с нуля, где попутно автор демонстрирует проблемы, возникающие на этом пути. Использовать реальную GraphQL схему аэропорта не представляется возможным, поэтому для наглядности будем использовать открытую схему github GraphQL API.

Читать далее
Total votes 3: ↑3 and ↓0+3
Comments2

systemD с 0 до 1: библия сисадмина

Level of difficultyMedium
Reading time27 min
Views23K


Что бы кто не говорил, systemD становится стандартом систем инициализацией в линуксе. И с 80% вероятностью все сервера будут с systemD. Не факт, конечно, есть и личные сервера, на которых может стоять хоть Gentoo, хоть Devuan, хоть NixOS.

Некоторые дистрибутивы хотят даже перейти с загрузчика Grub на systemd-boot! Потому знать, как работать с данной системой инициализации, должен каждый сисадмин и просто программист, ибо сейчас он практически везде.

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

А также напишем небольшой скрипт на Python для автомизации некоторых задач. Приятного чтения, господа линуксоиды и просто пользователи!
Читать дальше →
Total votes 51: ↑46 and ↓5+53
Comments11

Почему я больше не делаю важные дела: и еще 3 правила как не потерять себя к 40 годам

Level of difficultyEasy
Reading time8 min
Views144K

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

Читать далее
Total votes 156: ↑121 and ↓35+112
Comments243

Люди с золотой клавиатурой: победители конкурса «Технотекст 2023»

Reading time13 min
Views13K

Ян Флеминг, автор романов о Джеймсе Бонде, отпраздновал завершение книги «Казино Рояль» покупкой позолоченной печатной машинки — именно такая могла быть у супергероя, чтобы после спасения мира набивать мемуары. Ум, ирония и крутой нрав — в одном знаковом поступке.

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

Читать далее
Total votes 81: ↑79 and ↓2+141
Comments40

Poetry: from zero to hero

Level of difficultyEasy
Reading time13 min
Views36K

Привет, Хабр! Меня зовут Тимур, я тружусь ML-инженером в одной сибирской IT-компании.

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

В качестве бонусов - готовая GitLab CI джоба для сборки и публикации пакетов, а также шаблон Dockerfile для multi-stage сборки образов в проектах с использованием Poetry.

Добро пожаловать под кат!

Читать далее
Total votes 4: ↑4 and ↓0+4
Comments15

Фоновые асинхронные задачи в FastAPI и их мониторинг

Reading time19 min
Views14K

Привет! Меня зовут Иван, я бэкенд-разработчик в KTS.

Сегодня расскажу, как в FastAPI эффективно работать с фоновыми задачами и настроить их мониторинг в Prometheus.

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

В статье опишу 5 вариантов: встроенный в FastAPI Background Tasks и 4 библиотеки — ARQ, SAQ, FastStream, адаптированный к асинхронному коду Celery.

В конце расскажу, как мониторить фоновые задачи.

Читать далее
Total votes 49: ↑49 and ↓0+51
Comments30

Расширяем тестовый фреймворк с помощью Pytest-плагинов. Часть 2: практика

Level of difficultyMedium
Reading time18 min
Views3.6K

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

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

Читать далее
Total votes 11: ↑11 and ↓0+11
Comments0

Расширяем тестовый фреймворк с помощью Pytest-плагинов. Часть 1: теория

Level of difficultyEasy
Reading time8 min
Views5.8K

Всем привет! Меня зовут Александр Волков, я занимаюсь интеграционным и компонентным тестированием в YADRO. В числе продуктов компании есть системы хранения данных и, говоря о тестировании, я буду иметь в виду в первую очередь работу с СХД. Однако описанные подходы пригодятся всем, кто ищет инструменты для создания тестового фреймворка и расширения его возможностей под свои задачи. 

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

Читать далее
Total votes 16: ↑16 and ↓0+16
Comments5

Берем ответственность за вопросы: как задавать их правильно

Reading time9 min
Views4.9K

Привет, Хабр! Я Оксана Нечитайлова, руководитель отдела сервисного дизайна продуктов в YADRO. Руковожу различными командами уже более 17 лет и за это время поняла: многие недооценивают навык формулирования правильных вопросов. Большинство специалистов уверены, что это некое «врожденное» умение. Но в реальности рабочих задач не каждый может так формулировать вопросы, чтобы получать на них полезные ответы.

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

В статье расскажу:

какие виды вопросов бывают и какие ошибки в них допускают чаще всего,

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

как не вестись на манипулятивные вопросы и избегать их в своей речи.

Читать далее
Total votes 18: ↑17 and ↓1+22
Comments1

Шорт-листы «Технотекста 2023»: достойные из достойных

Reading time27 min
Views12K

Мы получили 1022 заявки, приняли из них 918, в шорт‑листы попало более 300 статей. Точной цифры по шорт‑листам нет неслучайно: поскольку наш естественный интеллект это вам не ChatGPT склонен уставать и ошибаться, несколько статей могут попасть в шорты, но, скорее всего, выпадут из них — так, во время подготовки этой статьи выяснилось, что из финала выбыли двое участников, скрывшие свои публикации в черновики.

Вообще, такого «Технотекста», как в этот раз, ещё не было: обычно мы сравнительно легко отсеивали участников и выбирали финалистов, разница в уровне материалов была очевидной. В этот раз номинанты сильные — и многие статьи не вышли в финал не потому, что они какие-то не такие, а потому что они объективно слабее лучших из лучших — но очевидно, что сильнее большей части статей на Хабре. Хотя участники «Технотекста» из года в год находят отличные способы добить нервную систему модераторов конкурса 😃

Читать далее
Total votes 84: ↑84 and ↓0+122
Comments41

Как информативно оформить профиль на GitHub?

Level of difficultyEasy
Reading time6 min
Views14K

Тетрадь, дневник — ваше лицо. А круто оформленный профиль на гитхабе — статус вашей занятости. Чем больше участий в проектах, тем безработнее... Пока молодые специалисты оформляют свои страницы с "Lib-Meta-Neo ML-Scientist 10 years of expirience" на LinkedIN настоящий амбассадор HR и трудового найма бегут на GitHub. Именно там выискиваются самые закостенелые гики программирования, вносящие тридцать пять тысяч коммитов в безбюджетные опенсорс проекты; именно там рождаются гении, разрабатывающие AAA-проекты геймдева на ассемблере. 

Все это шутки. 

Но реальность такова, что многие из рекрутеров не против оценить ваш профиль. Подавать себя, как в маркетинге, важно. И неплохо бы сразу представить всю статистику развернуто перед глазами, чтобы бедный HR не искал ваши коммиты, а гордо проведенные тысячи часов в GitHub не остались за кадром. Каждый проект служит материальным доказательством способностей разработчика, позволяя потенциальным соавторам или работодателям оценить его стиль программирования, навыки решения задач и умение управлять проектами. 

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

Читать далее
Total votes 26: ↑24 and ↓2+26
Comments5
1
23 ...

Information

Rating
Does not participate
Location
Россия
Registered
Activity

Specialization

Backend Developer, DevOps
Middle
Linux
Python
Docker
Kubernetes
Monitoring
OOP
Git
Fastapi
SQLalchemy
Redis