❇️ 3 простых способа сделать разную вёрстку для планшетов и смартфонов ❇️
Отвечаю на вопрос подписчика: как правильно верстать под разные устройства.
Приятного просмотра! 🚀
Мне будет приятно, если поддержите лайками и комментариями 👀
https://youtu.be/VYQD9URfKVw?si=HsRtJDV1mGfXISHD
#android #видео #вопросы #лайфхаки
@andrdevnotes | androidmentor.ru
Отвечаю на вопрос подписчика: как правильно верстать под разные устройства.
Приятного просмотра! 🚀
Мне будет приятно, если поддержите лайками и комментариями 👀
https://youtu.be/VYQD9URfKVw?si=HsRtJDV1mGfXISHD
#android #видео #вопросы #лайфхаки
@andrdevnotes | androidmentor.ru
YouTube
Вёрстка для планшетов
3 способа, как в android приложении удобно сделать разную вёрстку для планшетов и обычных смартфонов.
Телеграм-канал: https://t.me/andrdevnotes
Обучение android: https://androidmentor.ru
Телеграм-канал: https://t.me/andrdevnotes
Обучение android: https://androidmentor.ru
🔥10👍3🥰1
Практика over теория
Всегда и во всех дисциплинах и сферах ненавидел подход, при котором на первом этапе всё объясняется на совершенно синтетических, оторванных от реальности примерах. И только спустя какое-то время (и то не всегда) рассказывают, как и где это применять.
🚫 Проблема такого подхода для меня в том, что я плохо усваиваю вещи, пока не понимаю их смысла. Я могу заучить, не понимая, но я очень быстро это забуду.
✔️ Поэтому со своими менти я следую подходу "Practice first", с самого начала и до конца объясняя всю теорию на примере написания конкретного приложения. Да, я, разумеется, даю необходимые ссылки на статьи и книги для изучения, но мы сразу применяем изученное, реализовывая очередную фичу в приложении. Так приложение постепенно обрастает "мясом", а в мозге менти всё складывается на нужные полочки и закрепляется.
✔️ В самостоятельном обучении я советую следовать тому же принципу. Например – не пытайтесь просто выучить, как устроены корутины, не применяя их. Лучше придумайте несколько ситуаций, при которых в приложении понадобятся разные кейсы с корутинами, сначала попроще, потом посложнее. Попробуйте синхронизировать корутины между собой, позапускать асинхронно из разных мест и так далее.
Не понимаете смысла многострадальных inline и reified? Попробуйте написать экстеншн с дженериком
который будет проверять, является ли этот Context типом T, если да – возвращать его, а если нет – кидать эксепшн.
Так информация усвоится быстрее, да и на собеседовании, если вы ответите на вопрос, исходя из своей практики, это подействует на интервьюера куда сильнее, чем академический ответ из книжки.
#android #лайфхаки
@andrdevnotes | androidmentor.ru
Всегда и во всех дисциплинах и сферах ненавидел подход, при котором на первом этапе всё объясняется на совершенно синтетических, оторванных от реальности примерах. И только спустя какое-то время (и то не всегда) рассказывают, как и где это применять.
Не понимаете смысла многострадальных inline и reified? Попробуйте написать экстеншн с дженериком
fun Context?.checkInstance(): T
который будет проверять, является ли этот Context типом T, если да – возвращать его, а если нет – кидать эксепшн.
Так информация усвоится быстрее, да и на собеседовании, если вы ответите на вопрос, исходя из своей практики, это подействует на интервьюера куда сильнее, чем академический ответ из книжки.
#android #лайфхаки
@andrdevnotes | androidmentor.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
💯5👍3❤1😍1
Прежде, чем отвечать на ваши вопросы, решил пробомбиться с одной очень популярной нынче темы.
https://youtu.be/QSuKXT5zBEw?si=bK_EBMcBsM9TZOWl
#android #видео #вопросы
@andrdevnotes | androidmentor.ru
https://youtu.be/QSuKXT5zBEw?si=bK_EBMcBsM9TZOWl
#android #видео #вопросы
@andrdevnotes | androidmentor.ru
YouTube
Хватит учить Compose!
Если вы – начинающий андроид-разработчик, то прекратите учить Compose!
Телеграм-канал: https://t.me/andrdevnotes
Обучение android: https://androidmentor.ru
Телеграм-канал: https://t.me/andrdevnotes
Обучение android: https://androidmentor.ru
🔥7🫡3❤1
Ответ на вопрос подписчика
Вопрос по архитектуре: в каких случаях нужно создавать отдельную ViewModel и репозиторий? Возьмём за пример простенькое приложение, где есть три основные фичи: просмотр изображений, фильтрация их по категориям и добавление их в избранное.
Для каждой фичи нужно создавать ViewModel и репозиторий или раз все между собой тесно связано, лучше использовать один на все приложение, а отдельные создавать только для чего-то очень слабо связанного между собой.
Но если и для избранного и для фильтрации и тд использовать только одну ViewModel, не нарушает ли это single responsibility principle?
Ответ: Single responsibility principle – принцип единственной ответственности. Чтобы ему следовать, нам надо сначала понять, а какая ответственность у вьюмодели и репозитория?
На самом деле, на этот вопрос, как и на большинство вопросов по архитектуре, нельзя ответить однозначно, потому что подходы могут быть разные: кому-то нравится делать вьюху максимально пассивной, кому-то нет, но я вам расскажу подход, которому следую я, которому следуют в моей компании и которому я всех учу.
Ответственность репозитория: это управление источниками данных, их обработка и предоставление наружу в обработанном виде. Репозиторий ходит в сеть, кэширует, достаёт из кэша, маппит сетевые модели в доменные, обрабатывает ошибки, при необходимости маппит их в бизнесовые ошибки. Репозиторий отвечает за какой-то определённый кусок логики, например UserRepository или ImagesRepository.
Ответственность вьюмодели: вьюмодель – это прослойка между бизнес-логикой и определённым экраном. То есть вьюмодель не к фичам привязана, а к экрану. Если у вас на экране есть и добавление в избранное и фильтрация, значит и во вьюмодели это будет. Но вьюмодель делает это не сама, она обращается в вашем случае к конкретному репозиторию и получает из него результат. А репозитории вы уже проектируете как вам удобно: Например FavoritesRepository и FilterRepository, если хотите эту логику отделить. Или можете сделать один ImagesRepository, если не хотите отделять.
И запомните: однажды вам захочется сделать печально известную SharedViewModel и пошерить её между несколькими экранами. Это приведёт вас на путь, наполненный запутанным и нерасплетаемым спагетти-кодом, куче костылей и конфликтов. Не делайте так. Один экран – одна вьюмодель.
#android #архитектура #вопросы
Запись на менторство:
@andrdevnotes | androidmentor.ru
Вопрос по архитектуре: в каких случаях нужно создавать отдельную ViewModel и репозиторий? Возьмём за пример простенькое приложение, где есть три основные фичи: просмотр изображений, фильтрация их по категориям и добавление их в избранное.
Для каждой фичи нужно создавать ViewModel и репозиторий или раз все между собой тесно связано, лучше использовать один на все приложение, а отдельные создавать только для чего-то очень слабо связанного между собой.
Но если и для избранного и для фильтрации и тд использовать только одну ViewModel, не нарушает ли это single responsibility principle?
Ответ: Single responsibility principle – принцип единственной ответственности. Чтобы ему следовать, нам надо сначала понять, а какая ответственность у вьюмодели и репозитория?
На самом деле, на этот вопрос, как и на большинство вопросов по архитектуре, нельзя ответить однозначно, потому что подходы могут быть разные: кому-то нравится делать вьюху максимально пассивной, кому-то нет, но я вам расскажу подход, которому следую я, которому следуют в моей компании и которому я всех учу.
Ответственность репозитория: это управление источниками данных, их обработка и предоставление наружу в обработанном виде. Репозиторий ходит в сеть, кэширует, достаёт из кэша, маппит сетевые модели в доменные, обрабатывает ошибки, при необходимости маппит их в бизнесовые ошибки. Репозиторий отвечает за какой-то определённый кусок логики, например UserRepository или ImagesRepository.
Ответственность вьюмодели: вьюмодель – это прослойка между бизнес-логикой и определённым экраном. То есть вьюмодель не к фичам привязана, а к экрану. Если у вас на экране есть и добавление в избранное и фильтрация, значит и во вьюмодели это будет. Но вьюмодель делает это не сама, она обращается в вашем случае к конкретному репозиторию и получает из него результат. А репозитории вы уже проектируете как вам удобно: Например FavoritesRepository и FilterRepository, если хотите эту логику отделить. Или можете сделать один ImagesRepository, если не хотите отделять.
И запомните: однажды вам захочется сделать печально известную SharedViewModel и пошерить её между несколькими экранами. Это приведёт вас на путь, наполненный запутанным и нерасплетаемым спагетти-кодом, куче костылей и конфликтов. Не делайте так. Один экран – одна вьюмодель.
#android #архитектура #вопросы
Запись на менторство:
@andrdevnotes | androidmentor.ru
👍9🔥4💯2❤1
Привет, друзья!
Разбирая ваши запросы, заметил, что много практических вопросов по коду. Пришла в голову идея: устроить стрим с разбором ваших проектов.
Формат: вы до 19 мая присылаете мне ссылку на репозиторий со своим проектом. Я из них отбираю 5 проектов на разбор.
И я с 20 до 31 мая провожу один или больше стримов (в зависимости от объёма проектов) с подробным разбором и советами по рефакторингу.
Если у вас получится присутствовать на стриме – отлично, сможем лично пообщаться по проекту. Нет – посмотрите в записи.
Стоимость: 1990р за 1 проект.
Как вам идея?
Разбирая ваши запросы, заметил, что много практических вопросов по коду. Пришла в голову идея: устроить стрим с разбором ваших проектов.
Формат: вы до 19 мая присылаете мне ссылку на репозиторий со своим проектом. Я из них отбираю 5 проектов на разбор.
И я с 20 до 31 мая провожу один или больше стримов (в зависимости от объёма проектов) с подробным разбором и советами по рефакторингу.
Если у вас получится присутствовать на стриме – отлично, сможем лично пообщаться по проекту. Нет – посмотрите в записи.
Стоимость: 1990р за 1 проект.
Как вам идея?
👍4❤3🔥2
Делаем стрим с разбором проектов?
Final Results
34%
Офигенная идея, пришлю проект!
63%
Норм идея, приду посмотреть
2%
Идея хрень
Офигеваю от того, как быстро вы отвечаете 🙂
Раз желающих много, проведу несколько стримов. Один стрим = 3-5 проектов
Проекты кидайте в личку: @ilia_a_popov
Первый стрим будет 21-го мая в 19-00
Раз желающих много, проведу несколько стримов. Один стрим = 3-5 проектов
Проекты кидайте в личку: @ilia_a_popov
Первый стрим будет 21-го мая в 19-00
Привет, друзья!
Помимо долгосрочного менторства на 1, 2, 3 месяца, о котором можно подробнее почитать на androidmentor.ru, я также даю почасовые консультации под конкретный запрос.
Один из вариантов – тренировочное собеседование: либо основное техническое, по Java / Kotlin / Android, либо алгоритмическая секция с лайвкодингом на leetcode.com.
На скриншотах отзыв о последних двух моих собеседованиях.
Если хотите тоже попробовать свои силы – записывайтесь на индивидуальную консультацию @ilia_a_popov
#android #собеседование #консультация
@andrdevnotes | androidmentor.ru
Помимо долгосрочного менторства на 1, 2, 3 месяца, о котором можно подробнее почитать на androidmentor.ru, я также даю почасовые консультации под конкретный запрос.
Один из вариантов – тренировочное собеседование: либо основное техническое, по Java / Kotlin / Android, либо алгоритмическая секция с лайвкодингом на leetcode.com.
На скриншотах отзыв о последних двух моих собеседованиях.
Если хотите тоже попробовать свои силы – записывайтесь на индивидуальную консультацию @ilia_a_popov
#android #собеседование #консультация
@andrdevnotes | androidmentor.ru
👍6❤1🔥1👀1
Привет, друзья!
Напоминаю, что 21-го мая у нас стрим с разбором ваших проектов. Некоторые уже прислали свои проекты, некоторые пока нет. Не оттягивайте до последнего ;)
@andrdevnotes | androidmentor.ru
Напоминаю, что 21-го мая у нас стрим с разбором ваших проектов. Некоторые уже прислали свои проекты, некоторые пока нет. Не оттягивайте до последнего ;)
@andrdevnotes | androidmentor.ru
🔥3👍1👌1
Что делать, если всё пошло не по плану
Жизнь разраба – это не всегда модные кафешки, макбуки и смешные мемчики. Иногда разраб обсирается, причём по полной программе. Но крут не тот, кто не ошибается, а кто на ошибках учится.
Я сегодня планировал провести стрим с разбором проектов подписчиков. Было 14 желающих, но проект прислал в итоге только 1 человек. Супер-респект ему за смелость, он получит от меня бесплатную консультацию по его проекту в подарок.
Это косяк номер раз 🙂
Не беда, думаю я, сделаю стрим с лайвкодингом. Покажу, как с нуля написать проект, подключить сервисы, сделать всё по красоте. Новичкам точно будет полезно. Но не тут-то было :)) Ютуб решил проверить мой канал прежде, чем давать возможность проводить трансляции. Поэтому я вынужден перенести стрим на 28 мая.
Это косяк номер 2.
Но этот канал я заводил не для красивых постов, а для того, чтобы писать всё, как есть.
Так же и в работе: разработчики часто сталкиваются с тем, что что-то идёт не так: новые сборки не прошли тестирование, продакты не согласовали раскатку, или фичу, над которой вы корпели месяцами, пользователи встретили негативными комментариями и поливают говном вашу компанию.
Плохо ли это?
Нет, это нормальный процесс. Иногда надо ошибаться, тупить, косячить, чтобы понять, как что устроено. А иногда негатив – это просто реакция на что-то резко новое. Поэтому важно учиться, не сдаваться, и воспринимать ошибки, как подарок, как спортзал для наших мышц 🙂
Такие дела, друзья.
Ну что, проводим стрим с лайвкодингом в следующий вторник?
Ставь + в комментариях, если интересно.
#мотивация
Жизнь разраба – это не всегда модные кафешки, макбуки и смешные мемчики. Иногда разраб обсирается, причём по полной программе. Но крут не тот, кто не ошибается, а кто на ошибках учится.
Я сегодня планировал провести стрим с разбором проектов подписчиков. Было 14 желающих, но проект прислал в итоге только 1 человек. Супер-респект ему за смелость, он получит от меня бесплатную консультацию по его проекту в подарок.
Это косяк номер раз 🙂
Не беда, думаю я, сделаю стрим с лайвкодингом. Покажу, как с нуля написать проект, подключить сервисы, сделать всё по красоте. Новичкам точно будет полезно. Но не тут-то было :)) Ютуб решил проверить мой канал прежде, чем давать возможность проводить трансляции. Поэтому я вынужден перенести стрим на 28 мая.
Это косяк номер 2.
Но этот канал я заводил не для красивых постов, а для того, чтобы писать всё, как есть.
Так же и в работе: разработчики часто сталкиваются с тем, что что-то идёт не так: новые сборки не прошли тестирование, продакты не согласовали раскатку, или фичу, над которой вы корпели месяцами, пользователи встретили негативными комментариями и поливают говном вашу компанию.
Плохо ли это?
Нет, это нормальный процесс. Иногда надо ошибаться, тупить, косячить, чтобы понять, как что устроено. А иногда негатив – это просто реакция на что-то резко новое. Поэтому важно учиться, не сдаваться, и воспринимать ошибки, как подарок, как спортзал для наших мышц 🙂
Такие дела, друзья.
Ну что, проводим стрим с лайвкодингом в следующий вторник?
Ставь + в комментариях, если интересно.
#мотивация
👍16🔥6👏1
LiveData позволяет нам держать во вьюмодели стейт, который мы можем наблюдать из вьюхи. Стейт – это некая динамическая переменная, отвечающая за состояние какой-то сущности. Например – LiveData<List<Item>>, в которую будет приходить список, который мы хотим отобразить во вьюхе. Вьюха наблюдает LiveData и реагирует на каждое изменение этого списка, всегда отображая актуальные данные.
Преимущество LiveData в том, что она присылает свои изменения в наблюдателя с учётом его жизненного цикла, и нам об этом париться не надо. Да и в целом, LiveData – простая штука, хорошо работающая "из коробки", и позволяющая легко на начальных этапах реализовать наблюдаемый стейт для MVVM.
Недостаток LiveData в том, что это класс из android-пакета, и использовать его, скажем, в domain-слое по клину не очень-то хорошо, особенно если есть прицел на мультиплатформенность.
Flow позволяет нам реализовывать куда более гибкие и управляемые наблюдаемые конструкции, без привязки к android-пакету. Flow можно создавать самому, делая туда эмиты тогда, когда нужно, и настраивая так, как удобно. Его можно делать и холодным и горячим, доступным для одного подписчика или для многих, и многое другое.
Недостаток Flow в том, что его не стоит использовать, не почитав документацию и не разобравшись. Из коробки он может не во всех кейсах работать интуитивно понятно. По незнанке довольно легко можно, к примеру, наткнуться на ситуацию, когда у вас Flow "зависает" и перестаёт эмитить, и даже блокирует ваш поток, не давая исполняться коду, который написан в корутине вне Flow после вызова collect.
К чему может привести неверное использование LiveData: если пытаться её использовать для, скажем, навигационных событий (показать / скрыть диалог или перейти на экран), сначала может показаться, что всё работает, но потом вы поймёте, что при смене конфигурации или возврате на экран мы будем получать старые данные (поскольку LiveData держит стейт), или ловить другие странные баги.
Поэтому запомните: нужны одноразовые события – используйте для них Flow. А LiveData – для простых стейтов, напрямую связанных с UI.
#лайфхаки #android
Другие полезные посты
Обучение android-разработке:
@andrdevnotes | androidmentor.ru
ViewModel:
private val _items: MutableLiveData<List<Item>> = MutableLiveData()
val items: LiveData<List<Item>> = _items
View:
viewModel.items.observe(viewLifecycleOwner) {
adapter.submitList(it)
}
Преимущество LiveData в том, что она присылает свои изменения в наблюдателя с учётом его жизненного цикла, и нам об этом париться не надо. Да и в целом, LiveData – простая штука, хорошо работающая "из коробки", и позволяющая легко на начальных этапах реализовать наблюдаемый стейт для MVVM.
Недостаток LiveData в том, что это класс из android-пакета, и использовать его, скажем, в domain-слое по клину не очень-то хорошо, особенно если есть прицел на мультиплатформенность.
Flow позволяет нам реализовывать куда более гибкие и управляемые наблюдаемые конструкции, без привязки к android-пакету. Flow можно создавать самому, делая туда эмиты тогда, когда нужно, и настраивая так, как удобно. Его можно делать и холодным и горячим, доступным для одного подписчика или для многих, и многое другое.
ViewModel:
private val navigationEvents = MutableSharedFlow<NavigationEvent>(replay = 1)
View:
viewLifecycleOwner.lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
viewModel.navigationEvents.collect {...}
}
}
Недостаток Flow в том, что его не стоит использовать, не почитав документацию и не разобравшись. Из коробки он может не во всех кейсах работать интуитивно понятно. По незнанке довольно легко можно, к примеру, наткнуться на ситуацию, когда у вас Flow "зависает" и перестаёт эмитить, и даже блокирует ваш поток, не давая исполняться коду, который написан в корутине вне Flow после вызова collect.
К чему может привести неверное использование LiveData: если пытаться её использовать для, скажем, навигационных событий (показать / скрыть диалог или перейти на экран), сначала может показаться, что всё работает, но потом вы поймёте, что при смене конфигурации или возврате на экран мы будем получать старые данные (поскольку LiveData держит стейт), или ловить другие странные баги.
Поэтому запомните: нужны одноразовые события – используйте для них Flow. А LiveData – для простых стейтов, напрямую связанных с UI.
#лайфхаки #android
Другие полезные посты
Обучение android-разработке:
@andrdevnotes | androidmentor.ru
👍6🔥4❤1
💥 Первый стрим на канале 💥
Пишем приложение с нуля!
🔜 Завтра, во вторник 28 мая, в 19:00 я на ваших глазах буду пилить андроид-приложение на основе одного из публичных API.
📱Стек: XML, REST, MVVM, MultiModule Clean, Hilt, Glide, Room, ViewBinding, Gson, Coroutines, Retrofit.
Это стандартный стек для большинства проектов в индустрии. Понимая этот стек, с остальным разобраться труда не составит.
В процессе постараюсь объяснять, что делаю, и время от времени отвечать на вопросы.
⏱ Стрим будет идти ориентировочно 1.5 - 2 часа.
Не знаю, буду ли я такой стрим повторять, так что советую не пропускать =)
https://youtube.com/live/7zLXaXsTS2o?feature=share
Пишем приложение с нуля!
📱Стек: XML, REST, MVVM, MultiModule Clean, Hilt, Glide, Room, ViewBinding, Gson, Coroutines, Retrofit.
Это стандартный стек для большинства проектов в индустрии. Понимая этот стек, с остальным разобраться труда не составит.
В процессе постараюсь объяснять, что делаю, и время от времени отвечать на вопросы.
⏱ Стрим будет идти ориентировочно 1.5 - 2 часа.
Не знаю, буду ли я такой стрим повторять, так что советую не пропускать =)
https://youtube.com/live/7zLXaXsTS2o?feature=share
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Создаём android-приложение с нуля
Стек: XML, REST, MVVM, MultiModule Clean, Hilt, Glide, Room, ViewBinding, Gson, Coroutines, Retrofit
Телеграм-канал: https://t.me/andrdevnotes
Обучение android: https://androidmentor.ru
Телеграм-канал: https://t.me/andrdevnotes
Обучение android: https://androidmentor.ru
🔥15👀3👌2❤1
Next Level Dev
💥 Первый стрим на канале 💥 Пишем приложение с нуля! 🔜 Завтра, во вторник 28 мая, в 19:00 я на ваших глазах буду пилить андроид-приложение на основе одного из публичных API. 📱Стек: XML, REST, MVVM, MultiModule Clean, Hilt, Glide, Room, ViewBinding, Gson…
Стрим начнётся через час, залетайте!
YouTube
Создаём android-приложение с нуля
Стек: XML, REST, MVVM, MultiModule Clean, Hilt, Glide, Room, ViewBinding, Gson, Coroutines, Retrofit
Телеграм-канал: https://t.me/andrdevnotes
Обучение android: https://androidmentor.ru
Телеграм-канал: https://t.me/andrdevnotes
Обучение android: https://androidmentor.ru
👀5❤3⚡2🔥1👾1
Фууууууух!
Первый стрим – всё🐸
Волновался аки школьник
А прикиньте, вот так на собесе лайвкодят) Для этого и надо тренироваться)
Спасибо всем, кто был, мне было очень приятно. За поддержку всем отдельный респект! Димон, жму руку:)
Ну что, как вам стрим? :) Делаем ещё?
Пишите в комменты отзывы/пожелания!🏃♂️
Если остались вопросы – тоже пишите, на все обязательно отвечу.
Запись стрима
#стрим #видео #android #livecoding
Первый стрим – всё
Волновался аки школьник
А прикиньте, вот так на собесе лайвкодят) Для этого и надо тренироваться)
Спасибо всем, кто был, мне было очень приятно. За поддержку всем отдельный респект! Димон, жму руку:)
Ну что, как вам стрим? :) Делаем ещё?
Пишите в комменты отзывы/пожелания!
Если остались вопросы – тоже пишите, на все обязательно отвечу.
Запись стрима
#стрим #видео #android #livecoding
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👏7❤4🤝3😁1
Один из мощных плюсов андроид-разработки
Я в индустрии 10 лет, бывал и разработчиком на C++, и на Java, и сайты / веб-приложения делал на HTML / CSS / JS, и бэкенд и нейронки на python. Это я к тому, что мне есть с чем сравнивать android-коммьюнити. И я не перестаю удивляться, насколько оно всё-таки крутое.
Вот пример: те, кто были на моём стриме, уверен, почувствовали то же, что и я: единение. Мы все были заодно, все боролись над одной задачей, и все одерживали маленькие победы, все испытывали облегчение и радость после того, как получалось победить ошибки.
У нас есть замечательный чат Android Developers, в котором много людей, готовых бесплатно подсказывать и помогать. И это куда быстрее, полезнее и приятнее, чем идти на StackOverFlow и выслушивать, какой же ты тупой.
Я уверен, что Android – уникальная платформа, которая своей гибкостью и сложностью объединяет вокруг себя разработчиков. Будь она простой для освоения – коммьюнити не было бы таким дружным. Мы все бьёмся против общего "врага" ! И с каждой закрученной гуглом гайкой, с каждым очередным усложнением фоновой работы мы становимся всё дружнее и сильнее. Нас не победить!)
И знаете что? Так далеко не везде.
#android #мотивация
Я в индустрии 10 лет, бывал и разработчиком на C++, и на Java, и сайты / веб-приложения делал на HTML / CSS / JS, и бэкенд и нейронки на python. Это я к тому, что мне есть с чем сравнивать android-коммьюнити. И я не перестаю удивляться, насколько оно всё-таки крутое.
Вот пример: те, кто были на моём стриме, уверен, почувствовали то же, что и я: единение. Мы все были заодно, все боролись над одной задачей, и все одерживали маленькие победы, все испытывали облегчение и радость после того, как получалось победить ошибки.
У нас есть замечательный чат Android Developers, в котором много людей, готовых бесплатно подсказывать и помогать. И это куда быстрее, полезнее и приятнее, чем идти на StackOverFlow и выслушивать, какой же ты тупой.
Я уверен, что Android – уникальная платформа, которая своей гибкостью и сложностью объединяет вокруг себя разработчиков. Будь она простой для освоения – коммьюнити не было бы таким дружным. Мы все бьёмся против общего "врага" ! И с каждой закрученной гуглом гайкой, с каждым очередным усложнением фоновой работы мы становимся всё дружнее и сильнее. Нас не победить!)
И знаете что? Так далеко не везде.
#android #мотивация
🔥12👍5❤2🥰2