text
Сьогодні я розповім про свій маленький проєкт. Як і багато інженерів, у мене є кілька таких проєктів, і вони не лише хобі — це моя можливість навчатися і розвиватися. Насправді, створення цих проєктів стало моїм початком у створенні нових речей: щоб навчатися! Я завжди вважав, що я не найкращий учень, коли просто пасивно читаю або дивлюсь навчальні матеріали.
Те, що я вивчаю, не залишається в пам'яті, поки я активно не використовую це. Тому я подумав, чому б не застосувати те, що я вивчаю, на практиці? Саме так я і зробив, і відтоді продовжую це робити.
Ці проєкти стали більше, ніж просто експерименти. Вони стали моїм полем для перевірки, допомагаючи мені розвивати свої навички і отримувати практичний досвід.
Один із цих проєктів навіть приніс мені мою першу роботу в Німеччині! Це був перший крок, який дав мені впевненість, навчив мене витривалості та дозволив продемонструвати свої здібності світу. Це вражає, як те, що почалося як просте бажання вчитися, стало такою важливою частиною мого кар'єрного шляху.
Про що мій проєкт?
Я мав цю ідею багато років тому під час моїх подорожей Європою з рюкзаком. Коли я подорожував по різних країнах і містах, я часто стикався з однією і тією ж проблемою: неможливістю відвідати все, що я хотів за один день.
Час завжди був проти мене, і надмірний потік інформації з інтернету тільки ускладнював ситуацію. Коли ти шукаєш в інтернеті, що зробити в місті, тебе засипає нескінченними списками, статтями та гідами. Мені потрібен був щось просте — додаток, який би точно сказав мені, куди йти, в якому порядку і як ефективно планувати час, мінімізуючи використання інтернету.
Саме тоді в мене виникла ідея створити такий додаток.
Звісно, я знаю, що сьогодні існує безліч рішень для цієї проблеми, і навіть ChatGPT може допомогти вам спланувати день. Але цей блог не про мій додаток і не про те, який він революційний. Це про шлях навчання і самовдосконалення, який я пройшов, розробляючи його. Це про те, як я перетворив щоденну фрустрацію в проєкт, який став для мене викликом, навчив мене і зрештою зробив мене кращим розробником. Тож давайте заглибимось і дослідимо уроки та досвід, які я здобув, втілюючи цю ідею в реальність!
Вибір бази коду
Гей, це додаток, і я не знаю, чи буду я мати iPhone чи Android через 10 років. React Native був досить популярним, коли я починав, і він задовольняв усі мої потреби на той час. Його можливості для кросплатформенності означали, що я не мав турбуватись про довгострокову сумісність, і це був ідеальний вибір для побудови фронтенду додатка.
На серверній стороні я почав з Node.js, але не хотів обмежувати себе лише написанням на JavaScript. Навчання новим речам завжди було моєю пристрастю. Тому я вирішив додати Rust до проєкту. Швидкість та безпека Rust зробили його відмінним вибором для критичних мікросервісів, таких як авторизація та автентифікація. Якщо вже говорити про мікросервіси...
Колись я написав детальну статтю про те, чому мікросервіси не мають сенсу (прочитати її можна тут: https://medium.com/@dogabudak/microservices-in-2023-5f9d1f3eba69)..) Але коли я був молодший і наївніший, я вірив, що мікросервіси — це рішення для всього. Більше того, я мав геніальну ідею, що якщо я створю кілька сервісів, які спілкуються один з одним — а це вже саме по собі складне завдання — то я міг би використовувати різні мови програмування для кожного сервісу. Моя логіка була проста: більше мов — більше можливостей для навчання.
Спочатку цей підхід здавався захоплюючим і добре працював. Але коли проєкт зріс, я опинився в ситуації, де управляв шістьма різними мовами для одного додатка.
text
Це був логістичний кошмар. Не повторюйте моїх помилок. Тим не менше, я все ще вірю, що є цінність у використанні кількох мов, але з балансом і метою. Зрештою я оптимізував свій бекенд, використовуючи три основні мови: TypeScript для операцій CRUD, Rust для критичних завдань авторизації та автентифікації, а також Django для керування контентом. Така конфігурація дозволила мені зберігати гнучкість і ефективність без надмірної складності.
Уроки, які я отримав від цього досвіду, були безцінними. Це нормально — експериментувати і досліджувати, але знаходження правильного балансу між інноваціями та практичністю є ключовим. Зосередившись на кількох мовах, які добре виконують конкретні завдання, я зміг створити надійний і зручний у підтримці бекенд, одночасно задовольняючи свою цікавість і бажання вчитися.
Де розгорнути ці сервіси
Я вірю, що одного дня я зможу запустити проєкт на живо. Раніше безкоштовний тариф Heroku був популярним варіантом для розробників, щоб розгортати і тестувати додатки без витрат, надаючи такі функції, як безкоштовні динаміки, простий процес розгортання та інтуїтивно зрозумілу платформу для веб- та бекенд-сервісів.
Але тепер його більше не існує.
Хоча це дуже зручно у використанні, AWS занадто дорогий. Тому після того, як Heroku перестав існувати, і єдині мої знання щодо таких платформ обмежувалися AWS, я почав шукати іншого постачальника хмарних послуг. Так, у мене є план створити власний сервер за допомогою Raspberry Pi, але це в майбутньому.
Зараз я використовую fly.io. Не можу сказати багато про нього, оскільки частина DevOps мого проєкту для мене є найменш цікавою.
Робота над пет-проєктом стала для мене трансформаційною подорожжю. Це більше, ніж просто створення додатка чи вивчення нових технологій — це про прийняття викликів, розширення кордонів і перетворення цікавість у розвиток. Від моєї початкової ідеї, яка виникла через фрустрації під час подорожей, до архітектурних рішень, які формували мій додаток, кожен етап навчив мене безцінним урокам про програмування, дизайн і вирішення проблем.
Цей проєкт нагадав мені важливість починати з малого, сміливо експериментувати і вчитися на помилках. Це нормально — пробувати нове і навіть зазнавати невдач, адже так ми зростаємо як розробники. Будь то вибір правильної технології, баланс між простотою та амбіціями чи управління складністю багатомовного бекенду, інсайти, які я здобув на шляху, варто кожної перешкоди.
Якщо є один висновок, який я хочу, щоб ви винесли з цього блогу, то ось він: пет-проєкт — це не просто вправи з програмування; це відображення вашої пристрасті, творчості та готовності вчитися. Тож вперед, оберіть ідею, яка вам цікава, і почніть створювати. Хто знає? Можливо, це стане найбільш винагороджуваним проєктом вашої кар'єри.
У наступному епізоді я розгляну детальніше і, можливо, поділюсь деякими з цих мікросервісів і рішень, що стосуються дизайну.
Перекладено з: From Idea to Implementation: The Story of My Project