Корисні інструменти для Python-розробників. Українські програмісти — про те, що спрощує їм роботу

Якими інструментами користуються українські Python-розробники, в чому їх переваги та недоліки? Ми коротко поспілкувалися з українськими Python-девелоперами про те, які інструменти для них зручні та чому, як їх використання покращило процес розробки.

«Для продуктивної роботи я використовую обмежувачі»

Михайло Кашкін, Senior Python Developer в у Databand.ai

Перший інструмент — це редактор. У мене їх декілька. Першочергово я використовую VSCode, дуже його люблю. Його запустили відносно недавно, і відчувається, що люди працювали над ним сумлінно.

Другий продукт, який я використовую, але куди менше люблю — PyCharm. Це російська розробка, і в тамтешніх фахівців емпатія до роботи інших часто на рівні поліна. Багато речей вони переускладнюють, роблять незручними, хоча вже й понад 20 років працюють над своїм IBA.

Поза тим іноді я використовую клієнт GitHub, тому що не завжди вистачає клієнта для Git в IBA (IBE).

Це основне. Якщо трошки розширюватися, то в мене є багато плагінів для IBA. Один з останніх — GitHub Copilot.

І, звісно, найкрутіше — це частина екосистеми Python-проєктів, які дають змогу автоматично знаходити помилки, форматування, сумнівні місця з кодом тощо. Це Pylint та Black.

Автоматизація для програміста недооцінена, вона сильно спрощує життя та роботу розробникам. Я вважаю, що вчитися використовувати такі інструменти варто якомога раніше.

Років вісім тому я писав код і не дуже звертав уваги на різні автопомічники, лінкери, які дозволяли підсвічувати VBM тощо. Але врешті-решт витратив час, налаштував собі невелику частину інструментів.

Якось писав код достатньо пізно, засидівся — і побачив, що мені підкреслило неправильний вираз. Усвідомив, що якби я зараз, ось такий сонний, став дебажити, як раніше, то витратив би хвилин 20. А тут я ще не встиг натиснути кнопку «зберегти», а мені вже підсвітило помилки у коді.

Одна з дуже важливих речей, про яку мало говорять, — це шрифти. Системні шрифти не дуже хороші. Я зараз експериментую конкретно з JetBrains Mono, там багато цікавих можливостей. Ще не знаю, наскільки мені зручно, але до цього також працював з іншими шрифтами. Вважаю, що це варто досліджувати, і це, як не дивно, може збільшувати та покращувати досвід людини.

Ще зазначу про техніку: Mac — мабуть, одне з найкращих вкладень, які може зробити для себе програміст. Крім тих випадків, коли людина працює з ML чи AI, бо там потрібні відеокарти. А у «маків» з цим не дуже добре: їх не можна туди вставити. Тому для цих завдань та експериментів маю окремий комп’ютер, великий стаціонарний. Але робоча конячка — це Mac; а ще другий монітор, який справді збільшує продуктивність.

Ще один інструмент, який я люблю, — вимірювач часу, який я витрачаю на ту чи іншу задачу. Зараз користуюсь безплатним сервісом WakaTime. Крім покращення планування, це допомагає відчувати робочий прогрес. Іноді здається, що ти десь недопрацював, а потім дивишся наприкінці тижня на показники, а ти непогано попрацював принаймні за часом.

Користуюсь автоматичним перекладачем DeepL, який повністю змінив моє життя. Вони зробили класний клієнт в окремому віконці, і тобі не потрібно весь час перемикатися на умовний Google Translate. Хоча є й мінуси — там досить обмежений набір мов.

Зрозуміло, що є стандартні інструменти — браузери, офісні документи. З постійних я тяжію до плагінів у Visual Studio. Там в мене є книжка для заміток, для тестових проєктів тощо.

Крім того, є не дуже звичні інструменти, які я використовую для продуктивної роботи, — це обмежувачі. Блокую рекламу, але не тільки на рівні звичайних інструментів на кшталт AdBlock, а й на рівні DNS. Там же блокую різні хости. Мені теж іноді хочеться щось поскролити, подивитися тощо. Тим паче, що останнім часом багато усіляких тривожних речей, від яких просто неможливо відволіктися. І тому я прямо блокую у себе велику кількість вебсайтів за допомогою DNS.

