Вернуться назад

4 качества и 2 подхода

Подходы, концепции, понятия и дискуссии в IT

В программировании много достаточно сложных для понимания концепций и понятий, а также дискуссий. Скорее всего, сразу уяснить их суть не получится. Не стоит этого бояться – нужно постепенно вникать, читать авторитетные книги по программированию, практиковаться. То есть набирать эрудицию в области Computer Science. И со временем понимание придет.

Сегодня речь пойдет о четырех качествах дизайна системы, ее интерфейса и реализации: 

1. Simplicity – Простота

2. Correctness – Правильность (Корректность)

3. Consistency – Логичность (в русском языке Consistency имеет несколько переводов: последовательность, согласованность, логичность. Принято использовать слово «логичность»)

4. Completeness – Полнота

Четыре названных качества и их отношения описаны в двух подходах к созданию систем. Один из них принято называть MIT Approach, то есть Подход MIT, Массачусетского технологического института. Иногда добавляют Stanford, имея в виду Стэнфордский университет. Другой подход называется New Jersey Style. Он также известен как Подход Гэбриела, Подход Worse-is-Better («Чем хуже, тем лучше») или East Cost Style.

Чтобы понять описание подходов, нужно иметь в виду, что в английском языке слово «дизайн» используется шире привычного русскоязычного значения. В IT дизайн (Design) – это, прежде всего, проектирование, конструкция чего-либо. В разработке это стадия создания системы, описывающая логику реализации. Проектируют, как будут реализованы требования к системе: какие качества она должна иметь, какие функции выполнять и как именно.

Также важно постепенно разбираться в том, что такое «интерфейс» и «реализация». Тут тоже есть нюансы. Интерфейс – это множество операций, описывающих поведение элемента; перечень вычислений, которые может выполнить какая-то часть программы. Для сравнения: пользовательский интерфейс (UI, User Interface) обеспечивает передачу информации между человеком и программно-аппаратными компонентами системы. Реализация (Implementation) интерфейса – это код, который выполняет вычисления, описанные программным интерфейсом. А в целом реализацией (имплементацией) называют стадию разработки системы, где описывается функционирование системы в среде. (Примеры среды: язык программирования, аппаратное обеспечение). Постепенно разбираясь в понятиях и концепциях, читая книги, проходя онлайн-курсы и практикуясь, можно оценить многогранность того, о чем говорится в подходах, и не один раз осмыслить их.

 

Как создавать программы, которые примут пользователи?

В 1989 году программист Ричард Гэбриел (Richard P. Gabriel), известный в Lisp/OOP сообществе, выпустил эссе "Lisp: Good News, Bad News, How to Win Big", где описал правила, иерархию и взаимоотношения четырех качеств ПО: простоты, правильности, логичности и полноты. 

В эссе был поднят вопрос о том, чем лучше руководствоваться разработчикам при создании программ – концепцией Right Thing («правильная штука») или концепцией Wrong Thing («неправильная штука»)? Лучше понять и прочувствовать, о чем говорит Гэбриел в эссе, можно прочитав его на английском. Считается, что англоязычную литературу по программированию и сопутствующие тематические материалы лучше читать на языке оригинала, полезно сделать это привычкой. Отрывок из того эссе, кстати, сейчас лежит на сайте Ричарда Гэбриела. По сути, его рассуждения о том, какой подход к созданию ПО лучше, – это рассуждения о том, какой софт и почему пользователи принимают лучше – и как это влияет на динамику создания систем. Дальше – краткий пересказ отрывка из эссе с небольшими комментариями.

В частности, Ричард Гэбриел говорит о том, что Unix и язык С – самые мощные компьютерные «вирусы». («Unix and C are the ultimate computer viruses»). Разумеется, это не буквально – имеется в виду их популярность, виральность распространения в мире. Для понимания: язык С за 50 лет существования повлиял на развитие всей технологической индустрии. А в генеалогическое древо Unix-подобных операционных систем входит, например, Mac OS.

Фактически язык С и Unix создавались по принципам, которые Гэбриел позже сформулировал в подходе New Jersey Style. То есть разработчики исходили из того, что простота реализации имеет наивысший приоритет для софта, поскольку обеспечивает хорошую производительность и умеренное использование ресурсов.

Далеко не у всех людей мощные компьютеры. Если софт хорошо работает и на слабом железе, то он будет распространяться, становиться популярным, виральным. Так и происходит в реальном мире.

Сравнивая Подход Worse-is-Better / New Jersey Style («Хуже – лучше» / Стиль Нью-Джерси) с Подходом MIT/Stanford, Гэбриел рассуждает о логике создания систем. Как создаются системы, когда программисты руководствуются Right Thing, то есть действуют «правильно»?

