Обо мне

Специализируюсь на разработке web приложений backend и frontend. Люблю свою работу, стараюсь не отставать от трендов, изучать новые подходы и технологии в области web разработки и не только. 

Не зацикливаюсь только на PHP (хотя последние изменения 7 версии очень нравятся), смотрю и пробую другие языки и технологии, такие как Java, Rust, Go, JS и NodeJs

Уверенный пользователь *nix

Backend

Основной стек: PHP5/7, Symfony, Yii1/2, GIT, MySQL, PostgreSql, mongodb, NodeJs,

Все новые проекты, как правило, разрабатываю с использованием Symfony (в зависимости от требований)

опыт использования HTTP протокола для интеграции REST API, SOAP

тестирование: модульное и функциональное

применяю: OOP, Design Patterns, SOLID,  DRY

IDE PhpStorm от JetBrains

Frontend

Уверенно владею native JS (прототипы, области видимости и др.), но в зависимости от ситуации стараюсь использовать новые версии (es2015, es6) через babel transpiler или TypeScript (что конечно лучше но не всегда проще интегрировать в уже рабочий проект)

Верстаю по БЭМ

LESS/SCSS -> CSS

сборку веду через gulp, последнее время больше через webpack

знаком с основными JS Frameworks - angular (1 версии исп. в рабочих проектах и др. версии для ознакомления), пробовал React (всегда смогу подтянуть если понадобится)

Deploy:

писал свои велосипеды, использовал Jenkins CI, для разработки использую Docker

Профессиональные навыки
PHPSymfonyYii frameworkJavaScriptAngularJQueryNode.jsGulpLessCSS
Опыт работы
Taskrealtor
Минск
Full-stack web Developer
Август 2015 — Сентябрь 2017 (2 года и 2 месяца)

Подключился к проекту taskrealtor.com в период разработки, уже было сделано 50% сервиса.

Работал удаленно, полный рабочий день.

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

Проект был написан на PHP5 с использованием Yii2 framework, GIT для контроля версий и деплоя (push/pull). На frontend использовался AngularJS 1.* совместно с native JS (es5)

Backend:

Исходный код был написан с использованием стандартных/рекомендуемых принципов YII, что позволило как можно скорее приблизится к релизу, но при этом сильно повлияло на кодовую базу проекта.  AR модели разрослись до неимоверных размеров и "протекали" по всему коду, контроллеры и представления напрямую работали с моделями. Такое поведение вносило неразбериху, код дублировался в backend и console части проекта. Именно этот момент стал самым сложным, куча мест где используется модель, небольшое изменение в модели влияло на другие места системы совершенно "магическим" образом. Естественно не было совершенно никакого тестирования.

В итоге были переписаны самые критичные места системы (регистрация агентства, подача заявки, поиск и др.).  

Произведено разделение бизнес логики от хранения и представления (использовался CQRS в частности command bus). 

Добавлены транзакции и исключения. 

Внедрение зависимостей с использованием dic yii

Все вышеперечисленные изменения позволили проводить модульное тестирование (unit в codeception), написаны тесты для основных частей системы.

Frontend:

CSS  и JS файлы разрослись до огромных размеров, было принято решение подключить сборщик gulp.

LESS -> CSS -> minified

es2015 (with babel and webpack) -> js ->minified

тестирование фронтальной части сайта через headless browser PhantomJS with CasperJS (что намного быстрее чем через selenium)

Deploy:

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

Для решения этого вопроса сначала был написан небольшой nodejs демон, который дергался из bitbucket при push -е в dev ветку разработчиками и запускал gulp deploy сценарий. В последствии был настроен полноценный CI через jenkins. Это решение позволило программистам при отправке своих наработок в дев ветку сразу же видеть ошибки и запускать процесс обновления на тестовой версии сервиса.  

Непрерывная интеграция очень сильно сократила deploy и поиск ошибок, что в свою очередь сильно повысило стабильность работы сервиса в целом.

Интернет портал "Большой Новосибирск"
Москва
PHP программист/технический директор
Январь 2010 — Декабрь 2015 (6 лет)
Работа в интернет-портале новосибирска http://megansk.ru Официальная должность технического директора подразумевала под собой не только программирование, но и решение вопросов касающихся хостинга, дизайна, составления документации и ТЗ. Эта работа заставила выйти из зоны комфорта разработчика. Мне приходилось контактировать с людьми, ставить задачи (не всегда технические), брать ответственность за архитектуру портала и сайтов сателлитов.В итоге портал был полность переписан на Yii framework, БД оптимизирована. Сайт стал лучше виден в поиске, т.к. время ответа от сервера сократилось до нескольких милисекунд, в противовес 3-5 секундам а иногда и больше на старой версии.Пареллельно начинаю развивать свои проекты и принимаю участиве в других.
ЗАО "Маяк" ГК F1
Новосибирск
инженер-программист
Декабрь 2006 — Декабрь 2009 (3 года и 1 месяц)
Принят в информационно-аналитический отдел.Занимался разработкой и поддержкой сервисов и сайтов компаний, все сайты работали на самописной CMS (PHP). На этом месте получил основные навыки разработки под WEB. Курировал мою деятельность опытный программист, начал брать первые заказы на фриланс и получать доп. доход, что являлось доп. мотивацией к дальнейшему погружению в область программирования под WEB.
ООО "УК Свой Дом"
Новосибирск
инженер-программит
Сентябрь 2006 — Ноябрь 2006 (3 месяца)
Взяли программистом, со временем оказалось, что надо решать вопросы обслуживания парка ПК и их пользователей (эникейщик), что меня в целом не удовлетворяло, т.к. надо было нарабатывать опыт в области программирования.Посему задержался тут не долго.
Высшее образование
Восточно-Сибирский государственный университет технологий и управления
Улан-Удэ
Факультет: Электротехнический; ЭТФ
Сентябрь 2001—Июль 2006 (4 года и 10 месяцев)
Специальность: программное обеспечение вычислительной техники и автоматизированных систем Дипломный проект : WEB приложение по учету компьютерной техники на предприятии, связка Applet+Servlet (JAVA).