Обновить

Мобильная разработка

Сначала показывать
Порог рейтинга
Уровень сложности

Что делать, если кандидат оказался сеньором или психом: советы на случай форс-мажоров

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели80K

Меня зовут Александр Гирев, я Android-разработчик и технический интервьюер. В одной компании я выполнял роль interview expert: следил за качеством собеседований, готовил рекомендации и матрицы вопросов, обучал начинающих интервьюеров.

Однажды на интервью я спросил кандидата, был ли у него опыт проведения технических собеседований. Кандидат спросил: «Что за опыт — задать пару технических вопросов?». Услышав это, я слегка подвис, ведь я считал интервью серьёзным навыком, почти искусством.

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

Читать далее

К чему с годами приводит работа с Dependency Injection и Service Locator

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели13K

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

Так произошло и со мной. Я решил написать полноценный функционал для работы с зависимостями и, так как я Android-разработчик, адаптировать для работы в привычной среде для моих привычных задач. 

Делюсь написанным — вдруг вам это поможет прокачать технические скиллы и создать собственную библиотеку. 

Читать далее

Разработка под Android в 2024 году

Время на прочтение15 мин
Охват и читатели24K

Эта статья отражает моё личное мнение и профессиональные взгляды, учитывающие различные точки зрения в сообществе Android-разработчиков. Кроме того, я регулярно просматриваю руководства от Google для Android.

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

Читать далее

Android-приложение на Compose с нуля: Часть 2 (UI)

Уровень сложностиПростой
Время на прочтение20 мин
Охват и читатели14K

Здравствуй, дорогой читатель!

В статье рассматривается поэтапная разработка дизайн-системы и UI для Android-приложения "Калькулятор", используя библиотеку Jetpack Compose. Начнём с создания проекта и закончим запуском приложения на эмуляторе.

Ссылка на репозиторий

Читать далее

Task и structured concurrency в swift

Время на прочтение16 мин
Охват и читатели23K

В данной части из серии статей про Swift concurrency мы подробно остановимся на сущности под названием Task и разберем на примерах, как с ней работать. Также поговорим про structured concurrency. Что это такое, как это понятие связано с Task и почему механизмы языка async/await structured, но не concurrent.

Помимо этого, мы разберем инструменты и механизмы structured concurrency. Среди них async let, Task hierarchy и Task cancellation. И, как обычно, не оставлю вас без примеров применения этого букета конкуррентности.

Читать далее

Flutter. На пути к совершенству

Уровень сложностиПростой
Время на прочтение19 мин
Охват и читатели8.8K

Добро пожаловать в волшебный мир программирования, где каждый разработчик – не просто кодер, а настоящий магистр заклинаний и цифровых чар! Перед вами лежит карта неисследованных земель, полных таинственных «кодовых джунглей», где скрывается легендарный кракен «кодовых глубин» и много других заморских чудес.

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

Запаситесь же попкорном из нулей и единиц, устройтесь поудобнее за своими многооконными экранами и готовьтесь к незабываемому путешествию!

Читать далее

Пример исследовательского реверс-инжиниринга приложения Zone Launcher

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели19K

Друг порекомендовал приложение, но купить его не получилось с территории России. Статья о том, как поисследовать приложение до той степени, чтобы покупка потеряла свою актуальность. Может быть полезно почитать и разработчикам, чтобы понимать, что полную версию приложение включить достаточно легко.

Читать далее

Как подготовиться к собеседованию по System Design мобильному разработчику

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели15K

В последнее время рынок труда в ИТ-индустрии переходит от рынка соискателя к рынку работодателя и компании все чаще заинтересованы в отборе максимально опытного специалиста, удовлетворяющего всем требованиям. Скорее всего вы слышали о недавних сокращениях в BigTech-компаниях, специалисты из которых наводнили рынок и теперь рубятся за позиции в компаниях поменьше. Однако стандартные наборы вопросов уже давно изжили себя, и большинство как российских так и зарубежных компаний стараются выбирать форматы собеседований которые максимально помогают проявить кандидата в бою. Одним из таких форматов является System Design Interview о котором мы и поговорим сегодня.

