Обо мне

Примечание насчет имени: оно произносится с ударением на второй слог, т. е. Маха́ч, и никак не связано со сленговым ма́хач).

Опыт разработки под Android - 6 лет. Коротко обо мне:

  • Пишу поддерживаемый и тестируемый код
  • Умею разбираться в чужом коде (разобрал десятки проектов на GitHub)
  • Создаю приложения с расширяемой архитектурой
  • Есть опыт работы в команде в качестве главного разработчика
  • Есть базовое понимание принципов  гибкой методологии разработки (Agile)
  •  Постоянно слежу за трендами в мобильной разработке, применяю их на практике

Навыки:

1. Отличное знание Java и Kotlin:

  • знание ООП и шаблонов проектирования
  • коллекции
  • многопоточность
  • рефлексия
  • работа с регулярными выражениями
  • работа с файлами
  • Kotlin: корутины; Channels, Flow

2. Стандартный Android SDK:

  • Activity,  Fragments, Services,  BroadcastReceivers
  • Стандартные View элементы, ConstraintLayout, CoordinatorLayout, Collapsing Toolbar, Navigation Drawer- создание кастомных View, работа с анимациями
  • SQLite, SharedPreferences
  • работа с WebView, Google Map

Имеется опыт в  разработке клиент-серверных приложений. Есть опубликованные приложения в Google Play.

А также:

  • работа с JSON/XML, парсинг HTML
  • уверенная работа с Gradle и Git (умею даже делать пулл-реквест)
  • большой опыт в работе со сторонними библиотеками
  • создание и публикация собственных библиотек
  • использую Clean Architecture + MVP при построении архитектуры приложения
  • пишу unit-тесты с использованием spek + mockk
  • в основном пишу проекты на Kotlin (при необходимости могу писать на Java)
  • Работа с Stetho, Crashlytics

Используемые инструменты и библиотеки

  • Kotlin Coroutines (до него RxJava 2 и AsyncTask :) )
  • Toothpick (до него Dagger 2)
  • Moxy
  • Retrofit, OkHttp
  • DBFlow. Room ещё не пробовал
  • Glide (до него Picasso)

Дополнительные навыки:

  • Знаком с инструментами типа Figma (есть опыт как рисования макетов, так и верстки с него).
  • Примерно знаком с Agile/Scrum, спринтами и т. д.
  • Есть опыт в написании сервера на Node.js + фронтэнд на Vue.js
  • Не раз проектировал API для приложения на Apiary

Мой GitHub - github.com/ImangazalievM. 

Я на Хабре: habrahabr.ru/users/imangazalievm.

Веду блог java-help.ru (точнее вёл, его уже нет), а также сообщество vk.com/and_dev (уже неактивно).

Участие в профессиональных сообществах
Опыт работы
Доктис (Диджитал медикэл оперейшнс)
Москва
Android-разработчик
Октябрь 2020 — По настоящее время (1 месяц)

Я пришёл на уже готовый проект, который до меня делали два разработчика. Кода было много :)

Основные проблемы, которые были выявлены и решены:

  1. Неправильная реализация паттерна MVP, использование "контрактов" для презентеров
  2. Чрезмерное использование наследования (особенно в Activity и Fragment-ах).
  3. Неправильное использование DI
  4. Использование велосипедов для восстановления состояния и навигации: было заменено на Moxy и Alligator
  5. Dagger 2 был заменён на Toothpick. Возможно это решение вызовет вопросы у коллег, но это было сделано с заделом на будущее, т. к. не хотелось возиться с Dagger-ом и его кучей бойлерплейта

Получил опыт плавной миграции с одной технологии на другую (а не глобального рефакторинга).

Современное онлайн-образование
Android-разработчик
Март 2018 — По настоящее время (2 года и 8 месяцев)

Обязанности

Занимался разработкой приложения для чтения Корана. Разработка приложения велась мною от начала, до конца:

  • Выбор библиотек
  • Проектирование архитектуры приложения,  БД, API
  • Настройка и написание автотестов
  • Настройка CI/CD

Достижения

  • первый серьезный проект, который полностью написан на Kotlin
  • в ходе разработки серьезно улучшил познания по темам: 
  1. архитектура приложения
  2. автоматическое тестирование (Spek Framework, mockk)
  3. CI/CD (Jenkins, GitLab CI)
  4. Система сборки Gradle
  • из-за медленной скорости сборки проекта (известная проблема по причине Dagger'а), было принято решение использовать многомодульную архитектуру. Это позволило ускорить сборку, но этого было недостаточно. В итоге отказался от Dagger'а и перешел на Toothpick, что позволило значительно ускорить сборку. Помимо этого были испробованы другие библиотеки (kodein, koin), но без кодогенерации работать оказалось довольно трудно.
  • Изначально проект разрабатывался на RxJava 2. После года разработки было принято решение перейти на Kotlin Coroutines. Это позволило улучшить читаемость кода и избавится от вложенных коллбеках в тех местах, где нужно было мержить данные из разных источников.
  • улучшил познания по теме баз данных (проектирование, миграции)
  • были использованы новые и интересные решения, помогающие уменьшить беспорядок в коде (AppInitializer, AppMigrator)
  • улучшил познания в SQLite: миграция БД, SQLite Cipher, FTS (Full Text Search)
  • работа с Android Spannable
  • Была использована и доработана кастомная система локализации приложения для поддержки языков, которых нет в Android (некоторые народы России)

    Задачи


    В ходе работы мне попадались следующие задачи:
  • Мультиязычность (возможность смены языка пользователем), оптимизация приложения для RTL
  • Смена темы приложения
  • Получение данных по API и кеширование в БД
  • Скачивание файлов с сервера, распаковка zip, динамическое подключение к скачанным БД
  • Поиск по нескольким БД, работа с FTS
  • Аудиоплеер (загрузка и воспроизведение)
  • Один экран со сложной логикой потребовал использования стейт-машины. В лю
Частная практика, работа без зачисления в штат
Июль 2017 — По настоящее время (3 года и 4 месяца)
Июнь 2014 — Март 2017 (2 года и 10 месяцев)

Занимался разработкой проектов на заказ + OpenSource:

https://github.com/ImangazalievM/CircleMenu

https://github.com/ImangazalievM/Notelin

https://github.com/ImangazalievM/Scripto

Causar Studio
Махачкала
Android-разработчик
Март 2017 — Июль 2017 (5 месяцев)

Был главным Android-разработчиком, принимал решения по выбору используемых технологий при разработке и архитектурных решений

Приложение для кафе "Caprice" (не было опубликовано) - http://causar.io/portfolio/cafe-caprice

Высшее образование
Дагестанский государственный университет
Махачкала
Факультет: Информатики и информационных технологий
Сентябрь 2014—Июнь 2018 (3 года и 9 месяцев)