#question
Остання вікторина на сьогодні
$array = [false => 'no', true => 'yes', 1 => 'maybe']; echo count($array);
Остання вікторина на сьогодні
$array = [false => 'no', true => 'yes', 1 => 'maybe']; echo count($array);
Anonymous Quiz
41%
3
44%
2
2%
1
0%
0
12%
Fatal error
#game
Спробуємо нову ранкову активність
Вгадай вираз по емоджі
Почнемо з простого
🐘👶💻⚰️
Варіанти пишіть в коментарі за спойлером
Спробуємо нову ранкову активність
Вгадай вираз по емоджі
Почнемо з простого
🐘👶💻⚰️
Варіанти пишіть в коментарі за спойлером
👍2
#course #algorithm #series
🧵 Наскільки ефективний мій код? 2/8
O(n) – Лінійна складність
Це найпоширеніший тип складності, який ви бачите щодня.
Уявімо, що у вас є масив з 1000 елементів і потрібно знайти одне значення. Якщо масив не відсортований, іншого шляху, окрім як перевірити кожен елемент, просто немає. І саме це означає O(n) — час виконання зростає прямо пропорційно до кількості елементів.
📌 Приклад: Лінійний пошук у масиві
Класика. Від foreach, до array_map або array_filter — більшість ваших ітерацій працює саме в O(n).
O(n) — це ще не погано. Це нормально. Але якщо обробляєте мільйони записів — треба думати, як зробити краще.
⬅️ Попередня складність | Наступна складність ➡️
🧵 Наскільки ефективний мій код? 2/8
O(n) – Лінійна складність
Це найпоширеніший тип складності, який ви бачите щодня.
Уявімо, що у вас є масив з 1000 елементів і потрібно знайти одне значення. Якщо масив не відсортований, іншого шляху, окрім як перевірити кожен елемент, просто немає. І саме це означає O(n) — час виконання зростає прямо пропорційно до кількості елементів.
📌 Приклад: Лінійний пошук у масиві
function linearSearch($array, $target) {
for ($i = 0; $i < count($array); $i++) {
if ($array[$i] === $target) {
return $i;
}
}
return -1;
}Класика. Від foreach, до array_map або array_filter — більшість ваших ітерацій працює саме в O(n).
O(n) — це ще не погано. Це нормально. Але якщо обробляєте мільйони записів — треба думати, як зробити краще.
🧠 Завтра обговоримо O(log n) і двійковий пошук.
⬅️ Попередня складність | Наступна складність ➡️
🔥6👍2
Зорієнтуйте по оптимальній на вашу думку кількості постів на день
Anonymous Poll
25%
Чим більше тим краще
3%
Зараз мало, давай більше
6%
Зараз багато, давай менше
66%
В ідеалі 1-2 поста на день
Зорієнтуйте який контент для вас найрелевантніший
Можна обрати кілька варіантів
Можна обрати кілька варіантів
Anonymous Poll
83%
Інструменти php
56%
Огляд бібліотек
94%
Думки про розробку
50%
Вікторини
28%
Гумористичний контент
8%
Щось ще (пишіть побажання в коментарях)
#course #php #longread
match !== switch
Вже відносно давно — починаючи з PHP 8.0 (а це вже 1,5 роки тому 😳) — зʼявився новий інструмент:
❗️Але це не так.
Сьогодні я спробую пояснити, чому match — це окремий інструмент із своїми перевагами і призначенням.
1️⃣ match повертає значення 🔄
2️⃣ Обовʼязкове покриття всіх кейсів ✅
У
3️⃣ Завжди суворе порівняння (===), а не вільне (==) 🧠
У
☝️
4️⃣ Немає fallthrough і break 🧱
У
Хто не знає про що мова, просто виконайте цей код:
5️⃣ Виховує декларативність ✨
6️⃣ Продуктивність: O(1) доступ по значенню ⚡️
———
Висновки 🎯
❗️Якщо ти ще не використовуєш
Як кажуть: "Відчуй різницю" 😉
match !== switch
Вже відносно давно — починаючи з PHP 8.0 (а це вже 1,5 роки тому 😳) — зʼявився новий інструмент:
match. Але практика співбесід (як джунів, так і мідлів) показує, що багато хто, в кращому випадку, просто знає про нього, але не використовує у повсякденному коді. Основна причина — поверхневе розуміння: існує думка, що це просто ще один синтаксичний цукор над switch чи if/else. ❗️Але це не так.
Сьогодні я спробую пояснити, чому match — це окремий інструмент із своїми перевагами і призначенням.
1️⃣ match повертає значення 🔄
match — це вираз, а не інструкція. Він завжди повертає результат, який потрібно привласнити змінній:$taxRate = match($countryCode) {
'UA' => 0.20,
'PL' => 0.23,
'DE' => 0.19,
default => 0.0,
};switch та if/else, на відміну від цього, нічого не повертають. Якщо ви хочете отримати результат — доводиться оголошувати змінну перед умовою, потім в кожному кейсі встановлювати їй значення.2️⃣ Обовʼязкове покриття всіх кейсів ✅
match зобовʼязує розробника обробити всі можливі варіанти або вказати default. Якщо не вказано відповідність — буде UnhandledMatchError. Це значно знижує ризики неочевидних помилок.$action = match($input) {
'start' => 'Запуск',
'stop' => 'Зупинка',
default => 'Пауза',
};У
switch та if/else будь-який відсутній case просто проігнорується.3️⃣ Завжди суворе порівняння (===), а не вільне (==) 🧠
У
match значення порівнюються суворо — без приведення типів. Це ще один реверанс php в бік суворої типізації і плюс до безпеки та передбачуваності:match(0) {
false => 'false', // ❌ UnhandledMatchError
0 => 'zero', // ✅ буде виконано
};
switch (0) {
case false:
echo 'false'; // ✅ буде виведено
break;
case 0:
echo 'zero'; // ❌ сюди не дійде
break;
}☝️
switch у цьому випадку вибере false як відповідність до 0, що може призвести до неочікуваної поведінки.4️⃣ Немає fallthrough і break 🧱
У
switch завжди є ризик забути break, і тоді код "провалиться" в наступний кейс. Це класичне джерело помилок. У match кожен кейс — це окреме правило, і немає поняття break чи переходу до наступного.Хто не знає про що мова, просто виконайте цей код:
$value = 2;
switch ($value) {
case 1:
echo 'one';
case 2:
echo 'two';
case 3:
echo 'three';
}
5️⃣ Виховує декларативність ✨
match заохочує до декларативного стилю — без зайвої логіки в тілі конструкції. Він не дозволяє писати довгі блоки коду в кожному кейсі, лише вирази. Це змушує структурувати код краще:return match(true) {
$x > 0 => 'позитивне',
$x < 0 => 'негативне',
default => 'нуль',
};6️⃣ Продуктивність: O(1) доступ по значенню ⚡️
match працює аналогічно хеш-мапі: якщо йдеться про скалярні значення (int, float, string, bool), він здійснює пошук у константний час — по складності алгоритму O(1). Це дає велику перевагу над switch, де кожен case порівнюється послідовно (складність алгоритму O(n)):// match — O(1):
$color = match($code) {
'R' => 'Red',
'G' => 'Green',
'B' => 'Blue',
default => 'Unknown',
};
// switch — O(n):
switch ($code) {
case 'R': $color = 'Red'; break;
case 'G': $color = 'Green'; break;
case 'B': $color = 'Blue'; break;
default: $color = 'Unknown';
}
———
Висновки 🎯
match — це не альтернатива switch чи if/else, а окремий інструмент для ситуацій, де важлива чіткість та суворість, тобто для всіх ситуацій з умовами
Він допомагає уникати класичних помилок з switch і заохочує до чистішого, передбачуваного коду
Він швидкий: прості значення шукаються у константний час.
❗️Якщо ти ще не використовуєш
match у повсякденній роботі, саме час спробувати його у своїй наступній задачі. Як кажуть: "Відчуй різницю" 😉
🔥12👌4👍1
Який принцип порушує код з першого коментаря?
Anonymous Quiz
24%
Принцип інверсії залежностей
27%
Принцип інкапсуляції
14%
Принцип єдиної відповідальності
3%
Всі перелічені принципи
32%
Жодного принципу — це валідний код
🤔2🔥1
#game
Всім раночок
1. 👤📦🔐
2. 👴↕️👨🦰↕️👦
3. 🎭🔁🎯
4. 🧠🗺️👻
Якщо здогадалися які чотири поняття тут зашифровані, пишіть в коментарях, але не забувайте приховати відповідь під спойлером
Всім раночок
1. 👤📦🔐
2. 👴↕️👨🦰↕️👦
3. 🎭🔁🎯
4. 🧠🗺️👻
Якщо здогадалися які чотири поняття тут зашифровані, пишіть в коментарях, але не забувайте приховати відповідь під спойлером
👍3
#course #algorithm #series
🧵 Наскільки ефективний мій код? 3/8
O(log n) – Логарифмічна складність
Це одна з найефективніших складностей, яку тільки можна досягти в реальних задачах з великим обсягом даних.
📚 Уявімо, що в нас є телефонна книга з 1 000 000 імен, і ми шукаємо конкретне. Лінійно довелося б перевірити кожне імʼя і це зайняло б безліч часу. Але якщо ми будемо розрізати масив навпіл кожного разу, відкидаючи половину, яка нам точно не підходить — отримаємо двійковий пошук, і результат знайдеться за ~20 кроків. Це й є логарифмічна ефективність.
Такий підхід працює лише з відсортованими даними. І саме це лежить в основі багатьох пошукових і оптимізаційних алгоритмів.
📌 Приклад: Двійковий пошук у відсортованому масиві
🔄 Кожний крок зменшує область пошуку вдвічі. І замість мільйона перевірок — лише кілька десятків. Ось чому O(log n) — максимально швидкий.
⬅️ Попередня складність | Наступна складність ➡️
🧵 Наскільки ефективний мій код? 3/8
O(log n) – Логарифмічна складність
Це одна з найефективніших складностей, яку тільки можна досягти в реальних задачах з великим обсягом даних.
📚 Уявімо, що в нас є телефонна книга з 1 000 000 імен, і ми шукаємо конкретне. Лінійно довелося б перевірити кожне імʼя і це зайняло б безліч часу. Але якщо ми будемо розрізати масив навпіл кожного разу, відкидаючи половину, яка нам точно не підходить — отримаємо двійковий пошук, і результат знайдеться за ~20 кроків. Це й є логарифмічна ефективність.
Такий підхід працює лише з відсортованими даними. І саме це лежить в основі багатьох пошукових і оптимізаційних алгоритмів.
📌 Приклад: Двійковий пошук у відсортованому масиві
function binarySearch($array, $target) {
$left = 0;
$right = count($array) - 1;
while ($left <= $right) {
$middle = floor(($left + $right) / 2);
if ($array[$middle] === $target) return $middle;
if ($array[$middle] < $target) {
$left = $middle + 1;
} else {
$right = $middle - 1;
}
}
return -1;
}🔄 Кожний крок зменшує область пошуку вдвічі. І замість мільйона перевірок — лише кілька десятків. Ось чому O(log n) — максимально швидкий.
🧐 У наступному пості поговоримо про O(n log n) — і як працюють ефективні сортування.
⬅️ Попередня складність | Наступна складність ➡️
👍7
#talks #4students
🫣 Сором — найкращий початок
Зазвичай так почуваються джуни на першому тижні в новому проєкті.
І справді — вкататись у складний проєкт це ще той квест. Давай спробуємо розібратися, як не потонути і швидше «стати своїм».
Перш за все відкинь амбіції і прийми те, що наразі твій value для команди дуже малий, тому твоя мета на перші тижні — не стільки виконувати задачі, скільки навчитися орієнтуватися в проєкті. Хоча задачі теж самі себе не зроблять 😉
1. Ознайомся з Code Style команди та налаштуй IDE так, щоб не витрачати енергію на дрібниці.
2. Поступово ознайомся з тим як виглядає система верхньорівнево, якщо є схеми або документація, починай на них дивитися.
3. Не пірнай одразу в усе. Зосередься на тому, що треба вирішити сьогодні.
4. Якщо на проєкті SOA, тобі потрібна мапа сервісів, які вже існують, за що вони відповідають, але як і в попередній пораді, в першу чергу зосередься на тій області в якій ти будеш виконувати задачі.
5. Ну і, звісно, став запитання, куди ж без цього? Мовчазний джун — це завжди гірше, ніж "надокучливий", адже розумно сформульоване питання — часто надає відповідь автоматично.
Якщо тобі теж соромно від своєї початкової ефективності — це норм.
Хоча ні, не норм - це дуже добре. Бо сором — це сигнал, що ти бачиш планку. А значить — зможеш її перестрибнути.
🫣 Сором — найкращий початок
Який сором. Цього тижня я дуже незадоволений собою. Якось все сумбурно і неструктуровано.
Зазвичай так почуваються джуни на першому тижні в новому проєкті.
І справді — вкататись у складний проєкт це ще той квест. Давай спробуємо розібратися, як не потонути і швидше «стати своїм».
Перш за все відкинь амбіції і прийми те, що наразі твій value для команди дуже малий, тому твоя мета на перші тижні — не стільки виконувати задачі, скільки навчитися орієнтуватися в проєкті. Хоча задачі теж самі себе не зроблять 😉
1. Ознайомся з Code Style команди та налаштуй IDE так, щоб не витрачати енергію на дрібниці.
2. Поступово ознайомся з тим як виглядає система верхньорівнево, якщо є схеми або документація, починай на них дивитися.
3. Не пірнай одразу в усе. Зосередься на тому, що треба вирішити сьогодні.
4. Якщо на проєкті SOA, тобі потрібна мапа сервісів, які вже існують, за що вони відповідають, але як і в попередній пораді, в першу чергу зосередься на тій області в якій ти будеш виконувати задачі.
5. Ну і, звісно, став запитання, куди ж без цього? Мовчазний джун — це завжди гірше, ніж "надокучливий", адже розумно сформульоване питання — часто надає відповідь автоматично.
Якщо тобі теж соромно від своєї початкової ефективності — це норм.
Хоча ні, не норм - це дуже добре. Бо сором — це сигнал, що ти бачиш планку. А значить — зможеш її перестрибнути.
👍5🫡2
#rating
Обираємо найкращий пост тижня
Обираємо найкращий пост тижня
Anonymous Poll
3%
Документація, яку хочеться читати! Але це не точно... 🤷♂️
6%
🧱 Наскільки складним може бути конструктор?
38%
Як запамʼятати зрозуміти патерни проєктування?
16%
Серія: 🧵На скільки ефективний мій код?
3%
🐘Чи може PHP бути функціональною мовою програмування?
22%
match !== switch
13%
🫣 Сором — найкращий початок
🎉 100 підписників!
Дякую кожному і кожній, хто читає, коментує і надсилає свої думки.
Далі буде ще більше корисного контенту та прикладів з реальної розробки, тож запрошуйте ваших друзів і колег, щоб нас ставало ще більше.
🚀 Погнали далі!
І не забувайте донатити на ЗСУ, щоб у нас і далі була можливість працювати
💙💛🇺🇦♥️🖤
Дякую кожному і кожній, хто читає, коментує і надсилає свої думки.
Далі буде ще більше корисного контенту та прикладів з реальної розробки, тож запрошуйте ваших друзів і колег, щоб нас ставало ще більше.
🚀 Погнали далі!
І не забувайте донатити на ЗСУ, щоб у нас і далі була можливість працювати
💙💛🇺🇦♥️🖤
🎉23
#game
Всім доброго ранку
Сьогодні в нас щось, що дуже полюбляє Laravel:
🪄📦📤
Не забувайте приховувати відповіді під спойлером 😉
UPD: слово "магічний" вже вгадали
Напевно підказка про Laravel збиває вас з пантелику
Це словосполучення на співбесіді може звучати так:
Загаданий один з них.
Всім доброго ранку
Сьогодні в нас щось, що дуже полюбляє Laravel:
🪄📦📤
Не забувайте приховувати відповіді під спойлером 😉
UPD: слово "магічний" вже вгадали
Напевно підказка про Laravel збиває вас з пантелику
Це словосполучення на співбесіді може звучати так:
"Які магічні .... в PHP ти знаєш?"
Загаданий один з них.
#tools #phpstorm #ai
🤖 AI в PhpStorm: GPT, що вам допомагає
JetBrains вже давно робить одне з найкращих середовищ для PHP-розробки, але з появою AI Assistant це IDE вийшло на новий рівень. Якщо коротко — це ChatGPT, який інтегровано прямо в PhpStorm і який «знає», де ви і над чим працюєте (за умови, що ви надасте йому доступ до коду).
Я спробував його в роботі, і мені дуже сподобався здобуток, який я отримав від цього, але про все по порядку:
💧 Трохи холодного душу:
Це платна функція. І ні, він не можете підключається до вашої вже оплаченої підписки ChatGPT Plus або API.
JetBrains продає це як окрему послугу, тож якщо ви хочете мати GPT прямо у редакторі — доведеться платити додаткові $10 на місяць, або користуватися безкоштовним планом, але з обмеженнями.
Спойлер: здебільшого лімітів безкоштовного плану вистачає на щоденну роботу, якщо ви все ж вмієте писати код самостійно.
🔧 Що вміє AI Assistant у PhpStorm?
1️⃣ Пояснення коду
Виділяєш фрагмент →
2️⃣ Генерація тестів
З того ж меню можна згенерувати PHPUnit-тести. Іноді сирувато, але як шаблон — дуже зручно.
3️⃣ Написання докблоків і коментарів
Виділяєш метод — AI підписує, що це за метод, які параметри, що повертає. Все у звичному форматі @param, @return.
4️⃣ Refactor this with AI
Можна делегувати покращення методу, перейменування змінних, винесення залежностей — AI запропонує варіанти.
5️⃣ Відповіді на питання
Вбудований чат, який памʼятає файл, з яким ти працюєш. Наприклад:
🧪 Приклад використання
Виділяємо метод →
або
Виділяєш метод →
❓Навіщо це потрібно?
✅ Краще розуміння коду для тих, хто ще погано його читає
✅ Позбавлення рутинної роботи
✅ Швидкий фідбек прямо у редакторі, без переключень у браузер при наявності питань
🏁 Висновок
А ти вже пробував AI у своєму штормі? Чи ще з недовірою дивишся на це все? 😏
Поділися в коментах своїм досвідом!
🤖 AI в PhpStorm: GPT, що вам допомагає
JetBrains вже давно робить одне з найкращих середовищ для PHP-розробки, але з появою AI Assistant це IDE вийшло на новий рівень. Якщо коротко — це ChatGPT, який інтегровано прямо в PhpStorm і який «знає», де ви і над чим працюєте (за умови, що ви надасте йому доступ до коду).
Я спробував його в роботі, і мені дуже сподобався здобуток, який я отримав від цього, але про все по порядку:
💧 Трохи холодного душу:
Це платна функція. І ні, він не можете підключається до вашої вже оплаченої підписки ChatGPT Plus або API.
JetBrains продає це як окрему послугу, тож якщо ви хочете мати GPT прямо у редакторі — доведеться платити додаткові $10 на місяць, або користуватися безкоштовним планом, але з обмеженнями.
Спойлер: здебільшого лімітів безкоштовного плану вистачає на щоденну роботу, якщо ви все ж вмієте писати код самостійно.
🔧 Що вміє AI Assistant у PhpStorm?
1️⃣ Пояснення коду
Виділяєш фрагмент →
Alt+Enter → Explain code with AI. AI коротко пояснює, що тут відбувається (враховуючи контекст).2️⃣ Генерація тестів
З того ж меню можна згенерувати PHPUnit-тести. Іноді сирувато, але як шаблон — дуже зручно.
3️⃣ Написання докблоків і коментарів
Виділяєш метод — AI підписує, що це за метод, які параметри, що повертає. Все у звичному форматі @param, @return.
4️⃣ Refactor this with AI
Можна делегувати покращення методу, перейменування змінних, винесення залежностей — AI запропонує варіанти.
5️⃣ Відповіді на питання
Вбудований чат, який памʼятає файл, з яким ти працюєш. Наприклад:
"Що робить цей код?"
"Як тут зменшити складність алгоритму?"
"Чому тут краще не використовувати isset?"
🧪 Приклад використання
class DiscountCalculator
{
public function calculate(float $price, int $percentage): float
{
return $price * (1 - $percentage / 100);
}
}
Виділяємо метод →
Explain code with AI"Цей метод обчислює знижку у відсотках і повертає нову ціну. Якщо передати 100 грн і 20%, то метод поверне 80."
або
Виділяєш метод →
Alt+Enter → Generate Unit Testspublic function testCalculate(): void
{
$calc = new DiscountCalculator();
$this->assertSame(80.0, $calc->calculate(100.0, 20));
}
❓Навіщо це потрібно?
✅ Краще розуміння коду для тих, хто ще погано його читає
✅ Позбавлення рутинної роботи
✅ Швидкий фідбек прямо у редакторі, без переключень у браузер при наявності питань
🏁 Висновок
AI Assistant у PhpStorm — дійсно зручний інструмент, який зберігає мені близько години в день.
Він допомагає впевненіше працювати з legacy-кодом, чужими репозиторіями або коли ти просто хочеш трохи розвантажити голову.
А ти вже пробував AI у своєму штормі? Чи ще з недовірою дивишся на це все? 😏
Поділися в коментах своїм досвідом!
🔥3❤1
#course #algorithm #series
🧵Наскільки ефективний мій код? 4/8
O(n log n) – Лінійно-логарифмічна складність
Це оптимальна складність для більшості алгоритмів сортування. Ви не зможете стабільно сортувати швидше, ніж O(n log n), якщо не знаєте чогось специфічного про вхідні дані.
📌 Приклад: Сортування злиттям (Merge Sort)
⛏️ Рекурсія ділить масив навпіл до базового випадку (елемент або два), після чого їх зливає у правильному порядку. Цей підхід дозволяє досягти складності O(n log n) — бо log n — це глибина рекурсії, а n — злиття всіх елементів на кожному рівні.
🧠 Якщо бачите рекурсію + злиття / обʼєднання / ітерацію — майже завжди це O(n log n).
⬅️ Попередня складність | Наступна складність ➡️
🧵Наскільки ефективний мій код? 4/8
O(n log n) – Лінійно-логарифмічна складність
Це оптимальна складність для більшості алгоритмів сортування. Ви не зможете стабільно сортувати швидше, ніж O(n log n), якщо не знаєте чогось специфічного про вхідні дані.
📌 Приклад: Сортування злиттям (Merge Sort)
function mergeSort($array) {
if (count($array) <= 1) return $array;
$middle = floor(count($array) / 2);
$left = mergeSort(array_slice($array, 0, $middle));
$right = mergeSort(array_slice($array, $middle));
return merge($left, $right);
}
function merge($left, $right) {
$result = [];
while (count($left) && count($right)) {
$result[] = $left[0] < $right[0] ? array_shift($left) : array_shift($right);
}
return array_merge($result, $left, $right);
}⛏️ Рекурсія ділить масив навпіл до базового випадку (елемент або два), після чого їх зливає у правильному порядку. Цей підхід дозволяє досягти складності O(n log n) — бо log n — це глибина рекурсії, а n — злиття всіх елементів на кожному рівні.
🧠 Якщо бачите рекурсію + злиття / обʼєднання / ітерацію — майже завжди це O(n log n).
У наступному пості — O(n^2) — і чому вкладені цикли часто погана ідея.
⬅️ Попередня складність | Наступна складність ➡️
#game
Ранок
Сьогодні дуже легке поняття
Адепти Symfony тут?
👂🎉
І поки пʼєте каву та думаєте над ребусом, задонатьте на русоріз чи на будь який інший збір, щоб ми і далі могли просинатися в своїх домівках 💙💛
Ранок
Сьогодні дуже легке поняття
Адепти Symfony тут?
👂🎉
І поки пʼєте каву та думаєте над ребусом, задонатьте на русоріз чи на будь який інший збір, щоб ми і далі могли просинатися в своїх домівках 💙💛
👍4
#talks
🏷 Чому канал називається саме так?
Кількість разів, коли мені ставили це запитання наближається до десятка, тому напишу пост, щоб не відповідати всім одне й те саме, а кидати посилання на нього.
Назва "Створений щоб помирати" — це не тролінг і не випадковий вираз.
Це відгук мого філософського ставлення до світу навколо: все має початок і кінець, і в цьому є назвичайна сила.
Колись ходила напівжартівлива але безумовно хейтерська фраза, що "PHP створений щоб померти". Її кидали в обличчя як образу: мовляв, мова не оптимізована, процеси неефективні, ресурси жере. І можливо десь так воно й було тоді, але це дійсно частина природи PHP: він створює процес, виконує роботу і помирає, вивільняючи ресурси. Як і розробники, адже людина не живе вічно, але доки існує — робить свою справу (гарно чи ні, це вже окрема справа).
Саме тому я вирішив назвати канал саме так. Не щоб знецінити PHP — а щоб перехопити контроль.
Є гарний приклад, який мені подобається, в фільмі 2010 року "Надто крута для тебе (She's Out of My League) був персонаж Венделл який сам себе називав "Засцика" (Stainer).
Він пояснює походження свого прізвиська так: в дитинстві він мав проблему — мочився в штани. Щоб уникнути знущань, він сам почав називати себе "Засцика", таким чином позбавляючи інших можливості образити його цим. Він перетворив колишню слабкість на ідентичність.
Так і з цією назвою — це прийняття. І трохи самоіронії. Але з любов’ю до цієї чудової мови програмування.
🏷 Чому канал називається саме так?
Кількість разів, коли мені ставили це запитання наближається до десятка, тому напишу пост, щоб не відповідати всім одне й те саме, а кидати посилання на нього.
Назва "Створений щоб помирати" — це не тролінг і не випадковий вираз.
Це відгук мого філософського ставлення до світу навколо: все має початок і кінець, і в цьому є назвичайна сила.
Колись ходила напівжартівлива але безумовно хейтерська фраза, що "PHP створений щоб померти". Її кидали в обличчя як образу: мовляв, мова не оптимізована, процеси неефективні, ресурси жере. І можливо десь так воно й було тоді, але це дійсно частина природи PHP: він створює процес, виконує роботу і помирає, вивільняючи ресурси. Як і розробники, адже людина не живе вічно, але доки існує — робить свою справу (гарно чи ні, це вже окрема справа).
Саме тому я вирішив назвати канал саме так. Не щоб знецінити PHP — а щоб перехопити контроль.
Є гарний приклад, який мені подобається, в фільмі 2010 року "Надто крута для тебе (She's Out of My League) був персонаж Венделл який сам себе називав "Засцика" (Stainer).
Він пояснює походження свого прізвиська так: в дитинстві він мав проблему — мочився в штани. Щоб уникнути знущань, він сам почав називати себе "Засцика", таким чином позбавляючи інших можливості образити його цим. Він перетворив колишню слабкість на ідентичність.
Так і з цією назвою — це прийняття. І трохи самоіронії. Але з любов’ю до цієї чудової мови програмування.
👍11❤4🔥1
#course #algorithm #series
🧵Наскільки ефективний мій код? 5/8
O(n^2) – Квадратична складність
Це вже повільно. Алгоритми з O(n^2) мають вкладені цикли, і час виконання зростає квадратично відносно розміру вхідних даних.
📌 Приклад: Сортування бульбашкою (Bubble Sort)
👀 Кожен елемент перевіряється з кожним — от і квадратична складність. Якщо масив має 1000 елементів — буде до мільйона операцій.
⚠️ Будь-який вкладений цикл — тривожний дзвіночок. У реальному коді O(n^2) трапляється при порівнянні всіх з усіма: наприклад, фільтрація перетинів, дублікати, агрегації без індексів.
🧠 Часом уникнути O(n^2) не вийде, але щойно бачите подвійний цикл — варто хоча б запитати себе: а чи немає кращого способу?
⬅️ Попередня складність | Наступна складність ➡️
🧵Наскільки ефективний мій код? 5/8
O(n^2) – Квадратична складність
Це вже повільно. Алгоритми з O(n^2) мають вкладені цикли, і час виконання зростає квадратично відносно розміру вхідних даних.
📌 Приклад: Сортування бульбашкою (Bubble Sort)
function bubbleSort($array) {
$n = count($array);
for ($i = 0; $i < $n - 1; $i++) {
for ($j = 0; $j < $n - $i - 1; $j++) {
if ($array[$j] > $array[$j + 1]) {
$temp = $array[$j];
$array[$j] = $array[$j + 1];
$array[$j + 1] = $temp;
}
}
}
return $array;
}👀 Кожен елемент перевіряється з кожним — от і квадратична складність. Якщо масив має 1000 елементів — буде до мільйона операцій.
⚠️ Будь-який вкладений цикл — тривожний дзвіночок. У реальному коді O(n^2) трапляється при порівнянні всіх з усіма: наприклад, фільтрація перетинів, дублікати, агрегації без індексів.
🧠 Часом уникнути O(n^2) не вийде, але щойно бачите подвійний цикл — варто хоча б запитати себе: а чи немає кращого способу?
📌 Завтра поговоримо про O(n^3) — кубічну складність. Це вже зовсім важка артилерія.
⬅️ Попередня складність | Наступна складність ➡️
👍5