Я занимаюсь мобильной Android-разработкой уже более 10 лет и в данный момент являюсь тимлидом платформы Android. За свою карьеру я провел более 200 собеседований как нанимающий менеджер и сам тоже проходил собеседования как в крупные российские так и зарубежные компании. Поэтому у меня накопилось много советов и рекомендаций которыми я хочу поделиться.

Эта статья будет полезна как кандидатам которые хотят “взломать” System Design интервью, так и руководителям в сфере мобильной разработки, желающих внедрить секцию System Design в своей компании.

Читать далее

Как много языков может влезть в одного программиста?

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели32K

Всем привет, я Серёжа, технический лидер iOS-разработки. Сегодня хочу поговорить о многогранности мира программирования, а именно о количестве языков, причинах, по которым они нам нужны, и о том, зачем одному программисту несколько языков.

Если с каких-то рассуждений прямо сильно подгорит, приходи в комментарии, будет классно пообщаться!

В целом с языками программирования так же, как и со знаниями: лишними точно не будут. Какие языки изучал я сам, тонкости работы со скриптами, CI/CD и советы, что из языков ещё поизучать разработчику, найдёте под катом.

Читать далее

«Основы Dart» 2-е издание

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели20K

Почти 2 месяца полусонных ночей и борьбы с тем, что у дочки разом решили полезть все зубы... литры выпитого кофе, слез студентов попавших на пересдачу... и самый мой главный экшн этой осени - 2-е издание книги "Основы Dart"!

Читать далее

Как подружить JUnit 5 и Robolectric?

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели3.6K

Задавались ли вы вопросом, почему Robolectric не работает JUnit 5? В этой статье расскажу, как подружить Robolectric и JUnit 5 и как мы смогли это сделать в команде. 

Вы узнаете, как запустить JUnit 4 тесты при совместном использовании с JUnit Jupiter с помощью тестового движка Vintage. А ещё — как с JUnit Platform разработчики Kotest и Spock Framework создавали свои тестовые фреймворки.

Чтобы разобраться с этими вопросами, проясним мотивы разработчиков, которые создавали JUnit 5, и сравним архитектуру JUnit 4 и JUnit 5, ограничения и возможности этих библиотек.

Читать далее

Padding vs SizedBox. Что выбрать для вёрстки отступов Column и Row

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели5.9K

Здравы будьте! В этой статье я проведу разбор особенностей вёрстки отступов с помощью Padding и SizedBox и расскажу, что выбрала наша команда для создания единого стиля кода.

Читать далее

От потоков к корутинам: как и почему видоизменились примитивы синхронизации в языке Kotlin (Часть 1)

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели27K

В этой статье мы рассмотрим, как и почему изменилась реализация примитивов синхронизации из стандартной библиотеки Java и пакета java.util.concurrent для Kotlin Coroutines и для языка Kotlin в целом.

Разберемся, какие реализации примитивов синхронизации потоков актуальны в контексте корутин, а какие надо использовать с осторожностью.

Оценим готовность текущих решений к использованию в Kotlin Multiplatform.

Разработаем аналоги нескольких полезных классов пакета java.util.concurrent, до которых еще не добрались разработчики корутин.

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

Читать далее

Ближайшие события

Храним краску с умом: как организовать ресурсы в многомодульном проекте

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели4.9K

Привет, меня зовут Никита Чернобрисов, и я делаю Android-приложения в Doubletapp. Полтора года назад мы начали работать над приложением «Яндекс Путешествий» — само приложение доступно в Play Store, а про кейс подробно можно прочитать тут. При старте у нас возникло много архитектурных холиваров, в частности о том, как хранить ресурсы и пользоваться ими. И, как это и заведено, первые решения оказались неудачными. Я расскажу вам, дорогие читатели, удары каких граблей оставили больше следов и к чему мы пришли.

Для кого эта статья?
Начинаем
Договор с дизайнерами
Дизайн-система (пригодная для дальнейшего автоэкспорта)
Первый вариант, который не стоит повторять
Дробим наш монолит
Figma автоэкспорт
Подготовка в Figma
Подключаем FigmaExport в проект
Подводим итоги

