Pull to refresh

Comments 8

В мобильной разработке самое классное то, что телефоны есть у всех (есть мнение, что даже ПК отстают). Ты не только можешь сам пользоваться своим творением, но и есть шанс, что у друзей тоже оно будет. Ну а если там есть очень хитрая пасхалка… :-)
Кроме того, помимо решения архитектурных задач и реализации бизнес логики, я люблю делать красиво. Анимации, верстка, плавность — вот это все действительно доставляет истинное удовольствие, когда круто сделано!
И наконец, работая над проектом, ты можешь его реально «пощупать» — поэтому точно знаешь, что делаешь что-то реальное.
Я люблю андроид! Причин много, но я упомяну только его Linux корни и частичную открытость.
Как и везде, в андроид разработке есть тонкие моменты, которые хотелось бы изменить:
1) работа с клавиатурой. Ладно когда надо ее просто скрыть и показать, но вот когда дизайнер хочет сочетание прозрачного статус-бара и хитрую анимированную обработку при появлении клавиатуры… Порой очень мешает момент, что fitSystemWindows относится и к статус-бару и к клавиатуре. Еще высоту клавиатуры не так просто узнать. Приходится опираться на OnLayoutChangeListener
2) Асинхронность транзакций фрагментов. Это не так сложно, но постоянно приходится следить за возможностью словить эксепшн там, где не ожидаешь.
3) Недоступность для прямой работы с фрагмент-бэкстеком. Это усложняет задачи с хитрыми переходами или построением цепочки фрагментов (при обработке диплинка, например, хочется открыть экран с заранее построенным бекстеком).
4) Флаги запуска активити. Да, они позволяют гибко настроить запуск различных частей приложения, но даже прочитав официальную документацию, сразу не разберешься. Есть подозрение, что можно сделать проще.
5) «Сложный» жизненный цикл фрагмента. Когда работаешь с ним много лет, то он не кажется уже «сложным», но новичков разнообразие состояний сбивает с толку.
6) Встроенная работа со шрифтами. Calligraphy — спасение, но не всегда срабатывает с саппорт виджетами.
7) Ну и напоследок стоит упомянуть главную боль: огромный зоопарк устройств, среди которых хватает не только китайцев с 256 Мб оперативки и мелким экраном, но и кастомных сборок андроида, подменяющих системные виджеты. Ах да, еще вышла 7-ка, а мы все еще пишем под 4-ку…
Но не смотря на все недостатки — я обеими руками За Андроид!
8) Вот прямо сейчас боремся с непростой работой стилей. Кто там кого переопределяет? :)
Когда ты приходишь в мир мобильных приложений после frontend-рзработки, в первую очередь тебя неимоверно радует отсутствие необходимости адаптировать верстку под IE, Safari и прочие непонятные браузеры :D Ещё, действительно, очень радует зоопарк девайсов. Наличие больших и маленьких устройств, производительных и не очень, дешевых и дорогих, брендовых – всё это заставляет не просто писать код, но и думать, как оно будет работать на разных устройствах. Нужно думать о производительности на слабых устройствах и о максимальной красоте на мощных. И не забывать, чтобы пользоваться приложением было удобно =)

Если же брать именно разработку под Android, то есть моменты, котоыре действительно очень радуют:

  1. Хочется выделить support library + google play services. На мой взгляд, это чуть ли не самое крутое изобретение google для android за последние ~ 3-4 года. Ведь когда для того, чтобы на старых девайсах твоё приложение работало как задумано, тебе достаточно подключить библиотеку в зависимости, и всё – это действительно круто! А иначе мы бы наверное только год-два назад начали использовать Fragment SDK(потому что раньше нужно было бы поддерживать Gingerbread, и о фрагментах не стоило бы и мечтать).
  2. Открытые исходники платформы. Это действительно круто, когда не понимая, как например работает Looper, или за счёт чего retain fragment переживают пересоздание Activity, ты идешь, читаешь исходники этого добра, и понимаешь, где магия. Или находишь где баг, и понимаешь, какой костыль нужно подставить XD
  3. Большое, активное community. Всё время появляется довольно много новых opensource-библиотек, порой вполне не дурных. Достаточное количество статей, обсуждений, конференций.


Конечно, и минусов в нашей платформе предостаточно!

  1. Lifecycle. И этим всё сказано =) Я до сих пор не могу примириться с мыслью, что при малейшем чихе, activity пересоздаётся. Мне не верится, что нельзя было сделать так, чтобы Activity была настоящим Controller/Presenter и не была привязана к тому, что видит пользователь, поворачивая устройство, или переключая Activity в состояние multi-window. Не верю, что не нашлось бы в google людей, которые бы сделали удобное SDK. Конечно, это здорово, что google не загнал нас в какой-то паттерн(вроде MVP/MVC/MVVM/e.t.c.), как вроде уже говорили в одном из подкастов. Но, блин, разве если бы был продиктован какой-то подход, который был бы удобным и беспроблемным, неужели это не помогло бы самой платформе становиться только лучше?
  2. Асинхронщина – туда же. AsyncTask конечно решает, но все знают, что работать с ним из activity – плохо. Но куда тогда деваться junior-разработчику? Идти разбираться с Loader? Наворачивать систему Service+AsyncTask и поиск AsyncTask по id? Он этого не поймёт, не почувствует, и забьёт на утечку памяти из-за использования AsyncTask прям в Activity. И может пройти не один год, пока он поймёт свою ошибку. А за это время им может быть опубликованно не одно приложение.
  3. Навигация по приложению. Мне кажется, было бы невероятно круто, если бы можно было в визуальном редакторе настроить переходы по приложению. Потом зайти в код и прописать условия перехода. В студии даже как-то раз засветился такой инструмент, но видимо что-то не срослось(потому что тогда он был слишком кривой, а сейчас я просто не смог его найти). Возможно, когда мы перестанем поддерживать sdk lvl < 16, нам поможет Context.startActivities(android.content.Intent[]). Но и это не факт. Да и с навигацией по фрагментам хотелось бы так же легко и интуитивно расквитаться.

