Вопросы Редакция vc.ru
30 696

Как научиться писать под Android без опыта программирования

Добрый день.

Я хочу создать приложение под Android, но совершенно не представляю, получится ли у меня хоть что-нибудь — никакого опыта программирования у меня никогда не было.

Как поступать, если ты новичок, и хочешь заниматься именно разработкой приложений? С чего начать?

Спасибо.


Отвечает Григорий Клюшников, бывший Android-разработчик «ВКонтакте»

Привет.

К сожалению (или к счастью), написать нативное приложение с нуля практически невозможно.

Начинать свой путь программиста с изучения Java я бы не советовал — слишком многое нужно будет понять сразу. Лучше начинать с языка С — это позволит разобраться в основных принципах программирования, а уже потом поверх этого можно учить Java.

Если очень уж хочется — у Oracle есть очень хорошие уроки по Java, а на developers.android.com расскажут, как её непосредственно к Android применять.

Если в процессе разработки у вас возникнут какие-то конкретные вопросы — ответы на них наверняка можно будет найти на Stack Overflow.

Конечно, если вам нужно какое-то очень простое решение, то можно просто сделать страницу на HTML5, а в роли приложения будет выступать какой-нибудь браузер с открытым кодом, который только этот сайт и будет открывать, грубо говоря.

Никаких лайфхаков тут, увы, нет.

#вопросы #Образование

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Редакция vc.ru", "author_type": "self", "tags": ["\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","\u0432\u043e\u043f\u0440\u043e\u0441\u044b"], "comments": 68, "likes": 38, "favorites": 1, "is_advertisement": false, "subsite_label": "ask", "id": 14934, "is_wide": true, "is_ugc": true, "date": "Fri, 15 Apr 2016 20:51:27 +0300" }
{ "id": 14934, "author_id": 2, "diff_limit": 1000, "urls": {"diff":"\/comments\/14934\/get","add":"\/comments\/14934\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/14934"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199125, "possessions": [] }

68 комментариев 68 комм.

Популярные

По порядку

Написать комментарий...
5

Что за бред. Кто придумал, что выучить андроид проще, если начать с си?) Это тоже самое, что учить немецкий, чтобы говорить на французском. Бери и учи андроид сразу.

Ответить
8

Вот потому он и бывший

Ответить
1

Немецкий и французский — не совсем корректное сравнение. Функциональное программирование как минимум проще в плане обучения, чем объектно-ориентированное. Так что если и сравнивать, то для абсолютно незнакомого с программированием человека будет разница как между английским и арабским.

Ответить
2

Вы полагаете, си - язык функционального программирования? Ой! Вы такой крутой эксперт! Объясните мне что такое монады. Это ведь так просто. И чтобы я понял. И где они в си.

Ответить
1

Процедурное часто путают с функциональным почему-то.

Ответить
1

Процедурное... Это?..
Вы имеете в виду императивное? Чорт, чорт, чорт. Как можно императивное программирование спутать с функциональным?! Посмотрел аккаунт чувака, он утверждает, что он андроидоразработчик и участвовал в конкурсе на официальный клиент телеграмма! Надеюсь, конкурс выиграл не он ;).

Ответить
0

Основная идея функционального программирования - откладывать изменение переменных до тех пор, пока это возможно. Императивного - постоянно изменять. Монады по своей сути являются следствием того, что результат выполнения отложенных вычислений не определен. Реализовать их можно в любом императивном языке(Java - Optional).

Ответить
1

Поддерживаю Галю! С памятью ой как любят даже на интервью вопросы задавать. А когда изучал программирование (год всех спрашивал и рыл инфу)- и свифт пытался и джавараш пытался и джаваскрипт и с веба с нуля хтмл и си эсэс пытался... В итоге пошел на курсы от Гарварда (там точно не дурачки) и препод тоже не дурачок, начали с Си, через 5 недель написал свой первый сервер, на шестой неделе пояснили синтаксис PHP, на 7-9 неделе изучили хмтл-си эсэс-джаваскрипт, на 10 неделе научили соединять с помощью пхп весь этот джаваскрипт с сервером и еще 3 недели спустя на google maps API сделал приложение, которое презентовал и все офигели от счастья. Ну и по пути рассказали про JQuery и Ajax. Вот и история трех месяцев. Сделано без интерфейса несколько простых программок и игрушка, объяснены принципы и понимаю, как работает память.
Отличный ответ, полностью поддерживаю.

Ответить
0

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

Ответить
0

Lazy evaluation есть во всех функциональных языках, т.к. основой функционального программирования является лямбда исчисление.

Ответить
0

В том виде, в котором оно есть во всех функциональных языках оно есть и во всех прочих. Эрланг требует вычисления аргументов функций. Да, ленивость можно просимулировать. Но можно её просимулировать и в си и хоть в паскакале.