1. Сценарий «Большая сложная система» (Big Complex System Scenario). Большую сложную систему и ее реализацию нужно спроектировать. При этом в дизайн системы закладывается 100% желаемой функциональности. Простота реализации не является целью при таком сценарии, так что реализация системы занимает долгое время. Ожидаемо система получается большой и сложной, и ей нужны такие же сложные инструменты. Работает такая монолитная система на мощном железе. Это затрудняет ее распространение. Причем монолитность объясняется только тем, что «правильная штука» часто спроектирована монолитно – эта характеристика возникает случайно.

2. Сценарий «Драгоценность, похожая на бриллиант» (Diamond-Like Jewel Scenario). Над дизайном такой системы работают бесконечно, и на каждом этапе это маленькая «грань». Реализовать подобную систему так, чтобы она работала быстро, невозможно.

Выводы, которые Ричард Гэбриел делает из своих рассуждений в эссе, – 50% решения должно быть «правильной штукой», и зачастую нежелательно делать целую «правильную штуку» сразу. Лучше сделать половину «правильной штуки» доступной пользователю, чтобы она могла вирально распространяться. Именно в этом смысле Гэбриел образно назвал подход Worse-is-Better («Чем хуже, тем лучше»). А когда люди привыкнут к такому софту, нужно уделить время и улучшить софт до состояния 90% от «правильной штуки».

 

 

4 качества и 2 подхода

Посмотрим, чем схожи и чем различаются подход Гэбриела Worse-is-Better (New Jersey Style) и Подход MIT.

Подход MIT

Он про Right Thing – про то чтобы делать все «правильно». В частности, спроектировать большую сложную систему с полной функциональностью, долго заниматься реализацией и только потом предоставить софт пользователям. Другое название: MIT/Stanford стиль дизайна (проектирования)

Simplicity / Простота. Дизайн интерфейса и реализации (имплементации) должен быть простым. Для интерфейса простота гораздо важнее, чем для реализации.

Correctness / Правильность (корректность). Дизайн должен быть правильным во всех видимых аспектах. Неправильность просто не разрешается.

Consistency / Логичность (последовательность, согласованность). Дизайн не должен быть нелогичным. Допускается, чтобы дизайн был чуть менее простым и менее полным, чтобы избежать нелогичности. Логичность так же важна, как и правильность.

Completeness / Полнота. Дизайн должен охватывать так много важных ситуаций, насколько это практично. Все разумно ожидаемые случаи должны быть предусмотрены. Простота не должна чрезмерно снижать полноту.

 

Подход Worse-is-Better

Он про Wrong Thing – на первых порах ограничить функциональность, чтобы дать людям простой в использовании софт. Другие названия: New Jersey Style, Подход Гэбриела

Simplicity / Простота. Дизайн интерфейса и реализации (имплементации) должен быть простым. Простота реализации важнее простоты интерфейса. Простота – главное в дизайне.

Correctness / Правильность (корректность). Дизайн должен быть правильным во всех видимых аспектах. Для него немного лучше быть простым, чем быть правильным.

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

Completeness / Полнота. Дизайн должен охватывать настолько много важных ситуаций, насколько это практично. Все разумно ожидаемые случаи должны быть предусмотрены. Полнотой можно пожертвовать в пользу любого другого качества. Полнотой нужно жертвовать всякий раз, когда под угрозой простота реализации (имплементации). Логичностью можно пожертвовать, чтобы достичь полноты, если сохраняется простота; логичность интерфейса наименее ценна.

 

Итак, исследователь, теоретик и практик программирования, лауреат двух наград за инновационный вклад в развитие Computer Science Ричард П. Гэбриел в известном эссе пришел к выводу, что Подход Worse-is-Better лучше, чем Подход MIT/Stanford, потому что ограниченный по функциональности, но простой в использовании софт привлекательнее для пользователей. По этой причине подход образно назван Worse-is-Better, где ‘worse’ («хуже») – это ограниченная на первом этапе функциональность, а ‘better’ («лучше») – практичность и юзабилити софта. Возможно, вы отметили, что этот подход напоминает бизнесовую концепцию MVP – предоставление потребителю «минимально жизнеспособного продукта» и его последующее совершенствование.

Надо понимать, что все это дискуссии программистов-исследователей. Подход MIT/Stanford, Массачусетского технологического института и Стэнфордского университета, тоже используется. Смысл в том, чтобы знать оба подхода, позиции авторитетных программистов, а также закономерности для каждого из четырех качеств. 

 

Фото: Shutterstock / Tanya Jones, Chen Min Chun

Вернуться назад
Поделиться
Запишитесь на бесплатный диагностический урок
Читать еще