Dmatryusофрения
40 subscribers
290 photos
10 videos
15 files
148 links
Пишу о книгах, лидерстве, технологиях, opensource, своих проектах и наверное чем-то ещё. Ну и репосты IT приколямб.
Download Telegram
С каждым месяцем мой скилл разработки с LLM растет, а опыт обогащается. Изначально я создавал плагин, как сборник лучших практик. Я думаю пойти дальше и сделать не просто плагин, а инструмент, который будет основан прежде всего на моем опыте, а во вторую очередь на лучших практиках. Пока нет четких мыслей, что конкретно это будет, но есть четкое понимание, что оно нужно.

В недалеком будущем появится довольно большой объем нейрослопного легаси, который написали джуны или того хуже менеджеры. Но это будут продукты, которые необходимо будет поддерживать, развивать и перерабатывать архитектурно. Синьоры грезят, что им за это будут много платить, но я бы не был столь оптимистичен. В любом случае, я хочу, чтобы в этом будущем у каждого технобата был инструмент для разгребания нейросвалки. Работа нудная и масштабная, но необходимая. Взрыв LLM порождает огромное количество энтропии и кому-то придется все это приводить в порядок. ⚫️

Пока это все просто крик души, но если будут новые идеи по поводу, буду делиться.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Последствия вайбкодинга


Вайбкодинг — это генерация на ощущениях, без осмысления того, что получается. Вот к чему это приводит.

LLM обесценила производство кода, но не его осмысление. Генерировать стало почти бесплатно, понимать — нет. Кода прибывает больше, чем человек успевает рассмотреть.

Главный дефицит — внимание, а не понимание. Нельзя неправильно понять то, на что не смотрел. Под сроками внимание утекает в результат: цели достигаются, но за фасадом успеха копится долг.

Модель не спасёт от неэффективного использования — и не должна. LLM стохастична: гарантию вероятностный процесс не даёт в принципе. Дисциплина — это слой снаружи генератора, а не внутри него. И чем мощнее модель, тем больше она производит на единицу твоего внимания — потребность в дисциплине не падает, а растёт.

Внимание стоит тратить на источник, а не на продукт. Не досматривать сгенерированный код, а вкладываться вверх по течению — в описательную документацию: как устроен проект, из чего состоит, что переиспользуемо, что неизменно. Документация первична: не код документируется потом, а код порождается из документации. Это работа, которую нельзя отдать агенту. Человек владеет источником, агент — порождением. Отдашь структуру модели — она заполнит её правдоподобной мутью.

Нейрокод правдоподобно врёт. Обычное легаси честно уродливо — беспорядок сам сигналит, где опасно. Нейрокод выглядит чисто, но может делать не то, что о себе сообщает: за ним нет автора-носителя намерения. Интуиция «чисто — значит норм» ломается.
👍42🔥2
Как вы поняли, вайбкодинг сейчас для меня важная тема (дед хайпует). Так что вот вам спизженные мемы по теме.
😁4
Forwarded from Python/ django
Вышел scikit-learn 1.9.

Это не релиз про «новую модную модель», а про то, что библиотека становится удобнее для реальной ML-разработки.

Главное:

• experimental callbacks

Теперь можно вешать callbacks на estimator-ы через set_callbacks() и отслеживать ключевые этапы fit.

Из коробки есть ProgressBar для прогресса и ScoringMonitor для логирования метрик.

• лучшее HTML-представление моделей

В Jupyter estimator-ы теперь показывают больше полезной информации после fit: fitted attributes, типы, значения, output features у трансформеров и пайплайнов.

Для сложных Pipeline, ColumnTransformer и FeatureUnion это реально удобнее, чем вручную копаться в атрибутах.

• новый sparse_interface

Появилась настройка:


sklearn.set_config(sparse_interface="sparray")


Она позволяет управлять тем, возвращает scikit-learn старые SciPy sparse matrix или новые sparse array.

Пока default остаётся spmatrix, но дальше библиотека будет постепенно двигаться к sparray.

• больше поддержки Array API

Часть моделей и метрик теперь лучше работает с Array API-compatible inputs.

• Narwhals как новая лёгкая зависимость

