Hacker News Digest

Тег: #code-refactoring

Постов: 5

Simplify your code: Functional core, imperative shell (testing.googleblog.com) 🔥 Горячее 💬 Длинная дискуссия

Google предлагает разделять код на функциональное ядро и императивную оболочку для упрощения разработки. Функциональное ядро содержит чистую бизнес-логику без побочных эффектов, а императивная оболочка обрабатывает взаимодействие с внешними системами. Такой подход позволяет тестировать логику изолированно и делает код более поддерживаемым. В статье приведен пример кода для отправки уведомлений об окончании подписки, демонстрирующий разницу между смешиванием логики и побочных эффектов и их разделением.

При таком разделении добавление новых функций становится проще - достаточно создать новые чистые функции и переиспользовать существующие. Например, для напоминаний о подписке можно создать функцию generateReminderEmails, используя уже существующую getExpiredUsers. Этот паттерн, впервые описанный Гэри Бернхардтом, помогает создавать более тестируемый, поддерживаемый и адаптивный код, избегая "спагетти" из смешанной логики и побочных эффектов.

by reqo • 25 октября 2025 г. в 07:07 • 385 points

ОригиналHN

#functional-programming#imperative-programming#testing#software-architecture#google#code-refactoring#code-maintainability#bash

Комментарии (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 (levelup.gitconnected.com)

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-инженерии.

Советы ветеранам

  1. Делайте микро-промпты: «добавь docstring» → «добавь пример вызова».
  2. Держи CI/CD: автотесты ловят ошибки, которые AI пропустил.
  3. Используй AI как пару, а не замену: «покажи diff» вместо «перепиши всё».

Итог
Vibe-кодинг не убивает профессию, а сдвигает фокус: от написания символов к управлению смыслом. Сборочная линия есть, но над ней всё ещё нужен человек с вкусом.

by thunderbong • 28 августа 2025 г. в 15:55 • 169 points

ОригиналHN

#python#llm#machine-learning#a-algorithm#minimax-algorithm#prompt-engineering#debugging#code-refactoring#software-architecture#natural-language-processing

Комментарии (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 (github.com)

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 приветствуются.

by simonpure • 08 августа 2025 г. в 19:20 • 140 points

ОригиналHN

#elisp#emacs#steveyegge#github#llm#code-generation#code-refactoring

Комментарии (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 (elite-ai-assisted-coding.dev)

Задача: перенести 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 ощущается «ближе к одной команде — один результат».

by intellectronica • 08 августа 2025 г. в 15:38 • 155 points

ОригиналHN

#typescript#rust#bash#gpt-5#claude-4-sonnet#ai-assisted-coding#code-refactoring#testing#tdd#llm

Комментарии (124)

  • Пользователи сомневаются в объективности сравнений: результаты сильно зависят от системных промптов, харнесов и задач.
  • Критика выбора моделей: вместо топ-версии Claude Opus сравнивали более дешёвый Sonnet, что искажает оценку «лучшей» модели.
  • Стоимость vs качество: большинство разработчиков не готовы платить 10× за Opus, поэтому GPT-5 рассматривают как «cost-effective» вариант.
  • Опыт в продакшене: многие находят Claude Code (Sonnet/Opus) надёжнее при работе с большими кодовыми базами и TDD, тогда как GPT-5 хорош для разовых скриптов.
  • Нет единой метрики: из-за недетерминированности моделей и субъективных критериев «хорошего кода» каждый получает разные результаты.

Jules, our asynchronous coding agent (blog.google) 🔥 Горячее 💬 Длинная дискуссия

Google представила Jules — асинхронного ИИ-агента для программирования — для всех пользователей, завершив публичную бету. Агент выполняет задачи в фоновом режиме: пишет и рефакторит код, правит баги, настраивает пайплайны и документирует изменения, не требуя постоянного участия разработчика. Это помогает параллелить работу, ускорять итерации и снижать контекстные переключения.

Jules интегрируется с инструментами разработчиков, может брать на себя длинные задачи, делить их на шаги, сообщать о прогрессе и запрашивать уточнения только при необходимости. Доступен через Google Labs и ориентирован на повышение продуктивности как отдельных инженеров, так и команд, позволяя запускать больше экспериментальных веток и быстрее проводить ревью.

by meetpateltech • 06 августа 2025 г. в 16:05 • 325 points

ОригиналHN

#llm#programming#code-refactoring#bug-fixing#pipelines#google#google-labs#asynchronous-processing

Комментарии (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 по скорости/качеству и стабильности; пользователи просят прозрачные тарифы и единый продуктовый опыт.