Як я вчився бути Full Stack розробником і створювати проєкт з нуля за 7 тижнів

Всім привіт! Мене звати Микола Гречкін, я навчаюсь на 3-му курсі факультету інформаційних технологій, університет НТУ «Дніпровська Політехніка», та працюю Full Stack розробником у компанії Binary Studio. У цій статті я хотів би поділитися своїм досвідом навчання у Binary Studio Academy на Java треку.

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

Складнощі вибору навчання

Про Академію я дізнався у лютому 2021 року, коли натрапив на оголошення в Telegram про новий набір. У цей час я точно зрозумів, що хочу розвиватися у програмуванні. На жаль, університет не давав достатньо знань, а вчитися самостійно було дуже важко.

Це прозвучить дивно, але зараз в інтернеті надто багато інформації про те, як стати програмістом. Коли я починав вивчати мову програмування, я не міг зрозуміти, як правильно це робити. Хтось радив читати книжки, хтось — проходити курси, а хтось казав, що лише реальний досвід зробить з тебе розробника. Ця невизначеність дуже демотивувала, і в результаті я обирав не робити нічого.

Тоді я вирішив, що єдиним виходом для мене буде знайти курс зі структурованою програмою та бажано з розробкою реального проєкта. Я розглядав курси від різних IT-компаній, але часто бачив неоднозначні відгуки. Знайомі ділились, що лектори недостатньо часу приділяють студентам і завдання більше схожі на лабораторні роботи в університеті. Також я розглядав платні курси, але відгуки були ще гірші.

Тож я сильно зрадів, коли побачив навчальну програму, останнім етапом якої є написання проєкту в команді з іншими програмістами-початківцями, але під наглядом менторів. Це саме те, що я шукав.

Мої скіли на «вході» в навчання

Варто сказати, що на той момент у мене був невеликий досвід роботи з Java: виконання лабораторних робіт в університеті та розв’язання задач на Leetcode, а про веброзробку я не знав нічого.

Відбір складався з трьох етапів: онлайн тесту, трьох відеолекцій, домашніх завдань до них і співбесіди з HR компанії. Тест був складним і покривав багато різних тем, але мені вдалося набрати необхідну кількість балів і перейти до етапу лекцій. На проходження відеолекцій та домашніх завдань давали по три дні.

Справжнім сюрпризом було те, що в останній лекції потрібно було працювати з Javascript, єдине що я про нього знав — це назву. Врешті-решт, цей етап мені вдалося здолати і через два тижні після співбесіди я отримав листа, що мене зараховано до навчання.

Все по-справжньому

Формат навчання був як на справжньому комерційному проєкті. Перед стартом розробки, нам представили специфікацію проєкту — детальний опис того, як додаток має виглядати в кінці.

Ми мали два дейлі дзвінки з командою, де обговорювали, що кожен з нас зробив та планує робити далі. Також на них ми радилися, як правильно реалізовувати функціонал і кожен міг запропонувати ідею, як ми можемо покращити наш проєкт.

Завдання розподілялися за допомогою тікетів з детальним описом того, що потрібно зробити, які знаходилися на дошці Trello. Перед додаванням кожної зміни до репозиторію проєкту, код проходив рев’ю від менторів і тімейтів.

Кожен міг залишити коментар, якщо вважав, що якась частина коду написана неправильно або можна зробити краще. Після цього QA команда тестувала новий функціонал і якщо знаходили баги, тікет повертався до розробника з інформацією про те, що потрібно доробити.

Ще однією особливістю, що наближала процес до комерційного, були демо англійською мовою. Раз на тиждень ми представляли проміжну версію проєкту нашому product owner-у — розповідали, над яким функціоналом працюємо та показували його працездатність.

Підготовка до демо проєкту MindBridge

Наш проєкт — MindBridge, інструмент для створення контенту по-новому

Моя команда, яка складалась з п’яти розробників, двох QA і двох коучів, працювала над проєктом MindBridge. Це платформа, де користувачі можуть читати та публікувати статті на теми, пов’язані з розробкою, взаємодіяти з авторами, як у Github-ком’юніті. Сайт містить елементи соціальних мереж: юзери можуть створювати власні сторінки, додавати інформацію про себе, залишати коментарі, ставити реакції, підписуватися один на одного і, таким чином, стежити за новими публікаціями улюблених авторів. Також є функція пошуку статей за тегами або заголовком.

Вебплатформа MindBridge

Користувачі можуть створювати статті з використанням HTML або Markdown розмітки. Ми налаштували текстовий редактор, за допомогою якого можна змінювати колір та шрифт тексту, завантажувати зображення, відокремлювати абзаци або списки. Завдяки цим інструментам юзери мали можливість писати тексти у своєму неповторному стилі.

Інновацією нашої платформи MindBridge є можливість пропонувати свої варіанти правок у публікаціях інших користувачів. Після їх внесення створюється нова версія статті. При її перегляді зеленим кольором буде виділена інформація, яку запропонували додати до статті, червоним — те, що було змінено. Також під нею можна залишати коментарі.

Автор сам вирішує, прийняти чи відхилити правки. Різні версії цієї статті зберігаються, юзери можуть прослідкувати, як стаття виглядала одразу після написання, і як після внесення змін.

Я раніше не бачив, щоб можна було на популярних сайтах, таких як Medium, пропонувати автору виправити щось у своєму дописі. Github дозволяє вносити правки у код, можна відстежити, що за чим редагували, проте цей сервіс орієнтований більше на розробників програмного забезпечення. Ми це все об’єднали в нашому проєкті, і у нас вийшов такий собі Medium на батарейках з Github для ширшої аудиторії.