Читать далее

Делаем волшебство в России: история о создании APM для «ВкусВилл»

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели2.9K

Привет! Это команда «Автомакон». Мы ИТ-интегратор, в том числе занимаемся разработкой мобильных и web-приложений. Делаем много интересного и нужного для людей, например, строим экосистему «ВкусВилл». Но сейчас — не совсем про заказную разработку.

Читать далее

100 дней из жизни новичка: как устроен онбординг в мобильной разработке

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели6.3K

Представьте, что находите вакансию мечты. Стек релевантный, условия нравятся, и в приложении есть что поделать. Откликнуться? А вдруг будет сложно на старте или не получится закрепиться в команде… Да и синдром самозванца не дремлет.

Во время адаптации уходит 18% новичков, а 80% уволившихся в первый год приняли такое решение ещё в первые 2 недели. На собеседованиях рекрутеры обратят внимание на охоту к перемене мест. А компании будут терять деньги на поиск замены и обучение нового сотрудника.

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

Читать далее

Многомодульное iOS-приложение: подходы к организации межмодульного взаимодействия

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели12K

Привет, Хабр. Меня зовут Кирилл Смирнов. Я технический лидер iOS команды в СберЗдоровье. Последний год наша команда активно занимается улучшением инструментов разработки, в том числе модуляризацией, и уже успела получить опыт, который может быть полезен другим. В предыдущем материале я рассказывал, как компании подготовиться к модуляризации iOS приложений, а в этом остановлюсь на вопросах оптимизации сборки проекта и выборе вариантов линковки артефактов компиляции.

Читать дальше →

Swift async/await на примерах

Время на прочтение14 мин
Охват и читатели32K

В предыдущей части мы разобрали преимущества работы с async/await по сравнению с GCD. В этой части мы более подробно рассмотрим ключевые слова async и await (и не только). Разберемся в том, как они работают, что означает "неблокирующее ожидание" и самое главное рассмотрим это все на примерах.

Читать далее

«Внешняя» навигация в многомодульном проекте на Kotlin

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели11K

Привет, Хабр! Я Дмитрий Воронов из Doubletapp, в этой статье расскажу, как мы делали навигацию в Яндекс Путешествиях. С навигацией в Android, кажется, давно все ясно: бери Jetpack Navigation, читай официальную документацию и следуй ей — и все получится. Если рекомендованная библиотека не подходит — берешь Fragment Manager, прописываешь собственную реализацию и идешь хвастаться коллегам. Если писать свою реализацию нет желания, а официальная библиотека не соответствует модным веяниям — дополняешь свое резюме умением работать с Cicerone. Если твои вкусы специфичны — почему бы не удивить людей неожиданным добавлением в проект Alligator?

В одном коротком абзаце удалось обозначить сразу 4 варианта реализации навигации и, казалось бы, в чем вопрос? Каждый выбирает для своего проекта подходящий ему вариант. Все так, но ровно до того момента, пока не возникает необходимость «поделиться» частью приложения — интегрироваться в другое приложение, и там, как оказывается, другая реализация навигации. И здесь начинается: «Что будем делать? Попробуем написать мост? А может, лучше перепишем навигацию?» 

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

Что такое «внешняя» навигация?
Как это делается?
Реализуем модуль навигации
Примеры реализации

Читать далее

Swift async/await. Чем он лучше GCD?

Время на прочтение12 мин
Охват и читатели33K

Прошло уже больше года с момента выпуска async/await. Многие крупные и не очень проекты уже успели поднять минимальную версию до iOS 13, следовательно открылась возможность полноценно использовать новые языковые возможности по работе с асинхронным кодом. Но перед тем как начать полноценно рефакторить старый код и/или писать новый код используя относительно новую технологию в голове невольно всплывает вопрос: «А зачем? Чем это лучше того же GCD?». В этой вступительной статье из серии по async/await постараемся вместе ответить на этот вопрос.

Читать далее