Философия Unix
Философия Unix , созданная Кеном Томпсоном , представляет собой набор культурных норм и философских подходов к минималистской модульной разработке программного обеспечения . Он основан на опыте ведущих разработчиков Unix операционной системы . Ранние разработчики Unix сыграли важную роль во внедрении концепций модульности и возможности повторного использования в практику разработки программного обеспечения, породив движение « программных инструментов ». Со временем ведущие разработчики Unix (и программ, работающих на ней) установили набор культурных норм разработки программного обеспечения; эти нормы стали столь же важными и влиятельными, как сама технология Unix, и были названы «философией Unix».
Философия Unix делает упор на создание простого, компактного, понятного, модульного и расширяемого кода, который может легко поддерживаться и перепрофилироваться разработчиками, не являющимися его создателями. Философия Unix отдает предпочтение возможности компоновки , а не монолитному дизайну .
Источник
[ редактировать ]Философия Unix описана Дугом Макилроем. [ 1 ] в Техническом журнале Bell System за 1978 год: [ 2 ]
- Заставьте каждую программу хорошо выполнять одну задачу. Чтобы выполнить новую работу, создавайте заново, а не усложняйте старые программы, добавляя новые «функции».
- Ожидайте, что выходные данные каждой программы станут входными данными для другой, пока еще неизвестной программы. Не загромождайте вывод лишней информацией. Избегайте строго столбчатых или двоичных форматов ввода. Не настаивайте на интерактивном вводе.
- Проектируйте и создайте программное обеспечение, даже операционные системы, для опробования на ранних стадиях, в идеале в течение нескольких недель. Не стесняйтесь выбрасывать неуклюжие детали и собирать их заново.
- Используйте инструменты вместо неквалифицированной помощи, чтобы облегчить задачу программирования, даже если вам придется отклониться от пути для создания инструментов и ожидать, что некоторые из них выкинете после того, как закончите их использовать.
Позже это было резюмировано Питером Х. Салусом в книге «Четверть века Unix» (1994): [ 1 ]
- Пишите программы, которые делают одно дело и делают это хорошо.
- Пишите программы для совместной работы.
- Пишите программы для обработки текстовых потоков, потому что это универсальный интерфейс.
В своей статье по Unix 1974 года Ричи и Томпсон приводят следующие соображения по поводу дизайна: [ 3 ]
- Упростите написание, тестирование и запуск программ.
- Интерактивное использование вместо пакетной обработки .
- Экономия и элегантность дизайна благодаря ограничениям по размеру («спасение через страдания»).
- Самоподдерживающаяся система: все программное обеспечение Unix поддерживается под управлением Unix.
Части
[ редактировать ]Среда программирования UNIX
[ редактировать ]В предисловии к книге 1984 года «Среда программирования UNIX» Брайан Керниган и Роб Пайк , оба из Bell Labs , дают краткое описание дизайна Unix и философии Unix: [ 4 ]
Несмотря на то, что система UNIX представляет ряд инновационных программ и методов, ни одна программа или идея не обеспечивают ее эффективную работу. Вместо этого его эффективность делает подход к программированию, философия использования компьютера. Хотя эту философию невозможно описать одним предложением, в ее основе лежит идея о том, что мощь системы зависит больше от взаимоотношений между программами, чем от самих программ. Многие программы UNIX изолированно выполняют довольно тривиальные задачи, но в сочетании с другими программами становятся общими и полезными инструментами.
Авторы далее пишут, что их цель этой книги — «рассказать философию программирования UNIX». [ 4 ]
Проектирование программ в среде UNIX
[ редактировать ]В октябре 1984 года Брайан Керниган и Роб Пайк опубликовали статью под названием « Проектирование программ в среде UNIX» . В этой статье они критикуют увеличение количества программных опций и функций, присутствующих в некоторых новых системах Unix, таких как 4.2BSD и System V , и объясняют философию Unix программных инструментов, каждый из которых выполняет одну общую функцию: [ 5 ]
Большая часть возможностей операционной системы UNIX обусловлена стилем разработки программ, который делает программы простыми в использовании и, что более важно, легко комбинируемыми с другими программами. Этот стиль получил название использования программных инструментов и больше зависит от того, как программы вписываются в среду программирования и как их можно использовать с другими программами, чем от того, как они спроектированы внутри. [...] Этот стиль был основан на использовании инструментов : использование программ по отдельности или в сочетании для выполнения работы, а не выполнение ее вручную, монолитными самодостаточными подсистемами или специальными, одноразовыми программы.
Авторы противопоставляют такие инструменты Unix, как cat с более крупными наборами программ, используемыми другими системами. [ 5 ]
Дизайн cat типичен для большинства программ UNIX: он реализует одну простую, но общую функцию, которую можно использовать во многих различных приложениях (в том числе во многих, не предусмотренных первоначальным автором). Другие команды используются для других функций. Например, существуют отдельные команды для задач файловой системы, таких как переименование файлов, их удаление или определение их размера. Другие системы вместо этого объединяют их в одну команду «файловой системы» со своей внутренней структурой и собственным командным языком. ( PIP Программа копирования файлов [ 6 ] такой подход не обязательно хуже или лучше, но он определенно . противоречит философии UNIX
Дуг Макилрой о программировании для Unix
[ редактировать ]Макилрой , тогдашний руководитель исследовательского центра вычислительных наук Bell Labs и изобретатель канала Unix , [ 7 ] резюмировал философию Unix следующим образом: [ 1 ]
Это философия Unix: пишите программы, которые делают одно дело и делают это хорошо. Пишите программы для совместной работы. Пишите программы для обработки текстовых потоков , потому что это универсальный интерфейс.
Помимо этих утверждений, он также подчеркнул простоту и минимализм в программировании для Unix: [ 1 ]
Понятие «замысловатые и красивые сложности» — почти оксюморон. Программисты Unix соревнуются друг с другом за «простые и красивые» награды — пункт, который подразумевается в этих правилах, но его стоит сделать явным.
Макилрой, наоборот, раскритиковал современную Linux за раздутость программного обеспечения , отметив, что «обожающие поклонники Linux скормили вкусности Linux до удручающего состояния ожирения ». [ 8 ] Он противопоставляет это более раннему подходу, использованному в Bell Labs при разработке и пересмотре Research Unix : [ 9 ]
Все было маленьким... и мое сердце замирает от Linux, когда я вижу его размер. [...] Страница руководства , которая на самом деле раньше была страницей руководства , теперь представляет собой небольшой том с тысячей опций... Раньше мы сидели в комнате Unix и говорили: «Что мы можем выкинуть?» Почему существует этот вариант? Часто это происходит потому, что в базовом проекте есть некоторый недостаток — вы не попали в нужную точку дизайна. Вместо добавления опции подумайте о том, что заставило вас добавить эту опцию.
Делай одно дело и делай это хорошо
[ редактировать ]Как заявил Макилрой и является общепринятым в сообществе Unix, всегда ожидалось, что программы Unix будут следовать концепции DOTADIW, или «Делай одно дело и делай это хорошо». В Интернете имеется ограниченное количество источников аббревиатуры DOTADIW, но она подробно обсуждается во время разработки и упаковки новых операционных систем, особенно в сообществе Linux.
Патрик Волкердинг , руководитель проекта Slackware Linux , использовал этот принцип проектирования, критикуя архитектуру systemd , заявив, что «попытка управлять службами, сокетами, устройствами, монтированием и т. д. в рамках одного демона бросает вызов всему Концепция Unix: делать что-то одно и делать это хорошо». [ 10 ]
17 правил Unix Эрика Рэймонда
[ редактировать ]В своей книге «Искусство программирования для Unix» , впервые опубликованной в 2003 году, [ 11 ] Эрик С. Рэймонд (сторонник открытого исходного кода и программист) резюмирует философию Unix как принцип KISS : «Будь проще, глупый». [ 12 ] Он предлагает ряд правил проектирования: [ 1 ]
- Создавайте модульные программы
- Пишите читаемые программы
- Используйте композицию
- Отделить механизмы от политики
- Пишите простые программы
- Пишите небольшие программы
- Пишите прозрачные программы
- Пишите надежные программы
- При необходимости усложняйте данные, а не программу
- Опирайтесь на ожидаемые знания потенциальных пользователей
- Избегайте ненужного вывода
- Пишите программы, которые выходят из строя, так, чтобы их было легко диагностировать.
- Цените время разработчика, а не машинное время
- Пишите абстрактные программы, которые генерируют код вместо того, чтобы писать его вручную.
- Создайте прототип программного обеспечения перед его доработкой
- Пишите гибкие и открытые программы.
- Сделайте программу и протоколы расширяемыми.
Майк Ганцарц: Философия UNIX
[ редактировать ]В 1994 году Майк Ганцарц , член Unix Engineering Group (UEG) корпорации Digital Equipment Corporation , опубликовал «Философию UNIX», основанную на его собственной разработке порта Unix ( Ultrix ) в DEC в 1980-х годах и обсуждениях с коллегами. Он также является членом команды разработчиков X Window System и автором Ultrix Window Manager (uwm).
Книга посвящена портированию UNIX на разные компьютеры во время Unix-войн 1980-х годов и описывает его философию, согласно которой переносимость должна быть более важной, чем эффективность использования нестандартных интерфейсов для аппаратного обеспечения и графических устройств.
Девять основных «принципов», которые он считает важными, таковы:
- Маленький – это красиво.
- Заставьте каждую программу хорошо выполнять одну задачу.
- Создайте прототип как можно скорее.
- Выбирайте портативность, а не эффективность.
- Храните данные в простых текстовых файлах .
- Используйте преимущества программного обеспечения в своих интересах.
- Используйте сценарии оболочки для повышения эффективности и переносимости.
- Избегайте привязанных пользовательских интерфейсов.
- Сделайте каждую программу фильтром .
«Чем хуже, тем лучше»
[ редактировать ]Ричард П. Габриэль предполагает, что ключевым преимуществом Unix было то, что она воплощала в себе философию дизайна, которую он назвал «чем хуже, тем лучше», в которой простота интерфейса и реализации более важны, чем любые другие атрибуты системы, включая корректность, последовательность и полнота. Габриэль утверждает, что этот стиль дизайна имеет ключевые эволюционные преимущества, хотя и ставит под сомнение качество некоторых результатов.
Например, на заре Unix использовалось монолитное ядро (это означало, что пользовательские процессы выполняли системные вызовы ядра в пользовательском стеке). Если сигнал был доставлен процессу, когда он был заблокирован при длительном вводе-выводе в ядре, обработка ситуации была неясной. Обработчик сигнала не мог быть выполнен, когда процесс находился в режиме ядра с конфиденциальными данными ядра в стеке.
Критика
[ редактировать ]В статье 1981 года, озаглавленной «Правда о Unix: пользовательский интерфейс ужасен ». [ 13 ] опубликованный в Datamation , Дон Норман раскритиковал философию дизайна Unix за отсутствие внимания к пользовательскому интерфейсу. Опираясь на свой опыт работы в области когнитивной науки и с точки зрения современной на тот момент философии когнитивной инженерии , [ 14 ] он сосредоточился на том, как конечные пользователи понимают и формируют личную когнитивную модель систем — или, в случае Unix, не понимают, в результате чего катастрофические ошибки (например, потеря часа работы) слишком просты.
В подкасте On the Metal Джонатан Блоу раскритиковал философию UNIX как устаревшую. [ 15 ] Он утверждал, что объединение модульных инструментов приводит к созданию очень неэффективных программ. Он говорит, что философия UNIX страдает от тех же проблем, что и микросервисы : без всеобщего контроля большие архитектуры оказываются неэффективными и неэффективными.
См. также
[ редактировать ]- Когнитивная инженерия
- Unix-архитектура
- Минимализм (компьютерный)
- Программная инженерия
- ПОЦЕЛУЙ принцип
- Хакерская этика
- Список философий разработки программного обеспечения
- Все есть файл
- Чем хуже, тем лучше
Примечания
[ редактировать ]- ^ Перейти обратно: а б с д и Раймонд, Эрик С. (2004). «Основы философии Unix» . Искусство программирования для Unix . Addison-Wesley Professional (опубликовано 23 сентября 2003 г.). ISBN 0-13-142901-9 . Проверено 1 ноября 2016 г.
- ^ Дуг Макилрой ; Э. Н. Пинсон; Б. А. Таг (8 июля 1978 г.). «Система разделения времени Unix: Предисловие» . Технический журнал Bell System . Лаборатории Белла: 1902–1903 гг.
- ^ Деннис Ричи ; Кен Томпсон (1974), «Система разделения времени UNIX» (PDF) , Communications of the ACM , 17 (7): 365–375, doi : 10.1145/361011.361061 , S2CID 53235982
- ^ Перейти обратно: а б Керниган, Брайан В. Пайк, Роб. Среда программирования UNIX. 1984. VIII
- ^ Перейти обратно: а б Роб Пайк; Брайан В. Керниган (октябрь 1984 г.). «Проектирование программ в среде UNIX» (PDF) . Технический журнал AT&T Bell Laboratories . 63 (8). часть 2 . Проверено 15 декабря 2022 г.
- ^ «Руководство по операционной системе CP/M» (PDF) . 1983.
- ^ Деннис Ритчи (1984), «Эволюция системы разделения времени UNIX» (PDF) , Технический журнал AT&T Bell Laboratories , 63 (8): 1577–1593, doi : 10.1002/j.1538-7305.1984.tb00054.x
- ^ Дуглас Макилрой. «Выступление на церемонии вручения премии Японии Деннису Ритчи, 19 мая 2011 г., Мюррей-Хилл, Нью-Джерси» (PDF) . Проверено 19 июня 2014 г.
- ^ Билл МакГонигл. «Происхождение Linux — как началось веселье (2005)» . Проверено 19 июня 2014 г.
- ^ «Интервью с Патриком Волкердингом из Slackware» . linuxquestions.org . 07.06.2012 . Проверено 24 октября 2015 г.
- ^ Раймонд, Эрик (19 сентября 2003 г.). Искусство программирования для Unix . Аддисон-Уэсли. ISBN 0-13-142901-9 . Проверено 9 февраля 2009 г.
- ^ Раймонд, Эрик (19 сентября 2003 г.). «Философия Unix в одном уроке» . Искусство программирования для Unix . Аддисон-Уэсли. ISBN 0-13-142901-9 . Проверено 9 февраля 2009 г.
- ^ Норман, Дон (1981). «Правда о Unix: пользовательский интерфейс ужасен» (PDF) . Датаматизация . Том. 27, нет. 12.
- ^ «Устная история Unix» . Принстонского университета . История науки
- ^ «Подкаст о металле: Джонатан Блоу» .
Ссылки
[ редактировать ]- Среда программирования Unix. Архивировано 21 октября 2011 г. в Wayback Machine Брайаном Керниганом и Робом Пайком , 1984 г.
- Проектирование программ в среде UNIX . Статья Пайка и Кернигана, предшествовавшая книге.
- Заметки о программировании на языке C , Роб Пайк, 21 сентября 1989 г.
- Четверть века Unix , Питер Х. Салус, Аддисон-Уэсли, 31 мая 1994 г. ( ISBN 0-201-54777-5 )
- Философия. Архивировано 12 мая 2008 г. в Wayback Machine — из книги «Искусство программирования для Unix» , Эрик С. Рэймонд, Аддисон-Уэсли, 17 сентября 2003 г. ( ISBN 0-13-142901-9 )
- Заключительный отчет проекта проектирования ядра Multics, подготовленный М. Д. Шредером, Д. Д. Кларком, Дж. Х. Зальцером и Д. Х. Уэллсом, 1977 г.
- «Философия UNIX» , Майк Ганцарц, ISBN 1-55558-123-4
Внешние ссылки
[ редактировать ]- Основы философии Unix - автор Catb.org
- Философия Unix: краткое введение - Информационный проект Linux (LINFO)
- Почему философия Unix по-прежнему важна