Вайб Кодера
589 subscribers
29 photos
2 files
26 links
Вайб свідомого кодера. Про AI, код і чому твоя голова — досі твій головний інструмент. Веду я — 20+ років у розробці, від ZX Spectrum до React.
Download Telegram
Баг, що зникає коли на нього дивишся (2/3)

Контекст: webpack — популярний інструмент для JavaScript-розробників. Збирає всі твої JS-файли, CSS, картинки в один бандл для браузера. webpack-cli — його командний інтерфейс.

Розробники webpack-cli додали банер для донатів. Показувався тільки в понеділок:
if (now.getDay() === MONDAY) {
if (fileOwnerId === process.getuid()) // 💥
}
process.getuid() — це Linux-функція. На Windows її немає. Баг з'являвся ТІЛЬКИ в понеділок, ТІЛЬКИ на Windows. Шість днів на тиждень — ідеально.

Internet Explorer: DevTools як квантовий колапс

Контекст: DevTools — це інструменти розробника в браузері (F12). Там консоль, мережа, DOM-дерево. console.log() — найпростіший спосіб дебажити JS: виводиш змінну в консоль і дивишся.

У IE об'єкт console не існував, поки не відкриєш DevTools. Код з console.log() падав у звичайних користувачів — бо в них DevTools закриті. Розробник відкривав DevTools подивитись — працює. Закривав — все ще працює.

Чому? Бо об'єкт console вже створився при відкритті. Акт спостереження змінив систему назавжди.

Therac-25: коли Heisenbug вбиває (1985-1987)

Це вже не смішно.

Контекст: Therac-25 — медичний апарат для променевої терапії раку. Пацієнт лягає, апарат опромінює пухлину точною дозою радіації. Race condition — це коли два процеси "змагаються" за ресурс, і результат залежить від того, хто встигне першим. Непередбачувано.

Therac-25 мав race condition в софті. Іноді давав летальні дози радіації замість терапевтичних. Загинуло щонайменше троє людей.

Баг з'являвся тільки коли оператор друкував дуже швидко — потрібні були дні практики, щоб випадково натрапити. При стандартному тестуванні — все ідеально. Виробник місяцями не міг відтворити проблему.

Heisenbug, який ховався від спостереження. І вбивав.
———
Класифікація багів (для нердів)

Програмісти створили цілу "фізичну" таксономію:
Баг               Фізик              Що робить                                                         
**Bohrbug** Niels Bohr Стабільний, передбачуваний. Нудний, зате ловиться.
**Heisenbug** Werner Heisenberg Зникає, коли дивишся
**Mandelbug** Benoit Mandelbrot Фрактальний: чим глибше копаєш, тим більше знаходиш
**Schroedinbug** Erwin Schrödinger Код, що не мав би працювати, але працює — поки хтось не подивиться

———
Що з цього випливає

"Працює" — це не так чи ні

Програма не "працює" або "не працює". Вона працює за певних умов. Debug/release. Linux/Windows. Понеділок/вівторок. З логуванням/без. Змінив умови — змінив результат.

Debugger — не вікно. Це втручання.

Ти не "дивишся на програму". Ти створюєш нову систему: програма + debugger. А вона поводиться інакше.

"Працює на моїй машині" — не жарт

Memory layout різний. OS scheduler різний. Timing різний. Ти і твій колега буквально запускаєте різні програми. Обидва праві. Обидва ні.

Баг існує?

Залежить від того, хто дивиться. Як одночасність подій у теорії відносності — немає абсолютної відповіді.
———
Як ловити те, що тікає

Баг зник під debugger'ом? Це не проблема. Це підказка.

Ти щойно дізнався: баг чутливий до timing'у. Значить, шукай race conditions, memory ordering, timing-залежну логіку. Коло звузилось.
👍4👏2
Баг, що зникає коли на нього дивишся (3/3)

Інструменти:
rr — записує виконання програми один раз (включно з timing, потоками, всім). Потім можеш "перемотувати" назад і вперед скільки хочеш. Баг більше не втече.
ThreadSanitizer (TSan) — додаєш прапорець -fsanitize=thread при компіляції, і він слідкує за всіма зверненнями до пам'яті. Якщо два потоки лізуть в одне місце без синхронізації — покаже.
CHESS (Microsoft) — систематично перебирає всі можливі порядки виконання потоків. Не чекає, поки баг "випадково" вилізе — шукає сам.Факт: CHESS відтворив за 30 секунд баг, що з'являвся раз на місяць.
———
Головне

Немає "правди" про програму. Є правда відносно того, як дивишся.

Це не баг у звичному сенсі. Це природа складних систем.

Не питай "де баг?" Питай: "при яких умовах система поводиться так, а при яких — інакше?"

У цьому питанні вже половина відповіді.
———
Наступного разу, коли баг зникне під debugger'ом — посміхнись. Ти щойно побачив квантову механіку в дії.

Heisenbug передає привіт.
👍7
Швидкість ≠ Мудрість

