И я имею в виду *фактически* строить, а не просить ChatGPT строить
Забавно, куда можно попасть, следуя своему любопытству.
В конце 2021 года, когда мне было немного скучно, я нашел бесплатное руководство по программированию на Python и подумал: почему бы и нет?
Менее чем через год после того, как я написал свой первый Hello, World и работал над проектом неполный рабочий день, я запустил свое приложение Kava в App Store и Play Store. У меня довольно приличная пресса. И он растет. Вроде.
Это мое путешествие. Хорошие, плохие, отрывки-вопли-вырывающие-на-волосы-почему-ты-внезапно-перестали-работать-ты-дерьмо-биты.
Если вы думаете о том, чтобы сделать что-то подобное, сядьте на несколько минут и прочитайте это.
Шаг 1 — Учитесь бесплатно
Я начинал с нуля, с нулевым опытом программирования (если не считать полсеместра C в колледже более 20 лет назад).
Поэтому сначала я прошел несколько бесплатных онлайн-курсов, включая Введение в Python, Python для всех и Django для всех от Udacity.
Я прошел еще несколько руководств, выполнил несколько задач по кодированию на таких сайтах, как Codewars, и создал несколько парсеров на основе вакансий фрилансеров, которые я видел на Upwork, но я быстро решил, что действительно хочу создать что-нибудь, а не просто писать небольшие фрагменты или воссоздавать простые примеры проектов.
Шаг 2. Вернитесь к идее, которая крутилась у меня в голове
Пока я мечтал в кафе в Хорватии, мне пришла в голову идея приложения. Что-то, что помогло бы мне найти лучшие специализированные кофейни, где бы я ни путешествовал. Я представлял его как приложение для социальных сетей старой школы, место, где можно оценивать кофе, делиться этими оценками, комментариями и фотографиями с друзьями и другими любителями кофе.
Что-то вроде Untappd, но для спешелти кофе, а не для крафтового пива.
Некоторые поиски выявили несколько других специальных приложений для кофе, но ничего из того, что я хотел.
Итак, в марте 2022 года, стремясь приступить к работе над реальным проектом, я вытащил свой дневник и начал набрасывать план приложения. Что бы это сделало? Как будут храниться данные? Как будет выглядеть пользовательский интерфейс?
На этом этапе я просто хотел построить что-то вроде учебного проекта, а не реального бизнеса. Я подумал, что это звучит круто, и это было примерно столько оправданий или исследований, сколько мне было нужно.
При этом я проигнорировал собственный совет. В старой статье я бойко посоветовал потенциальным предпринимателям:
Создайте фан-клуб, прежде чем делать что-то еще. — Я, октябрь 2021
Вместо того, чтобы создавать целевую страницу для сбора адресов электронной почты и создания подписчиков в социальных сетях, я сделал именно то, что всегда советовал людям не делать. Я начал создавать свой продукт с нулевым числом поклонников или последователей.
Не вернется ли это позже, чтобы укусить меня за задницу? Возможно, но мне не терпелось начать, и ничто не могло меня удержать.
Шаг 3. Определитесь с техническим стеком для олдскульного приложения для социальных сетей.
Как полный новичок, мне нужно было, чтобы технический стек был простым в освоении и быстрым в разработке, а множество ресурсов, библиотек и фреймворков помогало мне в этом.
Кроме того, я хотел что-то, что можно было бы легко масштабировать. На ранних стадиях это был просто тренировочный проект, но в глубине души я думал, что если он перерастет во что-то действительно полезное, мне понадобится какой-то способ запустить его в производство и соответствующим образом масштабировать.
Вот технический стек, который я выбрал:
Серверная часть — Python/Django/PostgreSQL
Поскольку я уже изучил Python и Django, они были естественным выбором для серверной части, поскольку они быстрые, масштабируемые и безопасные. Django абстрагируется от большей части базы данных, но я выбрал PostgreSQL, так как он казался де-факто выбором базы данных для большинства приложений Django.
Позже я включил Celery и Amazon SQS для асинхронного планирования задач. Я выбрал SQS, потому что он оказался более совместимым с выбранной мной платформой облачного хостинга по сравнению с другими вариантами, такими как RabbitMQ или Redis.
Интерфейс — шаблоны Django/HTML/CSS/JavaScript
Я хотел, чтобы приложение имело очень простой, олдскульный вид, поэтому мне не нужно было ничего слишком сложного, и рендеринг шаблонов Django на стороне сервера хорошо работал для этого, дополненный небольшим количеством JavaScript.
Поскольку я уже использовал CSS-фреймворк Bulma во время Руководства по настоящему Python, я решил придерживаться его, так как мне понравился чистый внешний вид, простой синтаксис и адаптивный подход для мобильных устройств.
На этом этапе я ничего не знал о SPA или React — или подобном — но в любом случае это означало бы изучение целого ряда новых вещей и задержку процесса разработки.
Простой олдскульный интерфейсный стек был заперт.
Приложения — PWABuilder
Небольшое исследование показало, что для разработки приложений для iPhone и Android мне, вероятно, потребуется изучить больше языков, чем только Python. Но в идеале я хотел иметь дело только с одной кодовой базой. Учитывая, что я только начал изучать один язык, мне не хотелось учить еще целую кучу других новых языков.
Я решил начать с того, что сначала создам его как веб-сайт, а затем возьму его оттуда. Однако дальнейшие поиски показали, что можно преобразовать веб-сайты в кроссплатформенные приложения под названием Progressive Web Apps.
Я быстро остановился на этом пути, потому что, несмотря на определенные ограничения, он позволил бы мне просто создать один адаптивный веб-сайт, который будет работать в настольных и мобильных браузерах, а также иметь приложение, устанавливаемое в браузере.
Это откровение было достаточно захватывающим, но потом я узнал, что можно упаковать PWA для распространения через Google Play Store и Apple App Store с помощью PWABuilder.
Технология все еще является экспериментальной, и не гарантируется, что она будет построена правильно или будет одобрена повелителями App Store. Тем не менее, это стоило того, чтобы попробовать. Я всегда мог бы подумать о разработке полноценных нативных приложений в будущем, но, по крайней мере, у меня было бы что-то, с чего можно начать.
Облачный хостинг — Платформа приложений DigitalOcean
После оценки нескольких вариантов я решил использовать DigitalOcean App Platform, так как он отвечал всем требованиям с точки зрения простоты и относительной дешевизны для начала работы, а также имел в виду масштабируемость, если что-то пойдет не так.
У него также есть отличная поддержка, которая, как я понял, мне, вероятно, понадобится, когда я только начинаю (конечно, я это сделал).
Шаг 4 — Сядьте (желательно в кофейне) и закодируйте эту чертову штуку
После того, как я набросал модели данных и пользовательский интерфейс на бумаге, пришло время приступить к кодированию.
Процесс развития
У меня была грубая идея процесса разработки, но, по сути, я просто построил ее постепенно, начиная с самых основ, таких как регистрация пользователей и аутентификация, прежде чем перейти к созданию рейтинговой системы, обработке изображений и интеграции с Google Maps для интерактивной карты.
На каждом этапе я начинал с самого простого подхода, а затем совершенствовал его.
Например, при работе с частью интерактивной карты, первая итерация представляла собой простое представление списка со всеми кофейнями. Когда я освоился с JavaScript, я смог разместить маркеры для всех этих мест на карте, а затем уточнить ее, извлекая только кафе в границах карты на основе местоположения пользователя. И, наконец, динамическое получение новых маркеров или создание информационных окон по мере того, как пользователь изучает карту и каждое местоположение.
Этот итеративный подход заставил меня почувствовать, что я всегда делаю успехи по мере того, как я учился, и поощрял меня продолжать идти вперед.
Тестирование (или его отсутствие)
Я провел очень мало формальных тестов. Тестирование также является областью, которая, как правило, игнорируется большинством руководств и курсов по кодированию, поэтому я буквально не знал, как включать тесты в свой код.
Кроме того, поскольку я разрабатывал все это сам, я мог вручную протестировать каждый аспект, не беспокоясь о передаче сломанного кода кому-то еще. Приложение относительно простое, поэтому не так много много вещей, которые могут пойти не так, и с тех пор, как оно было запущено, у меня возникла только пара очень незначительных ошибок.
Я понимаю, что это не лучшая практика и может стать проблемой в будущем, но было важнее просто что-то сделать.
Шаг 5. Выпустите ребенка в мир
Доведение приложения до стадии, когда я мог выпустить его как PWA, заняло около 5–6 месяцев, хотя я работал над приложением только неполный рабочий день, и, конечно, мне пришлось изучать все с нуля. как я пошел.
Преобразование веб-сайта в PWA было очень простым с помощью PWABuilder — на самом деле требовалось только настроить JSON-файл манифеста шаблона и выбрать подходящее кэширование сервис-воркера и автономную стратегию.
Процесс сборки и выпуска для магазинов приложений был более сложным и занял около 6 недель, поскольку требуется несколько этапов тестирования, выпуска и утверждения. Не говоря уже о трудоемком процессе создания, казалось бы, сотен различных снимков экрана, необходимых в различных ориентациях и разрешениях для каждого устройства Apple.
Команда проверки App Store отметила пару небольших проблем с отображением, которые возникли на некоторых больших разрешениях iPad, чего я не ожидал, но, к счастью, после их исправления приложение было одобрено для обоих магазинов приложений.
Это было там.
Шаг 6. Наименее любимая часть каждого разработчика-одиночки (маркетинг)
Я (сейчас) разработчик, а не маркетолог.
Я не силен ни в саморекламе, ни в какой-либо другой форме контента в социальных сетях. Чтобы усложнить ситуацию, я не хотел тратить деньги на рекламу.
Я надеялся, что если мне удастся привлечь к приложению пару сотен человек, оно постепенно начнет расти органически.
Я сказал, что буду говорить здесь не только о хорошем, но и о плохом. Плохо то, что надежды на мгновенную виральность меня озарили. Хотя у меня быстро появились первые несколько сотен пользователей, они не выросли так, как хотелось бы.
Еще.
Приложение еще молодое — ему всего несколько месяцев. Вот некоторые вещи, которые я нашел хорошо работающими:
- Освещение в прессе, в частности хорошая статья в Хорватии, один из ключевых рынков для приложения.
- Контент-маркетинг и использование авторитета домена того самого сайта, на котором вы сейчас находитесь, чтобы помочь повысить поисковый рейтинг контента блога приложения.
- Свяжитесь со специализированными кофейнями и любителями кофе напрямую в Instagram, чтобы пригласить их проверить приложение.
И вот что я намерен делать впредь:
- Обеспечить большее освещение в прессе.
- Поощряйте пользователей приводить своих друзей в приложение.
- Обратитесь за помощью к специалисту по маркетингу или подумайте о том, чтобы нанять соучредителя, чтобы улучшить маркетинговую сторону.
Запуск приложения — это не одноразовая вещь — это постоянный проект. И я намерен относиться к этому соответственно.
Мои самые важные уроки, только для вас
- Если вы начинаете писать код с нуля, помните, что все занимает больше времени, чем вы думаете. Мой второй проект приложения, над которым я сейчас работаю, был завершен в несколько раз быстрее, чем Kava.
- Это здорово, если вы просто хотите следовать своему любопытству, особенно если вы подходите к своей первой идее приложения как к учебному проекту.
- Ничто не идеально. Легко переживать, что как начинающий программист вы не сможете создать что-то столь же хорошее, как приложения, созданные «настоящими» командами разработчиков. Ну, вы, вероятно, не будете. Но это нормально. Ничто не идеально, даже (или, возможно, особенно) приложения, сделанные большими парнями.
- Да, есть некоторые решения, которые действительно могут ударить вас по заднице. Но вряд ли вам придется все выбрасывать и начинать заново. Как правило, вы можете уточнять и улучшать по ходу дела. Так что не затягивайте с принятием решений.
- Самые, казалось бы, тривиальные вещи могут занять больше всего времени. И наоборот, то, что внешне — или для обычного пользователя — может выглядеть как серьезные изменения, на самом деле часто может быть крошечной доработкой.
- Интеграция различных сервисов в производственную среду может быть сложной задачей. Например, включить Celery в мою локальную среду разработки было просто, но совсем по-другому в моей производственной среде.
- Если маркетинг вам не по душе, не делайте того, что сделал я, и подождите до конца, или избегайте этого, заставляя себя чувствовать себя занятым, возясь с вещами, которые представляют собой просто технические проблемы или приятные вещи. Разберитесь со своей стратегией и придерживайтесь ее.
Последние мысли
Создание и выпуск Кавы было одним из самых сложных, приятных и полезных дел, которые я когда-либо делал.
Да, временами это меня расстраивало, и да, есть вещи, которые я мог бы сделать лучше или сделал бы по-другому.
Но если у вас есть идея — даже если вы новичок — следуйте своему любопытству.
Вы никогда не знаете, куда это может привести вас.