|
Философия UNIX
Философия UNIX — это набор культурных норм и философских подходов к разработке программного обеспечения, основанных на опыте ведущих разработчиков операционной системы UNIX.
Содержание 1 МакИлрой: Четверть века UNIX 2 Пайк: Стиль программирования на C 3 Майк Ганцарз: Философия UNIX 4 Реймонд: Искусство программирования в UNIX 5 Цитаты
МакИлрой: Четверть века UNIX
Дуг МакИлрой, изобретатель каналов UNIX и один из основателей традиции UNIX, обобщил философию следующим образом: «Философия UNIX гласит: Пишите программы, которые делают одну вещь и делают её хорошо. Пишите программы, которые бы работали вместе. Пишите программы, которые бы поддерживали текстовые потоки, поскольку это универсальный интерфейс».
Обычно эти высказывания сводятся к одному «Делайте одну вещь, но делайте её хорошо».
Из этих трёх принципов только третий является специфичным для UNIX, хотя разработчики UNIX чаще других акцентируют внимание на всех трёх принципах.
Пайк: Стиль программирования на C
Роб Пайк (англ. Rob Pike) предложил следующие «правила» Стиль программирования на C в качестве аксиом программирования. Одновременно эти правила могут выражать точку зрения на философию UNIX: Правило 1: Вы не знаете, где программа начнет тормозить. Узкие места возникают в неожиданных местах, поэтому не стройте догадки и изучайте скорость работы программы до тех пор, пока не удостоверитесь, что узкое место найдено. Правило 2: Измерение. Не оптимизируйте скорость до тех пор, пока ее не измерите, и даже если вы проверили какую-то часть кода с узким местом, проверьте остальные. Правило 3: Изощрённые алгоритмы являются медленными, если n мало, а n обычно мало. В изощрённых алгоритмах присутствуют большие константы. До тех пор, пока вы не убедитесь, что n часто становится большим, избегайте изощрённости. (Даже если n становится большим, вначале используйте правило 2). Правило 4: Изощрённые алгоритмы чаще подвержены ошибкам, чем их простые аналоги, также их гораздо сложнее реализовать. Используйте простые алгоритмы наряду с использованием простых структур данных. Правило 5: Данные преобладают. При правильной и хорошо организованной структуре данных, алгоритмы становятся очевидными. Структуры данных, а не алгоритмы, являются центральной частью в программировании. Правило 6: Правила 6 нет.
Правила 1 и 2 Пайка перефразированы Тони Хоаром (Tony Hoare) в известную аксиому «Преждевременная оптимизация — корень всех зол». Кен Томпсон (Ken Thompson) перефразировал правила 3 и 4 Пайка так: «Если сомневаетесь, используйте перебор всех возможных комбинаций». Правила 3 и 4 являются частными положениями философии дизайна KISS: Keep It Simple, Stupid (будь попроще, тупица). Правило 5 было предварительно сформулировано Фредом Бруксом (Fred Brooks) в книге «Мифический человеко-месяц». Правило 5 часто сокращают до «пиши тупой код, который использует умные данные». Правило 6 взято из шутки Брюса, прозвучавшей в «Летающем цирке Монти Пайтона».
Майк Ганцарз: Философия UNIX
В 1994 году Майк Ганцарз (Mike Gancarz) объединил свой опыт работы в UNIX (он является членом команды по разработке системы X Window) с высказываниями из прений, в которых он участвовал со своими приятелями программистами и людьми из других областей деятельности, так или иначе зависящих от UNIX, для создания Философии UNIX, которая сводится к 9 основным принципам: Маленькое прекрасно. Пусть каждая программа делает одну вещь, но хорошо. Собирайте прототип как можно раньше. Предпочитайте переносимость эффективности. Храните данные в простых текстовых файлах. Используйте программные рычаги для достижения цели. Используйте сценарии командной строки для улучшения функционала и переносимости. Избегайте связывающего программу (captive) пользовательского интерфейса. Делайте каждую программу «фильтром».
Менее важные 10 принципов не снискали всеобщего признания в качестве частей философии UNIX и в некоторых случаях являлись предметом горячих споров (Монолитное ядро против Микроядра): Позвольте пользователю настраивать окружение. Делайте ядра операционной системы маленькими и легковесными. Используйте нижний регистр и придерживайтесь кратких названий. Храните данные древовидно. Молчание — золото. Думайте о параллельности. Объединенные части целого есть нечто большее, чем просто их сумма. Ищите 90-процентное решение. Лучшее — враг хорошего. Думайте иерархически.
Реймонд: Искусство программирования в UNIX
Эрик С. Рэймонд (Eric S. Raymond) в своей книге «Искусство программирования в UNIX» подытожил философию UNIX как широко используемую инженерную философию «Будь попроще, тупица» (Принцип KISS). Затем он описал, как эта обобщенная философия применима в качестве культурных норм UNIX. И это несмотря на то, что несложно найти несколько нарушений в следующей текущей философии UNIX:
- Правило Модульности: Пишите простые части, соединяемые понятными интерфейсами.
- Правило Ясности: Ясность лучше заумности.
- Правило Композиции: Разрабатывайте программы так, чтобы их можно было соединить с другими программами.
- Правило Разделения: Отделяйте правила (policy) от механизма (mechanism); отделяйте интерфейс от движка (engine).
- Правило Простоты: Нацельтесь на простоту; добавляйте сложность, только где необходимо.
- Правило Экономности: Пишите большую программу только когда можно продемонстировать, что другими средствами выполнить необходимую задачу не удастся.
- Правило Прозрачности: Разрабатывайте прозрачные программы для облегчения последующего пересмотра и отладки.
- Правило Надёжности: Надёжность — дитя прозрачности и простоты.
- Правило Представления: Храните знания в данных так, чтобы логика программы была тупой и надёжной.
- Правило Наименьшего удивления: При разработке интерфейса всегда делайте как можно меньше неожиданных вещей.
- Правило Тишины: Если программе нечего сказать, пусть лучше молчит.
- Правило Восстановления: Если надо выйти из строя, делайте это шумно и как можно быстрее.
- Правило Экономии: Время программиста дорого; сократите его, используя машинное время.
- Правило Генерации: Избегайте ручного набора кода; при любом удобном случае пишите программы, которые бы писали программы.
- Правило Оптимизации: Сначала - опытный образец, потом - "причесывание". Добейтесь стабильной работы, только потом оптимизируйте.
- Правило Многообразия: Отвергайте все утверждения об «единственно правильном пути».
- Правило Расширяемости: Разрабатывайте для будущего. Оно наступит быстрее, чем вы думаете.
Большинство из этих норм принимается вне сообщества UNIX — даже если это было не так во времена, когда они впервые были применены в UNIX, то впоследствии это стало так. К тому же много правил не являются уникальными или оригинальными для сообщества UNIX. Тем не менее, приверженцы программирования в UNIX склоняются к тому, чтобы принять комбинацию этих идей в качестве основ для стиля UNIX.
Цитаты
«UNIX прост. Но надо быть гением, чтобы понять его простоту.» — Деннис Ритчи «UNIX не был разработан так, чтобы отгораживать своих пользователей от глупостей, поскольку это отгородило бы их от делания умных вещей.» — Дуг Гвин «UNIX никогда не скажет „пожалуйста“.» — Роб Пайк
| |