Я работаю консультантом по программному обеспечению в Capra Consulting в Осло, Норвегия. Ударь меня, если хочешь узнать о нас больше!

Я редко публикую рассказы. Я к этому еще не привык. Иногда я публикую несколько проектов на GitHub. Однако через несколько дней после создания проекта, на который я ссылался в названии, я понял, что у меня есть несколько мыслей по этому поводу, которые я хотел бы перенести из головы на бумагу - и вот мы.

Это история о моем отношении к постоянно меняющейся технологической среде, о моем опыте работы, о моей встрече с платформой как услуга (PaaS) Google Firebase и о том, как я, не планируя этого, создал платформу для совместной работы и общения в реальном времени, которая практически бесконечно масштабируем.

TL; DR; Если вы хотите пропустить часть, не являющуюся строго технической, вы можете перейти к разделу «Платформа - давайте перейдем к деталям».

Код этого проекта доступен здесь.

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

Я был немного разочарован пару лет назад, когда казалось, что каждая новая методология, фреймворк или библиотека внезапно казались окончательным путем. Вам пришлось отказаться от инструментов, в которых вы были уверены, - если вы не хотели «отставать». Мне было всего двадцать лет, у меня было десять лет увлечения и профессионального опыта в качестве разработчика, но я уже чувствовал, что отстаю. Я просто не успевал за темпами Интернета. Но как я часто ловил себя на мысли: можно ли успевать за всем, когда миллионы ярких умов соревнуются за создание технологий завтрашнего дня?

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

Когда я узнал больше всего? От веселья.

Мне повезло с моим интересом к компьютерам и компьютерному программированию. Это началось, когда мне было около восьми лет, когда я наткнулся на руководства по VB6 - Visual Basic 6 на YouTube. Мой технически заинтересованный отец помог мне освоить книги «Основы визуального программирования для чайников», которые я принес на семейные каникулы. С помощью Visual Basic вы можете не только автоматизировать свои книги Excel, но и создавать терминальные и графические приложения для Windows!

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

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

Я так часто развлекался. Жизнь была простой. Я ходил в среднюю школу днем ​​и занимался программированием для развлечения. Выбор технологии не был столь критичным, и я просто пошел с чем-то, потому что это было круто. Я чертовски многому научился на этом.

Сотни проектов спустя и визит ИТ-отдела в офис, где работал мой отец, я быстро понял, что если я захочу позже зарабатывать деньги в этой профессии, мне придется выучить более способный язык, такой как C # (который они там использовали).

Это отправило меня на путь, который привел меня туда, где я нахожусь сегодня. Примерно десять лет назад я начал развиваться более или менее ежедневно. Хотя я принадлежу к поколению, в котором технологии были легко доступны, я был свидетелем многих событий с технической точки зрения. Многие из терминов, которые мы используем сегодня ежедневно, поскольку разработчики и инженеры программного обеспечения не существовали или были не так популярны, когда я начал писать код, хотя я и молод. SaaS, PaaS, IaaS, Cloud и Serverless - все это концепции, которые действительно изменились за последние десять лет. Можно утверждать, что они существовали с начала 2000-х годов, но они не были так доступны широкой публике, как сегодня.

Проблема, которую нужно решить

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

Случай, каким бы нелепым он ни был, начался в офисе моего клиента, где я в настоящее время нанят в качестве консультанта. Мы здесь кучка общительных людей и часто вместе обедаем. Как бы нам ни повезло, у нас есть два разных кафе, одно внутри, а другое в здании через дорогу, где каждый день подают разные меню.

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

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

  • Информация о меню в обоих кафетериях должна быть доступна.
  • Клиент должен иметь возможность голосовать
  • Клиент должен видеть результаты голосования.

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

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

а) Поскольку мы все разработчики, это должно было быть чем-то близким к корням. Веб-сайт с красивым графическим интерфейсом не был бы достаточно крутым или интересным.

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

c) Его можно легко распространять и запускать на машинах других членов группы.

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

Платформа - подробнее

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

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

Аргументы в пользу выбора Node:

  • Каждый разработчик в команде установил его
  • Пакеты для всего. Внешняя поддержка практически всего.
  • Подключи и играй.
  • Чрезвычайно быстрое время разработки.

Я слышал, как другой разработчик в команде с любовью рассказывал о Firebase и о том, как легко с ее помощью создавать приложения в реальном времени. Не имея личного опыта с этим, я сначала подумал, что выберу что-нибудь еще для этого проекта, например, создание базы данных MongoDB или SQL. Однако в конце концов я попробовал Firebase, так как был в веселом настроении и хотел создать эту платформу как можно проще, дешевле и с минимальными затратами на обслуживание в будущем (управление сервером или базой данных всегда будет чем-то вроде дополнительной работы в будущее).

Аргументы в пользу выбора Firebase:

  • Я знал, что в других продуктах Google есть достойные библиотеки узлов, и предполагал, что они есть в Firebase (которые у них были).
  • Безболезненно установить и настроить. Без обслуживания. Конфигурации нет. Подключи и играй.
  • Согласно документации, интеграция в мое Node-приложение показалась мне довольно простой.
  • Разработчик в моей команде имел опыт работы с Firebase.
  • Это сделало бы мою программу «бессерверной».

Вероятно, на принятие решения повлияло и то, что я беженец Parse (BaaS - backend as a service). (Многие беженцы из Parse бежали в аналогичные службы Google после того, как Facebook приобрела Parse и впоследствии закрыла его.)

Началось кодирование. «npm init» был запущен. Через десять минут программа была подключена к Firebase. Святой - это был ветерок. Подключение к базе данных (база данных Firebase в реальном времени) добавляло одну зависимость и три строки кода. Еще пять линий, и я подключил его, чтобы все обновления в реальном времени отправлялись на устройство.

После пары часов кодирования первая версия клиента была готова. Теперь клиенты могли присоединяться, голосовать, просматривать меню и отправлять одно сообщение чата. На тот момент это была довольно простая программа, но фундамент был прочным, а концепция - мощной.

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

  • Журнал чата
  • Журнал входа / выхода пользователя
  • Несколько команд (голосование, сброс голоса, управляющие уведомления, команды администратора / хоста)
  • Уведомления о новых сообщениях

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

Заключение

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

Что я узнал

Хотя я кое-чему научился непосредственно из этого проекта, я также расскажу о некоторых вещах, которые я узнал в отношении тем, затронутых в этой статье. Я например узнал

  • Чтобы иметь более прагматичное отношение к новым услугам, платформам, концепциям и технологиям. Объединенные знания и опыт, полученные при работе с услугами и технологиями, создают прочную основу для оценки и понимания новых вещей.
  • Облачные сервисы позволяют любому - от частных лиц и малых предприятий до предприятий - разрабатывать решения, основанные на инфраструктуре, в которую раньше могли позволить себе инвестировать только крупнейшие предприятия всего несколько лет назад. И все это за относительно небольшую плату. Создание сложных, надежных и массовых продуктов никогда не было таким простым - сервис, который я создал в этом проекте, является демонстрацией этого.
  • Тот факт, что мне не нужно быть рок-звездой в каждой отдельной структуре, библиотеке и языке - достаточно рок-звезды, чтобы оценить новые альтернативы и (возможно) подобрать их.
  • Можно случайно создать полностью масштабируемое приложение, стремясь к максимально простому варианту.
  • Выполнение случайных проектов без предопределенной архитектуры или ограничений только потому, что вы находите это интересным или крутым, (на мой взгляд) чрезвычайно важно для изучения новых решений и поддержания вашего интереса к программированию и технологиям.
  • Создание программы для просмотра меню в кафетерии может превратиться в написание статьи на уровне 2000 слов.
  • Node классный. И Firebase тоже классная штука.

Проект Github доступен здесь. Я также сделал быстрый веб-сайт для острых ощущений от этого здесь.

Особая благодарность Аде Стенстад, Эйрику Рате, Мари Альтерсвед и Кристине Бьерке за чтение моих черновиков и ценные отзывы :)