Codica - корисне про IT
2.03K subscribers
2.45K photos
124 videos
11 files
1.31K links
Привіт, друже, це канал про корисності в ІТ🤘

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

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

👉 Відкриті вакансії - www.codica.com/careers
Download Telegram
Що буде виведено в консоль?
Anonymous Quiz
22%
undefined
62%
💣
3%
Error
14%
secret
Хей, ви просили другу частину антипатернів Rails?
Отримуйте 👇

➡️ перша частина антипатернів у Rails

#codica_tech
5
5 нових антипатернів у Rails, які легко не помітити
(або як ми називаємо це в команді – «не повторюй це на проді»)

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
👍2
Англійська за мемами😜
👉Говоримо красиво

📍 backwards – у зворотньому напрямку, назад, навпаки

#codica_english

TikTok | Instagram | Telegram
😁5
Усім файного ранку, друзі!

Нічого не нагадуйте програмістам, дайте їм спокійно робити свою улюблену роботу 😄

#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
🔥3
Чому мозок нам бреше: як обман сприйняття впливає на наші рішення

Ти не лінивий – це мозок грає з тобою.

Часто ми ігноруємо очевидне, робимо дивні висновки, реагуємо емоційно, відкладаємо важливе…

І все це не тому, що ми "не такі". Просто мозок підсовує викривлену картину реальності.

#НапуттяВід_HR Директорки Клименко Наталії

📲 Зібрали найпоширеніші пастки мислення, у які ми всі час від часу потрапляємо. І поради – як з них виходити.

TikTok | Instagram | Telegram
4
💎 Друзі, а сьогодні ми поговоримо про те, без чого не обходиться жоден Ruby-проєкт – про лямбди для Рубістів!

#codica_advice

👉🏻 Python: лямбди, генератори та декоратори можете побачити ТУТ.

Одна з найелегантніших (і водночас заплутаних) фішок Ruby – це blocks, Procs та lambdas.

Хто їх освоює, той починає писати дійсно рубішний, красивий код, від якого хочеться ставити ❤️ у pull request’ах.

Тож розберімося, що воно таке й коли що використовувати ⬇️
4
🧱 Що таке Block?
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