Мій старий друг, Юра Лучанінов написав про пастку: ми плутаємо швидкість з прогресом. AI прискорює руки. Але чи прискорює розуміння?

Когнітивна психологія каже: ні. І це не новина — цю закономірність досліджують десятиліттями.
———
Ілюзія компетентності

Коли щось дається легко, ми автоматично переоцінюємо своє розуміння. Психологи називають це "foresight bias" — плутаємо "мені зараз легко" з "я це знатиму завтра".

AI-підказка прийнята за 2 секунди? Мозок реєструє: "я це знаю".

Але ні. Ти це бачив. А "бачив" і "знаю" — різні речі. Бачив — це коли впізнаєш код, коли його показують. Знаєш — це коли можеш написати сам, без підказки. Перше дається легко. Друге вимагає зусиль.
———
Бажані труднощі

Є такий парадокс: умови, які сповільнюють поточну роботу, посилюють довгострокове засвоєння. Психологи називають це "desirable difficulties" — бажані труднощі.

Що сюди входить? Повторення з інтервалами. Перемішування тем. Самостійне згадування. Генерація замість споживання.

І от пастка: все, що AI усуває "для зручності" — це саме те, що будує справжню експертизу.
———
Ефект генерації

Ми краще запам'ятовуємо те, що генеруємо самі, ніж те, що читаємо готовим. Це довели ще в 1978 році.

Copilot дає готове. Ти приймаєш. Нейронні зв'язки, які мали б сформуватися — не формуються.

Дослідження 2023 року підтвердило це для AI-кодингу: новачки з AI швидше завершують задачі, але розуміння не покращується. І при цьому вони відчувають, що навчилися більше.

Це і є ілюзія плинності. Легко приймати — значить легко забути.
———
GPS для коду

Коли ми вивантажуємо задачі на зовнішні інструменти, поточна продуктивність зростає. Але внутрішні навички можуть слабшати.

Приклад: люди, які постійно користуються навігатором, гірше орієнтуються в просторі. Це доведено.

AI — це GPS для коду. Зручно. Швидко. І потенційно — атрофія.
———
Про глибину

Швидкий досвід ≠ глибокий досвід.

Можна "просидіти" 10 000 годин — і залишитися на поверхні. А можна 20 хвилин з повною присутністю — і щось зміниться назавжди.

Код — так само.

1000 рядків з AI за день — це обсяг. 20 рядків, які ти справді зрозумів — це знання, яке залишиться.
———
Швидке і повільне мислення

Канеман поділив мислення на два режими. Швидке — інтуїтивне, автоматичне. Повільне — аналітичне, свідоме.

AI підсилює швидке: код "тече", рішення приходять миттєво.

Але архітектура, крайові випадки, підтримка — це все повільне мислення. Важке. Але необхідне.
———
Що робити

Пауза перед Accept. 3 секунди. Чи я розумію цей код? Чи я його просто впізнаю?

Спочатку сам. Спробуй написати сам. Навіть неправильно. Потім порівняй з підказкою.

Поясни собі. Якщо не можеш пояснити прийнятий код — ти його не знаєш.

Іноді вимикай. 30 хвилин без Copilot. Відчуй різницю.
———
Головне

AI прискорює написання коду. Але мудрість — це не кількість написаного.

Мудрість — це те, що залишається після труднощів. Час, зусилля, присутність.

Юра написав: "either you manage complexity at boundaries, or it accumulates where it’s most expensive to pay."

Додам: найдорожче місце — твоя голова. Не дозволяй AI платити за тебе тим, що робить тебе слабшим.
———
Джерела:
• Koriat & Bjork (2005) — Illusions of competence
• Bjork & Bjork (2011) — Desirable difficulties
• Slamecka & Graf (1978) — Generation effect
• Risko & Gilbert (2016) — Cognitive offloading
• Peng et al. (2023) — AI code suggestions impact
• Kawakami et al. (2024) — AI and skill decay

Stay tuned 🧠
Please open Telegram to view this post
VIEW IN TELEGRAM
👍111
Натрапив на біржу для ШІ агентів, де вони можуть найняти людину для того що не зможуть самі зробити.
З цікавого, розробники коштують меньше пламбепів....
tg_image_1082744651.png
9.9 KB
Ну як же мило ))

Лайк за ввічливість ))
😁1
Тестую новий Claude Opus 4.6.

Коли задаєш делікатні психологічні питання, то вилізла навіть така от штука.

Це реально дуже круто.
Пару місяців дослідів, спогадів, роскопок веб-архіва...
І скоро на DOU вийде нова стаття з серії "Еволюція Фронтенда".


#анонс #DOU
Твій PR висить другий день.

Ти вже переключився на інший таск. Потім ще на один. Чесно — половину того коду вже не пам'ятаєш.

Коли рев'ювер нарешті гляне, витратиш 20 хвилин просто щоб згадати "а що я тут взагалі робив?"

Знайомо ж?

LinearB проаналізували 8.1 мільйона PR-ів із 4,800 команд. Половина з них простоює 50%+ свого життя. Не рев'ювиться. Не правиться. Просто лежить.

