Хей, ви просили другу частину антипатернів Rails?
Отримуйте 👇
➡️ перша частина антипатернів у Rails
#codica_tech
Отримуйте 👇
➡️ перша частина антипатернів у Rails
#codica_tech
❤5
5 нових антипатернів у Rails, які легко не помітити
(або як ми називаємо це в команді – «не повторюй це на проді»)
6. Service Object, який робить усе й одразу
Виглядає модно:
Але коли в одному сервісі і валідація, і створення, і розсилка, і фінансова логіка — це вже не сервіс, а новий God Object.
✅ Краще:
- дотримуйся принципу Single Responsibility
- сервіс має відповідати на «що?» а не «як все на світі»
7. Невидимі залежності через Rails magic
Коли у сервісі щось типу
просто «працює», бо в середину інжектиться глобальна змінна, сесія або Current.user.
❌ Проблема:
- складно тестувати
- змінити поведінку — ще складніше
✅ Рішення:
- передавай залежності явно (через інʼєкцію або параметри методу)
8. Складна валідація прямо в ActiveRecord
Якщо
уже звучить страшно, то глянь на ті 20 рядків логіки.
✅ Краще:
- складну бізнес-логіку винось у custom validator клас або form object
- не плутай валідацію форми і валідацію моделі — це різні цілі
9. Оптимізація без метрик
«Ми замінили includes на preload — бо здається так швидше». І потім команда 2 місяці з’ясовує, чому статистика рахується вічність.
✅ Краще:
- профілюй SQL (Bullet, Scout, Skylight, lograge + Logtail)
- перевіряй N+1, але не оптимізуй наосліп
10. Контролери з багатьма форматами — без явного розділення
Один контролер, який повертає HTML, JSON, CSV і PDF — наче зручно, але потім будь-яка зміна в respond_to ламає всі інші формати.
✅ Краще:
- розділи логіку по консернам або через сервіси
- мінімізуй перевантаження контролера умовами
🧠 Антипатерни — це не про сором. Це про те, щоб писати код, який не буде тебе мучити через 3 місяці.
Зберігай, ділись з командою — і якщо хочеш частину 3 або обговорити свої «улюблені» антипатерни — пиши в коментарях 👇
TikTok | Instagram | Telegram
(або як ми називаємо це в команді – «не повторюй це на проді»)
6. Service Object, який робить усе й одразу
Виглядає модно:
UserCreatorWithEmailAndSlackAndBonusService
Але коли в одному сервісі і валідація, і створення, і розсилка, і фінансова логіка — це вже не сервіс, а новий God Object.
✅ Краще:
- дотримуйся принципу Single Responsibility
- сервіс має відповідати на «що?» а не «як все на світі»
7. Невидимі залежності через Rails magic
Коли у сервісі щось типу
SomeModelMailer.send_later(user)
просто «працює», бо в середину інжектиться глобальна змінна, сесія або Current.user.
❌ Проблема:
- складно тестувати
- змінити поведінку — ще складніше
✅ Рішення:
- передавай залежності явно (через інʼєкцію або параметри методу)
8. Складна валідація прямо в ActiveRecord
Якщо
validate :must_have_shipping_if_paid_with_card_and_not_in_test_mode
уже звучить страшно, то глянь на ті 20 рядків логіки.
✅ Краще:
- складну бізнес-логіку винось у custom validator клас або form object
- не плутай валідацію форми і валідацію моделі — це різні цілі
9. Оптимізація без метрик
«Ми замінили includes на preload — бо здається так швидше». І потім команда 2 місяці з’ясовує, чому статистика рахується вічність.
✅ Краще:
- профілюй SQL (Bullet, Scout, Skylight, lograge + Logtail)
- перевіряй N+1, але не оптимізуй наосліп
10. Контролери з багатьма форматами — без явного розділення
Один контролер, який повертає HTML, JSON, CSV і PDF — наче зручно, але потім будь-яка зміна в respond_to ламає всі інші формати.
✅ Краще:
- розділи логіку по консернам або через сервіси
- мінімізуй перевантаження контролера умовами
if request.format.json?
🧠 Антипатерни — це не про сором. Це про те, щоб писати код, який не буде тебе мучити через 3 місяці.
Зберігай, ділись з командою — і якщо хочеш частину 3 або обговорити свої «улюблені» антипатерни — пиши в коментарях 👇
TikTok | Instagram | Telegram
🔥8
Що почитати на вихідних?
👉 матеріали медіа, які ви могли пропустити
Зібрали для вас добірку гучних матеріалів — від інсайдів у великих компаніях до несподіваних історій про те, як ШІ змінює наше життя та роботу.
📍 «Витік» кадрів у Meta Superintelligence Labs
👉 три ШI-дослідники нещодавно покинули нову лабораторію Meta, двоє повернулися до OpenAI — незважаючи на великі зарплати.
📍 Коли ШI залишає новачків без роботи
👉 У США випускники інтенсивних IT-курсів (буткемпів) сидять без офферів, адже штучний інтелект буквально переписує правила ринку розробки.
📍 Як ШІ змушує вірити у неможливе
👉 У статті показано реальний діалог із ChatGPT, після якого співрозмовник був щиро переконаний, що відкрив нову математичну формулу, здатну змінити світ.
📍 Як штучний інтелект допомагає Гарварду й іншим лабораторіям шукати інопланетян
👉 Так, ШІ уже шукає зелених чоловічків замість нас. І, можливо, вже знайшов?
Пишіть, що вас зачепило найбільше👇
#codica_weekend
TikTok | Instagram | Telegram
👉 матеріали медіа, які ви могли пропустити
Зібрали для вас добірку гучних матеріалів — від інсайдів у великих компаніях до несподіваних історій про те, як ШІ змінює наше життя та роботу.
📍 «Витік» кадрів у Meta Superintelligence Labs
👉 три ШI-дослідники нещодавно покинули нову лабораторію Meta, двоє повернулися до OpenAI — незважаючи на великі зарплати.
📍 Коли ШI залишає новачків без роботи
👉 У США випускники інтенсивних IT-курсів (буткемпів) сидять без офферів, адже штучний інтелект буквально переписує правила ринку розробки.
📍 Як ШІ змушує вірити у неможливе
👉 У статті показано реальний діалог із ChatGPT, після якого співрозмовник був щиро переконаний, що відкрив нову математичну формулу, здатну змінити світ.
📍 Як штучний інтелект допомагає Гарварду й іншим лабораторіям шукати інопланетян
👉 Так, ШІ уже шукає зелених чоловічків замість нас. І, можливо, вже знайшов?
Пишіть, що вас зачепило найбільше👇
#codica_weekend
TikTok | Instagram | Telegram
👍2
Англійська за мемами😜
👉Говоримо красиво
📍 backwards – у зворотньому напрямку, назад, навпаки
#codica_english
TikTok | Instagram | Telegram
👉Говоримо красиво
📍 backwards – у зворотньому напрямку, назад, навпаки
#codica_english
TikTok | Instagram | Telegram
😁5
Усім файного ранку, друзі!
Нічого не нагадуйте програмістам, дайте їм спокійно робити свою улюблену роботу 😄
#codica_humor
TikTok | Instagram | Telegram
Нічого не нагадуйте програмістам, дайте їм спокійно робити свою улюблену роботу 😄
#codica_humor
TikTok | Instagram | Telegram
😁7
8 ключових структур даних, на яких тримаються сучасні бази даних
Здається, БД – це просто "таблички" й SQL-запити. Насправді під капотом усе тримається на серйозній комп’ютерній науці 🧵
Ось основні структури, які реально використовуються у продакшн-рішеннях:
🔹 Skiplist – популярний in-memory індекс. Використовується в Redis
🔹 Hash index – класична реалізація Map/Dictionary. Швидкий доступ
🔹 SSTable – незмінна (immutable) on-disk реалізація Map
🔹 LSM tree – комбо Skiplist + SSTable. Висока швидкість запису
🔹 B-tree – надійна дискова структура. Стабільна швидкість читання/запису
🔹 Inverted index – основа текстового пошуку. Використовується в Lucene
🔹 Suffix tree – для пошуку підрядків у рядках. Часто в біоінформатиці
🔹 R-tree – просторовий пошук, наприклад "знайди найближчого сусіда"
⚙️ Ці структури – основа того, як працюють пошукові системи, key-value storage, log-based БД і не тільки.
📌 А ти б щось ще додав до списку?
#codica_advice
TikTok | Instagram | Telegram
Здається, БД – це просто "таблички" й SQL-запити. Насправді під капотом усе тримається на серйозній комп’ютерній науці 🧵
Ось основні структури, які реально використовуються у продакшн-рішеннях:
🔹 Skiplist – популярний in-memory індекс. Використовується в Redis
🔹 Hash index – класична реалізація Map/Dictionary. Швидкий доступ
🔹 SSTable – незмінна (immutable) on-disk реалізація Map
🔹 LSM tree – комбо Skiplist + SSTable. Висока швидкість запису
🔹 B-tree – надійна дискова структура. Стабільна швидкість читання/запису
🔹 Inverted index – основа текстового пошуку. Використовується в Lucene
🔹 Suffix tree – для пошуку підрядків у рядках. Часто в біоінформатиці
🔹 R-tree – просторовий пошук, наприклад "знайди найближчого сусіда"
⚙️ Ці структури – основа того, як працюють пошукові системи, key-value storage, log-based БД і не тільки.
📌 А ти б щось ще додав до списку?
#codica_advice
TikTok | Instagram | Telegram
🔥3
Чому мозок нам бреше: як обман сприйняття впливає на наші рішення
Ти не лінивий – це мозок грає з тобою.
Часто ми ігноруємо очевидне, робимо дивні висновки, реагуємо емоційно, відкладаємо важливе…
І все це не тому, що ми "не такі". Просто мозок підсовує викривлену картину реальності.
#НапуттяВід_HR Директорки Клименко Наталії
📲 Зібрали найпоширеніші пастки мислення, у які ми всі час від часу потрапляємо. І поради – як з них виходити.
TikTok | Instagram | Telegram
Ти не лінивий – це мозок грає з тобою.
Часто ми ігноруємо очевидне, робимо дивні висновки, реагуємо емоційно, відкладаємо важливе…
І все це не тому, що ми "не такі". Просто мозок підсовує викривлену картину реальності.
#НапуттяВід_HR Директорки Клименко Наталії
📲 Зібрали найпоширеніші пастки мислення, у які ми всі час від часу потрапляємо. І поради – як з них виходити.
TikTok | Instagram | Telegram
❤4
Яке з викривлень керує твоїм життям сьогодні?
Anonymous Poll
46%
«Полежу на дивані — а всесвіт сам усе вирішить»
11%
«Я ж казав, що все буде погано!»
21%
«Не рухайся — нічого не зламаєш»
4%
«Без улюбленого худі навіть дорогу перейти не можу»
18%
«Ctrl+Z — моя релігія»
💎 Друзі, а сьогодні ми поговоримо про те, без чого не обходиться жоден Ruby-проєкт – про лямбди для Рубістів!
#codica_advice
👉🏻 Python: лямбди, генератори та декоратори можете побачити ТУТ.
Одна з найелегантніших (і водночас заплутаних) фішок Ruby – це blocks, Procs та lambdas.
Хто їх освоює, той починає писати дійсно рубішний, красивий код, від якого хочеться ставити ❤️ у pull request’ах.
Тож розберімося, що воно таке й коли що використовувати ⬇️
#codica_advice
👉🏻 Python: лямбди, генератори та декоратори можете побачити ТУТ.
Одна з найелегантніших (і водночас заплутаних) фішок Ruby – це blocks, Procs та lambdas.
Хто їх освоює, той починає писати дійсно рубішний, красивий код, від якого хочеться ставити ❤️ у pull request’ах.
Тож розберімося, що воно таке й коли що використовувати ⬇️
❤4
🧱 Що таке Block?
Block – це анонімний шматок коду, який передається в метод:
Якщо викликати yield, але не передати блок – Ruby кине помилку.
Щоб цього уникнути – перевіряють
🎁 Що таке Proc?
Proc – це блок, збережений у змінну:
Proc – це повноцінний об’єкт: його можна передавати, зберігати, повертати з методів.
🧠 А що таке Lambda?
Lambda – це особливий вид Proc із суворішими правилами:
📌 Lambda перевіряє кількість аргументів і поводиться інакше з return.
📍 Головні відмінності:
– lambda перевіряє кількість аргументів (Proc – ні)
– return у lambda виходить лише з самої лямбди, а в Proc – із усього методу
🔁 Proc vs Lambda – невловима, але важлива різниця:
✅ Коли що використовувати?
🧩 Blocks – для простих callback’ів або ітерацій (each, map)
📦 Procs – коли треба зберегти логіку й перевикористати
💥 Lambdas – коли важливі аргументи та поведінка return
🔷 Вивчити, як гратися з blocks, Procs та lambdas – це важливий крок до виразного та елегантного Ruby-коду.
І наступного разу, коли хтось запитає: «А як тут усе так гнучко працює?», ви вже знатимете, що відповісти 😉
#codica_advice
TikTok | Instagram | Telegram
Block – це анонімний шматок коду, який передається в метод:
def greet
yield
end
greet { puts "Привіт з блоку!" }
# => Привіт з блоку!
Якщо викликати yield, але не передати блок – Ruby кине помилку.
Щоб цього уникнути – перевіряють
block_given?
🎁 Що таке Proc?
Proc – це блок, збережений у змінну:
say_hello = Proc.new { puts "Привіт!" }
say_hello.call
# => Привіт!
Proc – це повноцінний об’єкт: його можна передавати, зберігати, повертати з методів.
🧠 А що таке Lambda?
Lambda – це особливий вид Proc із суворішими правилами:
greet = lambda { |name| puts "Привіт, #{name}!" }
greet.call("Рубіст")
# => Привіт, Рубіст!
📌 Lambda перевіряє кількість аргументів і поводиться інакше з return.
📍 Головні відмінності:
– lambda перевіряє кількість аргументів (Proc – ні)
– return у lambda виходить лише з самої лямбди, а в Proc – із усього методу
🔁 Proc vs Lambda – невловима, але важлива різниця:
def test
proc = Proc.new { return "Від Proc" }
proc.call
return "Після Proc"
end
puts test
# => "Від Proc"
def test_lambda
l = -> { return "Від Lambda" }
l.call
return "Після Lambda"
end
puts test_lambda
# => "Після Lambda"
✅ Коли що використовувати?
🧩 Blocks – для простих callback’ів або ітерацій (each, map)
📦 Procs – коли треба зберегти логіку й перевикористати
💥 Lambdas – коли важливі аргументи та поведінка return
🔷 Вивчити, як гратися з blocks, Procs та lambdas – це важливий крок до виразного та елегантного Ruby-коду.
І наступного разу, коли хтось запитає: «А як тут усе так гнучко працює?», ви вже знатимете, що відповісти 😉
#codica_advice
TikTok | Instagram | Telegram
🔥4