Користуюсь Next DNS. А ще плагіном, який блокує більшість стрічок у фейсбуці, твіттері тощо. Заходиш у соцмережу, а у тебе стрічки немає. Можеш зайти тільки на конкретний допис, якщо тобі кинули посилання, або ж на свою сторінку. Це корисно, щоб не «провалюватись» у прокрастинацію.

«Інтерпретатор PyPy виручає своєю швидкістю роботи»

Олександр Загірний, Python Developer

PyCharm — це середовище розробки. Його плюси: інтеграція та допомога у роботі з усіма потрібними бібліотеками, фреймворками та утилітами. Зручний дебагер, що працює «із коробки». Максимально інтуїтивний пошук за файлами та кодовою базою.

Інтерпретатор PyPy виручає своєю швидкістю роботи (при правильному підході). Багато разів рятував мене, пришвидшуючи обробку великого обсягу даних.

htop — застосунок для моніторингу завантаженості операційної системи. Також надає функціонал для виконання операцій над процесами.

«Behave спростила роботу тестувальникам та усунула людський фактор»

Денис Скрипник, Golang Developer

З останнього цікавого, що я почав використовувати — бібліотека Behave. Лопатить Cucumber-специфікації. Особливо подобається фіча Cucumber-таблиці. Усі кейси можна завантажити в одну зручну таблицю, яку може прочитати будь-хто. Але, звичайно, найкраще її використовувати на E2E-тестах, попри гучні лозунги SmartBear про «срібну кулю».

В основі лежить методологія behavior-driven development. Ідея в тому, що BA описує поведінку, а далі розробник імплементує тести та бізнес-логіку.

Найкрутіша особливість в тому, що опис бізнес-логіки, який готує BA, — це не просто відірваний документ. Цей опис є специфікацією у синтаксисі Cucumber, яка потім автоматично інтерпретується юніт-тестами.

Наприклад, є задача:

Feature : multiplication service
Scenario: two*two equal four 
 Given: a = 2; b=2 
 When: a*b
 Then: Result must equal 4.

І саме ці рядки тексту автоматично перевіряють тести.

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

У нас такий кейс: мануал-тестувальники перевіряють величезну кількість варіантів введення форм, і їх заповнення потребує багато часу. Ще й лід не може перевірити, чи справді всі кейси пройдені, або ж мануал схалтурив чи щось випадково пропустив.

Гарна особливість Cucumber в тому, що given (вхідні дані) можуть бути представлені у вигляді таблиці. Тестувальники просто заганяють це все у таблицю, і скрипт автоматично підставляє варіанти у форми чи на API по черзі. Це значно спростило роботу тестувальникам та усунуло людський фактор.

Але тут треба розуміти, що BDD годиться тільки для чогось високорівневого (хелпера, як у моєму кейсі, або для E2E API тестів), бо роботи з написання імплементаторів для цих специфікацій чимало.

«В Django створювати бекенд API вдається трохи повільніше»

Олег Синило, Python Developer

В моєму наборі Postman, PyСharm, Jira, Slack, Docker, AWS.

Postman використовував з самого початку розробки, тут зручно тестувати ендпоінти. У PyCharm зручне середовище з купою інструментів, але моєму старому ноутбуку було важко його запускати. Ще використовував Visual Code, він важить набагато менше і трохи простіший при першому використанні IDE.

Docker трохи змінив те, як я працюю, і пришвидшив створення нових проєктів чи перший запуск старих.

Також я використовував кілька фреймворків: Django, Flask, Pyramid. В Django найбільше функціоналу «з коробки», але він вимагає низки налаштувань, і створювати бекенд API на ньому вдається трохи повільніше. Натомість він добре структурований, через що його простіше підтримувати, на відміну від Flask та Pyramid.

Авжеж, ці фреймворки можна структурувати як завгодно, але в Django є стиль, описаний у документації, що полегшує роботу з легасі-проєктами.

«PyCharm Professional значно полегшив мені початок нової роботи»

Piotr Gryko, Senior Python Developer, засновник київського проєкту Code and Coffee

PyCharm Professional — за нього я плачу зі своєї зарплати. Він добре працює для розуміння складних кодових баз, — наприклад, із втраченою бізнес-логікою або написаних у дуже DRY (don’t repeat yourself) стилі.

Автозаповнення синтаксису чудово справляється з форматуванням Python — мова дуже чутлива до відступів.

