B-Tree та B+Tree індекси
👉 Саме вони є найбільш розповсюдженими в нашому повсякденному житті. Майже всі популярні БД (PostgreSQL, MySQL/InnoDB, SQLite, MongoDB і т.д.) використовують B+Tree для зберігання індексів. Як зазначено в попередньому пості, це різновиди збаланосованих дерев. Головна особливість в тому, що кожен вузол може мати більше двох нащадків (на відміну від бінарного дерева), а також може мати кілька ключів (значень) в одному вузлі.
Порядок B-Tree (зазвичай позначається як m) визначає максимальну кількість нащадків, які може мати вузол.
- Кожна нода (крім кореня) має від ceil(m/2)-1 до m-1 ключів
- Корінь має від 1 до m-1 ключів
- Нода з k ключами має k+1 дочірніх нод
❗️У нашому прикладі ми використовуємо B-Tree порядку 3, це значить, що може бути до 2 ключів у кожному вузлі, і до 3 нащадків для кожного вузла відповідно.
📍 B+Tree відрізняється від B-Tree тим, що всі дані зберігаються тільки в листкових вузлах, які додатково пов'язані між собою як зв'язний список, що значно пришвидшує послідовне читання а значить і кращу продуктивність при пошуку близьких значень.
Алгоритм вставки:
❓ "Перебудова індексу", або чому вставки такі дорогі?
🔥 Основна причина популярності цих індексів - оптимізація роботи з диском. Диск читається блоками (вони ж сторінки індексу фіксованого розміру, зазвичай 4KB, 8KB або 16KB залежно від БД), і B-дерева чудово це використовують, зберігаючи багато ключів в одному вузлі.
Fill Factor (фактор заповнення) - параметр, який визначає, наскільки заповненими будуть сторінки індексу при їх створенні. Наприклад, fill factor 70% означає, що сторінки заповнюються на 70%, залишаючи 30% вільного місця для майбутніх вставок.
Коли сторінка індексу заповнюється повністю (через вставки даних), відбувається операція розщеплення сторінки (page split):
1️⃣ Створюється нова сторінка
2️⃣ Приблизно половина даних переміщується в нову сторінку
3️⃣ Середній ключ "піднімається" до батьківської сторінки
4️⃣ Батьківська сторінка оновлює свої посилання
❗️Це і є супер дорога операція, бо вимагає виділення нової сторінки на диску, переміщення даних, оновлення посилань, можливе розщеплення батьківських сторінок (каскадний ефект).
Також налаштування fill factor може підвищити продуктивність бази даних:
Для таблиць з частими вставками — низький fill factor (70-80%)
Для таблиць тільки для читання — високий fill factor (90-100%)
👍 Сподіваюсь, у світі стало трошки менше магії, і трошки більше розуміння того, як працюють системи, якими ми користуємось щодня.
#database #middle
👉 Саме вони є найбільш розповсюдженими в нашому повсякденному житті. Майже всі популярні БД (PostgreSQL, MySQL/InnoDB, SQLite, MongoDB і т.д.) використовують B+Tree для зберігання індексів. Як зазначено в попередньому пості, це різновиди збаланосованих дерев. Головна особливість в тому, що кожен вузол може мати більше двох нащадків (на відміну від бінарного дерева), а також може мати кілька ключів (значень) в одному вузлі.
Порядок B-Tree (зазвичай позначається як m) визначає максимальну кількість нащадків, які може мати вузол.
- Кожна нода (крім кореня) має від ceil(m/2)-1 до m-1 ключів
- Корінь має від 1 до m-1 ключів
- Нода з k ключами має k+1 дочірніх нод
❗️У нашому прикладі ми використовуємо B-Tree порядку 3, це значить, що може бути до 2 ключів у кожному вузлі, і до 3 нащадків для кожного вузла відповідно.
📍 B+Tree відрізняється від B-Tree тим, що всі дані зберігаються тільки в листкових вузлах, які додатково пов'язані між собою як зв'язний список, що значно пришвидшує послідовне читання а значить і кращу продуктивність при пошуку близьких значень.
Алгоритм вставки:
Коли нода заповнюється і не може вмістити новий ключ, при черговій вставці відбувається операція ділення і ми створюємо новий рівень з існуючих даних.
[5, 15]
/ | \
[3] [10,20,30] [40]
1. У нас є переповнена нода: [10, 20, 30]
2. Медіана: 20
3. Розділяємо на: [10] і [30]
4. 20 піднімається до батьківської ноди
[5, 15, 20]
/ / \ \
[3] [10] [30] [40]
Продовжуємо процес, бо [5, 15, 20] теж переповнена:
1. Медіана: 15
2. Розділяємо на: [5] і [20]
3. 15 піднімається вище
Припустимо, що раніше наше дерево мало корінь з одним елементом [50], до якого ми додаємо 15:
Проміжний результат:
[15, 50]
/ | \
[5] [20] [...]
Остаточно структура виглядає так:
[15, 50]
/ | \
[5] [20] [...]
/ \ / | \
[3] [10] [...] [30] [40]
При цьому складність пошуку гарантовано буде O(log_m n), де m — порядок дерева, як я зазначав вище.
❓ "Перебудова індексу", або чому вставки такі дорогі?
🔥 Основна причина популярності цих індексів - оптимізація роботи з диском. Диск читається блоками (вони ж сторінки індексу фіксованого розміру, зазвичай 4KB, 8KB або 16KB залежно від БД), і B-дерева чудово це використовують, зберігаючи багато ключів в одному вузлі.
Fill Factor (фактор заповнення) - параметр, який визначає, наскільки заповненими будуть сторінки індексу при їх створенні. Наприклад, fill factor 70% означає, що сторінки заповнюються на 70%, залишаючи 30% вільного місця для майбутніх вставок.
Коли сторінка індексу заповнюється повністю (через вставки даних), відбувається операція розщеплення сторінки (page split):
1️⃣ Створюється нова сторінка
2️⃣ Приблизно половина даних переміщується в нову сторінку
3️⃣ Середній ключ "піднімається" до батьківської сторінки
4️⃣ Батьківська сторінка оновлює свої посилання
❗️Це і є супер дорога операція, бо вимагає виділення нової сторінки на диску, переміщення даних, оновлення посилань, можливе розщеплення батьківських сторінок (каскадний ефект).
Також налаштування fill factor може підвищити продуктивність бази даних:
Для таблиць з частими вставками — низький fill factor (70-80%)
Для таблиць тільки для читання — високий fill factor (90-100%)
# Postgres
CREATE TABLE my_table (
id serial PRIMARY KEY,
data text
) WITH (fillfactor = 70);
# Для InnoDB доступний параметр fillfactor на рівні сервера
# в my.cnf або my.ini
[mysqld]
innodb_fill_factor = 80
👍 Сподіваюсь, у світі стало трошки менше магії, і трошки більше розуміння того, як працюють системи, якими ми користуємось щодня.
#database #middle
👍38🔥9⚡2🗿1
Ювілейний, 10-й випуск FWDays PHP Talks — вже на каналі
Ми нарешті сіли і поговорили про те, як не втопитися в логах, як збирати трейси в event-driven, як жити, коли в тебе триста мікросервісів.
Згадали такі речі, як EFK, Grafana Loki, Jaeger, Prometheus, OpenTelemetry, PageDuty, Graylog, "і отой забутий пайплайн на івентах, де ніхто не знає, що з чим з’єднане".
📍 Чим обсервабіліті відрізняється від моніторингу?
📍 Чому "все логуватити" — це погано, а не логувати — ще гірше?
📍 Скільки вартує моніторинг і чи треба він бізнесу?
📍 Чому Event-Driven це чудово, поки не треба дебажити?
👉 Подяка Йожефу, як завжди, за настрій і формат.
👍 Олексію — за архітектурну мудрість і чесність про "комфортну зону" архітектора.
🎧 Слухайте. Лайкайте. Пишіть нам, якщо з чимось не згодні 😉
https://youtu.be/frJGs9WovWY
#php #observability #monitoring #logging #tracing
Ми нарешті сіли і поговорили про те, як не втопитися в логах, як збирати трейси в event-driven, як жити, коли в тебе триста мікросервісів.
Згадали такі речі, як EFK, Grafana Loki, Jaeger, Prometheus, OpenTelemetry, PageDuty, Graylog, "і отой забутий пайплайн на івентах, де ніхто не знає, що з чим з’єднане".
📍 Чим обсервабіліті відрізняється від моніторингу?
📍 Чому "все логуватити" — це погано, а не логувати — ще гірше?
📍 Скільки вартує моніторинг і чи треба він бізнесу?
📍 Чому Event-Driven це чудово, поки не треба дебажити?
👉 Подяка Йожефу, як завжди, за настрій і формат.
👍 Олексію — за архітектурну мудрість і чесність про "комфортну зону" архітектора.
🎧 Слухайте. Лайкайте. Пишіть нам, якщо з чимось не згодні 😉
https://youtu.be/frJGs9WovWY
#php #observability #monitoring #logging #tracing
🔥14👍6
PHP 8.5: Clone with - майже те, що треба
Готувався до подкасту, де будемо розглядати нові можливості PHP 8.5 і неочікувано натрапив те, що цю фічу вже імплементували. Я був шокований, адже я чекав цього ще з моменту, як ввели readonly property (php8.1), навіть був RFC, котрий заглох, а тут бах, і вже змержили. Що правда не все супер райдужно, адже фактично створили новий RFC і імплементацію розділили на кілька етапів. То давайте розбиратись
❓ Чим круті readonly properties та іммутабельні обʼєкти
► Не треба гратись з інкапсуляцією, створювати додаткові getters/setters
► Ніхто випадково не поміняє дані десь в глибині коду
► Можна безпечно передавати об'єкт кудись - він точно повернеться таким самим
► Легше дебажити - об'єкт не може магічно змінитись між рядками коду
► Thread safety з коробки (якщо раптом дійде до async в PHP 9)
Але все це круто до моменту поки ми не захочемо щось з цим обʼєктом таки зробити [pic | code]
І через це пилили костилі, приходилось або писати купу окремих with методів [pic | code] (просто копіпасту), або гратись з рефлексією, що також є ресурсозатратно і не зовсім надійно [pic | code]
І тепер в PHP 8.5 ми зможемо досягти результату дуже просто
Ну майже просто 😅
🗿 Які є підводні камені?
Справа в тому, що ми не можемо просто взяти і зробити це без додаткових дій, адже коли в PHP 8.4 формалізували asymmetric visibility (можна окремо задавати видимість для читання і запису), стало зрозуміло, що всі public readonly властивості по дефолту були public(get) protected(set).
Чому protected(set) а не public(set) за замовчуванням, бо readonly властивості з самого початку (PHP 8.1) були задумані як "встановлюються тільки в конструкторі". Ну і не private(set), щоб можна було цим керувати в дочірніх класах
👉 Саме тому, при спробі викликати клонування в 8.5 поза обʼєктом призведе до відповідної помилки [pic | code], тому треба про це памʼятати і якщо необхідно - явно вказувати public(set) для властивостей вашого обʼєкту [pic | code]
💡 Або, робити відповідні зміни прямо всередині вашого обʼєкта, додаючи відповідні методи [pic | code], що мені подобається більше, але підійде не для всіх випадків.
🤔 Чи по тій самій схемі, замінити страшний приклад з рефлексією на реалізацію простого with [pic | code]
Ще один важливий момент
Поточна реалізація ніяк не впливає на використання магічного метода __clone, тобто параметри в нього досі передавати не можна, а при його імплементації ми отримаємо копію обʼєкту БЕЗ урахування того, що ми передали в якості аргументу [pic | code]. Це було свідоме рішення під час розбиття rfc на різні етапи, бо ця фіча ломає BC і сильно ускладнює імплементацію
💪 І тим не менш, я думаю, що Clone with - це крок в правильному напрямку
Поки памʼятаємо про protected(set) для readonly, скоріш за все це зміниться, та __clone() без параметрів, котрі обіцяють додати в майбутньому.
Але навіть з усіма нюансами - це краще ніж те, чим ми користувались. А ви що думаєте? Будете використовувати clone with?
#php85 #readonly #clonewith #middle #source
Готувався до подкасту, де будемо розглядати нові можливості PHP 8.5 і неочікувано натрапив те, що цю фічу вже імплементували. Я був шокований, адже я чекав цього ще з моменту, як ввели readonly property (php8.1), навіть був RFC, котрий заглох, а тут бах, і вже змержили. Що правда не все супер райдужно, адже фактично створили новий RFC і імплементацію розділили на кілька етапів. То давайте розбиратись
❓ Чим круті readonly properties та іммутабельні обʼєкти
► Не треба гратись з інкапсуляцією, створювати додаткові getters/setters
► Ніхто випадково не поміняє дані десь в глибині коду
► Можна безпечно передавати об'єкт кудись - він точно повернеться таким самим
► Легше дебажити - об'єкт не може магічно змінитись між рядками коду
► Thread safety з коробки (якщо раптом дійде до async в PHP 9)
Але все це круто до моменту поки ми не захочемо щось з цим обʼєктом таки зробити [pic | code]
І через це пилили костилі, приходилось або писати купу окремих with методів [pic | code] (просто копіпасту), або гратись з рефлексією, що також є ресурсозатратно і не зовсім надійно [pic | code]
І тепер в PHP 8.5 ми зможемо досягти результату дуже просто
$mariaViolin = clone($maria, ['instrument' => 'скрипка']);
Ну майже просто 😅
🗿 Які є підводні камені?
Справа в тому, що ми не можемо просто взяти і зробити це без додаткових дій, адже коли в PHP 8.4 формалізували asymmetric visibility (можна окремо задавати видимість для читання і запису), стало зрозуміло, що всі public readonly властивості по дефолту були public(get) protected(set).
Чому protected(set) а не public(set) за замовчуванням, бо readonly властивості з самого початку (PHP 8.1) були задумані як "встановлюються тільки в конструкторі". Ну і не private(set), щоб можна було цим керувати в дочірніх класах
👉 Саме тому, при спробі викликати клонування в 8.5 поза обʼєктом призведе до відповідної помилки [pic | code], тому треба про це памʼятати і якщо необхідно - явно вказувати public(set) для властивостей вашого обʼєкту [pic | code]
💡 Або, робити відповідні зміни прямо всередині вашого обʼєкта, додаючи відповідні методи [pic | code], що мені подобається більше, але підійде не для всіх випадків.
🤔 Чи по тій самій схемі, замінити страшний приклад з рефлексією на реалізацію простого with [pic | code]
Ще один важливий момент
Поточна реалізація ніяк не впливає на використання магічного метода __clone, тобто параметри в нього досі передавати не можна, а при його імплементації ми отримаємо копію обʼєкту БЕЗ урахування того, що ми передали в якості аргументу [pic | code]. Це було свідоме рішення під час розбиття rfc на різні етапи, бо ця фіча ломає BC і сильно ускладнює імплементацію
💪 І тим не менш, я думаю, що Clone with - це крок в правильному напрямку
Поки памʼятаємо про protected(set) для readonly, скоріш за все це зміниться, та __clone() без параметрів, котрі обіцяють додати в майбутньому.
Але навіть з усіма нюансами - це краще ніж те, чим ми користувались. А ви що думаєте? Будете використовувати clone with?
#php85 #readonly #clonewith #middle #source
🔥25👍19
Media is too big
VIEW IN TELEGRAM
Один із трендових напрямків зараз — інтеграція AI у CI/CD 🤖🚀
І це реально круто, що на етапі CI воно може в рази пришвидшити написання та перевірку коду.
Але коли мова про CD, тут ще є нюанси 🙃
Моделі статистичні → значить, вони недетерміновані. Це може давати:
❌ фолс-позитивні результати (бачать проблему там, де її нема)
🤷♂️ пропускати важливі речі (не ловлять баг, коли він є)
🌀 «галюцинації»
🙅♂️ «огріхи» від неповного датасету чи неідеального навчання
Попри все, тренд рухається вперед. І цікаво спостерігати, як AI буде поступово «вростати» у CI/CD процеси 💡
І це реально круто, що на етапі CI воно може в рази пришвидшити написання та перевірку коду.
Але коли мова про CD, тут ще є нюанси 🙃
Моделі статистичні → значить, вони недетерміновані. Це може давати:
❌ фолс-позитивні результати (бачать проблему там, де її нема)
🤷♂️ пропускати важливі речі (не ловлять баг, коли він є)
🌀 «галюцинації»
🙅♂️ «огріхи» від неповного датасету чи неідеального навчання
Попри все, тренд рухається вперед. І цікаво спостерігати, як AI буде поступово «вростати» у CI/CD процеси 💡
👍17🙊3🔥1
Все, що потрібно знати про PHP 8.5: від clone with до Fatal Errors stack trace
Друзі, цього разу ми з Йожефом пройшлися по прийнятих RFC у PHP 8.5 — від клонування імутабельних об’єктів до покращення OPcache і свіжого pipe-оператора.
📍Що розібрали по суті (з живими прикладами):
• Immutability + clone with — нормальний шлях для value objects/DTO. Порівняли з попередніми «костилями» (рефлексія, копіпасти with*), розібрали нюанси: публічний set для readonly, порядок викликів та відсутність параметрів у __clone, shallow vs deep copy.
• URI-класи в ядрі (RFC 3986 / WHATWG) — стандартизований парсинг без власноручних регексів.
• array_first() / array_last() — прозорий доступ до крайніх елементів без reset()/end() та внутрішніх поінтерів; чому це справді краще за array_key_first()/array_key_last().
• Pipe operator |> — ланцюжки викликів у зрозумілому функціональному стилі.
• #[NoDiscard] — ловимо тих, зто «забув використати» дані з return.
• Стек-трейс у Fatal Errors — нарешті нормальний дебаг замість «білого екрану».
👉Велика подяка Йожефу за настрій та практичні поради, як завжди було круто
Випуск вже на каналі. Слухайте, дивіться, ставте питання та вподобайку, якщо було корисно.
https://youtu.be/abHntd9evic?si=BGg-K9KagHf1dXkF
Друзі, цього разу ми з Йожефом пройшлися по прийнятих RFC у PHP 8.5 — від клонування імутабельних об’єктів до покращення OPcache і свіжого pipe-оператора.
📍Що розібрали по суті (з живими прикладами):
• Immutability + clone with — нормальний шлях для value objects/DTO. Порівняли з попередніми «костилями» (рефлексія, копіпасти with*), розібрали нюанси: публічний set для readonly, порядок викликів та відсутність параметрів у __clone, shallow vs deep copy.
• URI-класи в ядрі (RFC 3986 / WHATWG) — стандартизований парсинг без власноручних регексів.
• array_first() / array_last() — прозорий доступ до крайніх елементів без reset()/end() та внутрішніх поінтерів; чому це справді краще за array_key_first()/array_key_last().
• Pipe operator |> — ланцюжки викликів у зрозумілому функціональному стилі.
• #[NoDiscard] — ловимо тих, зто «забув використати» дані з return.
• Стек-трейс у Fatal Errors — нарешті нормальний дебаг замість «білого екрану».
👉Велика подяка Йожефу за настрій та практичні поради, як завжди було круто
Випуск вже на каналі. Слухайте, дивіться, ставте питання та вподобайку, якщо було корисно.
https://youtu.be/abHntd9evic?si=BGg-K9KagHf1dXkF
YouTube
RFC-тур по PHP 8.5: Pipe Operator, Clone with, #[NoDiscard], stack trace та інші
Зустрічайте чотирнадцятий випуск Fwdays PHP Talks!
У цьому випуску наші постійні спікери — Йожеф Гісем і Кирило Сулімовський — обговорять нові RFC та можливості PHP 8.5, які вплинуть на щоденний код.
На що варто підписатися:
– Більше цікавого для розробників:…
У цьому випуску наші постійні спікери — Йожеф Гісем і Кирило Сулімовський — обговорять нові RFC та можливості PHP 8.5, які вплинуть на щоденний код.
На що варто підписатися:
– Більше цікавого для розробників:…
👍34🔥6⚡1
⚡ Ну що, нарешті PHP fwdays’25
Особисто для мене це завжди крута подія, котру кожен рік чекаю, щоб засинхронізуватись з колегами, подивитись що відбувається у інших, заглибитись в актуальні підходи, поговорити про архітектуру та використання фреймворків, дізнатись кейси по інтеграції AI у PHP і т.д.
Коли: 4 жовтня (субота)
Де: Київ (офлайн, лише 80 місць) + онлайн
Серед спікерів:
— Андрій Яценко, Oro Inc. — «Застрибуємо у гайп-потяг AI розробки, поки він не згорів»
— Владислав Поздняков, mono — «Long running processes на PHP»
— Юрій Панайотов, Silpo (E-commerce) — «Як мати 200+ PHP сервісів у продакшні і не з’їхати з глузду?»
— В’ячеслав Вергелес, TENTENS tech — «Міцний сон інженера: як ми забезпечуємо якість, щоб спати спокійно»
— Олександр Бучек, MacPaw — «Не клонувати інфру, а ізолювати дані: ефемерні PR-оточення у shared-env»
🎟 Квитки вже у продажу. Діє знижка 10% за моїм промокодом PHP10Beer.
🔗 Деталі та квитки
Особисто для мене це завжди крута подія, котру кожен рік чекаю, щоб засинхронізуватись з колегами, подивитись що відбувається у інших, заглибитись в актуальні підходи, поговорити про архітектуру та використання фреймворків, дізнатись кейси по інтеграції AI у PHP і т.д.
Коли: 4 жовтня (субота)
Де: Київ (офлайн, лише 80 місць) + онлайн
Серед спікерів:
— Андрій Яценко, Oro Inc. — «Застрибуємо у гайп-потяг AI розробки, поки він не згорів»
— Владислав Поздняков, mono — «Long running processes на PHP»
— Юрій Панайотов, Silpo (E-commerce) — «Як мати 200+ PHP сервісів у продакшні і не з’їхати з глузду?»
— В’ячеслав Вергелес, TENTENS tech — «Міцний сон інженера: як ми забезпечуємо якість, щоб спати спокійно»
— Олександр Бучек, MacPaw — «Не клонувати інфру, а ізолювати дані: ефемерні PR-оточення у shared-env»
🎟 Квитки вже у продажу. Діє знижка 10% за моїм промокодом PHP10Beer.
🔗 Деталі та квитки
🔥15👍6
Сьогодні важлива подія
Думаю ні для кого не секрет, що насправді я давненько відійшов від постійного програмування на PHP, займаю менеджерську позицію, пробую себе в golang, python та іншому стеку.
🤷 Виходить так, що контекст змінився, а канал ні. Мені хочеться ділитись думками частіше, та завжди себе зупиняю, що вони "не в тему каналу".
👉 Важлива подія в тому, що тільки но закатив перший відос на свій YouTube канал. Він зовсім не про PHP, він про те як якісно проводити 1-on-1. Про подібні речі також хочеться писати пости, отримувати фідбек, ділитись спостереженнями і дискутувати.
Тому:
1. Закликаю всіх подивитись відос, буду вдячний за коментарі, критику, особливо конструктивну
2. Дати реакцій, чи заходить така тематика і подібний контент
3. Кому заходить - підтримати підпискою, вподобайкою, зворотнім звʼязком
https://youtu.be/s2wuc-t3ZO0
#1-1 #manager #teamlead #youtube
Думаю ні для кого не секрет, що насправді я давненько відійшов від постійного програмування на PHP, займаю менеджерську позицію, пробую себе в golang, python та іншому стеку.
🤷 Виходить так, що контекст змінився, а канал ні. Мені хочеться ділитись думками частіше, та завжди себе зупиняю, що вони "не в тему каналу".
👉 Важлива подія в тому, що тільки но закатив перший відос на свій YouTube канал. Він зовсім не про PHP, він про те як якісно проводити 1-on-1. Про подібні речі також хочеться писати пости, отримувати фідбек, ділитись спостереженнями і дискутувати.
Тому:
1. Закликаю всіх подивитись відос, буду вдячний за коментарі, критику, особливо конструктивну
2. Дати реакцій, чи заходить така тематика і подібний контент
3. Кому заходить - підтримати підпискою, вподобайкою, зворотнім звʼязком
https://youtu.be/s2wuc-t3ZO0
#1-1 #manager #teamlead #youtube
YouTube
Структура ідеального 1:1: покроковий алгоритм для менеджерів
У цьому відео ділюся покроковим планом ефективних 1-on-1 зустрічей - з чіткою структурою та практичними інструментами, які допоможуть вибудувати довіру, знизити ризик вигорання й підвищити продуктивність команди.
00:00 Вступ
00:44 Мета та значення 1-on…
00:00 Вступ
00:44 Мета та значення 1-on…
👍31🔥13
Нарешті це сталось. Я повністю перебрав, доповнив і опублікував статтю на DOU — «Принцип підстановки Барбари Лісков (про передумови, постумови та інваріанти)».
Спробував максимально розжувати те, що ж Барбара мала на увазі, додати конкретики та пройтися по кожному важливому пункту 🙂
У статті розповів про:
• принцип самої підстановки
• передумови та післяумови
• коваріантність і контраваріантність
• як з цим жити або як обійти
📌 Якщо ви вважали цей принцип незрозумілим — рекомендую до прочитання, адже я постарався навести реальні приклади коду та чіткі пояснення.
🙃 До речі, давно не писав у такому форматі, тож радий повернутися.
👇🏻 Діліться своїм досвідом у коментарях — цікаво почути, чи стало трошки зрозуміліше, що воно таке і з чим його їдять.
https://dou.ua/forums/topic/55754/
Спробував максимально розжувати те, що ж Барбара мала на увазі, додати конкретики та пройтися по кожному важливому пункту 🙂
У статті розповів про:
• принцип самої підстановки
• передумови та післяумови
• коваріантність і контраваріантність
• як з цим жити або як обійти
📌 Якщо ви вважали цей принцип незрозумілим — рекомендую до прочитання, адже я постарався навести реальні приклади коду та чіткі пояснення.
🙃 До речі, давно не писав у такому форматі, тож радий повернутися.
👇🏻 Діліться своїм досвідом у коментарях — цікаво почути, чи стало трошки зрозуміліше, що воно таке і з чим його їдять.
https://dou.ua/forums/topic/55754/
DOU
Принцип підстановки Барбари Лісков. Про передумови, постумови та інваріанти
У статті автор розбирає принцип Лісков на практичних прикладах, як працювати з базовими та спадковими класами, щоб уникнути помилок. А також пояснює передумови, постумови, інваріанти і «правило історії» через концепцію «Design by Contract».
🔥52👍7
Друзі, продовжую низку неочікуваних новин 🙂 Давно хотілось створити подкаст, де говорити на менш технічні і на більш загальні теми в айтішці. Про професії, зони відповідальності, курйозні ситуації, ринок, проблеми, чи просто понити.
То ж вийшов перший пілотний випуск, в котрому спробували прояснити «Хто такий Delivery Manager»
Було дійсно цікаво поговорити з Олею, вона Delivery Manager із понад 10-річним досвідом у міжнародних компаніях.
📍 Якщо коротко, що затронули:
– чим насправді відрізняється Project, Product і Delivery Manager;
– як менеджери справляються зі стресом і факапами;
– чи потрібна технічна експертиза, щоб ефективно керувати командою;
– як виживає команда без менеджера та що не так із Jira;
– чи може штучний інтелект замінити менеджера.
🎥 Випуск уже на каналі
Переходьте, дивіться, ставте запитання в коментарях і буду дуже вдячний за ваш зворотній звʼязок
https://youtu.be/RGyYU2fhDtY
То ж вийшов перший пілотний випуск, в котрому спробували прояснити «Хто такий Delivery Manager»
Було дійсно цікаво поговорити з Олею, вона Delivery Manager із понад 10-річним досвідом у міжнародних компаніях.
📍 Якщо коротко, що затронули:
– чим насправді відрізняється Project, Product і Delivery Manager;
– як менеджери справляються зі стресом і факапами;
– чи потрібна технічна експертиза, щоб ефективно керувати командою;
– як виживає команда без менеджера та що не так із Jira;
– чи може штучний інтелект замінити менеджера.
🎥 Випуск уже на каналі
Переходьте, дивіться, ставте запитання в коментарях і буду дуже вдячний за ваш зворотній звʼязок
https://youtu.be/RGyYU2fhDtY
YouTube
Хто такий Delivery Manager? Про роботу, факапи і стрес
Сьогодні ми говоримо відверто про IT! 🔥
Думаєте, менеджер в IT — це просто "передавати таски" і "точити ляси"? Ви глибоко помиляєтесь. У цьому інтерв'ю ми розкриваємо реалії однієї з найвідповідальніших і найстресовіших ролей в індустрії.
Наша гостя — Оля…
Думаєте, менеджер в IT — це просто "передавати таски" і "точити ляси"? Ви глибоко помиляєтесь. У цьому інтерв'ю ми розкриваємо реалії однієї з найвідповідальніших і найстресовіших ролей в індустрії.
Наша гостя — Оля…
🔥17👍7⚡6
Записали черговий подкаст для FWDays PHP Talks з Павлом і Йожефом. Цього разу копнули Event Driven архітектуру.
Почали з основ — навіщо це все придумали, а потім розібрали три стовпи Event Driven: Event, Producer та Subscriber.
📍Ну і, звісно, поговорили про вузькі місця:
• Хто створює черги — продюсер чи сабскрайбер?
• Як правильно налаштовувати конфіги?
• Що робити з навантаженням і скейлінгом воркерів?
• І найболючіше — коли падають воркери, у тебе починає деградувати вся система.
Плюс затримки. Ті самі затримки, від яких нікуди не подітись 😅
👉 Коротше, якщо працюєте з Event Driven або тільки плануєте впроваджувати — рекомендую послухати. Ми розповіли про все те, з чим самі стикалися і що, на жаль, доводилось розгрібати.
Переходьте, дивіться, пишіть вашу думку і фідбек — буду радий подискутувати 🙂
https://youtu.be/SNplV4BaKvU
Почали з основ — навіщо це все придумали, а потім розібрали три стовпи Event Driven: Event, Producer та Subscriber.
📍Ну і, звісно, поговорили про вузькі місця:
• Хто створює черги — продюсер чи сабскрайбер?
• Як правильно налаштовувати конфіги?
• Що робити з навантаженням і скейлінгом воркерів?
• І найболючіше — коли падають воркери, у тебе починає деградувати вся система.
Плюс затримки. Ті самі затримки, від яких нікуди не подітись 😅
👉 Коротше, якщо працюєте з Event Driven або тільки плануєте впроваджувати — рекомендую послухати. Ми розповіли про все те, з чим самі стикалися і що, на жаль, доводилось розгрібати.
Переходьте, дивіться, пишіть вашу думку і фідбек — буду радий подискутувати 🙂
https://youtu.be/SNplV4BaKvU
YouTube
Event-Driven Architecture: магія чи хаос під капотом?
Зустрічайте 15 випуск Fwdays PHP Talks!
У цьому випуску наші постійні спікери — Йожеф Гісем і Кирило Сулімовський, разом із гостем Павлом Акіменко, обговорюють Event-Driven Architecture:
- звідки походить цей підхід і як він змінив сучасний бекенд
- коли…
У цьому випуску наші постійні спікери — Йожеф Гісем і Кирило Сулімовський, разом із гостем Павлом Акіменко, обговорюють Event-Driven Architecture:
- звідки походить цей підхід і як він змінив сучасний бекенд
- коли…
🔥23👍3
Чому я почав вести YouTube? 🎬
А чи має бути причина?
Ніби без причини щось не має сенсу. Чому, коли хочеться спробувати щось нове, ти одразу шукаєш, пояснення, мотивацію, а іноді і виправдання?
Не все має починатись з логіки. Деякі речі народжуються просто тому, що хочеться, тому, що є внутрішній імпульс — і все, без уточнення «навіщо».
Мені подобається говорити, спілкуватись, ділитись думками, записувати подкасти, знайомитись з людьми з індустрії, отримувати фідбек, як позитивний, так і той, після якого хочеться рости.
І цього достатньо.
Не шукайте «чому». Коли всередині є справжнє бажання — це вже і є причина
https://youtube.com/@beercodeit?si=ZHLpe7xaN3eGQfqo
А чи має бути причина?
Ніби без причини щось не має сенсу. Чому, коли хочеться спробувати щось нове, ти одразу шукаєш, пояснення, мотивацію, а іноді і виправдання?
Не все має починатись з логіки. Деякі речі народжуються просто тому, що хочеться, тому, що є внутрішній імпульс — і все, без уточнення «навіщо».
Мені подобається говорити, спілкуватись, ділитись думками, записувати подкасти, знайомитись з людьми з індустрії, отримувати фідбек, як позитивний, так і той, після якого хочеться рости.
І цього достатньо.
Не шукайте «чому». Коли всередині є справжнє бажання — це вже і є причина
https://youtube.com/@beercodeit?si=ZHLpe7xaN3eGQfqo
👍16🔥6
Друзі, маю для вас новий випуск на своєму каналі 🚀
Продовжуємо говорити відверто про айтішку. Цього разу ми спробували розібратися, хто ж такий DevOps інженер і чому всі кажуть, що ця роль "не для джунів".
В гостях був Томош – Cloud DevOps інженер, який погодився простою мовою пояснити, за що йому платять гроші 😁
📍 Якщо коротко, про що поговорили:
– Чому насправді "не буває Junior DevOps" і звідки тоді вони беруться?
– SysAdmin, DevOps, DevSecOps, FinOps – у чому різниця і де чия відповідальність?
– "Лінивий DevOps" – це хороший DevOps?
– Що бісить девопсів найбільше?
– Наскільки глибоко DevOps має знати код (Python, GoLang) і чи важливі soft skills?
– Вплив ШІ: як Copilot, Grok та Claude вже змінюють підходи до інфраструктури та автоматизації
Переходьте, дивіться, і, звісно, діліться своїми історіями та запитаннями в коментарях. Буду дуже вдячний за ваш зворотній звʼязок!
https://youtu.be/s-TTevLwMPA
Продовжуємо говорити відверто про айтішку. Цього разу ми спробували розібратися, хто ж такий DevOps інженер і чому всі кажуть, що ця роль "не для джунів".
В гостях був Томош – Cloud DevOps інженер, який погодився простою мовою пояснити, за що йому платять гроші 😁
📍 Якщо коротко, про що поговорили:
– Чому насправді "не буває Junior DevOps" і звідки тоді вони беруться?
– SysAdmin, DevOps, DevSecOps, FinOps – у чому різниця і де чия відповідальність?
– "Лінивий DevOps" – це хороший DevOps?
– Що бісить девопсів найбільше?
– Наскільки глибоко DevOps має знати код (Python, GoLang) і чи важливі soft skills?
– Вплив ШІ: як Copilot, Grok та Claude вже змінюють підходи до інфраструктури та автоматизації
Переходьте, дивіться, і, звісно, діліться своїми історіями та запитаннями в коментарях. Буду дуже вдячний за ваш зворотній звʼязок!
https://youtu.be/s-TTevLwMPA
YouTube
Хто такий DevOps? Про щоденні задачі, провали та несподівані виклики
У цьому відео ми відверто спілкуємось про DevOps та роботу в IT з Томашем, досвідченим Cloud DevOps-інженером. Розбираємося, хто такий DevOps, чим він відрізняється від сісадміна, розробника й інших суміжних ролей, а також обговорюємо:
• Навіщо DevOps…
• Навіщо DevOps…
👍11🔥3🙊1
Друзі, вийшла друга частина розмови Fwdays PHP Talks про DDD! 🎥
Разом з Йожефом Гісемом та Ігорем Проніним продовжили говорити про те, як бізнес і розробка можуть нарешті порозумітися 🙂
У цьому епізоді:
💬 про те, як знайти спільну мову між бізнесом і девелоперами — щоб усі рухались в одному напрямку, а не говорили різними мовами
🧩 коли реально варто використовувати Event Storming і контекст-мапи — і як ці штуки допомагають розкласти складну систему по поличках
⚙️ Value Object, Entity та Rich Model — не просто теорія, а як це працює у живих проєктах
Якщо тема DDD тобі близька — обов’язково глянь випуск і поділися своїми спостереженнями в коментарях 👇🏻
https://youtu.be/AnicWaTTvLg?si=4PFnfL_SLmBRL6AM
Разом з Йожефом Гісемом та Ігорем Проніним продовжили говорити про те, як бізнес і розробка можуть нарешті порозумітися 🙂
У цьому епізоді:
💬 про те, як знайти спільну мову між бізнесом і девелоперами — щоб усі рухались в одному напрямку, а не говорили різними мовами
🧩 коли реально варто використовувати Event Storming і контекст-мапи — і як ці штуки допомагають розкласти складну систему по поличках
⚙️ Value Object, Entity та Rich Model — не просто теорія, а як це працює у живих проєктах
Якщо тема DDD тобі близька — обов’язково глянь випуск і поділися своїми спостереженнями в коментарях 👇🏻
https://youtu.be/AnicWaTTvLg?si=4PFnfL_SLmBRL6AM
YouTube
DDD: складно, але потрібно | Як говорити однією мовою з бізнесом і не зійти з розуму від контекстів
Зустрічайте шістнадцятий випуск Fwdays PHP Talks!
У цьому випуску наші постійні спікери — Йожеф Гісем і Кирило Сулімовський, разом із гостем Ігорем Проніним, продовжують розмову про Domain-Driven Design (DDD):
- Як бізнес і розробка знаходять спільну мову…
У цьому випуску наші постійні спікери — Йожеф Гісем і Кирило Сулімовський, разом із гостем Ігорем Проніним, продовжують розмову про Domain-Driven Design (DDD):
- Як бізнес і розробка знаходять спільну мову…
👍20🔥3
Звільнення
Мабуть, одна з найбільш табуйованих і неприємних тем у менеджменті.
Зізнавайтесь, чи бачили ви співробітника, якого "тягнуть"?
🤔 "А раптом він виправиться?", "Шкода людину", "Може, це я погано пояснив?".
Я проходив через ці сумніви. Але правда в тому, що коли ви не звільняєте неефективну людину, ви руйнуєте команду зсередини.
👉 Тому у новому відео вирішив підняти цю важку тему і розкласти все по поличках:
• Чому ми насправді боїмося звільняти (і до чого тут емпатія)
• Оцінка 360 та 9-box model: як зрозуміти, хто "тягне", а хто ні
• Токсичність, чому це бомба сповільненої дії
• Performance Improvement Plan (PIP)
• Покроковий скрипт, як повідомити про рішення, щоб це було професійно
Звільнення - це, мабуть, найскладніше рішення для менеджера. Але іноді - найправильніше
Тому дивіться відео, там багато практичних інсайтів: https://youtu.be/lZ-a_LzJXhU
Буду вдячний за зворотній звʼязок
#manager #teamlead #youtube
Мабуть, одна з найбільш табуйованих і неприємних тем у менеджменті.
Зізнавайтесь, чи бачили ви співробітника, якого "тягнуть"?
🤔 "А раптом він виправиться?", "Шкода людину", "Може, це я погано пояснив?".
Я проходив через ці сумніви. Але правда в тому, що коли ви не звільняєте неефективну людину, ви руйнуєте команду зсередини.
👉 Тому у новому відео вирішив підняти цю важку тему і розкласти все по поличках:
• Чому ми насправді боїмося звільняти (і до чого тут емпатія)
• Оцінка 360 та 9-box model: як зрозуміти, хто "тягне", а хто ні
• Токсичність, чому це бомба сповільненої дії
• Performance Improvement Plan (PIP)
• Покроковий скрипт, як повідомити про рішення, щоб це було професійно
Звільнення - це, мабуть, найскладніше рішення для менеджера. Але іноді - найправильніше
Тому дивіться відео, там багато практичних інсайтів: https://youtu.be/lZ-a_LzJXhU
Буду вдячний за зворотній звʼязок
#manager #teamlead #youtube
YouTube
Алгоритм звільнення: від попередження до прощальної розмови
У цьому відео розкриваю покроковий алгоритм звільнення — від подолання власного страху і збору аргументів до коректної розмови та комунікації з командою. На реальних прикладах показую, як вчасно виявити неефективність працівника, чим загрожує токсична поведінка…
🔥8👍5
Ну що, йдемо в еру ШІ
Давно не писав сюди, але сьогодні зʼявився привід
Буду чесним, з php розробника я давно перекваліфікувався в менеджера, трошки golang розробника, пробував писати всякі речі на python та звісно мене затягнуло в agentic engineering.
👉 Вже доволі давно використовую Claude Code - ще до того як це стало мейнстрімом. За цей час зібрав купу практичного досвіду: власні pet-проєкти, впровадження в процеси розробки, агентні воркфлоу котрі можуть нескінченно покращувати продукт, ревью власних PR, тощо.
Вивчаю багато матеріалів на цей рахунок і більшість, що пишуть про AI - це або хайп (коли люди насправді не дуже розуміють про що говорять), або переказана документація. Дуже мало реальних кейсів, майже немає розуміння як це лягає на живий проєкт.
💬 Тому загорівся ідеєю створювати навчальні матеріали і продукт на основі власного досвіду.
Та перед тим як писати програму - дуже хочу почути вас.
Створив невеличку анкету, хочу дізнатись - що саме болить, що не до кінця зрозуміло, що заважає використовувати цей інструмент на повну. Буду дуже вдячний за її заповнення, в свою чергу обіцяю створювати цікавий і зрозумілий контент 😉 ну і на сам канал це вплине безпосередньо.
3 хвилини, всього 9 питань, я буду щасливий, а ви отримаєте віртуальний бал і плюс в карму
👇 Посилання
https://forms.gle/rUzZ7qsD16MMZiEPA
Анкета анонімна і не до чого вас не зобовʼязує
Давно не писав сюди, але сьогодні зʼявився привід
Буду чесним, з php розробника я давно перекваліфікувався в менеджера, трошки golang розробника, пробував писати всякі речі на python та звісно мене затягнуло в agentic engineering.
👉 Вже доволі давно використовую Claude Code - ще до того як це стало мейнстрімом. За цей час зібрав купу практичного досвіду: власні pet-проєкти, впровадження в процеси розробки, агентні воркфлоу котрі можуть нескінченно покращувати продукт, ревью власних PR, тощо.
Вивчаю багато матеріалів на цей рахунок і більшість, що пишуть про AI - це або хайп (коли люди насправді не дуже розуміють про що говорять), або переказана документація. Дуже мало реальних кейсів, майже немає розуміння як це лягає на живий проєкт.
💬 Тому загорівся ідеєю створювати навчальні матеріали і продукт на основі власного досвіду.
Та перед тим як писати програму - дуже хочу почути вас.
Створив невеличку анкету, хочу дізнатись - що саме болить, що не до кінця зрозуміло, що заважає використовувати цей інструмент на повну. Буду дуже вдячний за її заповнення, в свою чергу обіцяю створювати цікавий і зрозумілий контент 😉 ну і на сам канал це вплине безпосередньо.
3 хвилини, всього 9 питань, я буду щасливий, а ви отримаєте віртуальний бал і плюс в карму
👇 Посилання
https://forms.gle/rUzZ7qsD16MMZiEPA
Анкета анонімна і не до чого вас не зобовʼязує
lnkd.in
LinkedIn
This link will take you to a page that’s not on LinkedIn
👍28🔥7💩1
Так, AI замінить тебе
Але тільки якщо ти залишишся там де ти є зараз
Попередню анкету заповнили 127 людей, (за що я неймовірно вдячний кожному і кожній хто долучився), і 65 з них написали про найпоширеніший страх, що AI їх замінить.
І дійсно, є задачі, які він робить краще і швидше за розробника. Бойлерплейт, шаблони, тести, конфіги, з цим важко сперечатись.
📍 Сьогодні 4% всіх публічних комітів на GitHub - вже написані Claude Code. Прогноз на кінець 2026, що це буде 20%
AI пришвидшує набір коду, але інженерія не тільки про генерацію коду - це про мислення (аналіз, пошук і вирішення проблем, архітектуру, прийняття рішень, розуміння того, що відбувається). Генерація коду стала дешевою, умовний PoC тепер можна зліпити за вечір, і це має повпливати на сам продукт. Логічно, що конкуренція зміщується на рівень ідей, UX, адаптації під конкретного юзера.
Історично ми проходили через це кілька разів, памʼятаєте як ми писали код?
• Спочатку все в одному файлі, один скрипт на 3000 рядків
• Потім зʼявились паттерни - розділили відповідальність
• Потім фреймворки - абстрагували рутину
• Потім модулі чи мікросервіси - розділили на контексти
Така сама еволюція відбувалась на рівні мов програмування: ассемблер, компілятори, no-code рішення замінять розробників 😅
👉 Кожен крок пришвидшував написання коду і підіймав планку мислення, а те, що відбувається зараз - це просто наступний етап
📍 Борис Чорний (напевно так правильно), чувак котрий створив Claude Code (доречі одесит), каже, що з листопада 2025 не написав жодного рядка коду руками, всі 100% пише AI. І його фокус змінився на те ЩО він будує, а менше на ЯК (залишу посилання на цікавий подкаст з ним)
📍 Андрій Карпати, один з засновників OpenAI, назвав цей підхід «agentic engineering» замість «vibe coding». Бо vibe coding - тупо генериш і апрувиш, а agentic engineering - це коли оркеструєш агентів, контролюєш якість, розумієш що під капотом.
Моя порада - не вірте заголовкам «AI замінить всіх». Але і не ігноруйте. Вчіться ревʼюїти швидше, вчіться проектувати складні системи, заглиблюйтесь в продукт і архітектуру. Ви маєте бачити систему повністю, а не на рівні окремої таски
Виглядає так, що інженери будуть переважати над monkey coders ще сильніше ніж зараз. І це круто.
#ai #engineering #career
Але тільки якщо ти залишишся там де ти є зараз
Попередню анкету заповнили 127 людей, (за що я неймовірно вдячний кожному і кожній хто долучився), і 65 з них написали про найпоширеніший страх, що AI їх замінить.
І дійсно, є задачі, які він робить краще і швидше за розробника. Бойлерплейт, шаблони, тести, конфіги, з цим важко сперечатись.
📍 Сьогодні 4% всіх публічних комітів на GitHub - вже написані Claude Code. Прогноз на кінець 2026, що це буде 20%
AI пришвидшує набір коду, але інженерія не тільки про генерацію коду - це про мислення (аналіз, пошук і вирішення проблем, архітектуру, прийняття рішень, розуміння того, що відбувається). Генерація коду стала дешевою, умовний PoC тепер можна зліпити за вечір, і це має повпливати на сам продукт. Логічно, що конкуренція зміщується на рівень ідей, UX, адаптації під конкретного юзера.
Історично ми проходили через це кілька разів, памʼятаєте як ми писали код?
• Спочатку все в одному файлі, один скрипт на 3000 рядків
• Потім зʼявились паттерни - розділили відповідальність
• Потім фреймворки - абстрагували рутину
• Потім модулі чи мікросервіси - розділили на контексти
Така сама еволюція відбувалась на рівні мов програмування: ассемблер, компілятори, no-code рішення замінять розробників 😅
👉 Кожен крок пришвидшував написання коду і підіймав планку мислення, а те, що відбувається зараз - це просто наступний етап
📍 Борис Чорний (напевно так правильно), чувак котрий створив Claude Code (доречі одесит), каже, що з листопада 2025 не написав жодного рядка коду руками, всі 100% пише AI. І його фокус змінився на те ЩО він будує, а менше на ЯК (залишу посилання на цікавий подкаст з ним)
📍 Андрій Карпати, один з засновників OpenAI, назвав цей підхід «agentic engineering» замість «vibe coding». Бо vibe coding - тупо генериш і апрувиш, а agentic engineering - це коли оркеструєш агентів, контролюєш якість, розумієш що під капотом.
Моя порада - не вірте заголовкам «AI замінить всіх». Але і не ігноруйте. Вчіться ревʼюїти швидше, вчіться проектувати складні системи, заглиблюйтесь в продукт і архітектуру. Ви маєте бачити систему повністю, а не на рівні окремої таски
Виглядає так, що інженери будуть переважати над monkey coders ще сильніше ніж зараз. І це круто.
#ai #engineering #career
🔥18👍12⚡2
Інструментів дуже багато і не зрозуміло чим користуватись
Дуже добре знаю це відчуття, бо кожен день виходять тисячі постів, відосів, думок з тим, що щось проривне знов зарелізили, щось має 40к зірочок на гітхабі, і таке враження, що все треба знати вже на вчора, але треба якось обрати серед купи
Проблема всіх інфлюенсерів в тому, що ніхто не пояснив ЯК з цим працювати, всі тільки кажуть ЩО юзати
❓ Основне питання не в тому "який інструмент кращий", а в тому яку задачу ти хочеш вирішити, адже можна мати найкращий інструмент і використовувати його на 10%
Рецепт такий, запитуєш себе - що я хочу зробити? Це може бути
• Фічу з нуля
• Рефакторинг великого проекту
• Розібратись в чужому коді
• Задебажити проблему, тощо
Потім важливо розібратись який є контекст. Чи є документація, чи може описана архітектура, конвенції коду, а можливо вже є специфікація для ШІ? Чи ти просто відкриваєш IDE і кажеш "давай зроби щось круте"
❗️ Без контексту будь-який інструмент генерує сміття. Так само, як і будь який розробник, якщо не задає питання "навіщо?". То ж не варто очікувати більшого від AI агента
З чим точно варто визначитись:
✅ Інструмент в якому пишеш код, з автокомплітом, підказками, дрібними генераціями. Обери один, звикни, налаштуй під себе, вивчи вже ті кляті hot keys, не важливо це Cursor, Windsurf, чи продукт від JetBrains - будь-що
✅ Coding assistant (agentic tool) для задач, коли тобі треба не рядок змінити, а фічу написати, протестувати і задеплоїти. Тут варто розібратись що таке Agentic Loop
observe → think → act → repeat
Агент дивиться на контекст (CLAUDE.md, spec файл, код, документація, тощо), думає що робити, робить, валідує і повторює поки не буде ідеально. Особисто я використовую Claude Code і всім раджу, проте, багато хто використовує аналоги і задоволений. Знов ж таки, проблема не в інструменті, а в тому, як ти підходиш до виконання задачі, чи розбиваєш на дрібні частини, чи знає агент про твої стандарти, чи достатньо чіткі вимоги до того, що ти хочеш отримати на виході
✅ Оркестрація
Мультиагентні воркфлоу і їх паралельний запуск та координація. Але це для тих, хто вже пройшов перші два кроки. Спочатку один агент з налаштованим процесом, повним лупом, валідацією і чітким виконанням задач, а вже потім масштабуєш. Це обширна тема для окремого поста.
📍 Що ігнорувати без жодних сумнівів
На першому етапі ігноруєш всі інші інструменти котрі виходять щотижня, всі порівняння "X vs Y vs Z", тренди, котрі починаються зі слів "революційний підхід" і "прорив 2026". Якщо ти не розібрався з хоча б одним інструментом - тобі не потрібен другий.
Побудуй процес. Опиши задачу в spec файлі, винеси повторювані дії в скіли, додай контекст через CLAUDE.md (або аналог), визнач стандарти і конвенції. І в цей момент ти починаєш отримувати передбачуваний результат
👉 Головний напрямок для розробників це перехід від "vibe coding" до agentic engineering та spec-driven підходу.
Хвилинка самореклами 😁
Якщо цікаво з цим розібратись глибше - зараз я беру людей на особистий аудит. Там ми розберемо твій досвід, те що вже вивчив і визначимо цілі по AI. Розповім як ефективно використовувати інструменти у своїй роботі та програму, в результаті котрої ти без проблем зможеш самостійно зібрати свій SaaS продукт
Набираю першу групу до 20 людей, програма з особистим залученням та менторським супроводом
Заповни анкету - я звʼяжусь з тобою особисто https://forms.gle/HixRnG3GF2KmaL6y6
#AI #agents #tools #architecture
Дуже добре знаю це відчуття, бо кожен день виходять тисячі постів, відосів, думок з тим, що щось проривне знов зарелізили, щось має 40к зірочок на гітхабі, і таке враження, що все треба знати вже на вчора, але треба якось обрати серед купи
Проблема всіх інфлюенсерів в тому, що ніхто не пояснив ЯК з цим працювати, всі тільки кажуть ЩО юзати
❓ Основне питання не в тому "який інструмент кращий", а в тому яку задачу ти хочеш вирішити, адже можна мати найкращий інструмент і використовувати його на 10%
Рецепт такий, запитуєш себе - що я хочу зробити? Це може бути
• Фічу з нуля
• Рефакторинг великого проекту
• Розібратись в чужому коді
• Задебажити проблему, тощо
Потім важливо розібратись який є контекст. Чи є документація, чи може описана архітектура, конвенції коду, а можливо вже є специфікація для ШІ? Чи ти просто відкриваєш IDE і кажеш "давай зроби щось круте"
❗️ Без контексту будь-який інструмент генерує сміття. Так само, як і будь який розробник, якщо не задає питання "навіщо?". То ж не варто очікувати більшого від AI агента
З чим точно варто визначитись:
✅ Інструмент в якому пишеш код, з автокомплітом, підказками, дрібними генераціями. Обери один, звикни, налаштуй під себе, вивчи вже ті кляті hot keys, не важливо це Cursor, Windsurf, чи продукт від JetBrains - будь-що
✅ Coding assistant (agentic tool) для задач, коли тобі треба не рядок змінити, а фічу написати, протестувати і задеплоїти. Тут варто розібратись що таке Agentic Loop
observe → think → act → repeat
Агент дивиться на контекст (CLAUDE.md, spec файл, код, документація, тощо), думає що робити, робить, валідує і повторює поки не буде ідеально. Особисто я використовую Claude Code і всім раджу, проте, багато хто використовує аналоги і задоволений. Знов ж таки, проблема не в інструменті, а в тому, як ти підходиш до виконання задачі, чи розбиваєш на дрібні частини, чи знає агент про твої стандарти, чи достатньо чіткі вимоги до того, що ти хочеш отримати на виході
✅ Оркестрація
Мультиагентні воркфлоу і їх паралельний запуск та координація. Але це для тих, хто вже пройшов перші два кроки. Спочатку один агент з налаштованим процесом, повним лупом, валідацією і чітким виконанням задач, а вже потім масштабуєш. Це обширна тема для окремого поста.
📍 Що ігнорувати без жодних сумнівів
На першому етапі ігноруєш всі інші інструменти котрі виходять щотижня, всі порівняння "X vs Y vs Z", тренди, котрі починаються зі слів "революційний підхід" і "прорив 2026". Якщо ти не розібрався з хоча б одним інструментом - тобі не потрібен другий.
Побудуй процес. Опиши задачу в spec файлі, винеси повторювані дії в скіли, додай контекст через CLAUDE.md (або аналог), визнач стандарти і конвенції. І в цей момент ти починаєш отримувати передбачуваний результат
👉 Головний напрямок для розробників це перехід від "vibe coding" до agentic engineering та spec-driven підходу.
Хвилинка самореклами 😁
Якщо цікаво з цим розібратись глибше - зараз я беру людей на особистий аудит. Там ми розберемо твій досвід, те що вже вивчив і визначимо цілі по AI. Розповім як ефективно використовувати інструменти у своїй роботі та програму, в результаті котрої ти без проблем зможеш самостійно зібрати свій SaaS продукт
Набираю першу групу до 20 людей, програма з особистим залученням та менторським супроводом
Заповни анкету - я звʼяжусь з тобою особисто https://forms.gle/HixRnG3GF2KmaL6y6
#AI #agents #tools #architecture
Google Docs
Анкета передзапису - Діагностика та презентація продукту "Agentic Engineering" від Кирила Сулімовського
Вітаю 👋
Зараз збираю перших учасників, котрим цікаво навчитись ефективно використовувати AI у роботі, вирішенні задачах і професійному розвитку.
Ця анкета - заявка на участь у діагностиці твоєї точки А та запиту щодо ефективного використання AI у роботі.…
Зараз збираю перших учасників, котрим цікаво навчитись ефективно використовувати AI у роботі, вирішенні задачах і професійному розвитку.
Ця анкета - заявка на участь у діагностиці твоєї точки А та запиту щодо ефективного використання AI у роботі.…
🔥16
Записали 19 випуск FWDays PHP Talks
Цього разу з Йожефом та Віталієм Івановим (техлід в Spryker) поговорили про AI в розробці.
Побачив цікаву статистику - 87% людей на планеті ще не написали жодного промту до AI. Жодного. Тобто навіть не пробували. І тільки 0.01% щось намагаються будувати для бізнесу за допомогою АІ (тобто не тільки девелопмент)
👉 Мене прям зачепила аналогія по темі делегування. Бо от бачиш, що AI пропустив кому або трошки не так написав специфікацію, і руки самі тягнуться піти і поправити, бо це ж "одна секунда". Але в цьому і є проблема - ти маєш не лізти руками, ти маєш пояснити йому де помилка і навчити не допускати цього наступного разу. По суті це та ж навичка делегування, котрій менеджери вчаться роками, тільки тепер вона буде потрібна кожному розробнику
😉 Віталій каже, що сприймає моделі як хитрих джунів. І я з цим згоден - їх можна навчити, якщо дати контекст свого проекту, свої підходи, свої правила. Але без контексту будь-який інструмент генерує сміття
📍 Ще розібрали чому класичний RAG (це коли ти даєш моделі додаткові дані з бази знань, щоб вона відповідала точніше) не завжди є ефективним рішенням, і що приходить на зміну
Коротше, якщо працюєте з AI або тільки починаєте - рекомендую подивитись. Година часу, але дуже насичена
Буду вдячний за фідбек 🙂
https://www.youtube.com/watch?v=ksU0V625GBQ
#AI #PHP #podcast #fwdays
Цього разу з Йожефом та Віталієм Івановим (техлід в Spryker) поговорили про AI в розробці.
Побачив цікаву статистику - 87% людей на планеті ще не написали жодного промту до AI. Жодного. Тобто навіть не пробували. І тільки 0.01% щось намагаються будувати для бізнесу за допомогою АІ (тобто не тільки девелопмент)
👉 Мене прям зачепила аналогія по темі делегування. Бо от бачиш, що AI пропустив кому або трошки не так написав специфікацію, і руки самі тягнуться піти і поправити, бо це ж "одна секунда". Але в цьому і є проблема - ти маєш не лізти руками, ти маєш пояснити йому де помилка і навчити не допускати цього наступного разу. По суті це та ж навичка делегування, котрій менеджери вчаться роками, тільки тепер вона буде потрібна кожному розробнику
😉 Віталій каже, що сприймає моделі як хитрих джунів. І я з цим згоден - їх можна навчити, якщо дати контекст свого проекту, свої підходи, свої правила. Але без контексту будь-який інструмент генерує сміття
📍 Ще розібрали чому класичний RAG (це коли ти даєш моделі додаткові дані з бази знань, щоб вона відповідала точніше) не завжди є ефективним рішенням, і що приходить на зміну
Коротше, якщо працюєте з AI або тільки починаєте - рекомендую подивитись. Година часу, але дуже насичена
Буду вдячний за фідбек 🙂
https://www.youtube.com/watch?v=ksU0V625GBQ
#AI #PHP #podcast #fwdays
YouTube
RAG вже не працює? Як змінюється AI у розробці
Зустрічайте 19 випуск Fwdays PHP Talks!
У цьому випуску наші постійні спікери — Йожеф Гісем і Кирило Сулімовський, разом із гостем Віталієм Івановим, говорять про те, як насправді виглядає робота з AI сьогодні:
- Чому більшість команд ще не дійшла до реальної…
У цьому випуску наші постійні спікери — Йожеф Гісем і Кирило Сулімовський, разом із гостем Віталієм Івановим, говорять про те, як насправді виглядає робота з AI сьогодні:
- Чому більшість команд ще не дійшла до реальної…
👍14🔥9
AI Workflow
Багато розробників вже пробували AI в роботі, але по даним опитування на stack overflow довіра до того, що AI генерує, впала з 70% до 60% за 2025 рік. Чому? Бо підхід "кинув в чат - отримав результат" показує себе не кращим чином
👉 Але якщо побудувати pipeline, де кожен етап має свій контекст і свої перевірки - картинка змінюється. Спочатку аналіз задачі і генерація вимог, потім дизайн в Figma - щоб побачити візуально ще до першої строчки коду, потім імплементація з тестами і обовʼязково код-рев'ю
Тобто AI не просто "генерує код", він аналізує, проектує, верифікує і рев'юїть і все це в циклі, котрий відвторює SDLC
📍 Закинув відос де показую весь цей цикл на прикладі, то ж переходьте, дивіться, буду вдячний за фідбек 🙂
https://www.youtube.com/watch?v=4uLqamwjl-w
#ai #claudecode #workflow #sdlc
Багато розробників вже пробували AI в роботі, але по даним опитування на stack overflow довіра до того, що AI генерує, впала з 70% до 60% за 2025 рік. Чому? Бо підхід "кинув в чат - отримав результат" показує себе не кращим чином
👉 Але якщо побудувати pipeline, де кожен етап має свій контекст і свої перевірки - картинка змінюється. Спочатку аналіз задачі і генерація вимог, потім дизайн в Figma - щоб побачити візуально ще до першої строчки коду, потім імплементація з тестами і обовʼязково код-рев'ю
Тобто AI не просто "генерує код", він аналізує, проектує, верифікує і рев'юїть і все це в циклі, котрий відвторює SDLC
📍 Закинув відос де показую весь цей цикл на прикладі, то ж переходьте, дивіться, буду вдячний за фідбек 🙂
https://www.youtube.com/watch?v=4uLqamwjl-w
#ai #claudecode #workflow #sdlc
YouTube
Agentic Engineering: Мій ідеальний AI Workflow розробки
⬇️ Хочеш навчитись будувати такий workflow? Заповни анкету - посилання нижче
https://agenticengineering.it.com/workflow
Багато розробників уже використовують AI, але роблять це неоптимально. Вони намагаються «ваншотнути» задачу одним промптом і отримують…
https://agenticengineering.it.com/workflow
Багато розробників уже використовують AI, але роблять це неоптимально. Вони намагаються «ваншотнути» задачу одним промптом і отримують…
🔥26👍11⚡3
Як працює coding assistants під капотом
Коли ти даєш coding assistant задачу типу "виправ баг, ось error message" - всередині відбувається приблизно те саме, що робив би розробник. Спочатку треба зібрати контекст - зрозуміти що за помилка, де вона в коді, які файли залучені. Потім сформувати план і виконати дію - оновити файл, запустити тест, перевірити результат
❗️Але певні кроки вимагають від моделі взаємодії з зовнішнім світом - прочитати файл, запустити команду, підтягнути документацію, а мовна модель сама по собі цього не вміє. Модель приймає текст на вхід і віддає текст на виході. Якщо ти напряму запитаєш в чат "що написано у файлі main.go?" - вона скаже, що не має доступу до файлової системи
Сoding assistant як раз вирішує цю проблему. Перед кожним запитом до моделі він додає опис всіх своїх інструментів у вигляді JSON Schema. Кожен tool описаний структуровано - назва, що робить, які параметри приймає і якого типу. Щось типу:
Модель отримує цей список і тепер знає що в неї є ReadFile, WriteFile, RunCommand, Grep і так далі. Коли їй треба щось зробити - вона відповідає не звичайним текстом, а спеціально структурованим блоком. Відповідь від моделі може містити кілька блоків одночасно - текстовий блок (пояснення для тебе) і tool_use блок (інструкція для assistant-а). Виглядає приблизно так:
👉 Зверни увагу на stop_reason: "tool_use". Це сигнал для assistant-а - модель ще не закінчила, вона хоче виконати інструмент. Assistant бачить це, витягує з tool_use блоку назву функції і параметри, виконує дію (читає файл з диска), і відправляє результат назад з тим самим id щоб модель зрозуміла до якого саме запиту це відповідь:
Модель отримує вміст файлу, аналізує його, і далі або відповідає завершити (stop_reason: "end_turn"), або робить наступний tool call. І так по колу
Ось як це виглядає покроково:
https://lms.beerphp.club/files/coding-assistant.png
Як модель вирішує який саме інструмент викликати
Вона орієнтується по description в JSON Schema. Саме текстовий опис tool-а - це те, на основі чого модель приймає рішення "мені зараз потрібен grep, а не read_file". Якщо два інструменти мають схожі описи - модель починає плутати їх між собою і викликає не той. За даними Anthropic, якщо дати агенту доступ до 18 інструментів замість 4-5 - якість вибору помітно падає, бо модель має зважити занадто багато варіантів одночасно
Що це цам дає?
📍 Можливість виконувати складніші задачі
📍 Розширюваність. Coding assistant легко отримує нові інструменти через MCP (Model Context Protocol - окремий протокол для підключення зовнішніх тулів). Ти описуєш новий інструмент тією ж JSON Schema, підключаєш сервер, і модель одразу починає ним користуватись
📍 Точність. Замість того щоб індексувати весь твій codebase і відправляти його на зовнішні сервери, assistant шукає потрібний код через tool calls - читає конкретні файли і grep-ає по кодовій базі, звужуючи контекст
👉 Тому звертайте увагу на кількість тулів, обовʼязково на якість їх описів, в ідеалі аналізуйте флоу через котре проходить агент під час виконання задачі, адже зайві кроки з його боку забруднюють ваш контекст і знижують якість вирішення задачі
#AI #agents #tools #architecture
Коли ти даєш coding assistant задачу типу "виправ баг, ось error message" - всередині відбувається приблизно те саме, що робив би розробник. Спочатку треба зібрати контекст - зрозуміти що за помилка, де вона в коді, які файли залучені. Потім сформувати план і виконати дію - оновити файл, запустити тест, перевірити результат
❗️Але певні кроки вимагають від моделі взаємодії з зовнішнім світом - прочитати файл, запустити команду, підтягнути документацію, а мовна модель сама по собі цього не вміє. Модель приймає текст на вхід і віддає текст на виході. Якщо ти напряму запитаєш в чат "що написано у файлі main.go?" - вона скаже, що не має доступу до файлової системи
Сoding assistant як раз вирішує цю проблему. Перед кожним запитом до моделі він додає опис всіх своїх інструментів у вигляді JSON Schema. Кожен tool описаний структуровано - назва, що робить, які параметри приймає і якого типу. Щось типу:
{
"name": "read_file",
"description": "Reads contents of a file",
"input_schema": {
"type": "object",
"properties": {
"file_path": { "type": "string" }
}
}
}
Модель отримує цей список і тепер знає що в неї є ReadFile, WriteFile, RunCommand, Grep і так далі. Коли їй треба щось зробити - вона відповідає не звичайним текстом, а спеціально структурованим блоком. Відповідь від моделі може містити кілька блоків одночасно - текстовий блок (пояснення для тебе) і tool_use блок (інструкція для assistant-а). Виглядає приблизно так:
{
"content": [
{ "type": "text", "text": "Зараз прочитаю файл..." },
{ "type": "tool_use",
"id": "call_abc123",
"name": "read_file",
"input": { "file_path": "main.go" }
}
],
"stop_reason": "tool_use"
}
👉 Зверни увагу на stop_reason: "tool_use". Це сигнал для assistant-а - модель ще не закінчила, вона хоче виконати інструмент. Assistant бачить це, витягує з tool_use блоку назву функції і параметри, виконує дію (читає файл з диска), і відправляє результат назад з тим самим id щоб модель зрозуміла до якого саме запиту це відповідь:
{
"type": "tool_result",
"tool_use_id": "call_abc123",
"content": "package main\nfunc handler()..."
}
Модель отримує вміст файлу, аналізує його, і далі або відповідає завершити (stop_reason: "end_turn"), або робить наступний tool call. І так по колу
Ось як це виглядає покроково:
https://lms.beerphp.club/files/coding-assistant.png
Як модель вирішує який саме інструмент викликати
Вона орієнтується по description в JSON Schema. Саме текстовий опис tool-а - це те, на основі чого модель приймає рішення "мені зараз потрібен grep, а не read_file". Якщо два інструменти мають схожі описи - модель починає плутати їх між собою і викликає не той. За даними Anthropic, якщо дати агенту доступ до 18 інструментів замість 4-5 - якість вибору помітно падає, бо модель має зважити занадто багато варіантів одночасно
Що це цам дає?
📍 Можливість виконувати складніші задачі
📍 Розширюваність. Coding assistant легко отримує нові інструменти через MCP (Model Context Protocol - окремий протокол для підключення зовнішніх тулів). Ти описуєш новий інструмент тією ж JSON Schema, підключаєш сервер, і модель одразу починає ним користуватись
📍 Точність. Замість того щоб індексувати весь твій codebase і відправляти його на зовнішні сервери, assistant шукає потрібний код через tool calls - читає конкретні файли і grep-ає по кодовій базі, звужуючи контекст
👉 Тому звертайте увагу на кількість тулів, обовʼязково на якість їх описів, в ідеалі аналізуйте флоу через котре проходить агент під час виконання задачі, адже зайві кроки з його боку забруднюють ваш контекст і знижують якість вирішення задачі
#AI #agents #tools #architecture
🔥24⚡4👀2
MCP vs CLI
Останній місяць багато розмов на цю тему. Здавалося б, стандарт - підключай сервіси до AI-агентів та й все, але виявилось багацько проблем.
📍 MCP-сервери можуть з’їдати до великий відсоток вашого контекстного вікна просто за описи інструментів (фактично JSON-схеми). В той час як CLI мінімум вдвічі дешевший
📍 Надійність: CLI це бінарник котрий робить один прямий виклик, а MCP завжди має сервер, який може стати додатковою точкою відмови
📍 Виявилось, що LLM натреновані на купі даних у відкритих джерелах, де CLI команди писали мільйон разів, в документаціях, прикладах, readme і т.д. і що наші моделі можуть просто знати, як працювати з конктетною тулзою
🎥 Закинув відео, де розібрав як воно працює під капотом, чому MCP програє в ціні, але де він все ще залишається незамінним в певних ситуаціях. Переходьте, дивіться, буду вдячний за фідбек 🙂
https://www.youtube.com/watch?v=9Tu8usEv8EU
#ai #mcp #cli #claudecode #perplexity #engineering
Останній місяць багато розмов на цю тему. Здавалося б, стандарт - підключай сервіси до AI-агентів та й все, але виявилось багацько проблем.
📍 MCP-сервери можуть з’їдати до великий відсоток вашого контекстного вікна просто за описи інструментів (фактично JSON-схеми). В той час як CLI мінімум вдвічі дешевший
📍 Надійність: CLI це бінарник котрий робить один прямий виклик, а MCP завжди має сервер, який може стати додатковою точкою відмови
📍 Виявилось, що LLM натреновані на купі даних у відкритих джерелах, де CLI команди писали мільйон разів, в документаціях, прикладах, readme і т.д. і що наші моделі можуть просто знати, як працювати з конктетною тулзою
🎥 Закинув відео, де розібрав як воно працює під капотом, чому MCP програє в ціні, але де він все ще залишається незамінним в певних ситуаціях. Переходьте, дивіться, буду вдячний за фідбек 🙂
https://www.youtube.com/watch?v=9Tu8usEv8EU
#ai #mcp #cli #claudecode #perplexity #engineering
YouTube
За що хейтять MCP? CLI – новий тренд
⬇️ Хочеш навчитись будувати такий workflow? Заповни анкету - посилання нижче
https://agenticengineering.it.com/mcp
CTO Perplexity заявив що вони відмовляються від MCP і переходять на CLI. Наступного дня CEO Y Combinator його підтримав.
Так що - настала ера…
https://agenticengineering.it.com/mcp
CTO Perplexity заявив що вони відмовляються від MCP і переходять на CLI. Наступного дня CEO Y Combinator його підтримав.
Так що - настала ера…
⚡17🔥9👍4👀4