IT-инфраструктура для бизнеса и творчества
Разработка
red_mad_robot

Android-разработка: что общего с Lego и как не «натягивать сову на глобус»

Гости и ведущие нового выпуска подкаста «Сушите вёсла» обсуждают особенности разработки, новинки в сфере и пробуют понять, какую архитектуру выбрать. Спойлер: любую!

Артём Кулаков и Рома Чорыев — разработчики Redmadrobot, они записывают подкаст, где обсуждают различные стороны создания ИТ-продуктов. В одиннадцатом выпуске делятся опытом и шутят шутки гости — Дима Суздалев, Android-техлид KODE, и Вася Чирвон, руководитель Android-практики Redmadrobot SPB.

Прикладываем ссылку на свежий выпуск, тайминг и ответы на несколько важных вопросов.

Тайминг

01:58 – Вася Чирвон рассказывает о том, как он попал в Android-разработку.

03:25 – А теперь Дима Суздалев о своем пути.

14:52 – Куда движется платформа Android.

25:05 – Сложно ли разрабатывать приложения под Android.

34:30 – Сложнее ли стать хорошим Android-разработчиком, чем iOS-разработчиком.

58:01 – Немного о Jetpack Compose.

01:02:02 – Чуть-чуть о Hilt.

01:03:15 – Кроссплатформенная разработка: KMM/Flutter – стоит ли игра свеч?

01:20:02 – UI и мультиплатформа.

01:27:14 – Архитектура мобильных приложений.

Каково это – быть Android-разработчиком

Конечно же, есть свои сложности и проблемы, но это как и в любой профессии.

Дима Суздалев подметил, что опыт Android-разработчика – это про то, что ты знаешь «куда ходить не надо». Ну а если ты все-таки пришел не туда, то знаешь, как это «не туда» обойти.

А вот Рома сравнил Android-разработку с хождением в веригах (тяжелые железные цепи): идти можно, но, так сказать, больновато. В пример привел знакомую для любого разработчика ситуацию, когда элемент, от которого ты ждешь обычного поведения, вдруг перестает работать. Или, например, такое случается вообще только на конкретном устройстве («привет» многотысячному парку китайских девайсов).

Или вот как еще бывает: допустим, в Google есть баг в API, который отрабатывает конкретным образом. Ты уже к этому привык, не забываешь делать обходной путь и во всех проектах с этим живешь. Но вдруг в какой-то момент Google исправляет этот баг, и теперь все, что ты делал до этого, ломает приложение. И снова с этим приходится что-то делать.

Разработка похожа на Lego – местами сложно, но прикольно! Ты сидишь и строишь. И тебе это нравится, ведь если не любишь Lego, то не будешь в него играть ;)

Василий Чирвон
руководитель Android-практики Redmadrobot SPB

Про новинки в области Android-разработки

В последнее время чуть ли не каждый год Google представляет разные полезные штуки для разработчиков: Jetpack Compose, Navigation Component, Data Store и прочие Security Identity Credentials.

Дима рассказал, что ему нравится подход Google к разработке Jetpack Compose. Он успел его уже опробовать и особенно отметил гайды и отличную документацию, где все пояснено и есть примеры кода.

Что касается Navigation Component, то эта библиотека показывает себя хорошо как инструмент для несложных приложений. С ее помощью можно быстро накидать навигацию и неплохо ею управлять. Ребята подметили, что было бы совсем хорошо, если бы Google добавил туда быструю генерацию графа.

Подробное обсуждение Dagger/Hilt и Anvil с 01:02:02.

Не Google единым (можно и Huawei, но по чуть-чуть)

В свободном Android-мире есть не только Google, который в студии поругали. Существует ещё и корпорация Huawei, создавшая интересный прецедент на рынке.

Кто не в курсе: Huawei сделала свои аналоги сервисов Google, кроме того, и интерфейс кодлабов был скопирован практически один в один. Компания хорошо вложилась в маркетинг для освещения всей этой истории. Итог — по продажам своих смартфонов Huawei вышла в топ, обогнав даже «гигантских гигантов» Apple и Samsung. Правда, в основном это случилось из-за китайского рынка, уверен Рома.

Стоит заметить, что эта ситуация открывает определенные возможности: хорошо, когда есть выбор и существует не только Google. Если и другие крупные компании начнут предоставлять альтернативу Google Play Services, то это будет полезно для всех. Но это неминуемо добавит проблем разработчикам. Например, с фрагментацией. Появление вторых, третьих и т.д сервисов заставит знать десять разновидностей одного и того же.

