| Если подойти к вопросу с точки зрения программирования и проектирования, то я бы дополнил эту народную мудрость, сказав, что «Все гениальное — просто в использовании». | |
| Нет ничего сложного в том, чтобы взять и просто решить поставленную задачу, предоставив работоспособное решение. Нет ничего сложного в том, чтобы соблюсти все формальные требования и спецификации. Действительно — в программировании практически не существует неразрешимых в общем случае задач. | |
| Самое сложное в решении задачи это добиться того, чтобы это решение было простым в использовании. Самое простое в использовании решение может оказаться самым сложным как с точки зрения изобретения, так и с точки зрения реализации. | |
| От сложности изобретения никуда не денешься — порой изобретение лаконичного механизма из десятка-другого строк кода занимает часы, дни, и, иногда, даже недели и месяцы. | |
| Что же касается сложности реализации, то в этом нет ничего страшного. Если вы можете упростить использование системы за счет двукратного усложнения ее реализации, то обязательно сделайте это. Нет ничего страшного в том, что за простоту в использовании придется заплатить сложностью в реализации. Сложность внутренней реализации системы — это личное дело самой системы, в которое никто не будет (не должен) лезть. Пользователи системы будут использовать ее простое и лаконичное API, не имея возможности впутаться в ее внутренние дела. Реализация хранится в одном, никому недоступном месте, а пользовательское API доступно всем и каждому. | |
| Верно и то, что чаще всего самое простое в изобретении решение оказывается самым ужасным с точки зрения использования. Редко когда решение «в лоб» оказывается наиболее оптимальным. | |
| Простые и изящные решения обычно стоят больших затрат. Чем проще внешность решения, тем сложнее его придумать. Для того, чтобы решение действительно было простым, необходимо четко понимать, какую работу должен выполнять пользователь, а какую — сама система. Первые попавшиеся решения обычно тупо решают поставленную задачу, не обращая внимания на это разграничение полномочий. | |
| Почему так много сложных и муторных библиотек и платформ? Почему так редко можно встретить безопасную, но в то же время изящную и лаконичную оболочку для какого-либо API? Речь даже не о C++, речь обо всех языках и платформах в принципе. Дело не в том, что кто-то намеренно пытается усложнить вам жизнь, как это может показаться. Дело как раз в том, что простой и изящный программный интерфейс — это действительно сложная задача, которая под силу далеко не каждому. | |
| | |
| Резюме | |
| Все гениальное — просто в использовании. | |