На Reddit идет интересное обсуждение. Автор пишет:
Я не профессиональный программист, но у меня есть небольшой опыт работы с C, Bash, Python, Lua, ahk. Обычно мне не составляет большого труда понять, где и как начать искать нужную информацию и быстро что-то собрать.
Сейчас же в Android Studio самый простой проект «Empty Activity» содержит 3 десятка файлов, вложенных в дюжину папок. Всего в папке проекта более 500 файлов. Главный файл имеет 11 импортов. IDE похожа на панель управления космического корабля.
С туториалами все то же самое — доступно множество туториалов с запутанной структурой, неясным объемом, и я понятия не имею, что я должен здесь делать. Мне не нужен раздутый учебник по Hello World, но я не могу использовать и сухие справочники.
Есть ли какая-то толковая сжатая документация, которую можно использовать в качестве справочника? Без видео и плохо оформленных веб-страниц? Потому что это то, что я обычно ищу, когда пытаюсь понять, как что-то сделать. В Android очень сложно найти что-то, много просмотров может быть связано просто с использованием телефонов.
Может быть, я что-то пропустил, и вы можете разрабатывать для Android в vim, используя какой-нибудь аккуратный фреймворк или биндинги, или что-то еще, что будет гораздо менее сложным?
Стоит ли вообще заниматься разработкой под Android для создания относительно простых приложений, таких как, скажем, файловый проводник (я так и не смог найти достойный) или приложение для заметок? В основном я хочу написать что-то очень легкое и быстрое, без хреновой анимации, без бессмысленного дизайна. В целом я крайне недоволен состоянием и дизайном программ для Android, так что это моя основная причина, по которой я хочу попробовать.
Вот некоторые ответы:
Он абсолютно прав, Android разработка довольно сложна в настоящее время, особенно по сравнению с 2012, когда я начал.
В то время, если вы знали Java, вам нужно было выучить только жизненный цикл активити, AsyncTask и AlarmManager — XML настолько прост, что я даже не беру это в расчет. Тестирование — все, кто пришел с Java, знали JUnit, так что ничего нового изучать не пришлось. В целом, вы были готовы к написанию кода меньше чем через неделю. Я перешел с J2EE на Android и помню, как шутил с коллегами, что это почти как программирование в средней школе, настолько все просто.
А сейчас? Даже если бы вы знали Kotlin, что дало бы вам ту же стартовую точку, что и у меня в 2012 году, вы бы потратили неделю, просто пытаясь составить дорожную карту того, что нужно изучить — а потом еще неделю восстанавливаясь после головной боли. Так много всего. А потом потребуется целых 2 месяца, чтобы выучить все необходимые либы Jetpack, базовую архитектуру, принципы простого UI и реактивного программирования (flow/channel/livedata и когда их использовать и как их правильно использовать — livedata не представляет особой проблемы, но flow/channel довольно сложны), затем корутины для фоновой работы и, возможно, Compose. И тогда у вас возникнет миллион вопросов, как заставить все это работать вместе. О, и тестирование — mockk, espresso, типы тестов, лучшие практики — только на это уйдет еще пара недель, если вы хотите, чтобы вас действительно взяли на работу в какую-нибудь компанию. Это уже не просто JUnit, lol.
И я даже не говорю о всех препятствиях на пути к изучению этого длинного списка вещей — почему-то документация часто неполная и всегда есть как минимум 2-3 способа сделать что-либо. Всё находится в процессе перехода от одной парадигмы к другой. Документация рекомендует один способ, codelab использует второй, stackoverflow/medium рекомендуют третий, и каждый способ имеет свои минусы или даже не компилируется/работает с вашей конкретной версией зависимостей, AS, gradle, AGP или вашим targetSDK. Это ад. Хочется биться головой об стену, потому что как новичок вы еще не знаете достаточно, чтобы решить, с какой стороны подойти к обучению!
Подводя итог, скажу, что разработка Android (обучение с нуля) сейчас занимает в 10 раз больше времени, чем раньше. Мне она все еще нравится, но это чертовски сложно, и так трудно идти в ногу со временем, ведь Android-разработка так быстро меняется последние 5-6 лет.
- И половина из того, что вы узнаете сегодня, будет устаревшим через 6 месяцев. Да, я преувеличиваю, но только немного.
- По моему опыту, это было очень неприятно. В конце концов, вы думаете, что вы в порядке, изучая Kotlin, LiveData и корутины, а затем они представляют Ktor, Flow и выпускают Compose. Для Compose мне нужно было интегрировать Facebook* SDK и Youtube Player. Угадайте что — на тот момент не было библиотеки, которая бы нативно работала с Compose. Кроме того, некоторые функции Youtube API были устаревшими, а обходных путей для этого не было. Да, так обидно, ты продолжаешь учиться многому, и когда ты уже почти стал мастером в этом деле — все устаревает lol. Кстати, я начинал с Java, затем RxJava, начинал с Android Studio 1.x и до сегодняшнего дня. Это поезд, с которого я хочу сойти.
Я не смог бы сказать об этом лучше. Я работал разработчиком Android до февраля прошлого года, пока меня не уволили. Последний год был очень сложным, поскольку я изучал и работал с Jetpack Compose, потоками и корутинами, меняя проекты и старших разработчиков каждые несколько месяцев.
Каждый старший разработчик по-своему настраивал проект (с точки зрения сложности). Всякий раз, когда я спрашивал, почему подход A лучше, чем B или C, я получал ответ «ну, это зависит от ситуации». Но я никогда не слышал, от чего это зависит.
Со временем шансы на то, что я вернусь к разработке Android, становятся все меньше. Я чувствую, что просто стараюсь идти в ногу с новым трендом (который всегда «лучше» предыдущего).
Мы зарабатываем этим на жизнь, мой друг, и мы не можем позволить Google сделать это проще.
Я бы хотел вернуться к основным активити. То, что вы видите — это только начало. На уровне предприятия все становится чрезвычайно сложным, иногда по веским причинам, таким как многократное использование и абстракция, но иногда просто потому что (или, может быть, это гарантия занятости).
Тем не менее, как человек, который когда-то занимался веб-разработкой, а затем перешел на Android, я могу сказать без сомнения, что Android мне нравится в миллион раз больше. С ним приятнее работать, код/язык ведет себя более предсказуемо, плюс IDE превосходна.
Похоже, что ваш опыт эквивалентен знанию основ Java или Kotlin. Сравнивать это с созданием современного мобильного приложения — даже близко не одно и то же. Создание эквивалентного приложения на любом из этих известных вам языков может потребовать даже больше кода и больше библиотек.
В любом случае, разбейте свое приложение на небольшие простые задачи и подумайте, как решить каждую из них.
Вы можете буквально использовать Stack Overflow для создания простого хобби-приложения, сократив функциональность до очень маленьких кусочков. Вы не создаете следующее приложение с более чем 100 миллионами пользователей. Для этого не нужно садиться и читать книги или покупать что-то. Вам даже не нужно знать, почему или как что-то работает. Собирайте части, получайте результаты, углубляйтесь, когда нужно. Когда ваше приложение станет отстойным, выясните причину и сделайте его лучше. Повторяйте до бесконечности. Если вам повезет, вы полюбите это приложение или оно станет популярным, тогда вы действительно погрузитесь в работу и потратите время. И все же, зачем тратить столько времени на то, к чему вы, возможно, никогда не прикоснетесь. 10 лет в Android, а для меня все еще есть темные неизвестные уголки. Мне не нужно и не важно знать, как работает каждый маленький кусочек и деталь.
Как профессиональный разработчик Android, скажу следующее: мобильные приложения по своей сути сложны, на том же уровне, что и создание приложений для Windows. Android — это слой поверх Linux, поэтому, если вы хотите что-то разработать, необходимо понимать общую архитектуру системы. В отличие от этого, веб-сайт — это просто размеченный текстовый документ, который может создать каждый.
Приложения для Android — это кульминация длинного списка программных концепций, которые необходимо выстроить и понять. Это не скриптовая машина и не размеченный документ, а множество систем, работающих вместе. В сочетании с тем фактом, что при создании Android было реализовано множество плохих паттернов проектирования (хотя в то время мы, возможно, не знали, что это плохо). Программное обеспечение взрослеет, но на нем остаются шрамы.
Если бы программное обеспечение представляло собой пирамиду сложности, я бы поместил разработку Android на самый верх, прямо под разработкой игр и машинным обучением.
Я не говорю, что это невозможно! Определенно можно научиться, но для этого нужно сначала изучить строительные блоки. Я не думаю, что это то, что можно просто взять и начать. Начните с малого, сделайте кнопку. Добавьте заголовок. Добавьте второй экран. И так далее.
Я занимаюсь разработкой приложений для Android c первого дня. В разные дни разные проблемы. Сначала это было отсутствие хорошей документации. Потом стало лучше. Потом все не хотели тратить время на то, чтобы научиться делать эффективные представления в xml, и все полюбили RxJava. Потом Kotlin.
Теперь проблема в том, что все настолько изменилось, что невозможно найти примеры, которые все еще актуальны…