I am sorry, but everyone is getting syntax highlighting wrong
Критикуя популярные цветовые схемы, автор подчеркивает, что чрезмерное выделение синтаксиса снижает читаемость, превращая код в "рождественскую гирлянду". Вместо этого он предлагает использовать минималистичный подход: выделять только ключевые элементы, такие как константы и комментарии, оставляя остальной текст нейтральным. Это позволяет важным частям кода действительно выделяться. Автор также отмечает, что хорошие комментарии должны быть заметными, а не скрытыми, и делится личным опытом использования четырёх основных цветов для улучшения восприятия. В заключение он затрагивает предпочтения тёмных тем, предполагая, что они популярны из-за их сходства с IDE, в отличие от чистых текстовых редакторов.
Комментарии (50)
- Обсуждение свелось к тому, что цветовые схемы варьируются от максимально-ярких до почти монохромных, и участники делятся личными предпочтениями, примерами и ссылками на исследования о влиянии подсветки на читаемость и производительность.
- Несколько участников подчеркнули, что важнее не количество цветов, а их сбалансированность и уместность, а также то, как они взаимодействуют с контрастностью фона и шрифта.
- Обсуждались такие практические аспекты, как читаемость оптимизированного кода без подсветки, влияние цветовой схемы на усталость глаз и даже вопрос о том, какие именно элементы (ключевые слова, строки, функции и т.д.) должны быть выделены.
- Участники также затронули вопрос о том, какие именно элементы кода должны быть выделены цветом, и насколько важно сохранять традиционные цветовые схемы, которые могут быть привычны и полезны для читателей.
- В итоге, обсуждение подтвердило, что выбор и использование цветовых схем в коде и документации - это не только вопрос личных предпочтений, но и вопрос эргономики, производительности и даже здоровья глаз.
Syntax highlighting is a waste of an information channel (2020) 🔥 Горячее
Синтаксическое выделение цветом полезно, но недоиспользует возможности цвета как канала информации. Цвет может нести гораздо больше информации, чем просто выделение синтаксиса. Например, можно использовать разные цвета, чтобы показать уровень вложенности скобок, что улучшает читаемость кода.
Другой пример — выделение импортов: можно подсвечивать идентификаторы, импортированные из других файлов, что помогает быстро понять зависимости. Также можно выделять аргументы функций иначе, чем локальные переменные, или использовать цвет для указания типов данных, даже если язык этого не требует.
Ещё одна идея — выделение функций, которые вызывают исключения, или функций, которые были изменены в последнее время. Это превращает подсветку из чисто декоративной функции в мощный инструмент для анализа кода и отладки.
Однако реализация таких функций сложна, так как требует доступа к AST и глубокого понимания кода, а не только лексического анализа. Кроме того, могут возникать конфликты, когда один элемент нужно выделить двумя разными способами одновременно. Нужно тщательно проектировать систему, чтобы избежать визуального хаоса.
В итоге, хотя современные IDE уже предоставляют некоторые из этих функций, мы далеки от полноценного использования цвета как информационного канала. Расширение этих возможностей может значительно улучшить читаемость и понимание кода.
Комментарии (134)
- Обсуждение показало, что большинство участников считают современные редакторы кода не используют цвет как информационный канал, а лишь как декоративный элемент.
- Участники подчеркнули, что вместо того, чтобы использовать цвет для передачи дополнительной информации, редакторы ограничиваются лишь базовой подсветкой синтаксиса.
- Некоторые участники упомянули, что такие вещи как подсветка потока данных, подсветка переменных и подсветка ошибок уже реализованы в таких IDE как IntelliJ IDEA, но не используются в других редакторах.
- Были также упомянуты такие вещи как подсветка важных частей кода, подсветка области видимости и подсветка неиспользуемого кода.
- Несколько участников выразили мнение, что цветовая схема должна быть более гибкой и адаптивной, чтобы отражать структуру и смысл кода, а не только его синтаксическую категорию.
What is “good taste” in software engineering? 🔥 Горячее 💬 Длинная дискуссия
Хороший вкус в разработке — это не техническое умение, а способность выбирать набор инженерных ценностей, подходящих конкретному проекту. В отличие от навыков, которые можно развить учёбой и практикой, вкус формируется через личный опыт и предпочтения. Например, одни разработчики ценят читаемость кода с map и filter, другие — производительность for-циклов, и это различие отражает их приоритеты, а не уровень компетенции.
Ключевой признак зрелости — понимание, что почти каждое решение в разработке связано с компромиссами: между скоростью, гибкостью, устойчивостью или читаемостью. Незрелые инженеры часто жёстко придерживаются одного подхода, тогда как опытные оценивают контекст и выбирают оптимальное решение для конкретной задачи. Ваш вкус определяется тем, какие ценности — например, корректность, масштабируемость или скорость разработки — вы ставите выше остальных в данной ситуации.
Комментарии (208)
- Обсуждение определяет "хороший вкус" в разработке как способность выбирать оптимальные решения, основанные на контексте и требованиях проекта, а не на личных предпочтениях.
- Участники подчеркивают, что хороший вкус тесно связан с опытом, гибкостью, умением аргументировать выбор и предвидеть последствия решений для поддержки и масштабирования.
- Многие отмечают, что хороший вкус — это баланс между читаемостью, производительностью, простотой и соответствием бизнес-целям, а не слепое следование догмам или модным тенденциям.
- Спорным остается вопрос, является ли "вкус" субъективным эстетическим понятием или его можно формализовать через принципы инженерии (например, поддерживаемость, ясность, минимальная сложность).
- Некоторые видят корень проблемы в смешении объективно плохих решений (например, неэффективные алгоритмы) и субъективных предпочтений (стиль кода, выбор парадигм).
Cognitive load is what matters 🔥 Горячее 💬 Длинная дискуссия
Когнитивная нагрузка — ключевой фактор качества кода.
Репозиторий собрал практические советы, как её уменьшать:
- Следи за «весом» кода: одна функция = одна идея, короткие имена, избегай вложенностей.
- Удаляй дубли: повторы усложняют чтение и тестирование.
- Используй типы и имена как документацию: ясные сигнатуры снижают необходимость комментариев.
- Ограничь контекст: меньше глобальных переменных, чёткие границы модулей.
- Автоматизируй рутину: линтеры, форматтеры и тесты экономят мозговые ресурсы.
Правила применимы к любому языку и масштабу проекта.
Комментарии (488)
- Участники сходятся во мнении, что «простота» кода измеряется не строками, а когнитивной нагрузкой при его изменении (Ousterhout: complexity = cognitive load × frequency of change).
- Часто «сложный» код — результат привычки или неопытности; опытные разработчики умеют сжимать идеи до минимально необходимого набора понятий.
- Помогают: ранние возвраты, выразительные имена переменных, тесты, чёткие границы компонентов и повторяющиеся стандарты проекта.
- Противоречие: «куча if-ов» кажётся простой, но скрывает дублирование; избыточные абстракции тоже усложняют отладку.
- Ключевой совет — писать код как текст для людей, а не для машины, и сознательно тратить время на упрощение, даже если это не приносит немедленной карьерной выгоды.