Пара слов о кроссплатформенной разработке

Рядом с Android- и iOS-разработкой развивается отдельный и достаточно большой мир кроссплатформенной разработки.

В нем есть как традиционные подходы, работающие до сих пор, так и пара новинок, которые очень активно обсуждаются внутри комьюнити последние года два. Речь о Flutter и Kotlin Multiplatform.

Насколько же они удобны и применимы? Гости в студии единогласно решили, что «Flutter не хватает Kotlin». А подробнее с 01:15:27.

Строили и построили: архитектура Android-приложений

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

«Конечно же, в голове общие подходы проектирования держать нужно, но "натягивать сову на глобус не стоит"», — говорит Артем. Если бизнес-задачи не ложатся в привычный clean и MVVM, следовательно, не нужно их использовать. Вот и все.

Важно понимать, что архитектура — это не инструкция, а набор решений, которые можно применить в работе. Вася Червон объяснил это так: «Ты знаешь, что плита должна иметь определенный вес, чтобы не раздавить стены, или же стены должны быть настолько прочными, чтобы ее выдержать. И чтобы строить, необходимо держать эти правила в голове».

Это всё вопрос опыта, поэтому, если разработчик не очень понимает, какую архитектуру нужно делать, то стоит проконсультироваться со старшим товарищем. Но, конечно, не с тем, кто скажет: «Делай MVVM, это круто».

Для эффективных архитектурных решений нужно читать много книг по проектированию систем, чтобы понимать, в каких ситуациях какие решения могут меняться и как их применять. Подробнее о книгах поговорили с 01:35:06.

Полезные материалы

Предыдущие выпуски «Сушите вёсла»

Слушайте нас там, где удобно: YouTube, Soundcloud, Apple Podcasts, Google Podcasts

Давайте обсудим выпуск в Telegram-чате.