Она нужна, чтобы проще поддерживать разные dataframe-библиотеки, например pandas и polars, особенно в связке с set_output.


Обновление:


pip install --upgrade scikit-learn


https://blog.scikit-learn.org/updates/release-1-9/
🔥2
Что-то я уже подзабыл КАК ЖЕ ДОЛГО СОБИРАЮТСЯ БИЛДЫ в компилируемых языках (балуюсь с Rust 📱)
Please open Telegram to view this post
VIEW IN TELEGRAM
Кажется началось...
Forwarded from Sberloga (🇻 🇱 🇦 🇩)
История о том, как «вайбкодинг» окончательно победил здравый смысл.
Вчера проводили экспертный созвон. Собрались DS’ы, чтобы помочь молодому фаундеру. Парень пилит стартап: поиск багов и проблем на сайтах с помощью LLM. Благое дело.
Начало стандартное: парень открывает презентацию и начинает яростно «продавать» нам инвесторский питч. Мы его мягко тормозим: «Друг, мы тут DS-инженеры, продавать не надо. Расскажи техническую суть, где затык?»
Он объясняет: «Ну, я закидываю в LLM разные факты, а она мне подсвечивает какую-то незначительную дичь вместо реальных проблем».
Окей, классика. Просим показать пример: что уходит на вход и что получается на выходе. И тут начался чистый киберпанк.
Вместо того чтобы открыть логи или скопировать готовый пример, парень открывает Cursor AI и просит нейросеть… найти этот пример в коде. Говорит: «Так быстрее, чем я сам искать буду».
Ладно, глубокий вдох. Спрашиваем: «А почему просто не посмотреть логи в БД?»
Ответ: «Ну, в интерфейсе это можно глянуть, но он сейчас почему-то упал. А в DataGrip открывать… там очень сложная структура, я не разберусь».
Пока он это говорил, Cursor закономерно ушел в астрал. Нейросеть не понимает, где лежат нужные ключи, потому что в проекте вообще нет никакой структуры. Что делает наш фаундер? Он просто копирует приватный ключ, пачку паролей прямо в окно чата Курсора и отправляет. Тут даже сама модель офигела и выдала системное предупреждение в духе: «Чувак, у тебя всё нормально? Ты мне только что все доступы и секреты слил».
Мы у экрана тихо сползаем под стол. Но ладно, магия вайбкодинга активировалась, Cursor начал пыхтеть. Проект не просто большой — он огромный, запутанный, без единой строчки документации и DDL-схем таблиц. Нейросеть 15 минут генерировала около 20 SQL-запросов, металась по углам, искала этот несчастный пример… и не смогла.
Итог первой части марлезонского балета: мы 15 минут сидели и смотрели, как ИИ пытается раскопать артефакты другого ИИ, чтобы просто увидеть ОДИН пример плохой работы (ради чего созвон и собирался). Не увидели.
Окей, заходим с другой стороны. Пытаемся понять логику: «Ладно, бог с ними, с логами. Ты сам-то понимаешь, как модель должна искать проблемы? Какой промт? Что в контекст передаешь?»
Показывает промт. Это гигантская простыня текста в стиле «делай хорошо, плохо не делай».
Спрашиваем: «А в самом запросе данные какие?»
Ответ: «У меня идея — передавать туда ВООБЩЕ ВСЕ СЫРЫЕ ДАННЫЕ, пусть LLM сама разбирается».
Мы: «А ты сам эти сырые данные видел? Сам сможешь в них разобраться?»
Фаундер, на полном серьезе: «Ну так LLM же сама всё может!»
В этот момент где-то в мире заплакал один Илья Суцкевер. Слушать это было физически больно.
Естественно, парня мы без помощи не оставили и насыпали нормальной инженерной базы:
- Переписать промт, урезать воду и сделать жесткий Few-Shot / One-Shot с четкими примерами «как надо» и «как не надо».
- Собрать наконец Golden Dataset для нормальной оценки ответов.
- Прикрутить Langfuse, чтобы видеть трейсы и понимать, куда улетают токены.
- Хватит пихать терабайты сырого мусора в контекст. Даже если данные структурированы, сделайте сначала первичный код-анализ, найдите паттерны, напишите эвристики и шлите в LLM подсказки о сработках, а не весь дамп базы.
Но судя по тому, что проект полностью написан нейронкой без контроля человека, а любое действие приводит к 15-минутному ступору Курсора — через месяц активных правок эта конструкция окончательно схлопнется под собственным весом.
Кстати, тут стартаперы уже вовсю выкатывают вакансии (как на картинке). Ищут крепких синьоров, чтобы отрефакторить то, что они там «навайбкодили». Чувствую, это будет главный тренд в найме на ближайшие пару лет.
😁3
Forwarded from Борис опять
Я очень много пишу код с помощью Claude Code. Точнее сказать, что иначе я уже не пишу код вообще. При этом это произошло как-то само собой и я не уверен, что это хорошо.

