Почему я выбрал IT и остановил выбор на Python?
От развлечений до серьезных научных работ; Внести свою лепту в проект, полезный для человечества, над которым работает почти весь земной шар; Возможность быть частью чего то важного или СОЗДАВАТЬ то самое важное... - и это всё IT! Вот почему я выбрал эту сферу. Почему Python, а не Java, C, Go..? Во-первых, нужно было определиться (в конце концов), а во-вторых, Python - это взвешенный выбор. Язык я подбирал под себя индивидуально, как основной инструмент для ремесла - "хорошо лежит в руке, удобно.". Мое основное ремесло в том, что бы писать бэкенд и REST API к нему и наблюдать за тем, как оживают разные приложения обращаясь к эндпоинтам моего API - это еще и процесс, который особо радует меня и является причиной выбора именно бэкенда!
Что изучаю или собираюсь изучить?
ООП, Linux (Bash), алгоритмы (и математика), аспекты разработки ПО, сети, некоторые soft skills, telegram-боты - это темы, которые хочу особо ПРОКАЧАТЬ. Люблю читать, поэтому между делом читаю такие книги как ООП с помощью Python (Ирв Кальб); Soft skills для IT-специалистов (Дон Джонс); Совершенный код (Стив Макконнелл); Грокаем алгоритмы (Адитья Бхаргава); Командная строка Linux (Уильям Шоттс).. Так же читаю статьи на Хабр и штудирую бесплатные курсы на Яндекс Практикум (много полезного там).
Про сильные стороны и личные качества.
За 7 лет в HoReCa научился работать в команде, взаимодействуя с другими командами разных подразделений добиваясь общих целей. Так же я прокачал эмпатию, что особо помогало добиваться выигрыша для ОБЕИХ сторон. Я ценю чувства других людей, поэтому для меня важно, что бы выигрывал КАЖДЫЙ. Еще набрался много опыта работы с иностранцами, что помогло побороть языковой барьер и дало возможность находить общий язык с каждым, независимо от менталитета, плюс, прокачать английский язык (с уровня "не знаю для чего нужен английский.." до "мне срочно нужен английский, я знаю где его применить!")
А еще..
Иногда я музицирую (лет так с 17 примерно). Я человек, который написал музыкальный альбом не зная сольфеджио. Люблю музыку и прихожу к ней, когда накапливается желание выразить эмоции в нотах. Кстати, у музыки и программирования много общего..
Стек и библиотеки, которые применял в проектах:
Языки: Python / SQL / CSS / HTML / YAML / RegExp
Фреймворки: Django / DRF / Flask / FastAPI / python-telegram-bot / Aiogram3
Парсинг: bs4 / Scrapy / argparse
Тестирование: Pytest / Unittest
СУБД: PostgreSQL / SQLite
Cloud: Docker / Git / Nginx / Uvicorn / Gunicorn / CI/CD (GitHub Actions)
ORM: SQLAlchemy + Alembic
Другие: Jinja2 / Aiogoogle / Djoser / JWT
Проекты
Пройдите по ссылке на GitHub, там можно ознакомиться с проектами, представленными ниже и другими, не представленными здесь: https://github.com/andrey-kobelev
1. Телеграм-бот для внутреннего пользования сотрудниками компании: отвечает на часто задаваемые вопросы, отправляет нужные контакты, рассказывает про историю компании/клиентов. Интерфейс бота - многоуровневое меню с inline-кнопками. Разрабатывался бот в команде, с нуля, в формате хакатона.
Команда: Техлид проекта; Тимлид от мастерской; Проджект менеджер; Тимлид команды разработчиков (это я); 7 разработчиков.
Что делал я: изучил требования к проекту и определил стек технологий; обучал команду технологии и проводил гайды; составил User Flow в draw.io; спроектировал общую архитектуру приложения; декомпозировал проект на задачи и расписал задачи на доске по типу Канбан; проводил ревью всех ПР; спроектировал базу данных; реализовал всю часть касающуюся администрирования бота; предложил и внедрил систему разограничения доступа при взаимодействии с ботом.
Стек: Python3.11, Aiogram3, SQLAlchemy, PostgreSQL, CI/CD (Docker, GitHub Actions)
Готов рассказать о данном опыте в рамках интервью.
2. Проект для сбора отзывов пользователей на произведения. Проект разрабатывался в команде. Цель команды была написать бэкенд и REST API для него. Я написал всю часть, касающуюся управления пользователями: систему регистрации и аутентификации, права доступа, работу с токеном, систему подтверждения через e-mail. Так же я реализовал импортирование данных из CSV файлов в базу данных.
Стек: Python 3.9, Django3, DRF, Djoser, Simple JWT
3. Веб-приложение "Продуктовый помощник и публикация рецептов" - одностраничное SPA-приложение. Написал с нуля бэкенд и REST API строго в соответствии со спецификацией. Спроектировал базу дынных, настроил админку, реализовал импорт тестовых данных в БД. Реализовал сервис для формирования списка покупок и последующего его скачивания (текстовый файл). Настроил инфраструктуру: запуск проекта в контейнерах, автоматическое тестирование и деплой проекта на удалённый сервер (CI/CD).
Стек: Python 3.9, Django3, DRF, Gunicorn, PostgreSQL, React, Nginx, Node.js, Docker, Djoser
4. Приложение для Благотворительного фонда поддержки питомцев. Фонд собирает пожертвования на различные целевые проекты. Написал само приложение и REST API к нему. Реализовал систему создания проектов администратором (другие пользователи не могут этого делать). Так же реализовал систему пожертвований, которые поступают в проекты по принципу First In, First Out: все пожертвования идут в проект, открытый раньше других; когда проект набирает необходимую сумму и закрывается — пожертвования начинают поступать в следующий проект. Добавил возможность формирования отчёта в гугл-таблице через Google API.
Стек: Python 3.9, FastAPI, FastAPI Users, JWT, SQLAlchemy, Alembic, aiosqlite, Uvicorn, aiogoogle
5. Сервис укорачивания ссылок. Написал как сервис, так и REST API к нему. Реализовал возможность ассоциировать длинную пользовательскую ссылку с короткой, которую предлагает сам пользователь или предоставляет сервис, для последующей переадресации на исходный адрес при обращении к короткой ссылки. Придумал алгоритм формирования коротких идентификаторов переменной длины. Подключил и настроил статику проекта. Описал собственные обработчики ошибок для пользовательского интерфейса и для API.
Стек: Python 3.9, Flask, Flask-Migrate, Flask-SQLAlchemy, Flask-WTF, SQLite
6. Парсинг сайта при помощи Beautiful Soup. Написал четыре парсера и объединил в одну многофункциональную программу. Сделал возможным запуск парсеров выборочно, при помощи аргументов командной строки. Для отслеживания прогресса парсинга использовал прогресс-бар. Реализовал два варианта формата вывода результатов (так же посредством аргументов командной строки): запись в CSV-файл и вывод в терминал в табличном виде. Написал и настроил систему логирования и всевозможные обработчики ошибок.
Стек: Python 3.9, bs4, requiests-cache, tqdm, argparse, logging
7. Тестирование новостного сайта и электронной записной книжки. Покрыл тестами новостной сайт на 90% применив pytest. Так же написал тесты на unittest для электронной записной книжки, покрыв тестами приложение на 90%.
Стек: Python 3.9, Django3, pytest, unittest
8. Бот-ассистент для отправки статуса домашней работы. Написал бота для личного пользования. Что реализовал: пулинг учебного сервера для запроса статуса домашней работы отправленной на ревью; парсинг полученных данных с учебного сервера; автоматическая отправка личного сообщения со статусом домашней работы самим ботом. Далее я расширил сферу деятельности бота - научил его отправлять статус деплоя проекта на сервер, посредством GitHub Actions. Так же прописал систему логирования ошибок и прочих событий работы бота.
Стек: Python 3.9, python-telegram-bot, python-dotenv
Пройдя самое первое ревью первого написанного учебного проекта, то мне показалось, что меня проверяют как то слабо, в духе: "И так сойдет.. едем дальше." - мне это не понравилось и я попросил своего куратора назначить мне САМОГО беспощадного и ответственного ревьюера. Со второго проекта и до самого конца, моим ревьюером был Андрей Квичанский (информацию о нем можно найти в интернете) - это лучшее что может произойти с тем, кто действительно готов стать программистом! На протяжении всей учебы я проходил самые жесткие, справедливые, конструктивные ревью, Андрей Квичанский не давал спуску от слова СОВСЕМ! В среднем, количество итераций ревью по каждому проекту было 6, максимум 7-8, вносил правки не только в логику кода, но даже в именование переменных, констант, классов, функций. Вот пример: "Нельзя использовать сокращения для имен. msg
? Глутамат натрия?" - действительно, открыв проект спустя пол года, я бы сам запутался в том, что написал - именовать нужно как следует!)))
Еще горжусь тем, что всю учебу прошел без применения GPT, подсказок и так далее - только голый сёрч информации в гугле. Были конечно моменты, тройка моментов, когда приходилось поднимать на уши ВСЕХ (одногруппники и наставники)! Но там были не очевидные моменты и в частности это происходило при изучении DevOps или алгоритмов.
Помогал одногруппникам! Всегда был на связи и отвечал на просьбы помочь!
Вишенкой на торте будет - командная работа! Никогда не представлял, как можно разрабатывать один проект в команде: ты бэкендер и еще условно 5 бэкендеров - ладно я, а вот что делать с остальными 5?))) Я не просто научился работать в команде, но даже занял место Тимлида и справился! Руководил разработкой телеграмм-бота для настоящей компании (подробнее в последнем опыте работы в Starlink).