Какие знания нужны, чтобы создать такой продукт под android?

Всем хорошего дня! Начал заниматься android разработкой на java. Дабы у меня всегда была цель, я придумываю себе сложное задание - и стараюсь получить необходимые знания и выполнить его. Это сильно мотивирует меня.
Так и в этот раз, я придумал для себя офигенную(как мне сейчас кажется :D ) идею, и задался вопросом - какими навыками я должен обладать, чтобы быть в состоянии сделать подобное?

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

Вот, буду благодарен, если наведёте моё обучение в нужную сторону :) (А пока продолжу изучать необходимый минимум)
  • Вопрос задан
  • 416 просмотров
Решения вопроса 3
ApeCoder
@ApeCoder
Надо знать, как писать UI под андроид, из каких компонентов состоит UI, рекомендации по визуальному дизайну .

Перечень ограничений, которые android накладывает на приложение (какие разрешения просить, например, какие операции выполняются асинхронно). Какой паттерн для отделения бизнес логики от UI выбрать.

у каждого пользователя есть своя страница,


- Где и как хранить данные (тут нужен бекенд - это не связано с андроидом).
- Как приложение будет получать данные? (протокол работы приложения с фронтэндом)
- Каким образом обеспечивать авторизацию, защиту от подслушивания и перехвата. Модель атак на приложение.
- Соответствие приложения европейскому (GPDR) и российскому законодательствам о персональных данных

можно писать сообщения в ЛС либо в общий чат,


- каким образом работают оповещения на Android
- соответствие российскому законодательству об организаторах распространения информации

присутствует карта города, на которой


- Выбрать поставщика картографической информации (google, yandex, bing), ознакомиться с лицензией

отмечены какие-либо места с фотографиями,


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

также есть некая база с определёнными фотографиями/текстом, доступные всем.


- какие требования по быстродействию
- как осуществляется модульное и нагрузочное тестирования
Ответ написан
Комментировать
@Div100
какими навыками я должен обладать

Уметь все это разделить на мелкие компоненты. Так чтобы в связи представляли твой конечный результат. Большая цель она выглядит непонятной, не ясно как к ней подступиться. Поэтому попробуй разбить это на небольшие кусочки. И соединяй их постепенно. Для каждого кусочка тебе понадобятся определенные знания, уже будешь знать конкретно какие, и появятся конкретные вопросы, появятся вопросы, сможешь находить решения и идти дальше. Задавай вопросы, находи решения, делай и по новой.
Если кажется это слишком простым, попробуй это сделать и уже сможешь выложить это как вопрос, например: "Правильно ли я декомпозировал мою идею на подзадачи?"
Тогда тебе уже смогут поправить и подсказать более детально.
Ответ написан
Вот примерный список зависимостей, покрывающий описанные вами нужды:

implementation "com.google.firebase:firebase-core:16.0.1"
implementation "com.google.firebase:firebase-auth:16.0.2"
implementation 'com.firebaseui:firebase-ui-auth:4.0.0'
implementation "com.android.support:appcompat-v7:${supportLibVer}"
implementation "com.android.support:support-v13:${supportLibVer}"
implementation "com.android.support:recyclerview-v7:${supportLibVer}"
implementation "com.android.support:design:${supportLibVer}"
implementation 'com.android.support:multidex:1.0.3'
implementation "com.google.android.gms:play-services-maps:${gmsVersion}"
implementation "com.google.android.gms:play-services-location:${gmsVersion}"
implementation "android.arch.lifecycle:extensions:${aacVer2}"
kapt "android.arch.lifecycle:compiler:${aacVer}"
implementation "android.arch.persistence.room:runtime:${aacVer2}"
kapt "android.arch.persistence.room:compiler:${aacVer}"
implementation "com.squareup.retrofit2:retrofit:${retrofitVer}"
implementation "com.squareup.retrofit2:converter-gson:${retrofitVer}"
implementation "com.squareup.okhttp3:okhttp:${okHttpVer}"
implementation "com.squareup.okhttp3:logging-interceptor:${okHttpVer}"
implementation 'com.karumi:dexter:4.2.0'
implementation 'com.google.code.gson:gson:2.8.4'
implementation 'de.hdodenhof:circleimageview:2.2.0'
implementation 'ch.acra:acra-http:5.1.2'
implementation('com.afollestad.material-dialogs:core:0.9.6.0') {
    exclude group: 'com.android.support', module: 'appcompat-v13'
}
implementation ('com.squareup.picasso:picasso:2.71828') {
    exclude group: 'com.android.support', module: 'animated-vector-drawable'
    exclude group: 'com.android.support', module: 'exifinterface'
}


Но, на данном этапе, он, скорее всего, будет для вас бесполезен. :) Начинать надо с другого края.

Самый главный и ценный навык - технический английский. Определенный уровень даже в режиме "только чтение" позволит вам быть в курсе всех технологических новинок в данной отрасли.

Следующее корневое знание - система разработки и сборки готовых приложений из исходного проекта. Знание особенностей этой системы и интерес к её эволюции позволит максимально повысить вашу эффективность как разработчика.

Далее вы должны по поводу и без повода обращаться к руководствам Google по разработке для Android. Если вы Android-разработчик - вам без них никуда. Вникайте в методологии и методики, предлагаемые разработчиком платформы. Это очень важно, поскольку 90% возможностей приложения нормального человека так или иначе завязаны на сервисы Google.

Затем следуют отраслевые ресурсы. Сайты с библиотеками кода и средствами разработки, через которые обменивается знанием подавляющее большинство разработчиков - ещё один ключ к успеху. В наше время лучше всего не изобретать колесо, если вы не заявляете себя в качестве изобретателя и конструктора колёс. Старайтесь в первую очередь использовать наработки людей, которые уже потратили своё время на решение конкретной задачи. Множество драгоценных камней сверкает в таких местах как https://android-arsenal.com/ , например.

И пара советов лично от меня:
  • Изучайте Kotlin.
  • Приобретите 16 gb памяти, SSD и процессор с четырьмя или более ядрами. Установите и освойте Linux, хотя бы в объёме, необходимом для разработки приложений. Впрочем, я уверен, когда привыкнете, он вам понравится сам по себе. Я рекомендую Linux Mint.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы