Главное Свежее Вакансии Образование
😼
Выбор
редакции
10 154 16 В избр. Сохранено
Авторизуйтесь
Вход с паролем

С нуля до App Store за 5 месяцев: как я попал в кабалу (и что из этого вышло)

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

«Научитесь программировать на Swift всего за 3 месяца! Успей записаться на наш курс, только сейчас, онлайн-курс за 4999р*»

Уверен, каждый из вас встречал подобные рекламные объявления, предлагающие резко сменить род деятельности и стать программистом. Беглый обзор вакансий iOS-девелоперов на том же HH только подкрепляет такие позывы, заставляя курсор непроизвольно тянуться к кнопке «купить», в то время как мозг уже рисует вам радужные картины заработка легких денег. В идеале — картины, на которых вы сидите в гамаке где-нибудь у побережья теплого моря, что-нибудь там лениво кодите, и получаете при этом 80$ в час пассивного дохода. Красиво? Безусловно! А как на самом деле?

b_57eacf4273d46.jpg

Я расскажу вам на своем примере и примере нашего приложения для прогулок Walkerie, которое я как раз сам написал с нуля, о том, каково это — быть начинающим разработчиком, и к чему вы придете. Кстати, со взглядом Юлии (с которой мы делаем этот проект) на разработку данного приложения вы можете ознакомиться здесь.

Скажу сразу, что по образованию я не программист, по работе программированием особо не занимаюсь, а всё здесь описанное достигнуто путем проб и ошибок в свободное время.

  • Вступление

Вообще, желание написать что-то для iOS у меня возникло очень давно, начиная с того самого момента, как у меня появился мой первый iPad, почти пять лет назад. Тогда у меня не было компьютера Мак, но я был решителен: поставил хакинтош, запустил Xcode, попробовал что-то написать, но… очень быстро погрустнел от синтаксиса Objective C, всех этих скобочек, закорючек и вернулся обратно к эпизодическому ковырянию в Python.

b_57eac382b078c.jpg

  • Начало

Прошло много времени, я закончил университет, у меня появился Mac, вышла iOS 8, мой iPad 2 превратился в тыкву, а ещё Apple представила новый язык программирования — Swift. Вот оно: думал я, наконец-то!

b_57ead04076489.jpg

Обещалось, что он быстр, понятен, и вообще в будущем необходимость в прочих языках программирования отпадет – настолько он классный со всех сторон. Воодушевившись этим всем, я записался на бесплатный онлайн курс по Swift от Кембриджского университета, прослушал с десяток лекций, написал пару элементарнейших программ методом повторения за преподавателем (калькулятор, погода и еще что-то) и мой интерес угас. Повествование было чрезвычайно академичным, лектор регулярно говорил что-то вроде: «ну, вы же понимаете концепцию nil, это фундаментально, если не знаете, то у вас еще есть время выбрать другой курс», аудитория отвечала «да-да, конечно, знаем!», я кричал «нет, черт, подожди, я понятия не имею, я не знаю!», но меня никто не слушал. К тому же у меня не было идеи или цели, чего я хочу достичь, и зачем мне это. Материал становился все сложнее, а мотивации оставалось все меньше. Совсем скоро эти линии пересеклись, и Swift был снова оставлен.

  • Продолжение

Такая мотивирующая цель у меня появилась лишь через год, в виде приложения для прогулок. В данном приложении человек мог бы идти по интересному маршруту как по навигатору, останавливаясь в интересных точках и просматривая информацию о них на экране. Беглые поиски конкурентов показали, что ниша покрыта плохо, и я решил — вот оно. К тому же, я сам люблю гулять. Дело было в феврале.

«Ты же сможешь это сделать?» — спросила меня Юля.

«Да, конечно! К маю успеем» — уверенно ответил я, предварительно мысленно умножив предполагаемый мною срок на два, как делают все тёртые управляющие проектами. (Еще более опытные управляющие знают, сроки в крупных проектах не выдерживаются практически никогда).

В этот же день я, окрыленный идеей, купил курс с 5 звёздами по программированию на Udemy и продолжил учиться. Разобрался с формочками, кнопочками, действиями по кнопочкам, табличками, картинками, словарями, autolayout, переключение между видами, доступ в интернет и загрузка файлов. На все это ушло около полутора месяцев ковыряний по вечерам после работы (которые плавно перетекали в ночь) и по выходным.

В какие-то моменты вообще хотелось все бросить и махнуть рукой на это дело, но гордость не давала.

Пора было выходить в свободное плавание и делать свое приложение. Базовые функции я написал достаточно быстро, а вот дальше начались проблемы. Я спотыкался на каждой, буквально каждой своей идее. Как сделать картинку внутри таблицы? Как сделать кнопку внутри таблицы? На дворе был конец апреля, а до готового приложения с каждой сложностью было все дальше и дальше. В какие-то моменты вообще хотелось все бросить и махнуть рукой на это дело, но гордость не давала.

Курсы я к тому времени смотреть перестал (где-то на 2/3) и фактически поселился на stackoverflow.com . Удивительно, но похоже, там есть ответы на все вопросы. Главное — это правильно задать вопрос (а потом попытаться понять ответ). Иногда, чтобы понять ответ нужно было задать еще пяток вопросов, иногда просто копипастил куски кода к себе, не особо понимая, что тут вообще происходит.

b_57eacb8c852c2.jpg

Однако… должен сказать, что такой подход работает. С каждой новой прочитанной строчкой кода и скопированным примером я все больше понимал, что к чему, и с какого-то момента даже начал разбираться в примерах представленных на других сайтах. Время шло, функционал добавлялся, и попутно я уже даже не боялся что-то менять в коде: более того, я делал это осознанно. Хотя сюрпризы подбрасывало и само средство разработки:

b_57eacb69a4f58.jpg

Излишне говорить, что май уже заканчивался, а приложение еще готово не было: оно падало, висло и тормозило. На планомерное исправление ошибок ушло еще пару недель и к июню был достигнут минимально приемлемый результат, который уже можно было загружать в магазин. Нарисована иконка, написано описание, казалось бы: пару часов на загрузку и — готово! Но не все так просто :)

b_57eacc6e2ead6.jpg

К сожалению, нет одной волшебной кнопки «загрузить»: процесс многоэтапный и с первого раза, скорее всего, ничего не выйдет. На разборы со всеми этими сертификатами, группами, подписями ушло еще пара вечеров. Приложение загружено, отправлено на проверку, еще пара дней ожидания одобрения со стороны Apple (а дедлайн все дальше и дальше позади) и … приложение приняли с первого раза. Ура!

  • Результат

После 5 месяцев обучения, чтения гайдлайнов и статей, проб и ошибок я получил относительно простое, работающее приложение в App Store, которое можно кому-то показать и за которое почти не стыдно. (Те места, за которые было стыдно, я оперативно исправил в последующем обновлении через неделю). Процесс его совершенствования продолжается до сих пор, равно как и процесс моего обучения. Могу ли я назвать себя iOS-разработчиком? Увы, но пока нет. Слишком велик объем необходимых к освоению материалов и различных нюансов, о существовании которых в самом начале пути я и не подозревал.

Возвращаясь к рекламному объявлению в самом начале статьи: научитесь ли вы писать на Swift, пройдя курс по программированию? Да, безусловно! Станете ли вы по истечении этих 3х месяцев программистом? Увы, но скорее всего нет. Это примерно как «уметь писать» и «быть писателем». Однако второе всегда начинается с первого, так что если есть желание — дерзайте!

  • Советы, ресурсы, комментарии
  1. Вы должны хорошо понимать по-английски
  2. Будет сложно
  3. Придумайте идею простого приложения, которое вы бы хотели реализовать
  4. Запишитесь на какой-нибудь курс. Я рекомендую этот https://www.udemy.com/complete-ios-10-developer-course/learn/v4/overview
  5. Параллельно изучайте гайдлайны https://developer.apple.com/app-store/guidelines/
  6. Гуглите! На любой вопрос новичка в интернете есть ответ, как бы удивительно это не звучало. Сделайте stackoverflow.com своей домашней страницей :)
  7. Да прибудет с вами сила.

Ознакомиться с результатами наших трудов можно здесь :)

+11
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
Thomas Blood
Интересно почитать было.
Успехов вам в нелёгком деле.
Ответить
Инна Кышларь
так душевно и честно написано, что захотелось попробовать приложение в деле :)

скачаю и в выходные погуляю по Москве)
Ответить
Walkerie
Мобильное приложение для пеших прогулок
Юля Богданова
Мы запланировали большой апдейт через месяц. Будет интересно :)
Ответить
Екатерина К
Спасибо за правдивый и интересный рассказ!

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

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

Ну и главное - понимать зачем вы все это делаете, ради чего - то есть иметь определенную цель.

Кстати о том, как учиться. Курсы лично я не рекомендую. Считаю их менее эффективными. Лучше всего, по-моему, работа с хорошей книгой. Мне нравится эта - https://www.amazon.ca/Application-Development-Hours-Teach-Yourself/dp/0672337673 (предупреждаю, однако, что "24" часа это завлекаловка, на самом деле времени нужно в 2-4 раза больше).
Ну и параллельно читать документацию по самому свифту - https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309 хотя чтение это нелегкое.
Ответить
Walkerie
Мобильное приложение для пеших прогулок
Пичугин Дмитрий
Екатерина, да, вы правы, с опытом повеселее. Я бы кстати не рекомендовал Swift в качестве первого языка для изучения :) Python наше всё!

Про force unwrapping и optional chaining (это знаки ! и ?) — честно, никогда не сталкивался с трудностями: концепция, как по мне, достаточно логична и понятна. В самых сложных ситуациях (например нескольких уровнях вложенности функции) сам компилятор тебе помогает, подсказывая, где не хватает «!».

Про работу с книгой — я лично против рекомендации заменить видеокурс книгой. Продолжать книгой — да, возможно. Но с самого начала… Помню первая моя мысль после запуска Xcode была: «черт, почему здесь столько кнопок? это точно Apple сделали? что это вообще все значит?» И только следование видеоурокам и порою даже механическое повторение за диктором помогло как-то освоиться. Я лично начинал именно с книги (как раз документации по языку что вы привели) и как-то дальше «песочницы» не продвинулся.
Видеокурсы плохи тем, что в них не дают практически никаких базовых знаний, переходя сразу к результату и созданию формочек: в них не объясняют, какой поход при программировании правильный, а какой нет. Подозреваю, многие из «свежих» программистов, «научившихся» по таким курсам, даже не очень понимают, как оно там все внутри работает, где к примеру хранятся переменные или зачем нужна очередь задач. Хорошо если подходы к программированию, показанные в курсе, будут правильными. А если нет?)
Ответить
Екатерина К
Дмитрий, когда я говорю "книга", я не имею в виду документацию. Начинать с документации можно только тем, у кого есть реальный опыт программирования, и то эта документация, только для понимания языка, но никак не среды программирования. Я имела в виду реальную, настоящую книгу "для чайников" - как раз такой является та книжка из серии "в 24 часа", которую я привела. Она для полных чайников в Xcode (я как раз таким чайником и являюсь), объясняется все на пальцах, с повторениями, конкретно эта книжка хороша тем, она реально объясняет вещи, я не предлагает тупо повторить.
Почему я считаю, что книга лучше (хорошая, правильная книга) курсов. Во-первых, курсы все-таки кажутся мне более поверхностными. Во-вторых, вы посмотрели и забыли. Ну забыли, я постоянно что-то забываю. И как искать? Книгу взял, полистал, нашел нужное место, ага, точно. А с видео как быть - просматривать заново все предыдущие курсы? Ну и легче в книге искать информацию (с тем же указателем). В-третьих, количество времени, которое я затрачиваю на изучение, зависит от меня больше, чем когда я смотрю видео (там полчаса и полчаса, и все), так как я часто пропускаю врезки, например, связанные со свифтом, которые мне точно уже известны - в видео не так-то просто пропустить (а вдруг что нужное пропустишь?)

Про unwrapping и иже с ними. Да, согласна, по сути ничего сложного, и компилятор постоянно подсказывает, но... это как раз и доказывает ненужность этих знаков. В С#, который меня, несомненно, избаловал, всех этих заморочек нет. Вы никогда не задумываетесь над тем, что перед вами - указатель на объект или сам объект, для обращения к его свойства (членам или полям) используете точку, всегда. А вот конструкции типа UIImage(named:cell.textLabel!.text!)! меня просто убивают. Или такая: ...as! String!
Ответить
DEVLAB Studio
Разработка программного обеспечения без посредников (полный цикл)
Подольский Виталий
"указатель на объект или сам объект, для обращения к его свойства (членам или полям) используете точку, всегда"

вот эта ваша фраза на нагруженных проектах вчистую может память слить, что айос прибьет приложение от греха подальше
Ответить
Екатерина К
Как только объект выходит за область видимости, он помечается, и сборщик мусора его в свое время удалит. Разумеется, в вашей власти также следить за чистотой и не плодить зацикленные ссылки и "сирот" (orphan). При чем тут точка? Точка - это просто очень удобный способ обращения к полям, .Net достаточно умный, чтобы самому догадаться, где объект, а где ссылка на него. В свифте, кстати, есть способы избегать зацикленных ссылок, в .Net такого я не знаю (может, в последних версиях уже есть), и мне это очень нравятся, но эти бесконечные восклицательные и вопросительные знаки просто сводят меня с ума.
Ответить
Ярослав Киреев
Молодец! Главное доводить начатое до конца!
Ответить
Walkerie
Мобильное приложение для пеших прогулок
Юля Богданова
А еще важно получать во время долю мотивационного волшебного пинка :)
Ответить
DEVLAB Studio
Разработка программного обеспечения без посредников (полный цикл)
Подольский Виталий
Ребята молодцы! Но у меня появились вопросы ко многим участникам обсуждения...

