Hacker News Digest

Тег: #software-architecture

Постов: 6

The Tower Keeps Rising (lucumr.pocoo.org) 🔥 Горячее 💬 Длинная дискуссия

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

Как в истории БАБЕЛ: «и вот они имели одно слово, и ничего не было им противостоящее». В результате проект продолжает расти, пока не исчезает архитектурный язык, который позволял людям рассуждать о системе вместе. Пример: один агент добавляет OAuth, другой — кэширование, третий — перестраивает базу и делает UI розовым; всё компилируется, тесты проходят, но никто не обсуждает, как эти изменения влияют на общую модель. В результате «башня» продолжает расти, пока не исчезнет общий язык, который раньше удерживал её в целости.

Эта ситуация обнажает парадокс: технологии ускоряют прогресс, но стирают опору совместного творчества. Без согласования команда теряет способность видеть системные риски, а проект остаётся уязвимым, хотя стены всё растут.

by cdrnsf • 14 июля 2026 г. в 16:57 • 480 points

ОригиналHN

#ai-assisted-development#code-quality#code-review#collaborative-development#programming-practices#project-management#software-architecture#software-development#teamwork

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

  • Композиция в коде сравнивается с Tetris: без очистки строки (упрощения) система «вываливается».
  • Потеря общего понимания проекта приводит к росту «башни» без обратной связи, как в истории Бабеля.
  • Агентное программирование похоже на управление: разработчики теряют контроль и видимость над изменениями.
  • Повышение производительности возможно, но без дисциплины и ревью код быстро теряет смысл и стабильность.

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

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

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

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

ОригиналHN

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

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

  • Обсуждение вращается вокруг идеи "functional core, imperative shell" (FCIS) и противоположного ей подхода "generic core, specific shell", а также влияния этих подходов на тестируемость, производительность и читаемость кода.
  • Участники обсуждают, что FCIS делает код более тестируемым, но может привести к проблемам с производительностью при работе с большими объемами данных, особенно если язык не поддерживает ленивые коллекции.
  • Также обсуждается, что важно разделять логику и эффекты, но пример кода в статье вызывает вопросы, потому что он не демонстрирует лучшие практики, такие как пагинация или фильтрация на уровне базы данных.
  • Некоторые участники подчеркивают, что важно не только следовать паттерну, но и использовать здравый смысл, чтобы не плодить сущности, которые не масштабируются, и не создавать ситуаций, где пример кода в статье может быть использован как оправдание для плохого кода.

The bloat of edge-case first libraries (43081j.com)

Многие библиотеки в экосистеме JavaScript стали избыточно сложными из-за попыток обработать все возможные крайние случаи, даже те, что на практике почти не встречаются. Например, функция clamp, предназначенная для ограничения чисел, превращается в монстра, проверяющего строки, валидирующего типы и значения, что приводит к появлению микробиблиотек вроде is-number с 90 млн загрузок в неделю. Это результат плохого технического дизайна: вместо чёткого определения ожидаемых входных данных разработчики добавляют слои проверок для гипотетических сценариев.

Правильный подход — проектировать функции под конкретные типы данных, оставляя валидацию значений на усмотрение вызывающей стороны. Библиотеки вроде is-arrayish или pascalcase, принимающие разнородные входы, лишь увеличивают сложность и зависимости без реальной пользы. Стоит вернуться к простоте: в большинстве случаев достаточно встроенных методов языка, а специализированные решения нужны только для узких задач, а не как стандарт.

by PaulHoule • 21 сентября 2025 г. в 02:09 • 108 points

ОригиналHN

#design-patterns#javascript#libraries#nodejs#software-architecture#typescript

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

  • Обсуждение критикует избыточное использование зависимостей в JavaScript/TypeScript для простых задач, таких как проверка типов, что ведет к раздуванию экосистемы.
  • Участники связывают проблему с историческими особенностями JavaScript: отсутствием строгой типизации и богатой стандартной библиотеки в прошлом.
  • Поднимается вопрос о дизайне контрактов функций: следует ли валидировать входные данные внутри функции или возлагать эту ответственность на вызывающую сторону.
  • Отмечается культурное различие между сообществами: в Python принята модель "согласованных взрослых", а в JS — оборонительное программирование.
  • Обсуждается роль статической типизации (TypeScript) и стандартных библиотек как способа уменьшить потребность в микро-пакетах для проверок.

If you are good at code review, you will be good at using AI agents (seangoedecke.com)

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

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

by imasl42 • 20 сентября 2025 г. в 04:59 • 119 points

ОригиналHN

#ai-agents#code-generation#code-review#development-processes#llm#non-blocking-requests#open-source#parallel-processing#software-architecture

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

  • Сомнения в эффективности использования ИИ для генерации кода из-за высокого процента ошибок и необходимости тщательного ревью, которое может быть более трудоемким, чем написание кода с нуля.
  • Озабоченность качеством и надежностью ИИ-сгенерированного кода, особенно в зрелых проектах и open source, где отсутствие публичного ревью может подорвать доверие.
  • Увеличение нагрузки на разработчиков из-за необходимости ревью большего объема кода, который часто требует повышенного внимания из-за непредсказуемости ИИ.
  • Потеря преимуществ человеческого взаимодействия в процессе ревью, поскольку ИИ не может участвовать в обсуждении или доработке кода.
  • Необходимость разработки новых процессов и инструментов для эффективного ревью ИИ-сгенерированного кода, включая возможность комментирования и взаимодействия с агентами.

Cognitive load is what matters (github.com) 🔥 Горячее 💬 Длинная дискуссия

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

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

Правила применимы к любому языку и масштабу проекта.

by nromiun • 30 августа 2025 г. в 12:58 • 1388 points

ОригиналHN

#code-maintainability#code-readability#coding-best-practices#github#software-architecture#software-design

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

  • Участники сходятся во мнении, что «простота» кода измеряется не строками, а когнитивной нагрузкой при его изменении (Ousterhout: complexity = cognitive load × frequency of change).
  • Часто «сложный» код — результат привычки или неопытности; опытные разработчики умеют сжимать идеи до минимально необходимого набора понятий.
  • Помогают: ранние возвраты, выразительные имена переменных, тесты, чёткие границы компонентов и повторяющиеся стандарты проекта.
  • Противоречие: «куча if-ов» кажётся простой, но скрывает дублирование; избыточные абстракции тоже усложняют отладку.
  • Ключевой совет — писать код как текст для людей, а не для машины, и сознательно тратить время на упрощение, даже если это не приносит немедленной карьерной выгоды.

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

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

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

  • Участники сравнивают LLM с консалтинговой фирмой: 50 % шанс получить эксперта, 50 % — стажёра; приходится перечитывать каждую строку.
  • «Vibe-coding» (генерация без чтения) вызывает опасения: сложно дебажить, нельзя защитить авторские права, а тонкие баги пролезают.
  • Опыт показывает: AI полезен в известных языках и задачах (Python, CRUD), но почти бесполезен в нишевых (C/C++ gamedev, Prolog, Haskell).
  • Старшие разработчики всё равно нужны: только они могут проверять, направлять и «владеть» кодом, созданным ИИ.
  • Возникает вопрос: если не брать джунов, откуда возьмутся будущие сеньоры?
  • Предлагают термины вместо «vibe-coding»: «pro-coding», «prompt-coding», «reviewing code».