15th Season of InterLink inCamp

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

Прикладное реактивное программирование

Еще на этапе индивидуальной подготовки мы сделали акцент на реактивном программировании в Angular. Ребята узнали, как разные операторы из набора Reactive Extensions (Rx) помогают эффективно обрабатывать события в браузере. А конкретно, мы сделали навигацию по списку проектов с параллельным отображением задач из текущего проекта. Эта, простая на первый взгляд задача, становиться гараздо сложнее, когда начинаешь делать ее хорошо:

  • Зажав стрелку вверх/вниз, подсветка текущего проекта должна переключаться со скоростью приблизительно в ½ секунды, чтобы пользователь успел отжать клавишу, дойдя до нужного проекта; 
  • Подсветить выбранный проект при клике мышкой мы должны сразу;
  • При этом получать список задач из проекта надо только после определенной задержки, иначе мы завалим сервер лишними запросами; 
  • И в итоге, список задач надо показать именно для проекта, который выбран сейчас. А не тот список, который пришел в последнем ответе от сервера. Если вы работали с асинхронными запросами в браузере (Ajax), то понимаете, о чем я ;).

Реактивщина для фана

Кроме прикладного использования Rx, у нас была и порция “для фана”. Ранее я подготовил несколько “чат ботов” из мира GoT. Они “агрились” на свое имя в чате и отписывали определенным образом. Так, я создал Ходора, и Джофри. А интерны добавили Дейенерис и Тириона. 

Несколько слов про Тириона:

  • Он готов пить, когда трезв;
  • От одного бокала пьянеет на минуту;
  • После каждого третьего бокала рассказывает шутку. 
import {Observable} from “rxjs”;

import {delay, map, tap, throttleTime} from “rxjs/operators”;

const jokes = [‘That’s what I do. I drink, and I know things’];

let times = 0;

 

function impDrink(message$: Observable<string>): Observable<string> {

 return message$.pipe(

   delay(500),

   throttleTime(60 * 1000),

   tap(m => times++),

   map(m => times % 3 === 0 ? jokes[0] : ‘I am drunk’)

 );

}

Код Джофри сложне и интересней, но вдруг вы еще не смотрели сериал, а планируете… Не буду спойлерить :). Вот ссылка для тех, кто в теме https://gitlab.in6k.com/meetup/rxjs-chat-bot/blob/master/src/bots/joffrey.bot.ts

Подружить двоюродных братьев

В качестве короткого финального проекта на закрепление материалов первого месяца и тест-драйв командной работы я выбрал необычное задание. Мы взяли два самостоятельных проекта. Первый – индивидуальный проект Вовы Полищука из 13 сезона inCamp. Это построение плана развития специалиста с отслеживанием прогресса. Второй – приложение 3-го набора практикантов, платформа для онлайн тестирования знаний на выбранные темы. Задачей интернов было добавить возможность из плана развития переходить на прохождение онлайн тестов по выбранной теме. А из системы тестирования передавать статистику прохождения тестов назад, для отображения общего прогресса в плане развития. И им это удалось :).

Микросервисы… или просто сервисы

Начиная работу над новой версией HR системы с предыдущей группой интернов мы планировали использовать (микро)сервисную архитектуру. Но на тот момент у нас был всего один сервис. С новой группой мы продолжили все делать в монолите и постепенно разделять на три сервиса. Над этим работали Вова Хандюк и Саша Ролько. Вот что у нас получилось в результате:

🔐  auth

  • выдает пользователям JWT токены
  • хранит информацию про роли и права пользователей

👨 contractors

  • каталог всех контракторов
  • хранит перечень отделов и должностей
  • позволяет управлять связью менеджер – “подчиненный”

✈️ leaves

  • подача заявлений на отпуск
  • подтверждения отпусков менеджерами
  • расчет баланса отпусков

Код ревью и конвеншены

В ходе спринтов и демо заказчику, а также код ревью, мы обнаружили несколько типичных проблем. А именно:

  • Завершенные задачи не всегда соответствуют требованиям, а интерфейс пользователя ожиданиям;
  • Не оптимальные решения в API наших UI компонентов и REST endpoint на backend стороне; 
  • Разное форматирование кода. 

Какие мы приняли меры для устранения проблем:

Чек лист по выяснению требований

Мы завели чек-лист по которому идем перед тем, как взять пользовательскую историю на спринт. 

  1. Прояснить сценарии использования и ценность истории для конечных пользователей системы у самих пользователей: HR и project менеджеров; 
  2. Подготовить прототипы пользовательского интерфейса;
  3. Согласовать прототипы с консультантом по UX. В нашем случае это сам заказчик.

Чек лист перед началом работы

Для соответствия технической реализации хорошим практикам мы ввели чек лист по предварительному согласованию деталей реализации с техническим ментором. Вот последовательность шагов:

  1. UI компоненты. Их названия, структура и API;
  2. Модели данных. Названия полей и их типы; 
  3. REST API. Путь, метод, структура тела запроса и ответа;
  4. DTOшки;
  5. Структура базы данных;
  6. Интеграция с другими сервисами.

Линтеры

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

Дальше – больше

С каждым набором интерны получают все больше практического опыта в трендовых подходах. С последними двумя группами мы углубились в реактивное программирование. Текущая группа начала свое знакомство с микросервисной архитектурой. Со следующим 16 набором мы продолжим работать с нашей HR системой. Помимо уже наработанных практик прошлых наборов, новых интернов ждет погружение в микросервисныю архитектуру. Мы будем создавать новые сервисы, внедрять шаблоны их взаимодействия и займемся микро фронтедами. Не упустите шанс стать интерном 16-го набор Interlink inCamp и открыть для себя путь к Junior Fullstack Web Developer в InterLink! Регистрируйтесь уже сейчас http://bit.ly/interlink-incamp ;).

P.S.: на интернатуре мы еще и развиваем soft skills и весело проводим время

В процессе программы подготовки, интерны каждую неделю знакомятся с ролями и отделами в компании или играют в развивающие soft skills активности. Некоторые из игр послужили не только хорошей практикой коммуникации, но и источником отличных рофляных фоток для аватарок :):

 

Еще один бонус летней интернатуры – выезд загород на наш, уже традиционный, Tech Talk and Knowledge Sharing Day. 

Ну и конечно же, был отдых – вечерние пятничные посиделки за настолками в InterLink – Tabletop.

Post A Reply