Это как так нужно было гуглить, чтобы пройти мимо swiftbook.ru и iOS Developers в ВК? Как я понял, нужен был грамотный и быстрый старт, а вы полезли на Udemy. Честно говоря, если и брать английские ресурсы, то https://www.raywenderlich.com, https://www.hackingwithswift.com, http://nshipster.com, http://www.appcoda.com подходят как нельзя лучше, но книга из рекомендаций Екатерины == путь в никуда! Все эти "24 часа" лишь убивают понимание кода и прививают умение гов...кода. Вы мне напомнили Диму Дубинина, в целом чувак молодец, свой софт выпускает пачками, вон даже на десктоп запилил свой "Рубль"... Но вырос ли он в программиста из ПМ? Нет! У него в отзывах, пользователи просят сделать виджет в статусбаре уже как год, но он так и не сделал! А почему? А нет готового решения на свифте для этого, почитать эпловые доки не судьба, а вопрос решается несколькими строчками кода на самом деле.

Я еще хочу посоветовать не призывать в отзывах писать как положительные так и отрицательные отзывы. Ребят, вы чего в самом деле? Сделайте возможность фидбека через приложение, не провоцируйте никого на отрицаловку. Пользователи всегда более активно минусуют чем плюсуют, после замучаетесь рейт приложению выправлять в сторе, не говоря уже о том, что фичеринг и топ светить не будут по определению!

Про опционалы в свифте теперь. Вы реально не поняли для чего они? Ну тогда приготовьтесь к тому, что crashfree не будет 99%, а все будет немного печальней). За инфикс операторы я вообще молчу тогда. Ребят, свифт под капотом имеет огромный потенциал для качественного и чистого кода, лучше не пожимайте плечами, а пробуйте разобраться почему так а не иначе. И компилятор не покажет на необязательный разворот опционала. Вы должны уметь видеть сами где принудительно развернуть и понимать почему. Катя, хотите я похороню ваши суждения? Найдите на GitHub такую либу как ObjectMapper и посмотрите сорцы, я очень сильно удивлюсь если вы там найдете конструкции из своей книги, что рекомендовали чуть выше.
Ответить
Walkerie
Мобильное приложение для пеших прогулок
Пичугин Дмитрий
Виталий, благодарю за комментарий!

Русские сообщества я однозначно находил… и однозначно тут же их отсеивал. Если есть возможность изучать что-то в оригинале, то зачем нужен перевод? К вопросу, почему видео а не статьи – мне формат видеокурсов наиболее импонирует, потому что лично мне это более удобно и понятно. В статьях обычно опускаются многие неочевидные моменты, которые опытный человек, пишуший статью, воспринимает как само-собой разумеющееся и не требующее вообще никаких разъяснений. Статьи и коммьюнити очень хороши, но уже после того, как ты «переступил» эту самую первую ступень и примерно понимаешь что к чему. Как я написал в тексте, где-то после 2/3 видеокурса я переключился именно на форумы/статьи/коммьюнити.

Про разделение отзывов — да, известная (если не сказать изъезженная) идея, есть в нашем роадмэпе, спасибо)
Ответить
DEVLAB Studio
Разработка программного обеспечения без посредников (полный цикл)
Подольский Виталий
Дело ваше. Я прокомментировал и сказал, что считал нужным, как вы поступите, меня в принципе волновать не должно.

Про разделение отзывов отметил лишь потому, что читал призы Юлии в ее версии истории оставлять любые отзывы.
Ответить
Екатерина К
Виталий, книга, о которой я говорила - это всего лишь введение в программирование под ios для полных чайников, то есть для тех, кто никогда не программировал под ios. Эта книга не про свифт и не про Xcode, она - введение. Как старт подходит отлично. Я никогда не говорила, что одной такой книги достаточно. Нужно читать другие книги и документацию по свифту, нужно разбираться, писать приложения самому, и только тогда вы сможете стать программистом под ios. Мне очень жаль, что вы вырвали название книги из контекста и перевернули смысл моего послания.
Также точно и Дмитрий рассказывал, как он знакомился с этой средой программирования, вовсе не простой, и Udemy - вполне хороший старт. Старт! Никто не говорил, что не надо читать доки и что этого старта достаточно.
Ответить
Denis Raguzov
Ну вот, и 80% пользователей смартфонов (то есть те кто на Android) остались за бортом.
Ответить
Сергей 64465
Вы как то монетизируете свое приложение?
Ответить
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.