(function () { let cdnUrl = `https://specialsf378ef5-a.akamaihd.net/SelectelBranding/images/` let previousArticleNumber = null let currentArticleNumber = 0 let platform = 'Desktop' let articles = [ { name: 'camera', url: `${cdnUrl}CameraCat`, text: 'умную камеру для\u00A0наблюдения за\u00A0котиками', link: 'https://vc.ru/selectel/306690', num: 3 }, { name: 'chill', url: `${cdnUrl}ChillCat`, text: 'трекер, который подскажет, когда пора отдохнуть', link: 'https://vc.ru/promo/288561-eye-tracker', num: 1 }, { name: 'cloud', url: `${cdnUrl}CloudCat`, text: 'котика: даёшь ему «пять», а\u00A0он делает бэкап в облако', link: 'https://vc.ru/dev/294799-maneki-neko', num: 2 } ] let buttonCycle = document.querySelector('.button--cycle') let buttonChoose = document.querySelector('.button--choose') let buttonMobile = document.querySelector('.button--mobile') let textField = document.querySelector('.selectel-footer-subtitle') let imageAgent = document.querySelector('.image--agent') let banner = document.querySelector('.selectel-footer') buttonCycle.addEventListener('click', cycleClick) buttonChoose.addEventListener('click', () => sendEvent(`Promo ${articles[currentArticleNumber].num} Left`, 'Click')) buttonMobile.addEventListener('click', () => sendEvent(`Promo ${articles[currentArticleNumber].num} Left`, 'Click')) let media = window.matchMedia("(max-width: 570px)") media.addEventListener('change', matchMedia) function matchMedia() { if (media.matches) { platform = 'Mobile' } else { platform = 'Desktop' } update() } matchMedia() function cycleClick(event) { sendEvent(`Promo ${articles[currentArticleNumber].num} Right`, 'Click') if (event) { event.preventDefault() event.stopPropagation() } window.open('https://vc.ru/tag/selectelDIY', '_blank') //cycle(event) } function cycle(event) { // incrementArticleNumber() textField.innerHTML = generatedText() imageAgent.src = articles[currentArticleNumber].url + platform + '.svg?3' imageAgent.setAttribute("class", "") imageAgent.classList.add('image--agent', articles[currentArticleNumber].name) banner.href = articles[currentArticleNumber].link } function update() { banner.href = articles[currentArticleNumber].link imageAgent.src = articles[currentArticleNumber].url + platform + '.svg' textField.innerHTML = generatedText() } function incrementArticleNumber() { previousArticleNumber = currentArticleNumber if (currentArticleNumber >= articles.length - 1) { currentArticleNumber = 0 } else { currentArticleNumber++ } } const sendEvent = (label, action = 'Click') => { const value = `SelectelDIY — loc: Footer — ${label} — ${action}`; if (window.dataLayer !== undefined) { window.dataLayer.push({ event: 'data_event', data_description: value, }); } }; function generatedText() { let defaultText if (platform === 'Desktop') { defaultText = `Мы тут собрали %text%. Хотите научим?` } else { defaultText = `Мы тут собрали %text%.` } return defaultText.replace('%text%', articles[currentArticleNumber].text) } function getRandom(min, max) { min = Math.ceil(min) max = Math.floor(max) return Math.floor(Math.random() * (max - min + 1)) + min } (function create() { currentArticleNumber = getRandom(0, articles.length - 1) cycle() let page = document.querySelector('.page--entry') if (page) { function insertAfter() { let parents = page.querySelectorAll('[data-id="7"]') let referenceNode = parents[0] referenceNode.parentNode.insertBefore(banner, referenceNode.nextSibling); loaded() } setTimeout(() => insertAfter(), 0) } }()) function loaded() { banner.classList.add('loaded') } loadImages([ `${cdnUrl}CameraCatDesktop.svg`, `${cdnUrl}ChillCatDesktop.svg`, `${cdnUrl}CloudCatDesktop.svg`, `${cdnUrl}CameraCatMobile.svg`, `${cdnUrl}ChillCatMobile.svg`, `${cdnUrl}CloudCatMobile.svg?3`, ]) function loadImages(urls) { return Promise.all(urls.map(function (url) { return new Promise(function (resolve) { var img = document.createElement('img'); img.onload = resolve; img.onerror = resolve; img.src = url; }); })); } }())
0
1 комментарий
Популярные
По порядку

Спасибо большое, очень интересно послушать :) По поводу кроссплатформенных приложений: мне еще очень нравится подкаст от разработчиков на Flutter, называется Flutter Dev Podcast

0
Читать все 1 комментарий
Как мы организовали коллективное обучение в айти и почему оно лучше обычных курсов

Мы уже обучили и трудоустроили 47 отличных frontend-специалистов и не собираемся на этом останавливаться.

«Альфа-банк» отключил части клиентов бесплатные push-уведомления о покупках Статьи редакции

Бесплатные push-уведомления останутся только для подтверждения операций.

Что на самом деле приводит мир в движение: история инструментов бухгалтерского учёта

От засечек на палках до специальных программ

UNIVAC I.
Созданная «Яндексом» компания ClickHouse привлекла $250 млн при оценке в $2 млрд Статьи редакции

Инвестиции направят на расширение штата и развитие международного бизнеса.

Как сотрудники Tele2 стали лицами бренда

Кто сказал, что сниматься для рекламы могут только профессиональные модели? В компании Tele2 лицами для внутренних и внешних рекламных кампаний становятся даже собственные сотрудники! Мы собрали истории коллег, которые подали заявки на конкурс и приняли участие в профессиональной фотосессии, а теперь их портреты украшают фотобанк Tele2.

Пользователь купил «мемную» криптовалюту Shiba Inu на $8 тысяч в августе 2020 года и стал миллиардером Статьи редакции

За месяц криптовалюта выросла на 1000%.

Топ-5 EdTech стартапов, которые сделают ваше обучение проще и интереснее

Осенью в нашей стране традиционно начинается учебный год. Тысячи школьников и студентов отныне делятся на два лагеря: одни ищут пути быстрее и с наименьшими потерями покончить с учёбой, другие — с радостью спешат на лекции и уроки. Есть ещё и родители, и преподаватели с собственными проблемами и потребностями. Мы отобрали 5 образовательных…

Спасти еду: экологичное ИТ-решение помогает ресторанам справляться с перепроизводством блюд

Каждый год в России выбрасывают около 17 млн тонн продуктов на 1,6 трлн рублей.

«Когда геоданные попадают на рынок, их можно перепродавать бесконечно»: как устроен рынок сведений о местоположении Статьи редакции

Издание The Markup изучило 47 фирм, которые собирают данные о геолокации пользователей, и рассказало, как информация попадает в сеть, где она продаётся и кто её покупает.

Unsplash
Оплата уставного капитала и оплата долей – почему это важно?

В ходе проведения юридических проверок (due diligence) мы всё чаще сталкиваемся с ситуациями, когда клиенты не хранят документы об оплате уставного капитала/доли (акции) и не считают отсутствие подтверждения критичным фактом — «Налоговая всё зарегистрировала, зачем хранить ненужные бумажки?!».

null