Ответить
0

или Галу :) извиняюсь)

Ответить
1

При чем тут функциональное программирование? C дает понимание как работать с памятью. Без понимания того факта, что в Java объекты являются ссылками люди будут городить говнокод.

Ответить
4

То есть просто озвучить что в джава обьекты являются ссылками нельзя? Нужно учить си?)

Ответить
0

Нет, нельзя. Нормальный разработчик всегда задастся вопросом что же такое ссылка и дальше придет к пониманию того, что он не знает ничего про модель памяти Java. И поймет что происходит с памятью во время удаления ссылки. Общался с Android разработчиком, который не понимал что такое стэк и что такое хип. Вообще.

Ответить
0

вот именно, нормальный разработчик. Если разработчик не нормальный, то хоть в лоб, хоть по лбу, ни си, ни что-либо еще не поможет. Поэтому рассказы с чего нужно учить %языкпрограммирования% не имеют смысла.

Толковый человек зам заинтересуется и изучит что нужно, даже если он сходу сел за андроид.

Ответить
0

Так может вообще не нужно людям ничего говорить? Пусть методом тыка сами разбираются. Останутся же самые лучшие.

Ответить
7

Ожидал увидеть самую короткую статью - "Никак." (:

Ответить
4

"Если очень уж хочется — у Oracle есть очень хорошие уроки по Java".
Перешёл, посмотрел. Сделал вывод, что "С чего начать?". С изучения английского языка.

Ответить
4

Кроме startandroid.ru есть еще замечательный ресурс:

http://developer.alexanderklimov.ru/android/
Помог мне понять начать писать на под android и на java в целом.

А видео уроки хороши у LoftBlog
Например, основы Java и ООП:
http://www.youtube.com/watch?v=TPJq5U2KoI8&list=PLY4rE9dstrJzKUZHdGgECOjJLaZBcUdCC

Ответить
–7

Ну и нужно иметь в виду, что Google планомерно избавляется от использования Java в Android

Ответить
12

кто вам сообщил такую жесткую ересь?

Ответить
4

бред полнейший

Ответить
0

они только рассматривают использование Swift в качестве нативного языка для платформы, но от Java пока никто никуда не уходит.

Впрочем, тот же Swift изучить тоже будет годным решением - для написания приложения на iOS.

Ответить
1

Вставлю свои пять копеек.
Как только какой-то опыт программирования всё-таки появится, неплохо было бы почитать исходники каких-то проектов — можно в качестве примера привести то же официальное приложение Telegram, но повторюсь: приходить к пониманию того, почему там используются различные крутые вещи типа стека View вместо нескольких Activity, почему многое вынесено в сишный код и т.п. надо поэтапно.
Каким-то вещам, которых нет в Андроиде, можно поучиться у iOS. Самый простой пример: приостановить какие-то ресурсоёмкие задачи в фоне, если сейчас прокручивается список. Кстати, гугл в некоторых своих примерах тоже эту штуку использует.
А ещё не надо стесняться переиспользовать какие-то вещи из своей практики, наращивайте и улучшайте качество своей кодовой базы.

Ответить
8

Вы реально думаете,что код из телеграмма нужно считать эталонным?
Никогда не нужно начинать с подобных проектов.
Пусть человек научится писать красивый,понятный код,а не сурой заоптимизированный ад. Я когда листал их сорцы я переодически пробивал себе лицо фейспалмами(мне понятно почему так написано,но в некоторых местах без бутылки не разберешься,в некоторых местах про нейминг переменных просто забыли). Человеку с несколькими месяцами опыта под андроид лучше смотреть на примеры Jake Wharton'а.

Ответить
0

А зачем останавливать задачи, если прокручивается список?

Ответить
0

Айос, как известно, однозадачная система ;)

Ответить
1

Потоков там не существует штоле? Что это за задачи такие, что их надо останавливать, чтобы ui работало??

Ответить
–4

Тут три пути: либо Игры, либо BigData, либо Web.
Игры - это C# (Unity, Xamarin)
BigData - это Python, SQL
Web - JavaScript
Полагаю, ты хочешь зарабатывать, а не просто разрабатывать приложения.
БОПтизм - вот истинное вероучение для программиста, который хочет завоевать мир!

Ответить
17

биг дата

на андроид

аха
ахаха
ахахахахахахахаха

Ответить
0

А что, кластер на ардуинах и всяких расбери делают же. Нынешние смартфоны иные компы по производительности могут обставить. Идея конечно идиотская, но вполне реализуемая.

Ответить
3

Когда я освоил с нуля Delphi +SQL, через 20 лет (практически) с нуля Unity+c#. По своему опыту:

