Разработка и защита проектов — важная часть всех курсов GeekBrains. Некоторые подобные проекты «умирают», как только заканчивается стажировка (или даже раньше). Но есть и те, развитие которых не останавливается вместе с курсом, они продолжают обрастать функциональностью и приносить пользу целевой аудитории.
Один из таких проектов ― приложение Financy.st (требуется регистрация, но демо можно посмотреть в видео ниже). Мы поговорили с его разработчиками — Александром, Артёмом, Романом и Денисом, ― и выяснили, как организовать работу, придерживаясь идеи и не теряя энтузиазма.
— Как возникла идея и команда?
Александр: Идея создания простого приложения для финансового учёта была у меня давно. Все, которыми я пользовался, были сильно перегружены функциями, требующими дополнительных действий: обязательный ввод дат, категорий, определение лимитов и прочее. В итоге для учёта расходов я использовал таблицу в Google Docs, на шаблон которой наткнулся где-то в интернете. Но и тут возникли сложности: было необходимо создавать каждый месяц новую страницу, организовывать быстрый доступ на всех устройствах, переключать ячейки для занесения доходов и расходов.
Так что однажды я просто сел за компьютер, чтобы создать что-то удобное.
Над выбором языка не задумывался: JavaScript, на мой взгляд, идеально подходит для решения таких задач. Несмотря на то, что моя основная профессия связана с тестированием и я уже сталкивался с разработкой кода, при создании даже базовых функций приложения я тратил уйму времени на ликбез по языку и фреймворкам. В итоге, когда я добрался до асинхронности, терпение лопнуло, и я начал искать курсы по fullstack-разработке. Так я попал в GeekBrains.
Артём: Изначально на стажировке нас должны были поделить на две группы с символическими именами: Yellow и Purple. Каждая должна была придумать, разработать и защитить собственный проект. Сначала я оказался в жёлтой команде. Но вскоре ко мне обратился Александр, собиравший третью команду (позднее получившую название Cyan), и предложил поучаствовать в разработке финансового приложения. Идея показалась интересной, команда тоже собралась отличная, так что я c радостью «переметнулся». Тем более, здесь я мог в большей степени сосредоточиться на фронтенде.
Роман: Идея Александра пришлась мне по душе: она была понятная и продуманная. К началу учёбы в GeekBrains у меня уже был опыт бэкенд-разработки. Поэтому, влившись в команду Cyan и обсудив с коллегами все основные позиции, я предложил создать «фундамент» приложения.
Денис: У меня, в отличие от Романа и Александра, из опыта в IT был только школьный курс информатики. Но я максимально активно вёл себя на занятиях, много спрашивал, и, наверное, благодаря этому меня позвали в команду, где я сосредоточился на фронтенде.
Александр: Изначально в команде нас было девять. Пожалуй, только один человек внёс совсем незначительный вклад и бесследно пропал в самом начале. Остальные восемь сделали то, что вы видите сейчас. Правда, до финиша дошли только четверо, но было бы неправильно говорить, что приложение ― только наша заслуга.
— Как распределили роли и выбрали технологии?
Артём: С выбором языков и технологий разработки метаний не было. Чтобы практическая часть обучения приносила пользу, мы постарались захватить максимум материалов курсов: MongoDB, Express.js, React.js, Node.js. В качестве тимлидов выступали Александр, как автор идеи и отличный организатор, и Роман, как человек, который понимал в разработке больше всех нас.
Роман: При этом у нас не было чёткой иерархии или директив, такого, чтобы Александр придумал задачу, я сказал, как её сделать, и всё отправили на исполнение, к примеру, Денису. Все моменты обсуждались в команде, каждый высказывал свою точку зрения, выбирал, что ему больше по душе. Самое ценное, что нам удалось создать в этом проекте ― рабочую атмосферу и полное взаимопонимание.
Денис: Чтобы лучше понимать друг друга, при первой же виртуальной встрече мы честно рассказали о своих сильных и слабых сторонах, желаниях и ожиданиях, поэтому дальше вполне успешно распределяли роли. Я, к примеру, взялся за фронтенд, потому что в части бэкенда познания были очень общие.
Александр: Некоторые из нас ещё и выступали в роли менторов. К примеру, у меня возникли сложности с библиотекой Redux, я даже второй раз прошёл соответствующий курс и прочитал уйму дополнительной документации. Помощь я нашёл внутри команды ― Роман на конкретных примерах смог доходчиво объяснить, как всё работает.
— Как организовали работу?
Александр: Хотя у меня в голове уже было представление, как должно выглядеть и работать приложение, мне хотелось визуализировать это и обсудить с командой.
По совету куратора курса, Олега Шикова, мы стали распределять задачи в Trello. В самом начале больше недели потратили на определение внешнего вида приложения, его структуры и функциональности, не прибегая при этом к коду. С этим нам помог сервис Diagrams.net. После этого мы создали список задач, который постоянно дополнялся, и оттуда каждый брал то, что было по душе. Мой опыт работы ведущим инженером по автоматизации тестирования помог правильно организовать разработку, чтобы никого не оставить в стороне и не перегрузить.
Артём: Большую часть задач создавал и делегировал Александр, но порой мы и сами проявляли инициативу. Иногда это выходило боком. Так, однажды я взял задачу разработки одного из блоков статистики. Она была на один день, но я возился дней пять, ещё и на фронт потратил время. Самое забавное, что после этого многое пришлось переписать.
Роман: Добавлю, что для обсуждения деталей мы устраивали голосовые встречи через Discord, а для распараллеливания работы применяли GitHub. Позднее в ходе разработки думали сменить связку Trello и GitHub на GitLab, но решили не тратить и без того дефицитное время.
– Что было самым сложным?
Артём: Задачи были хорошо проработаны, и вопросов, как выполнять их, возникало мало. Каждый из нас брался за то, что понимает, ― или сразу просил помощи у коллег. Сложнее всего было бороться с усталостью. Как уже верно заметил Роман, приходилось выделять уйму времени в своём и без того загруженном графике. При этом надо понимать, что мы не профессионалы, поэтому иногда слишком увлекались и уходили в сторону, тратили часы на создание самых простых компонентов, совершали глупейшие ошибки, которые не так быстро можно исправить.
Александр: Вспоминаю сутки перед защитой проекта. Всю ночь я допиливал какие-то функции, иногда просто ставил заплатки, чтобы успеть. После этого ребята проверяли и сообщали, что часть моих исправлений не работает, приходилось искать, где, что и почему. В общем, потратил уйму нервов. Впрочем, когда на защите мы узнали, что одна из команд не успела подготовить проект, а другая представила его в достаточно сыром виде, почувствовали гордость за наши старания.
Денис: Соглашусь с коллегами, что сложнее всего было разобраться с конкретными моментами кода и уложиться в отведённое время. На работу над приложением я тратил не менее восьми часов в неделю. Не так мало, если учесть, что есть ещё семья, работа, а у кого-то ― и подработка.
Роман: Да, самое сложное ― уложиться в поставленные сроки. Кому-то может показаться, что на создание такого приложения не нужно много времени, но поверьте, это совсем не так. Здорово, что у нас сложилось такое дружное ядро из четырёх человек, и мы не подводили друг друга даже в моменты, когда жизнь за пределами GeekBrains отнимала всё свободное время.
— Насколько вам помог курс GeekBrains?
Александр: Сложно переоценить важность курса в контексте проекта. Во-первых, благодаря ему мы стали командой. Во-вторых, многое из того, что прошли на курсах, мы использовали в приложении. В-третьих, мы получили именно тот объём знаний, на который рассчитывали, записываясь на курс. А это самое важное.
Роман: После окончания курсов я понял, как надо вести разработку. Кроме того, у меня остались шаблоны, в том числе для нашего проекта.
Артём: Мне очень помог курс по React: сам фреймворк пришёлся по душе. И именно на нём было создано наше приложение.
Денис: Соглашусь с коллегами. Представьте: девять человек оказываются на курсе, у большей части нет понимания кода, разработки приложений, а через несколько месяцев они вместе создают интересный продукт. Конечно, без курса это было бы куда сложнее.
— Какие скилы вы получили во время обучения и разработки?
Александр: Всё, что можно ожидать от курса fullstack-разработки: языки, фреймворки, функции, вариативность подходов, отладка ― всё это прокачалось на очень хорошем уровне. И, конечно, опыт работы в команде. Одно дело ― организовывать работу людей очно, когда действия каждого ты можешь контролировать в режиме реального времени. И совершенно другое ― в онлайне, среди таких же новичков в разработке, как и ты сам.
Артём: Для меня самым важным оказалось получение hard skills. Теорию каждый может легко найти в интернете, но без реальных и конкретных задач она не имеет значения.
Роман: Я получил опыт создания визуальной части API с использованием Swagger, а также закрепил знания в связке Node.js + MongoDB + Mongoose и настройке Docker.
Денис: Важнейшее для меня ― именно работа в команде над конкретными задачами. Ведь любому работодателю нужен реальный опыт разработки ― и он у нас появился благодаря проекту приложения.
— Какие планы на проект в дальнейшем?
Александр: Даже в текущей версии проекта есть что доработать, чем мы и займёмся в ближайшее время. В перспективе хотелось бы добавить возможности по работе с разными видами финансов, например, вкладами, акциями и ценными бумагами. Реализовать это в форме отдельных модулей, привязать данные бирж, что позволит пользователям эффективнее взаимодействовать с финансами, проверять информацию бизнес-консультантов. В общем, идей множество, будем думать, как их реализовать.
Артём: После окончания курсов мы собрались и решили, что всем нам в той или иной степени будет интересно участвовать в дальнейшем развитии приложения. Так что будем продолжать сотрудничество.
Деморолик приложения Financy.st
— Что бы вы посоветовали будущим студентам GeekBrains?
Александр: Важно переходить к стадии разработки проекта со сформировавшейся идеей будущего приложения. Я видел, как команды Yellow и Purple тратили массу времени и усилий на то, чтобы придумать что-то оригинальное и интересное, утопая в количестве идей.
Роман: Много времени уделяйте учёбе, не стесняйтесь спрашивать, уточнять, читайте дополнительные материалы, ищите информацию. К началу стажировки и созданию проекта вы уже должны хорошо владеть предметом. Ведь если захотите остаться в профессии ― именно работа над проектом будет индикатором того, насколько вы готовы к IT-сфере.
Артём: Работайте как команда: слушайте друг друга, находите наиболее рациональные решения, грамотно распределяйте задачи. Даже если в итоге вы не создадите что-то крутое, вы гарантированно получите удовольствие от процесса разработки и работы в команде. Это гораздо важнее.
Денис: Главное ― не бояться нового, браться за задачи, которые кажутся комплексными. Нет ничего страшного в том, чтобы самостоятельно погружаться в изучение темы, просить помощи у коллег и преподавателей. По-моему, это единственный способ добиться успеха.
Хотите узнать о других студенческих проектах GeekBrains? Вот их истории:
- Перевод динамического контента в Django. Рассказ Максима Столпасова о его финальной разработке на Python-факультете Geek University.
- Сервис Promoholder. Рассказываем историю создателя Promoholder Даниила Егорова и заглядываем под капот его проекта.
- «Сделал прототип шутера с мультиплеером и ядерными взрывами». Алексей Козлов из GeekSchool — о своей первой игре на Unity, сборе команды разработки и будущих проектах.