Codica - корисне про IT
2.08K subscribers
3.33K photos
172 videos
56 files
1.72K links
Привіт, друже, це канал про корисності в ІТ🤘

🔺Даємо практичні матеріали з RoR, JavaScript, QA, DevOps
🔺Розкажемо як знайти першу роботу без хвилювань та проблем

✍️Для звʼязку-@klimenko_nataly

👉 Відкриті вакансії - www.codica.com/careers
Download Telegram
Який параметр найбільше впливає на випадковість відповіді?
Anonymous Quiz
8%
Max tokens
42%
Temperature
11%
Top-K
39%
Context window
🤯 «Знову бізнес-логіка в контролері, а ActiveRecord-модель роздулася до 1000 рядків?» — знайомий біль у Rails-проектах?

Коли додаток росте, стандарти validates у моделях починають заважати: вони прив’язані до бази даних і підходять для простих перевірок, але ламаються на складній бізнес-логіці (наприклад, різна валідація для Admin API та Mobile API).

Рішення, яке ставлять у вимоги на Senior/Lead позиціях — використання екосистеми dry-rb, зокрема dry-validation та dry-monads.
❤2
Показуємо, як винести валідацію та бізнес-логіку з моделей у ізольовані Service Objects за 3 кроки:

1️⃣ Виносимо складну валідацію в Contract (dry-validation):


class UserRegistrationContract < Dry::Validation::Contract
params do
required(:email).filled(:string)
required(:age).filled(:integer)
end

rule(:email) do
unless /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i.match?(value)
key.failure("має бути коректним email-ом")
end
end

rule(:age) do
key.failure("реєстрація доступна лише з 18 років") if value < 18
end
end


2️⃣ Використовуємо dry-monads для чистого повернення результату (Success/Failure):


class RegisterUser
include Dry::Monads[:result]

def call(params)
# 1. Валідуємо параметри
contract_result = UserRegistrationContract.new.call(params)
return Failure(contract_result.errors.to_h) if contract_result.failure?

# 2. Створюємо користувача (бізнес-логіка)
user = User.create!(contract_result.to_h)
Success(user)
rescue ActiveRecord::RecordNotUnique
Failure(email: ["цей email вже зайнятий"])
end
end


3️⃣ Тонкий і чистий контролер:


class UsersController < ApplicationController
def create
case RegisterUser.new.call(user_params)
in Dry::Monads::Success(user)
render json: user, status: :created
in Dry::Monads::Failure(errors)
render json: { errors: errors }, status: :unprocessable_entity
end
end
end


🔥 Чому це оцінять на співбесіді та в коді:
• Single Responsibility: Модель відповідає ТІЛЬКИ за роботу з БД, Контракт — за валідацію, Сервіс — за бізнес-логіку.
• Відсутність "брудних" exceptions: Замість raise/rescue ми контрольовано повертаємо Success або Failure (Railway Oriented Programming).
• Тестувати такі контракти та сервіси в RSpec — суцільне задоволення, бо вони не потребують підйому бази даних.

А як ви виносити складну логіку з моделей у своїх проектах: використовуєте dry-rb, ActiveInteraction чи старі добрі PORO-сервіси? 👇

TikTok | Instagram | Telegram
🔥3
Що виведе цей код?
Anonymous Quiz
0%
1
74%
2
9%
3
17%
not_found
Що буде виведено в консоль?
Anonymous Quiz
26%
[1, 2, 2, 3]
6%
Set(3)
3%
[3, 2, 1]
66%
[1, 2, 3]
👍2
🧠 13 законів розробки

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

Закони, які вже розглянули:
👉 Закон Паркінсона
👉 Закон Хофштедтера
👉 Закон Брукса
👉 Закон Конвея (і зворотний закон Конвея)
👉 Закон Каннінгема
👉 Закон Стерджена
👉 Закон Завінскі (Zawinski’s Law)
👉 Закон Хайрума (Hyrum’s Law)

Сьогодні — закон, який часто згадують у контексті продуктивності команд 👇
💯1
📊 Закон Прайса (Price’s Law)

“Квадратний корінь із загальної кількості людей у групі виконує приблизно половину всієї роботи.”

👨‍💻 Що це означає для розробників
• кілька ключових інженерів часто беруть на себе складні задачі;
• knowledge concentration може створювати ризики для проєкту;
• важливо ділитися контекстом і знаннями.