1) Обязательно нужен проект. Мозг должен знать, зачем ему что-то учить, а ученик - видеть перед собой достижимую цель. Проект должен быть небольшой, но осмысленный и полезный.
2) Проект разбивается на шаги минимального размера. Каждый шаг ваш код должен уметь делать еще одну маленькую вещь. Например, первый шаг - вывести "Hello, world!", второй - поменять цвет шрифта или расположение текста на экране, но не то и другое одновременно.
3) Чтобы сделать шаг, берете чужой код из туториалов и поиска и мучаете его, пока не поймете, как он работает.
4) Если нужно не только писать код, но и капаться в настройках софта, работать с визуальным редактором - очень помогут видео туториалы.

Ответить
1

Есть еще вариант Kivy. Кросс-платформенный фреймворк на Python.
Простейший "Hello World" пишется всего в 6 строчек кода.

Ответить
6

Попробую сделать это с одной строки:

System.out.println("Hello, World");

Ответить
0

Не прокатит. Нужно еще объявление класса и статического метода main - 5 строчек получается.

Ответить
0

public class HelloWorld {

public static void main(String[] args) {

System.out.println("Hello, World");
}

}

P.s. консоли/терминалу хватит и этого. Мы же говорим о простейшем хелло ворлде

Ответить
0

Говно, которое можно заюзать лишь для пары демок, простите

Ответить
0

Очень плохой ответ, мне он не нравится. Нужное мне приложение для iOS я написал за один вечер и одно утро, не имея опыта вообще. Только Google, только копипаста кусков кода с детсадовскими правками. Неужели для Android такое не проканает?

Ответить
2

Говноприложение, с кучей ошибок, без оптимизиции, знаний сетевых протоколов, да проканает.

Ответить
6

Ни одной ошибки xcode не выдал, app задачу выполняет (сбор, анализ и передача данных с сенсоров). Оптимизация параметров – была по мере field-тестов. Использование сетевых протоколов – есть GET и POST, че там сложного? Ну есть всякие говно-нюансы (которые также решаются гуглом), но это все хрень по сравнению с тем фактом, что оно работает.
Я понимаю, что программистам не очень приятно это слышать, но вы же лишь прослойка между задачей и средой разработки. При чем за эту прослойку приходится платить.
Но дело даже не в деньгах, а во времени. Я получил готовое приложение на следующий день, собрал нужную дату и "продал" ее вечером на встрече партнеру. Правда теперь он хочет аналог на андроиде. Поэтому мне и не нравится ответ в сабже.

Ответить
2

Смешно.

Ответить
0

Да, действительно программисты - примерно такая же прослойка между бизнес-идеей(решением) и реализацией, как и аналитики, если вы понимаете, о чём я.
Даешь всё в одном. Есть у меня такая книжка в архиве - от 2004 года, называется "WEB-программирование", так вот тогда было модно и можно делать всё одному человеку: от дизайна и верстки, до backend-разработки. В книжке как раз про каждое было про главе.
Но миллениал прошел, наступил 21 век, теперь раздельное питание и оптимальные решения больше в цене, чем "универсальные солдаты".
Продавать - это хорошо, но это больше к продаванам. С разработкой ПО оно мало связано ;-)

Ответить
0

Разработка ПО исключительно связана с продажами, прогрер)))) *юмор*

Ответить
0

Как показывает практика, программист, который думает о продажах - абсолютно плохой программист и никакой продавец.
Тут надо понимать, что есть существенная разница в "накидать код" и "написать код", а также в "продать продукт" и "продать хорошо".

Ответить
0

Ок, по вашей логике, дизайнеры - прослойка между наброском и фотошопом, аналитики - между данными и их интерпретацией, уборщики - между мусором и чистотой и т.д. Не спорю, некоторые проекты можно целиком сделать и одному, но будут ли они настолько же качественны, чем если каждой частью проекта будет заниматься профессионал своего дела (ну или хотя бы разбирающийся в теме)? А сколько времени займет разработка в одиночку по сравнению с разработкой командой? А что если требуется создать глобальный проект, рассчитанный на долговременную поддержку и требующий глубоких знаний? На следующий день вы готовое приложение не получите. Цукерберг не писал Фейсбук в одиночку и за один день.
То что вы сделали приложение, накопипастив с гитхаба и стекоферфлоу еще не означает, что вы научились программировать. Без основы в виде знаний и постоянной практики, вы в течении нескольких месяцев забудете все, что делали и вам придется вникать заново, если нужно будет доработать приложение или написать новое.
Суть ответа Григория как раз в том, что нужно прокачивать знания и использовать их для создания качественного продукта, а не стремиться получить сиюминутный посредственный результат. И, как мне кажется, автор был заинтересован именно в получении знаний, когда задавал вопрос.

Ответить
2