Ще однією особливістю нашої платформи є можливість зберігати цитати. Якщо читач натрапив на корисну частину коду або цікаву думку, він може виділити речення або абзац і додати його у список збережених. Цитати згодом можна переглядати, переходити на оригінальну статтю і перечитувати її ще раз.

Також користувач може отримати нагороду за активне користування платформою. Наприклад, учасник може відкрити відзнаку, якщо створить пост у себе на сторінці, прокоментує статтю, отримає фоловера або його публікація набере більш ніж 1000 лайків. Кожна з цих нагород має чотири рівні складності, і з кожним досягненням вимоги до завдання зростають.

Технології, з якими ми працювали

На бекенді ми використовували Java та Spring фреймворк. Було розгорнуто два середовища: staging, де QA команда могла протестувати функціонал, який ми створили, та production, куди прямували актуальні зміни після того, як всі баги знайдені та виправлені.

Основною базою даних слугувала Postgresql, Azure Blob Storage використовувалося для зберігання картинок, які користувачі завантажували для своїх статей. За допомогою фреймворку Oauth2 ми імплементували можливість реєструватися на порталі з використанням Facebook, Google та GitHub.

Також юзери могли користуватися пошуком статей за заголовком або тегами, цю фічу наша команда реалізувала з використанням Elasticsearch.

Фронтенд розробили з використанням технологій React, Redux, Redux-toolkit та Sagas. Для того, щоб користувачі могли отримувати повідомлення у реальному часі ми використовували Websockets.

Архітектура проєкту Mindbridge

Як я намагався стрибнути вище своєї голови і як виправлявся

Кожний день на проєкті для мене був викликом. Я ніколи не стикався з технологіями, які ми використовували під час розробки. У мене не було досвіду з Frontend і навіть основні принципи роботи з HTML та CSS довелося вивчати вже під час навчання тут. Я вмів використовувати Java для тривіальних задач, але не розумів, як влаштована серверна розробка, тож ці знання я також отримував на ходу. Звичайно, є куди рухатись, але мені здається це непоганий старт.

Взагалі, коли ти хочеш опанувати нові знання, маєш правильно розділити час, достатню кількість витратити на теорію, і ще більше на практику. Раніше в мене були з цим проблеми, я багато читав, але приділяв недостатньо уваги для закріплення цих знань, тому вони дуже швидко забувались.

Тут же мені вдалося знайти правильний баланс. Спочатку я читав документацію, намагався зрозуміти, як влаштована технологія та як правильно її застосувати для моїх потреб і одразу мав змогу практикуватися на цікавих робочих задачах. Через велику обмеженість у часі, інколи я не до кінця розумів теоретичну частину, доводилось писати код інтуїтивно. Зараз мені набагато легше заповнити ці прогалини у теорії, бо я вже маю практичний досвід, і розуміння приходить швидше.

Один важливий момент, який я для себе виніс під час навчання — це завжди приділяти достатньо уваги на організацію робочих процесів. Коли обговорюєте проєкт чи з’являються нові ідеї під час дискусій, створюйте собі таски в Trello. Набагато легше потім це просто відкинути, ніж забути і згодом знову стикнутись з цією проблемою.

Проблеми завжди виникають під час розробки. Можливо, ви будете впиратись у функціонал іншої людини і не зможете виконувати свою частину роботи далі. В таких випадках варто записувати собі все в карточках, щоб підняти це питання на спільних дзвінках.

Бувало так, що мені потрібно було використати компоненту іншого учасника команди, але вона не передбачала взаємодії з моїм функціоналом. Тому доводилось її переробляти трохи під себе або зовсім переписувати з нуля, щоб вона відповідала сценарію використання, який спочатку не планувався при написанні.

Найскладнішою, мабуть, для мене була невизначеність. Наприклад, твоїм завданням є створити головну сторінку для сервісу та можливість залишати реакції для статті. І ти на це дивишся, і навіть не розумієш з чого почати. Звичайно, коучі завжди допомагали, але вони не могли розповісти, як робити фічу від початку і до кінця.

Потрібно було докладати зусиль для того, щоб самостійно знайти правильне рішення, щось шукати в Google, а щось питати в інших учасників команди. Іноді хтось з нас застрягав при виконанні завдання, тоді ми зідзвонювались у Zoom, вмикали демонстрацію екрану і намагалися допомогти один одному.

Фото з випускного Binary Studio Academy 2021

Що мені дало навчання з практикою

Найголовніше, що мені дало навчання в Академії — це знання, завдяки яким я став розробником. Речі, які до навчання здавалися мені чимось неймовірно складним і невідомим, тепер стали зрозумілими. Друге, не менш важливе, я полюбив вчитися. Раніше мене потрібно було змушувати себе це робити, зараз я не можу змусити себе відпочити, бо намагаюсь у вільний час дізнаватися щось нове.

Завдяки відгукам коучів і тімейтів, я навчився правильно сприймати та аналізувати критику, прийшло розуміння, що без конструктивного фідбеку програміст не може розвиватися. Тому, окрім вивчення та вдосконалення знань, дуже важливо прагнути до того, щоб твою роботу оцінював більш досвідчений розробник.

А ще, до початку курсу я був дуже розгублений — у мене було бажання стати програмістом та створювати круті проєкти, але я не знав, як цього досягнути. Тепер я можу назвати себе Full Stack розробником. До речі, зараз на робочому проєкті в компанії я працюю з JavaScript і мені дуже подобається, тому думаю наразі рухатись саме в цьому напрямку.

👍ПодобаєтьсяСподобалось20
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Підписатись на коментарі