С одной стороны проект растет непомерными темпами. С другой стороны у меня постоянно ощущение, что я одной клод сессией правлю баги созданные другой клод сессией. Часто это такие баги, которые я бы сам никогда (по моему мнению) не допустил.

Я запустил клод проанализировать историю переписок и классифицировать все сессии по категориям.

Похоже, что я правда 80%+ времени правлю баги или ищу их.

При этом может быть два объяснения:
1. Клод пишет плохой код и эти баги — дополнительный эффект вайбкода.
2. Написание любого кода создает баги, код теперь пишется гораздо быстрее, поэтому я встречаю больше багов в единицу времени. Если бы писал этот код сам, то видел бы примерно столько же багов, но не в такой концентрации.

В любом случае можно сделать вывод, что вайбкодинг это скам: каждый сожженый на создание чего-то токен ведет к сжиганию ещё двух-трех, чтобы это нормально работало.
💯3
Вот лупы,
Что строят агентские лупы,
Что строят другие агентские лупы,
Что делают код, обойдемся без глупой
Рифмы в доме, что строит допустим Джек
Полезное
Forwarded from Python/ django
🖥 Git bisect - для поиска багов

Когда баг появился где-то между сотнями коммитов, не нужно проверять историю вручную.

Запускаем:


git bisect start
git bisect bad
git bisect good <старый_рабочий_коммит>


Git будет делить историю пополам и просить отметить каждый найденный коммит:


git bisect good
git bisect bad


Через несколько шагов он покажет коммит, в котором появился баг.

Можно автоматизировать:


git bisect run pytest


Тогда Git сам прогонит тесты и найдёт виновника.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Про «породы котов»: почему классификация не работает (1/3)

Читал «Herding Cats» Рейнуотера — книга про менеджмент программистов, само название отсылает к безнадёжности затеи пасти кошек. Там есть классификация «пород»: архитектор, лихач, волшебник, минималист, разгильдяй и ещё десяток. Штука цепляющая, но как инструмент нерабочая.

Разберу в трёх частях: почему не работает, что я собрал вместо, и что при этом отвалилось.

Итак, три дефекта.

Категории не взаимоисключающие. Черты всех пород находятся в одном человеке в разной пропорции. Классификация, под которую попадает каждый, не предсказывает ничего.

Нет процедуры измерения. Как отличить «художника» от «учёного», кроме вкуса наблюдателя, — не сказано.

Описание перемешано с оценкой. «Разгильдяй» — это не наблюдение, а раздражение, оформленное как термин. Такой ярлык говорит больше о процессе, чем о человеке: если я устойчиво вижу в человеке разгильдяя, это данные о том, что моя система не даёт ему сигнала о качестве.

По сути дефект один: наблюдения у Рейнуотера дименсиональные, а оформление категориальное. Психометрика этот переход прошла давно — от четырёх темпераментов и MBTI к чертам, где нет «экстраверта», есть степень выраженности.

Практическая разница не косметическая. С типами комплементарность команды — это подбор пар людей по интуиции. Со шкалами — арифметика профиля: смотришь не «кого с кем поставить», а какие шкалы в сумме провалены. А ещё можно оценивать от наблюдаемых фактов, а не ощущений.

Дальше — что получилось вместо пород.