Я, как говорится, novice to Android development, поэтому рассматривать буду именно с этой точки зрения.
Из несомненных плюсов:


  1. Открытость платформы и огромное комьюнити. Говорили уже, повторяться бессмысленно.
  2. Хорошая документация. Nuff said.
  3. Быстрое развитие. Всего каких-то два года назад в топе был SDK 16, а нынче уже 24 вышел. Изменений за это время воз и маленькая тележка.
  4. Material Design. Возможность создать приложение с интерфейсом, будто бы спроектированным профессиональным дизайнером — это просто круто. А ведь все, что требуется — следовать гайдам. Увы, 90% приложений в PlayMarket до сих пор его не используют.

Но и минусов хватает, как в самой платформе, так и около нее:


  1. Activity и Fragment lifecycle. Это и в самом деле головная боль, причем по сей день. Архитектурных решений много, но все они в той или иной степени костыльны. По сию пору кажется, что это можно значительно упростить. Но по факту это невозможно, поскольку:
  2. Необходимо поддерживать старые версии ОС. Это мешает производить кардинальные изменения в платформе. Отчасти спасают Support Libraries.
  3. Отсутствие многих высокоуровневых средств в самой платформе. До сих пор не понимаю отсуствия штатного аналога Picasso или Retrofit. Third-party — оно, конечно, здорово, но непонятно, почему сторонние разработчики вынуждены создавать решения, которые должны быть предоставлены самими разработчиками платформы. IMHO, разумеется
  4. Довольно-таки печальное состояние в области обучения современному программированию под Android. Учебников с основами (в которых до сих пор описываются те же AsyncTask-и) — завались, как и сборников статей с трехкнопочными примерами, разрозненных туториалов по Dagger'у, RxJava etc тоже хватает, а вот полноценных курсов, где все это связывается воедино и показано, как же создается современное мобильное приложение от А до Я, раз-два и обчелся. За счет этого порог вхождения в эту область на данный момент крайне высок.
  5. Еще печальнее с информацией по внутренней кухне. Здесь либо закопаться в исходники с головой, либо записываться на курс от Linux Foundation. Ну еще можно посмотреть в описание Context pattern. На этом, в общем-то, и все.

PS Вспомнил еще кое-что, но это скорее к разработчикам библиотек и Android Studio.
Пора бы уже и запилить наконец полноценную поддержку DataBinding'а в студии. На оператор :: до сих пор ругается, && не распознает и т.д. (на момент версии 2.2 RC). Информативность сообщений об ошибках оставляет желать лучшего. Например, на днях встретилась ошибка при компиляции, что-то вроде "Cannot find the setter for attribute 'android:layout_height' on android.widget.ImageView with parameter type float". Суть понятна — биндинг не воспринимает параметр, но в чем причина и как исправить — пришлось лезть на AOSP Issue Tracker. Попонятнее сообщение требуется, где будет указана именно причина возникновения проблемы.
С Dagger 2 ситуация не лучше. Чтобы найти причину ошибки при генерации классов, приходится мотать в самый низ. Почему бы не скрыть всю вышележащюю портянку, информативность которой около нуля?

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


У некоторых людей никогда не было компьютера до этого, и мобильный телефон (или планшет) это их первый компьютер.


Лидирующие позиции делят между собой Android и iOS. По охвату пользователей Android впереди с огромном отрывом. А в планах у Google достичь следующего миллиарда пользователей. С помощью адаптации приложений, привлечения новых разработчиков, распространения интернета в труднодоступных местах.


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


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


Плюсы:


  • Нравится что Google решил подтянуть документацию и гайдлайны.
  • Создает курсы для начинающих и мидл разработчиков (на платформе Udacity).
  • Разрабатывает Support Library.
  • Хорошая студия разработки — Android Studio.
    Плюс всякие плюшки Instant Run, Android Emulator 2.0.
  • JRebel (но версия для Android платная, а для Java есть community edition).
  • Приятный дизайн — Material Design и возможности ОС.
  • Большое открытое комьюнити, много митапов.

Недостатки:


  • Подписываюсь под другими комментариями
  • Нету рекомендованного паттерна (MVC, MVP, MVVM) или рекомендаций для разработки. Открывая чужой проект нужно быть готовым ко всему.
  • Нету рекомендованной ORM. Начинающего разработчика, Android встречает SQLite'ом и Content Provieder'ом.
  • Асинхронное выполнение задач.
  • Жизненный цикл.
  • Навигация по приложению. Разработка для планшета и телефона.

Минусы:


  • Практически нет стажировок.
  • Основная проблема, от которых страдают и пользователи, и разработчики — это обновления ОС. Обновление (даже безопасности) — это не что-то обыденное, это как праздник. Редкий аппарат переживает несколько обновлений на своем веку.
  • Еще со стороны пользователя могу добавить про ужасную геолокацию. Всякие запросы на её включение.
https://telegram.me/androiddevpodcast — ведущие и слушатели в общем чате
Sign up to leave a comment.