В эпоху AI самым важным становится уменьшение когнитивной нагрузки на разработчика и на агентов. Чтоб не решать все вопросы сразу, не писать вперемешку системный и прикладной код, не переписывать весь проект при каждом изменении, нужно применять методы борьбы со сложностью.
Снижать когнитивную нагрузку мы научились еще до AI, и все это теперь становится еще актуальнее:
1. Введение выразительных и компактных DSL языков, они скрывают сложность реализации
2. Разделение на системный и прикладной код. В обоих слоях есть своя сложность, но когда они смешаны, разработчик вынужден одновременно думать о бизнес-логмке, сетевых протоколах, потоках выполнения, хранении данных, безопасности и инфраструктуре. Разделение позволяет решать одну задачу за раз и держать в голове только тот уровень абстракции, с которым работаешь сейчас.
3. Декомпозиция - самое очевидное
4. Изоляция сложности - скрывать сложность за абстракциями, интерфейсами и контрактами
5. Стандартизация - вынесение часто встречающихся решений в платформу, стандарт или даже сам язык, что делает прикладной код более простым
6. Модульность - чтоб держать в голове только часть ментальной модели кода
7. Снижение зацепления и связывания в коде (coupling & cohesion, тут обоих видов)
8. Уменьшение паразитной сложности, то есть оверинженеринга
9. Локализация изменений - с течением времени структура проекта меняется так, чтоб изменения затрагивали минимальное кол-во модулей и абстракций
10. Паттерны - использование готовых решений, нужно меньше задумываться и автору и читателям
11. Уменьшение вариативности - часто можно сузить сферу применения программы, не потеряв в функциональных требованиях, программисты склонны включать в эту сферу варианты использования, которые не были нужны
12. Ну и наконец - хорошая стандартная библиотека
Post #2095
3.86K
- 👍 24
- ❤ 10
- 🔥 5