Я работаю консультантом по программному обеспечению в 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 доступен здесь. Я также сделал быстрый веб-сайт для острых ощущений от этого здесь.
Особая благодарность Аде Стенстад, Эйрику Рате, Мари Альтерсвед и Кристине Бьерке за чтение моих черновиков и ценные отзывы :)