Hacker News Digest

Тег: #software-design

Постов: 2

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

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

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

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

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

ОригиналHN

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

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

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

That boolean should probably be something else (ntietz.com)

Булево значение почти всегда маскирует более точный тип.
Проверь, не дата-время ли это: is_confirmed лучше заменить на nullable confirmed_at. Вы получите момент подтверждения и сможете анализировать баги по времени.

Если поле описывает роль или статус (is_admin, failed), превращайте в enum.

enum UserRole { User, Admin, Guest, SuperAdmin }
enum JobStatus { Queued, Started, Failed, Done }

Enum упрощает добавление новых состояний и защищает от забытых веток.

Проверка прав тоже не должна возвращать bool.

enum PermissionCheck { Allowed, NotPermitted(reason: String) }

Так код читабельнее и можно вернуть причину отказа.

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

by vidyesh • 28 августа 2025 г. в 12:31 • 85 points

ОригиналHN

#rust#databases#database-design#data-modeling#enums#boolean-logic#null-values#software-design

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

  • Основной спор: стоит ли хранить «события» как булевы флаги или как nullable-даты/enum’ы, чтобы не терять данные (время события).
  • Противники: это нарушает KISS, раздувает схему и вводит двусмысленность (null = не случилось или ошибка?).
  • Сторонники: булевы поля не «помнят» контекст, легко образуют недопустимые комбинации флагов, а дата или enum выразительнее.
  • Для параметров функций булевы флаги считаются плохо читаемыми; спасают именованные аргументы, отдельные функции или бит-маски.
  • Встраиваемые/индустриальные системы часто считают булевы типы оптимальными по памяти и не применяют совет к себе.