#post #techlead
2
1992: С++ is gay
1997: Perl is gay
2002: PHP is gay
2007: Java is gay
2012: Java is still gay
2017: ok, Java is still gay, but python is the gayest
2022: ML is gay
2024: AI is gay
2026: HR is gay
*не является пропагандой нетрадиционных ценностей, хотя тут уже по-аглицки все и так читать разучились айти блять
Про «породы котов»: что вместо них (2/3)

В первой части — почему классификация пород не работает. Теперь что я собрал взамен.

Главное: это измеряет не уровень. Оси мерят паттерн поведения — что человек делает по умолчанию и что должно произойти, чтобы он поступил иначе. Ни один полюс не лучше другого, у каждого своя цена, поэтому идеального профиля не существует — есть подходящий задаче.

Это принципиально. Сильный и слабый специалист могут иметь одинаковый профиль, а два сеньора одного грейда — противоположный. Джун, начинающий с абстракций, и сеньор, начинающий с данных, отличаются не паттерном, а тем, чем паттерн подпёрт. Поэтому к каждой оси прилагается вопрос-различитель. Например, для «скорость добротность»: он остановился, потому что решил, что хватит, или потому что не видит дефекта? Первое — паттерн, второе — квалификация. Это разные разговоры с человеком.

Лестница градаций. От −3 до +3, одна для всех осей. Знак — направление, величина — уровень доказательства, которого человек требует, чтобы уйти со своего полюса:

±1 — признак того, что противоположный полюс уместен (сигнал)
±2 — оценка, что свой полюс проигрывает (расчёт)
±3 — свой полюс уже не сработал (факт)

Каждая ось определяет только одно: что на ней значит «свой полюс проигрывает».

Четыре оси:

Конкретика абстракция. На каком уровне человек держит задачу: открывает данные и код или начинает со схемы и постановки.

Эксплуатация исследование. Тяготение к освоенному против незнакомого. Территория — подход, инструмент или предметная область. По сути exploration/exploitation как в RL: распределение ограниченного ресурса между использованием известного и проверкой неизвестного.

Скорость добротность. Личный порог «достаточно хорошо» для того, что сдаёшь.

Кооперация самостоятельность. Как человек по умолчанию организует работу. Важно: не про затык — кооперация начинается до него, поэтому ось не путается с квалификацией.

Плюс к каждой оси — что наблюдать в двух контекстах (разработка и DS), риски обоих полюсов и ориентир по типичному значению для роли.

В третьей части — восемь кандидатов было, четыре осталось. Почему отвалились остальные, и какие правила из этого вышли.

#post #techlead
2
Ну я
😁4
Про «породы котов»: чего в модели нет (3/3)

Кандидатов в оси было восемь, выжило четыре. Отстрел дал больше, чем придумывание: из причин отклонения вышли проверки, применимые к любой оси.

Ось живёт только там, где норма оставляет свободу. DoD задаёт две вещи: как делать — планка качества, стиль, объём проверки; что сдать — предмет результата. В первом отклонение это предпочтение, то есть черта. Во втором — несделанная задача, то есть дисфункция с причиной. На этом отвалился кандидат «артефакт понимание»: считать результатом работающую вещь или объяснённое явление — вопрос постановки, а не человека.

Ось не должна быть производной от других. Признак: один эпизод засчитывается дважды и в профиле выглядит как два независимых сигнала. Так ушёл «аппетит к риску» — это чтение комбинации других осей, а не самостоятельная величина. Симптом, по которому это ловится: ось расползается в соседние при каждой переформулировке.

Ось мерит процесс, а не его осадок. T-shape — глубина в одном плюс поверхностное владение соседним — складывается из сотни решений «идти ли в незнакомое» за годы. Это результат, а не механизм; целиком свернулся в ось «эксплуатация исследование».

У оси должно быть два настоящих полюса. «Пишет текст до кода» полюса не имеет: не думать нельзя, поэтому минус пришлось бы определять через отсутствие текста, а отсутствие — нуль, а не полюс.

Полезный побочный эффект: эти же проверки объясняют, почему не работают многие популярные классификации разработчиков. Обычно они мерят либо осадок, либо норму.

#post #techlead
2