Многие придерживаются той точки зрения, что программное обеспечение должно быть настолько простым, насколько это возможно. А когда оно недостаточно простое, начинаются разговоры о том, что необходимо «снизить его уровень сложности».
Тут легко запутаться, ведь такое использование терминологии не соответствует принятому в научном обиходе определению сложности: не проводится различие между тем, как организован данный программный продукт, и его поведением.
Тем не менее если быть честным, то я вынужден буду признать, что термины «сложный» и «запутанный» существовали
Простое и хорошо структурированное ПО может демонстрировать очень сложное поведение, в то время как неочевидным образом структурированное и довольно запутанно организованное ПО порой выдает упорядоченные и полностью предсказуемые результаты.
Еще раз об упрощении
Предлагаемая мною модель основана на противопоставлении структуры и поведения. Как мне представляется, она может упростить обсуждение вопросов, связанных с простотой, и снять ряд недоразумений.
Все следует упрощать до тех пор, пока это возможно, но не более того.
Своим высказыванием Эйнштейн хотел сказать, что структура системы должна быть представлена в понятном виде. В терминах моей модели это предполагает вертикальный сдвиг сверху вниз (упрощение). Тем не менее оговорка «но не более того», по всей видимости, отсылает нас к поведению этой системы. Эйнштейн пытается предупредить нас, что следует избегать чрезмерного упрощения, поскольку это изменит сам
Простота – это миф, время которого прошло, если оно вообще когда-либо существовало [Norman 2007].
В своей интереснейшей статье «Простота сильно переоценена» Дон Норман обсуждает вопрос, насколько ценно с точки зрения пользователя добавление функциональных возможностей в тот или иной продукт по сравнению с их ограниченным количеством. Обилие функциональных возможностей подразумевает иное или более сложное поведение продукта, а зачастую и его иную структуру. В моей диаграмме этому соответствует движение по обеим осям – горизонтальной и вертикальной. (Например, когда Google добавил в почтовый сервис Gmail отдельный почтовый ящик для приоритетных сообщений, поведение Gmail усложнилось. Стал более запутанным и пользовательский интерфейс, хотя для меня он остался вполне понятным.)
К сожалению, Дон Норман использует термин «упрощение» как для обозначения линеаризации поведения (движение вдоль горизонтальной оси в моей модели), так и для обозначения упрощения структуры (движение по вертикальной оси). Тем самым он сделал свой тезис достаточно запутанным, и именно поэтому многие в нем не разобрались. Может быть, для иллюстрации своей мысли ему стоило бы воспользоваться рисунками: