Уроки, которые я извлек из моего первого полномасштабного приложения

06.05.2020
Posted in blog-article
06.05.2020 admin

Уроки, которые я извлек из моего первого полномасштабного приложения

Если у вас мало опыта в какой-либо сфере и вас не берут даже не стартовые позиции, то лучший выход — попробовать заняться своим проектом. Делимся с вами историей разработки приложения с целью прокачки скиллов 💪🏻

8 месяцев назад я начал разрабатывать приложение Electron. Чтобы выполнить эту задачу, мне пришлось создать 3 отдельных вложенных приложения для работы в разных средах. Вот уроки, которые я усвоил во время работы над этим проектом:

Предыстория

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

Я начал просматривать свои проекты, чтобы найти что-то, что я мог бы преобразовать, что могло бы стать достаточно большим и сложным, чтобы погасить мой драйв. Наконец, я остановился на Binder, который в то время был просто веб-приложением для управления файлами Onedrive, Google Drive и Dropbox одновременно. Цель состояла в том, чтобы создать службу резервного копирования, сопоставимую с вышеуказанными службами, за вычетом части обмена файлами.

Путешествие только начинается

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

Я остановился на разработке 4 индивидуальных приложений. Первым стал клиент для запуска на пользовательском пк, вторым — сервер API для облегчения защищенных запросов, третьим — облачная утилита для обеспечения целостности всех хранящихся данных, и наконец, «маркетинговая» веб-страница, потому что каждый продукт нуждается в ярком веб-сайте. 😁

Уроки, которые я извлек из моего первого полномасштабного приложения, изображение №2

Вот и хорошая часть

Ладно, ладно, да. Все, что было до этого, не имело никакого отношения к Electron, не говоря уже о крупномасштабной разработке приложений. Но мне нужно было добавить контекст, чтобы вы поняли источник моего обучения. Вот 5 основных уроков, которые я усвоил:

#1 Убедитесь, что вы используете традиционные frontend/backend структуры, потому что IPC глупо

Слишком много раз я закатывал истерику из-за того, насколько приземленной является межпроцессная коммуникация в Электроне (и я собираюсь закатить еще одну). Конечно, IPC, возможно, не был разработан для выполнения абстракции типа javascript, вместе с передачей функций как объектов и тому подобного. Но это, конечно, помогло бы, если бы это было так! Вместо разработки тонкого «клиента», когда основная часть моего кода находилась бы в основном процессе, я должен был провести строгую границу между тем, что было обращено к пользователю, и тем, что не было. Я определял, что будет в основном процессе и что будет в рендере, благодаря простому вопросу: предоставляет ли этот код услугу? Размер кода не имел значения. Если он обслуживал другие части кода, он входил в основной процесс. Единственным исключением из этого правила была конечная точка Stripe payment, которая по соображениям безопасности должна была находиться как можно ближе к пользователю.

#2 очень, очень трудно убедиться, что данные сохраняют свою целостность

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

Конечно, я немного преувеличиваю, но моя точка зрения все еще остается в силе. Валидация должна происходить как можно раньше и повторяться (в меньшей степени) по всему потоку данных. Поддержание согласованности можно упростить, применяя транзакционную модель при каждом изменении данных. Истина в том, что есть много метаданных, которые приходят вместе с реальными данными, и управлять ими только немного легче. Мне всегда казалось хорошей идеей просто создать функцию, которая считывает данные пользователя и выполняет проверку целостности. Но после долгих размышлений я, наконец, понял, что back-end ничем не отличается от front-end, и все, что изменилось, — это то, кто им пользуется.

#3 относитесь к своему UI как к паре кастомных кроссовок

Уроки, которые я извлек из моего первого полномасштабного приложения, изображение №3

Отличный способ создать красивый, функциональный пользовательский интерфейс — смотреть на него как на пару кастомных ботинок (или сшитый на заказ костюм, или что угодно, это не имеет значения). Первый вопрос, который я задал себе при проектировании, был: кто будет смотреть на пользовательский интерфейс Binders? Обратите внимание, что я не сказал, кто будет использовать пользовательский интерфейс. Это должно быть вашим вторым вопросом, потому что внешний вид — это все. Я работал над большим количеством проектов в прошлом, и я могу сказать вам с полной уверенностью, что никто не и не почешется о вашем приложении, если оно не выглядит должным образом.

Я начал с небольших набросков в блокноте (которые я делал ручкой, потому что всегда сомневался в себе). Мои первые эскизы подчеркивали общую компоновку интерфейса, и по мере того, как я рисовал больше, я вырезал то, что я хотел, чтобы детали каждой «страницы» выглядели так. Для меня сделать информацию проще для восприятия важнее, чем сама информация.

Уроки, которые я извлек из моего первого полномасштабного приложения, изображение №4

#4 невозможно чересчур перестраховаться

Честно говоря, я не знаю, как вы, но мысль об ошибке в моем API после того, как я получил платеж, вызывает у меня беспокойство. Когда я запустил платежный сервис, я сказал себе: “нельзя допустить, чтобы какая-то ошибка осталась незамеченной”. Я заставил себя реализовать fail-safes везде с момента получения API запроса на покупку плана до тех пор, пока Stripe не уведомит webhooks приложения, и они активируют план. Эта паранойя, конечно, замедляет процесс моего развития, но я ни о чем не жалею. Я точно знаю, когда отправляются платежи, за что они посылаются и в каком состоянии должны быть предприняты какие-либо действия после этого.

#5 нормально быть несовершенным

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

Двигаясь вперед

Молодец, ты прочитал весь мой пост и, может быть, заметил, а может быть, и нет, но Binder не полностью завершен. На момент написания этой статьи я только что опубликовал свой первый публичный релиз (бета-версия 4). У меня мало намерений превращать Binder в полноценный продукт, однако я разработал его как реальный продукт, просто на случай свершения моих амбициозных планов. Вы можете проверить мою веб-страницу прямо здесь.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Contact

Давайте работать вместе!

Пишите нам и найдем точки соприкосновения, может станем партнерами, а может поможем вам зайти в нашу чудесную нишу

Вы разработчик?

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

Новичок?

Поможем быстро войти в нишу, не тратя годы на понимание

Давно в нише?

Рады будем пообщаться как на темы whitehat, так и blackhat тематики ^_^ + всегда есть что обсудить по поводу рекламных сетей

ПИШИ В TELEGRAM!

Contact