Код в студию.
Хочется оценить насколько то что вы написали можно назвать "приложением".

Ответить
1

Не все приложение конечно, но чтобы не быть голословным

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
locationManager = [[CLLocationManager alloc] init];

self.motionManager = [[CMMotionManager alloc] init];
self.motionManager.accelerometerUpdateInterval = .01;
self.motionManager.gyroUpdateInterval = .01;

// [self.motionManager startDeviceMotionUpdates];

[self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue]
withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
[self outputAccelertionData:accelerometerData.acceleration];
if(error){

NSLog(@"%@", error);
}
}];

[self.motionManager startGyroUpdatesToQueue:[NSOperationQueue currentQueue]
withHandler:^(CMGyroData *gyroData, NSError *error) {
[self outputRotationData:gyroData.rotationRate];
}];

Ответить
0

Крутое приложение, бро!

Ответить
0

Приложение – огонь!

Ответить
0

Но главное все-таки дата. И с ней уже физику работать, а не прогеру.

Ответить
0

Это скорее скрипт, который выполняет несколько инструкций из iOS SDK, а не приложение.
Чтобы такое написать достаточно быть хорошим учеником в школе ;-)
Кстати, очевидно, и дизайнер вам тут не нужен - на storyboard достаточно просто накидать стандартных кнопок.

Ответить
0

Это часть приложение, там еще про gps и про хранение исключительно изменений и про передачу. Я как раз и говорю, что ума много не надо, чтобы накопипастить в iOS. Я просто не ожидал этого, когда решил ночью написать сам и нагуглил Xcode.
Человек оркестр тут не подходит – я сначала обратился к знакомому программисту, предложил денег хороших >100k он поленился, не нашел время, испугался, обосрался, не знаю. Но вот теперь я смотрю на программистов просто как на коммодити, а с другой стороны вижу гугл и простецкую среду разработки.

Ответить
1

вангую, что было просто найдено на гитхабе на 90% подходящее приложение. Ну или как вариант, сабж таки имел опыт.

Ответить
0

Вопрос звучит "как научиться писать приложения для андроид", а не "как научиться программировать копипастом".

Ответить
0

Почему-то захотелось оставить это тут :)

Ответить
2

я знаю один лайвхак, как научиться программированию: сесть и учить.

Ответить
2

Вопрос из разряда "Как переплыть реку если не умею плавать".
Как будто школьник поиграв в клёвую игрушечку, под впечатлением думает "А я тоже так хочу!" и сразу под Android!! ...а когда дело доходит до хотя бы консольного калькулятора, сразу проблемы начинаются... программирование это не 2 раза кнопку нажать, нужно уметь думать и понимать что ты делаешь, и зачем, и на несколько шагов вперёд желательно.

Ответить
2

у меня хоть и был опыт программирования на других языках - мне помогли разобраться видео туториалы. На русском лучше всего startandroid.ru

Ответить

1

Вот отличный путь для обучения программированию под Андроид:
https://www.springboard.com/learning-paths/android/

Ответить
1

Начать с Си? Товарищ, вы серьёзно?

Моя рекомендация, как Android разработчика: я начинал свой путь в мир программирования (а затем Android'а) с очень интересной книги Герберта Шилдта "Java 7 - The Complete Reference". Начни с неё. Доступна на русском языке. У него самая качественная литература по С, С++, Java и C#.

Успехов!

Ответить
0

На днях статья была, что у Google в планах юзать опенсорсный Swift как замену Java

Ответить
0

В статье написано (если это та статья): "Sources tell... Google is considering making Swift a “first class” language for Android..." "...sources say Swift is not meant to replace Java, at least initially"

Ответить
0

Если эти слухи действительны (а вполне себе может быть, именно Swift) да такой транзашн в данной ситуации займет лет 7 - 10. В частности Apple сообщает что будет поддерживать Obj-C еще 10+ лет, и еще много кто не хочет от нее отказваться. Для гугла загнуть Java - это значит загнуть очень большую инфраструктуру.

Ответить
0

Конструкторы юзай

Ответить
0

Хочешь быть профиссианальным программистом нужно этим болеть и трать уйму времени на обучение пробу и ошибки, после чего переходить к более сложным вещам, управлению памяти и т.д. Осебе моих знаний в сфере веб: php JavaScript jQuery, Ajax работа с Json вполне хватило чтобы разобраться на первом этапе в Android. Поэтому если парень хочет начать с Андройд то пусть с него и начинает, сначала с копипаста, тысячу проб и ошибок дадут понимание, главное желание и чтоб тебя к этому тянуло.

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

Ответить
0

С чего начать?

С изучения Java SE.

Ответить
0
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Приложение-плацебо скачали
больше миллиона раз
Подписаться на push-уведомления
{ "page_type": "default" }