Соглашение прежде конфигурации — парадигма в разработке ПО, основная идея которой — свести к минимуму количество принимаемых разработчиками решений. Это позволяет понизить сложность ПО без ущерба для гибкости.

Суть парадигмы сводится к описанию некоторого количества правил — соглашений, — согласно которым строится ПО. Разработчику требуется настраивать только нестандартные параметры приложения. По принципу работы это очень напоминает настройки по умолчанию.

Странно, что практика применения этой парадигмы крайне редко покидает область проектирования ПО. Как правило, любое приложение содержит в себе целый ряд пользовательских настроек, зачастую без толковых значений по умолчанию, что усложняет процесс установки. Этим часто грешат Open Source приложения.

К счастью, есть и обратные примеры, которых с каждым днем становится все больше. В частности, практически все продукты компании Apple обладают малым количеством настроек по сравнению со своими аналогами, зато могут похвастаться вменяемым поведением по умолчанию. Компанию Apple есть в чем упрекнуть, но как бы вы к ним ни относились, их продукты вносят некоторый баланс на рынок.

Особенно хорошо это видно на примере операционных систем. Системы на основе Linux — бесконечно конфигурируемые и расширяемые, где любую ерунду можно настроить под себя или заменить альтернативой. В противовес, Mac OS обладает минимумом настроек и из кожи вон лезет, чтобы скрыть от пользователя технические детали работы устройства. Windows же находится где-то в середине, обладая внушительным количеством настроек и возможностей, скрытых глубоко в недрах системы.

Для веб типична следущая ситуация: заходишь на страницу настроек и начинаешь тонуть в бескрайнем океане полей ввода, флажков и прочих элементов форм. «Редактор по умолчанию», «Длина списка по умолчанию», «Обработчик кэширования», «Обработчик сессии»… Продолжать можно долго. Все эти настройки объединяет одно: их смело можно вынести в раздел «Настройки, которые никого в мире не заботят». А потом удалить.

Типичная страница настроек в CMS Типичная страница настроек в CMS

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

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

На сегодняшний день настройки организации ссылок оправданы только для CMS, ведь популярные системы умеют работать на множестве разных окружений. Однако я еще не видел ни одной системы, которая бы автоматически определила доступность этого функционала и подключала бы его во время установки. Для облачных же решений, с фиксированным системным окружением, оправдания этим настройкам не существует.

Примерно таким же образом дела обстоят с настройками кеширования и gzip-сжатия. Вообще, продолжать этот ряд можно бесконечно. Достаточно недельку поработать с любой CMS, как вопросы «зачем» и «почему» будет невозможно остановить.

Примерно так должен выглядеть интерфейс панели управления CMS в идеальном мире Примерно так должен выглядеть интерфейс панели управления CMS в идеальном мире

На самом деле, проблема даже не в том, что есть программные решения с большим количеством настроек. Проблема в том, что на рынке ПО под веб нет своей компании Apple и нет своей Mac OS, с минимумом конфигурации и более-менее фиксированными системными требованиями. Странно также и то, что хостинг-провайдеры до сих пор не научились делать развертывание популярных CMS в один клик с установкой оптимальных настроек для данного хостинга.

 

Во время разработки любого ПО есть множество задач, которые должен решить разработчик. Но одной из важнейших, на мой взгляд, является поиск ответов на вопросы «Для кого я это делаю?» и «Как сделать так, чтобы этим смог пользоваться кто угодно?». Если разработчики научатся это делать, то простота и элегантность в области ПО под веб не заставит себя долго ждать.