📊 Що це означає для менеджерів
• не варто перевантажувати найсильніших людей;
• потрібно вирівнювати експертизу через менторство;
• стабільність команди залежить від розподілу відповідальності.

💡 Простий приклад
У команді з 16 людей приблизно 4 можуть генерувати половину ключових технічних рішень.
Якщо ці люди перевантажені або вигорають — швидкість команди падає навіть при тій самій кількості розробників.

Як працювати з цим законом:
✔️ інвестувати в knowledge sharing
✔️ уникати “hero culture”
✔️ будувати процеси, а не залежність від окремих людей

💬 Сильна команда — це не кілька незамінних людей, а система, де знання розподілені і доступні кожному.

TikTok | Instagram | Telegram
👍2
Друзі, впевнені, що тут у чаті повно впевнених мідлів і сеньйорів, але ж точно є й ті, хто тільки придивляється до ІТ або думає зайти в усе це з нуля))

Звісно, золотих гір зараз ніхто не обіцяє, але це просто нормальна робота, яка багатьом дійсно кайфова. От ми й задумалися: а якби наші сеньйори опинилися на старті сьогодні?

Як виглядав би нормальний шлях? Тож підготували його для вас)

#codica_advice
👍1👀1
Ось робочий стек, який обійдеться в нуль гривень:

01 — START HERE w3schools.com
Розбираємося з базою: HTML, CSS, JavaScript, SQL і базові поняття програмування.

02 — GO DEEPER JavaScript Mastery
Коли основи вляглися в голові — пробуємо склепати перші реальні апки і дивимось, як воно все працює на практиці.

03 — BUILD The Odin Project
Час збирати готові проєкти й розуміти, як шматочки пазла взагалі стикуються між собою.

04 — UNDERSTAND THE WEB MDN Web Docs
Якщо щось незрозуміло — вчимося відкривати офіційні доки замість того, щоб вічно шукати відповіді на форумах.

05 — LEARN BY DOING freeCodeCamp
Закріплюємо навички на задачках і живих проєктах.

06 — LEARN FROM REAL CODE GitHub
Заглядаємо в чужі репозиторії, дивимося, як пишуть інші люди, створюємо перші issues і робимо внески.

07 — LEARN THE CAREER PATH roadmap.sh
Щоб не хапатися за все підряд, дивимося на чіткі дорожні карти: що і в якій послідовності реально вчити.

08 — BUILD WITH OTHERS Open Source
Тут починається справжній дев-вайб. Читаємо чужий код, фіксимо баги, кидаємо пул-реквести і вчимося працювати в команді.

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

👇 А яке одне посилання ви б скинули людині, яка от просто зараз вирішила стартувати з нуля? Накидайте в коментарі!

TikTok | Instagram | Telegram
🔥5
🚨 Нові тіктоки під'їхали! 🚨

Якщо ви хоча б раз казали: «Та це ж буквально про мене!» — вам точно до нас!
👉 https://www.tiktok.com/@codica_com?_t=ZM-8tp6m9QvxxN&_r=1

Залітайте в наш TikTok, підписуйтесь і не пропускайте нові життєві приколи, які знайомі кожному 😎

TikTok | Instagram | Telegram
❤4
Англійська за мемами😜
👉 Говоримо красиво

📍 capture — впіймати, захопити
📍 hobby horse — іграшкова конячка (на палиці)

#codica_english

TikTok | Instagram | Telegram
😁5👀1
Раночку, друзі)) ☕️

Став +, якщо саме так робочий тиждень починається 😂

#codica_humor

TikTok | Instagram | Telegram
💯4
Ruby devs, готуйтеся плакати від щастя (і від нестачі вільного місця), бо наша нескінченна цифрова полиця знову прогинається під вагою нової порції годноти!

#codica_advice

Підготували вже 9-ту порцію легендарних PDF-книжок про Ruby та Rails 🚀

Минулі добірки теж не губіть:
📍 Добірка Ruby-книжок 1
📍 Добірка Ruby-книжок 2
📍 Добірка Ruby-книжок 3
📍 Добірка Ruby-книжок 4
📍 Добірка Ruby-книжок 5
📍 Добірка Ruby-книжок 6
📍 Добірка Ruby-книжок 7
📍 Добірка Ruby-книжок 8
👍2