PyCharm Professional підтримує підсвічування синтаксису React.js, що робить його корисним для сучасних проєктів Django/React, особливо коли бекенд-інженерам доводиться «вгадувати» синтаксис новітнього фреймворку фронтенду.

Цей інструмент значно полегшив мені початок нової роботи. Тоді мені довелося ознайомлюватися з новою кодовою базою швидко та під тиском, адже з самого початку я мусив влитися у робочий процес. PyCharm допоміг мені розібратися у складній кодовій базі та швидко почати випускати нові функції.

GitLab має фантастичну інтеграцію Git UI, автоматизованого тестування та управління проєктами, все в одному.

GitLab CI — це формат YAML на основі Docker, який набагато простіше тестувати локально, порівняно з GitHub.

iPython Debugger — інтерактивна оболонка для відладки з автозаповненням. Він добре під’єднується до розширення Django. Налагоджувач iPython можна вставити у свій код і встановити точку зупинки, наприклад:

import ipdb; ipdb.set_trace()

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось12
До обраногоВ обраному12
LinkedIn



12 коментарів

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.
А тут я ще не встиг натиснути кнопку «зберегти», а мені вже підсвітило помилки у коді

Вже забув що таке кнопка «зберегти» у IDE. Autosave у pycharm виконує свою роботу ідеально.
Чи малося на увазі не зберегти, а додати комміт?

Додам mypy, wemake-python-styleguide, autoflake.

pre-commit — must have (flake8, flake8-print, isort, black)
pytest for test — must have (є інтеграції з джанго, запуск в потоках, зручні асерти)

Опціонально:
python-redis-lock — локи в редісі
celery
github actions (free) — linting, check github history, tests

pre-commit ще непогана штука, використовую з flake8 + декілька плагінів, та isort. Можна багато чого додати ще, якщо необхідно.

Щось мало тут про автоматизацію. Додам від себе:
1. Tox — такий собі Make/Cmake для Python проектів.
2. Make — якщо ви пишете на CPython.
3. Podman — бо Docker не безкоштовний вже.
4. Flake8, hacking, black — для статичного аналізу коду.
5. GraalVM — замість інтерпретатора як залежності, для компіляції у машинний код.

Денис Скрипник, Golang Developer

Пітоністи, ловіть диверсанта!

Найчастіше користуюся Pycharm, пару раз пробував пересісти на VS Code, але так і не вийшло.

З приводу інших інструментів, то так виходить, що використовуєш багато всього й одночасно. Однак з останніх власних відкриттів, які б хотів порекомендувати можу виділити:

  • kafka-ui — вебінтерфейс для Кафки, дуже зручно якщо піднято на рівні компанії для різних середовищ вашої кафки
  • Fig — авто підказки для термінала як в IDE-шечках
  • Gitpod — віддалене середовище розробки. Десь в хмарі піднімається умовна ubuntu з вашим кодом. Можна через веб інтерфейс редагувати і запускати код, а можна під’єднатися через VSCode чи Pycharm і працювати через локальний редактор. Дуже люблю для якогось не знайомого коду на Github, щоб не засмічувати локальне середовище для одноразового запуску
  • DevUtils — апка на macos, щоб локально робити всякі дрібні штуки: відформатувати JSON, згенерувати UUID, протести regex, etc.

Якщо говорити про бібліотеки на python, то цікаві для себе відкриття:

  • pydantic — зручна бібліотека, щоб валідувати об’єкти, які визначені по типу dataclass-ів
  • dirty-equals — покращує написання тестів, можна приблизно порівнювати дані. Для прикладу порівняти лише частину dict
  • factory_boy — дозволяє в тестах зручно створювати тестові об’єкти

ipdb — дебагер. (rdb — для Celery).
httpie — для роботи з API з консолі, але зручніше ніж curl (вказую, бо на пітоні та дуже корисний)
line-profiler, memory-profiler — коли стандартного профайлінга замало)
coverage.py — перевірка покриття тестами
poetry — спробуйте замість pip (або pip-compile з pip-tools)
responses — для моків запитів через requests
moto & freezegun — мокі AWS & часу
Пошукайте плагіни для flake8 — там багато корисного щоб енфорсити стилі поверх pep8

Плюсую за poetry, мені подобається

Якщо когось цікавлять плагіни для flake8 — awesome-flake8-extensions

Підписатись на коментарі