Завтра покажу скільки це коштує в доларах. Спойлер - ти здивуєшся.

Stay tuned 🧠
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Скільки коштує "почекай, гляну після обіду"

Ну давай рахувати.

У штатах розробник коштує ~$82/год з усіма податками (Indeed, BLS). На очікування рев'ю йде 5.8 годин на тиждень. Тобто:

5.8 × 50 тижнів × $82 = $23,780

На одного розробника. На рік.

Команда з 10? $237,800. Просто чекаючи.

Не на саме рев'ю, бо рев'ю — корисна робота. А от PR, що лежить у черзі поки контекст вивітрюється і мерж конфлікти ростуть як гриби після дощу — це вже гроші на вітер.

🇺🇦 А тепер для нас.

Мідл в Україні — ~$3,450/міс (Scroll Media). Сеньйор — $5,000+. З податками та офісом мідл обходиться приблизно в $4,500/міс, тобто ~$27/год.

5.8 × 50 × $27 = $7,830 на одного на рік

Десять мідлів? ~$78,300. Це ж ціла річна зарплата сеньйора. Просто на те, що PR-и лежать.

Джерела: LinearB (8.1M PRs), Full Scale, Scroll Media

Далі — чому це ще гірше ніж здається ⬇️
👍1
🧠 Повільні рев'ю — це подвійний удар

Gloria Mark з UC Irvine виміряла: щоб повернутись у "потік" після переривання, потрібно 23 хвилини 15 секунд. Не приблизно — реально виміряли.

Переключаєшся з поточної задачі на старий PR — платиш цей податок двічі. Спочатку вийди з контексту. Потім згадай, що ти писав три дні тому. Ну, удачі.

І це ж не все.

SmartBear дослідили 2,500 PR-ів:

• PR до 100 рядків → знаходять 87% багів

• PR на 1000+ рядків → лише 28%

Повільне рев'ю = PR розростається = більше багів у проді.

Meta теж опублікували цікаве: задоволеність роботою падає прямо пропорційно часу очікування PR. Не "задоволеність процесом рев'ю". Загальна. Задоволеність. Роботою.

Завтра — що роблять команди, у яких все ок 👇
👍5🤔3🔥1
Що роблять найшвидші команди

LinearB виділяє "elite" рівень — це топ-20% команд, у яких pickup time менше 7 годин. Google взагалі за 4 години рев'ювить. Що ж вони роблять інакше?

1️⃣ Маленькі PR

Graphite кажуть: 50 рядків — ідеал. Google — ~200. Elite команди — 219 в середньому. Менше PR = швидше рев'ю = менше багів = менше конфліктів.

2️⃣ Конкретний рев'ювер

CODEOWNERS у GitHub. Бо "хтось гляне" = ніхто не гляне. Bystander effect працює і в код рев'ю, от так.

3️⃣ Вимірюють pickup time

Не знаєш цифру — не бачиш проблему. Slack бот, який пінгає після 8 годин? Примітивно, але працює.

4️⃣ AI на перший прохід

Лінтери + статичний аналіз ловлять дрібниці до людини. AI code review йде далі — перший прохід за хвилини замість годин.

46% розробників не довіряють AI повністю. І правильно ж. Тому підхід: AI пропонує, людина вирішує. Не навпаки.

Завтра — що робити в понеділок 👇
👍52
📋 Що робити в понеділок

Чотири кроки. Жоден не потребує бюджету чи дозволу менеджера.

1. Витягни метрики

GitHub, GitLab, Bitbucket — усі мають дані. Який у вас avg pickup time? Cycle time? Розмір PR? Не знаєш? От це і є перша проблема.

2. Постав ціль

DORA elite — lead time менше дня. Не обов'язково як Google. "Same business day" для першого рев'ю — вже прогрес.

3. Один експеримент на 2 тижні

Розбий наступний великий PR на 2-3 менших. Або додай CODEOWNERS. Або Slack reminder на стейл PR-и. Щось одне. Подивись на числа.

4. Зроби видимим

Додай PR cycle time на дашборд команди. Коли всі бачать "середній час — 48 годин", розмова починається сама.
———
Повна стаття з усіма джерелами та цифрами:

👉 https://gitautoreview.com/blog/hidden-cost-of-slow-code-reviews

P.S. Ми робили інструмент, який дає AI-рев'ю за хвилини, але публікує коментарі тільки після твого ОК.

Git AutoReview
👍3🔥2
Всім привіт хто доєднався до нас сьогодні.
Трошки пізніше напису сьогодні пост про себе, про що цей канал і що буде тут далі.

Якщо буде мать хвилинку і трошки сами про себе написати - буду радий )
👍17🔥42👏1
Вайб Кодера
https://dou.ua/forums/topic/57819/
Хочу апнути цей матеріал. Я декількамісяців досліджував тему, а переглядів досить мало.

Знаю шо багатобуков і можна попросити агента шоб суть росказав, але...

не делегуйте задоволення прочитати у вільний час ))
👍3🔥1