Simplify your code: Functional core, imperative shell 🔥 Горячее 💬 Длинная дискуссия
Google предлагает разделять код на функциональное ядро и императивную оболочку для упрощения разработки. Функциональное ядро содержит чистую бизнес-логику без побочных эффектов, а императивная оболочка обрабатывает взаимодействие с внешними системами. Такой подход позволяет тестировать логику изолированно и делает код более поддерживаемым. В статье приведен пример кода для отправки уведомлений об окончании подписки, демонстрирующий разницу между смешиванием логики и побочных эффектов и их разделением.
При таком разделении добавление новых функций становится проще - достаточно создать новые чистые функции и переиспользовать существующие. Например, для напоминаний о подписке можно создать функцию generateReminderEmails, используя уже существующую getExpiredUsers. Этот паттерн, впервые описанный Гэри Бернхардтом, помогает создавать более тестируемый, поддерживаемый и адаптивный код, избегая "спагетти" из смешанной логики и побочных эффектов.
Комментарии (170)
- Обсуждение вращается вокруг идеи "functional core, imperative shell" (FCIS) и противоположного ей подхода "generic core, specific shell", а также влияния этих подходов на тестируемость, производительность и читаемость кода.
- Участники обсуждают, что FCIS делает код более тестируемым, но может привести к проблемам с производительностью при работе с большими объемами данных, особенно если язык не поддерживает ленивые коллекции.
- Также обсуждается, что важно разделять логику и эффекты, но пример кода в статье вызывает вопросы, потому что он не демонстрирует лучшие практики, такие как пагинация или фильтрация на уровне базы данных.
- Некоторые участники подчеркивают, что важно не только следовать паттерну, но и использовать здравый смысл, чтобы не плодить сущности, которые не масштабируются, и не создавать ситуаций, где пример кода в статье может быть использован как оправдание для плохого кода.
Vibe coding as a coding veteran: from 8-bit assembly to English-as-code
Vibe-кодинг глазами ветерана
Эксперимент
2 недели, 40 часов, 5 k строк Python: AI-агент и я пишем микро-игру с алгоритмами A*, Minimax и пр. Цель — проверить, вытесняет ли LLM «искусство программирования».
Процесс
- Промптинг: описываю задачи естественным языком, AI генерирует код.
- Рефакторинг: «сделай класс короче», «добавь тесты» — срабатывает 80 %.
- Отладка: трассировка стека + «почему падает?» — LLM быстро находит баги.
- Архитектура: за меня выбирает структуру пакетов, но я корректирую.
Что понравилось
- Скорость: MVP за 3 вечера.
- Меньше рутины: никаких «import os.path.join».
- Новые идеи: AI предложил кэш-стратегию, которой я не планировал.
Что не так
- «Галлюцинации» API: методы, которых нет в библиотеке.
- Сложные баги: race condition LLM не видит без контекста.
- Читаемость: имена вроде
helper_utility_v2приходится переименовывать.
Выводы
- Junior-девелопер теперь = «человек, который умеет спрашивать».
- Сеньор нужен, чтобы фильтровать, тестировать и нести ответственность.
- Синтаксис умирает, зато растёт ценность системного мышления и prompt-инженерии.
Советы ветеранам
- Делайте микро-промпты: «добавь docstring» → «добавь пример вызова».
- Держи CI/CD: автотесты ловят ошибки, которые AI пропустил.
- Используй AI как пару, а не замену: «покажи diff» вместо «перепиши всё».
Итог
Vibe-кодинг не убивает профессию, а сдвигает фокус: от написания символов к управлению смыслом. Сборочная линия есть, но над ней всё ещё нужен человек с вкусом.
Комментарии (107)
- Участники сравнивают LLM с консалтинговой фирмой: 50 % шанс получить эксперта, 50 % — стажёра; приходится перечитывать каждую строку.
- «Vibe-coding» (генерация без чтения) вызывает опасения: сложно дебажить, нельзя защитить авторские права, а тонкие баги пролезают.
- Опыт показывает: AI полезен в известных языках и задачах (Python, CRUD), но почти бесполезен в нишевых (C/C++ gamedev, Prolog, Haskell).
- Старшие разработчики всё равно нужны: только они могут проверять, направлять и «владеть» кодом, созданным ИИ.
- Возникает вопрос: если не брать джунов, откуда возьмутся будущие сеньоры?
- Предлагают термины вместо «vibe-coding»: «pro-coding», «prompt-coding», «reviewing code».
Efrit: A native elisp coding agent running in Emacs
efrit — агент для написания кода на чистом Elisp, работающий прямо в Emacs.
Он читает/пишет буферы, запускает команды, ищет документацию, тестирует и рефакторит код, используя только встроенные средства Emacs и внешние процессы.
Возможности
- Понимает структуру проекта (файлы, зависимости, тесты).
- Пишет новые функции, классы, тесты, документацию.
- Исправляет баги и предлагает улучшения.
- Работает в фоне и может действовать по хукам (сохранение, коммит).
Установка
(use-package efrit
:straight (:host github :repo "steveyegge/efrit"))
Запуск: M-x efrit-mode в нужном буфере или (efrit-global-mode 1) для всей сессии.
Команды
efrit-suggest-improvements— предложения по коду.efrit-write-tests— сгенерировать тесты.efrit-explain-region— объяснить выделенный фрагмент.
Конфигурация
(setq efrit-model "gpt-4o-mini"
efrit-max-tokens 4000
efrit-auto-save t)
Статус
Альфа-версия; API может меняться. Пул-реквесты и issue приветствуются.
Комментарии (29)
- Пользователи обсуждают новый Emacs-пакет Efrit (от Steve Yegge) для AI-ассистента внутри редактора.
- Уточняют, что «efrit» — это игра слов: «e» (emacs) + «ifrit» (разновидность джинна).
- Сравнивают с gptel: Efrit пока заточен под Anthropic, в то время как gptel поддерживает множество бэкендов.
- Кто-то уже запустил Efrit c Gemini через прокси, другие жалуются на ошибки и отсутствие документации.
- Параллельно идёт спор о «современном» способе конфигурировать Emacs: bedrock, doom, ручной минимализм vs «сделать из Emacs VS Code».
GPT-5 vs. Sonnet: Complex Agentic Coding
Задача: перенести TypeScript-утилиту Ruler на Rust, проверить идентичность через bash-тест.
Модели: GPT-5 (новый, превью) и Claude 4 Sonnet.
GPT-5
- Сразу прочитал код, составил подробный
plan.md, получил одобрение. - Работал почти без остановок, дважды отчитывался о статусе.
- Сначала написал bash-скрипт, который запускает оригинал и порт во временной папке и сравнивает вывод.
- Затем сгенерировал структуру
src/,Cargo.toml, CLI-аргументы, логикуapply/init/revert, обработку конфигов и MCP. - Итеративно правил код, пока тест не прошёл «зелёным».
- Время: ~20 мин, 1 коммит, ветка
feat/rust-port.
Claude 4 Sonnet
- Та же инструкция.
- Сразу начал писать Rust, но упустил bash-тест; пришлось напомнить.
- Тест написал быстрее, но менее читаемый.
- Порт делал «пачками»: сначала CLI, потом логика, потом MCP.
- После 3-х итераций тест прошёл.
- Время: ~30 мин, 3 коммита.
Вывод
- GPT-5 агентнее: сам планирует, реже спрашивает, меньше ошибок.
- Claude надёжнее в деталях, но требует чётких шагов.
- Оба справились, но GPT-5 ощущается «ближе к одной команде — один результат».
Комментарии (124)
- Пользователи сомневаются в объективности сравнений: результаты сильно зависят от системных промптов, харнесов и задач.
- Критика выбора моделей: вместо топ-версии Claude Opus сравнивали более дешёвый Sonnet, что искажает оценку «лучшей» модели.
- Стоимость vs качество: большинство разработчиков не готовы платить 10× за Opus, поэтому GPT-5 рассматривают как «cost-effective» вариант.
- Опыт в продакшене: многие находят Claude Code (Sonnet/Opus) надёжнее при работе с большими кодовыми базами и TDD, тогда как GPT-5 хорош для разовых скриптов.
- Нет единой метрики: из-за недетерминированности моделей и субъективных критериев «хорошего кода» каждый получает разные результаты.
Jules, our asynchronous coding agent 🔥 Горячее 💬 Длинная дискуссия
Google представила Jules — асинхронного ИИ-агента для программирования — для всех пользователей, завершив публичную бету. Агент выполняет задачи в фоновом режиме: пишет и рефакторит код, правит баги, настраивает пайплайны и документирует изменения, не требуя постоянного участия разработчика. Это помогает параллелить работу, ускорять итерации и снижать контекстные переключения.
Jules интегрируется с инструментами разработчиков, может брать на себя длинные задачи, делить их на шаги, сообщать о прогрессе и запрашивать уточнения только при необходимости. Доступен через Google Labs и ориентирован на повышение продуктивности как отдельных инженеров, так и команд, позволяя запускать больше экспериментальных веток и быстрее проводить ревью.
Комментарии (221)
- Пользователи жалуются на запутанные подписки Google: разные продукты (Jules, Gemini App/CLI, Code Assist) разбросаны между Workspace и GCP, цены и доступ скрыты или требуют согласий и биллинга.
- Опыт с Jules противоречивый: часть считает его слабее Claude Code, Copilot/Claude Sonnet и Gemini CLI (низкое качество кода, проблемы в монорепо, зацикливание, отсутствие кнопки STOP, баги UI), другие довольны асинхронным форматом и считают удобным для пачек задач, тестов и сайд‑проектов.
- Замечены регрессии: лимит задач на бесплатном плане снизили с 60 до 15; качество, по словам некоторых, упало после увеличения дневных лимитов на раннем превью.
- Пользователи хотят интеграции с GitHub (issues, комментирование PR для фидбэка), явного просмотра публичных улучшений кода и лучшей связности с Gemini CLI/Actions.
- Есть путаница в позиционировании: что такое «асинхронный кодовый агент», чем Jules отличается от Gemini CLI и с кем он конкурирует (Claude Code, Codex, Crush).
- Критика брендинга/UX: «детский» лендинг, слабый контраст, плохой пиксель‑арт; общее ощущение, что UI отстает от возможностей модели.
- Итоговое восприятие: интерес к формату асинхронных агентов есть, но текущая реализация Jules часто уступает Claude Code по скорости/качеству и стабильности; пользователи просят прозрачные тарифы и единый продуктовый опыт.