Двоекультурие

From The Joel on Software Translation Project

Jump to: navigation, search

Автор: Джоэль Сполски

Переводчик: Михаил Kиселев

14 декабря 2001 г.

Оригинал: Biculturalism

На сегодняшний день Linux и Windows функционально более похожи, нежели отличаются друг от друга. Они обе поддерживают одинаковые основные метафоры программирования, от командной строки до графического интерфейса пользователя (GUI) и веб-серверов; они организованы вокруг фактически одинаковой оболочки системных ресурсов, от похожих файловых систем, памяти до сокетов, процессов и потоков. Они не более чем набор основных сервисов, обеспечиваемых каждой операционной системой для ограничения видов приложений, которые вы можете создать.

Всё, что осталось — это разница культур. Да, все мы едим пищу, но всё же некоторые едят палочками сырую рыбу с рисом, а мы руками едим пластины говядины на хлебе. Культурная разница не означает, что американский желудок не сможет переварить суши, или что японский желудок не переварит Биг Мак, и это не означает, что не существует американцев, которые едят суши или японцев, которые едят гамбургеры, но это означает, что у американца, впервые сошедшего с самолёта в Токио, появляется ошеломляющее чувство что это странное место, чёрт возьми, и никакие философствования о том, что в сущности все мы одинаковые, мы все любим и работаем и поём и умираем, не смогут перевесить того факта, что американцы и японцы никогда по-настоящему не смогут смириться с устройством чужого туалета.

Какова культурная разница между программистом для Windows и Linux? Существует много деталей и тонкостей, но по большей части это сводится к одной вещи: культура Unix ценит код, который полезен для других программистов, в то время как культура Windows ценит код, предназначенный для не-программистов.

Это, конечно же, сильное упрощение, но это и правда большая разница: мы программируем для программистов или конечных пользователей? Всё прочее — это комментарии.

Часто обсуждаемым Эриком С. Рэймондом была недавно написана большая книга названная «Искуство программирования в Unix», подробно изучающая его собственную культуру. Вы можете купить книгу и прочитать её на бумаге или, если политика Рэймонда слишком анти-идиотична для вас, чтобы решить дать ему деньги, вы можете даже прочитать её онлайн бесплатно и быть уверенным, что автор не получит ни копейки за свою трудную работу.

Взглянем на небольшой пример. Культура программирования Unix базируется на высокочтимых программах, которые можно вызывать из командной строки, передавать им аргументы, которые управляют каждым аспектом их поведения, и результат работы которых может получен в виде строго форматированного, машиночитаемого текста. Такие программы ценятся, потому что они легко могут быть включены программистами в состав других программ или большой системы. Возьмём один простой пример: существует ключевая ценность в культуре Unix, которую Рэймонд назвал «Молчание — золото», что означает, что программа, программа, сделавшая точно то, что сказали, не должна выдавать никаких выходных данных. Неважно, набрали ли вы 300 символов в командной строке, чтобы создать файловую систему, или скомпилировали и установили сложную программу, или запустили пилотируемую ракету на Луну. Если это получилось, то общепринято просто ничего не выводить. Пользователь сделает вывод из появления следующего приглашения в командной строке, что все должно быть в порядке.

Это важная ценность в Unix, потому что вы программируете для других программистов. Как Рэймонд подаёт это, «Программы которые бормочут не имеют склонности хорошо работать с другими программами». Напротив, в культуре Windows вы программируете для тёти Мардж и тётя Мардж может заключить, наблюдая, что программа, которая не выдаёт результата, потому что она завершилась успешно, не отличается от программы, которая не выдала результата, потому что она завершилась неудачно или программы, которая не выдала результата, потому что она неправильно истолковала ваш запрос.

Подобным образом культура Unix ценит программы, которые остаются текстовыми. Они не очень любят GUI, за исключением губной помады, наносимой прямо поверх текстовой программы, и они не любят бинарных файловых форматов. Это потому что текстовый интерфейс проще для программирования, по сравнению с графическим интерфейсом, говорят они, который почти невозможно программировать, если только не предусмотрено чего-то вроде встроенного скриптового языка. Здесь мы опять видим, что культура Unix ценит создание кода, который полезен для других программистов, что редкая цель в программировании для Windows.

Это не говорит, что все Unix программы сделаны исключительно для программистов. Далеко не так. Но культура ценит вещи, которые полезны для программистов, и это поясняет одну или две вещи про одну или две вещи.

Предположим, вы взяли программиста Unix и программиста Windows и дали каждому задачу создать одинаковое приложение для конечного пользователя. Unix-программист создаст ядро, управляемое коммандной строкой или с текстовым интерфейсом и, возможно, вдобавок создаст GUI, который управляет этим ядром. Таким образом основные действия приложения будут доступны другим программистам, которые могут вызвать программу из командной строки и прочитать результаты как текст. Windows-программист будет стремиться начать с GUI и, возможно, как дополнение, добавит скриптовый язык, который может автоматизировать работу GUI-интерфейса. Это уместно для культуры в которой 99,999% пользователей не программисты никаким путём, образом или формой и не имеют интереса быть ими.

Существует одна значительная группа программистов для Windows которые преимущественно пишут код для других программистов: это сама команда создателей Windows в Microsoft. Они создают API, вызываемый из языка C, которые обеспечивают функциональность, и затем создают GUI-приложения, которые вызывают этот API. Всё, что вы можете сделать из пользовательского интерфейса Windows, может также быть сделано, используя программный интерфейс, вызываемый из любого приемлемого языка программирования. Например, Microsoft Internet Explorer сам по себе — это всего лишь маленькая 89-килобайтная программа, которая связывает вместе множество очень мощных компонентов, свободно доступных искушённым Windows-программистам, которые спроектированы мощными и гибкими. К сожалению, пока программисты не имеют доступа к исходному коду этих компонентов, они могут быть использованы лишь предусмотренными и разрешенными разработчиками Microsoft способами, что сделано не всегда. И иногда там есть ошибки, доставляющие проблемы тому, кто вызывает API, а исправить их без исходного кода очень трудно или вообще невозможно. Культурная ценность Unix видимого исходного кода делает его более простой средой для разработки. Любой разработчик для Windows раскажет вам про, как он потратил четыре дня на отслеживание ошибки, потому что он думал, что размер памяти, возвращённый LocalSize будет тот же, что размер памяти, первоначально запрошеный LocalAlloc, или про другую подобную ошибку, которую он мог бы исправить за 10 минут, если бы имел исходный код библиотеки. Чтобы проиллюстрировать это, Рэймонд придумал забавную историю, которая будет звучать искренно для каждого, кто когда-либо использовал библиотеку в двоичном виде.

Хорошо, теперь вы получили эти веские аргументы. Unix лучше, потому что вы можете отлаживать библиотеки. Windows лучше, потому что тётя Мардж получает какое-нибудь подтверждение, что её электронное письмо действительно было послано. Фактически, одно не лучше другого, они просто имеют различные ценности: Unix делает вещи лучше для других программистов, это основная ценность, а Windows делает вещи лучше для тёти Мардж, это основная ценность.

Давайте взглянем на другую культурную разницу. Рэймонд говорит, «Классическая документация для Unix написана кратко, но полно... Стиль предполагает активного читателя, который способен сделать очевидные выводы про недосказанное, выведя их из того, что сказано, и кто имеет уверенность в себе чтобы доверять этим заключениям. Читайте каждое слово тщательно, потому что вам редко скажут что-либо дважды». Ой вэй, я думаю, он действительно учит молодых программистов писать более невыносимые man-страницы.

Для конечного пользователя это никогда не пройдет. Рэймонд может называть это «чрезмерно упрощающей снисходительностью», но культура Windows понимает, что конечные пользователи не любят читать, и если он решили прочитать вашу документацию, они прочитают лишь минимальное количество, так что вы должны пояснять вещи повторно... Действительно, отличительный признак хорошего файла помощи в Windows — это то, что любую отдельную тему может прочитать средний читатель без дополнительного знания любой другой темы справки.

Как мы получили различные основные ценности? Это другая причина, по которой книга Рэймонда так хороша: он идёт далеко в историю и развитие Unix и переносит молодых программистов со всей собранной историй культуры назад в 1969. Когда Unix был создан и когда было сформированы его культурные ценности, не существовало конечных пользователей. Компьютеры были дорогими, компьютерное время было дорогим, и изучение компьютерной техники означало изучение программирования. Это не удивительно, что появившаяся культура ценила вещи, которые полезны для других программистов. По контрасту, Windows была создана с единственной целью: продать столько копий, сколько возможно для прибыли. Туеву хучу копий. «Компьютер на каждый стол и в каждый дом» было точной целью команды, которая создала Windows, постановила его на повестку дня и определила его основные ценности. Лёгкость использования для не-программистов была единственным способом попасть на каждый стол и в каждый дом, и так usability über alles (нем. «превыше всего») стала культурной нормой. Программисты как аудитория были крайним дополнением.

Культурный раскол настолько отчётлив, что Unix никогда по-настоящему не вторгался на десктопы. Тётя Мардж не может по-настоящему использовать Unix, и повторяющиеся попытки сделать приятную оболочку для Unix, чтобы тётя Мардж могла его использовать, проваливались только потому, что эти усилия делались программистами, которые были погружены в культуру Unix. Например, Unix имеет ценность — отделение правил от механизма — которая исторически пришла от создателей X. Это прямо ведёт к расколу в пользовательских интерфейсах; никто и близко не мог согласиться по всем деталям того, как должен работать пользовательский интерфейс, и они думают, что это нормально, потому что их культура ценит это разнообразие. Однако для тёти Мардж очень даже не нормально использовать разные интерфейсы для вырезания и вставки (cut and paste) в разных программах. И мы пришли к тому, что через 20 лет после того, как разработчики Unix стали пытаться нарисовать хороший пользовательский интерфейс, глава крупнейшего поставщика Linux говорит людям, что домашним пользователям следует просто использовать Windows. Я слышал от экономистов, что Кремниевая долина никогда не будет создана, скажем, во Франции. Потому что французская культура так сурово наказывает за неудачи, что предприниматели не готовы рисковать. Может быть, то же самое справедливо и для Linux: он может никогда не стать операционной системой для десктопов, потому что культурные ценности этого не позволят. OS X доказывает это: Apple все же создала Unix для тёти Мардж, но только потому, что инженеры и менеджеры в Apple были привязаны к культуре конечного пользователя (которую я по-имперски назвал «культурой Windows», несмотря на то, что исторически она порождена Apple). Они отвергли фундаментальное правило программистско-центричной культуры Unix. Они даже переименовали основные директории — еретики! — воспользовавшись обычными английскими словами вроде "applications" и "library" вместо "bin" и "lib".

Рэймонд пытался сравнить и сопоставить Unix с другими операционными системами, и это действительно самая слабая часть этой великолепной в других отношениях книги, потому что он на самом деле не знает, о чём говорит. Когда бы он ни открывал свой рот о Windows, он показывает, что его знание о программировании для Windows пришло преимущественно из чтения газет, не из настоящего программирования для Windows. Это нормально: он не Windows-программист; мы простим это. Что типично для каждого, кто имеет глубокие знания об одной культуре: он знает свои культурные ценности, но не вполне осведомлён о различиях между частями своей культуры, которые универсальны (убийство старых леди, программы которые падают: всегда плохо), и частями культуры, которые применимы только тогда, когда вы программируете для программистов (блюда из сырой рыбы, аргументы командной строки: зависят от аудитории).

Существует слишком много монокультурных программистов, которые, подобно типичному американскому парню, который никогда не покидал Сент-Пол в Минесоте, не могут действительно обьяснить разницу между культурной ценностью культуры и базовой человеческой ценностью. Я встречал слишком много программистов Unix, которые насмехались над программированием в Windows, считая Windows варварской и тупой. Рэймонд слишком часто попадает в ловушку недооценки ценности других культур, без понимания того, откуда они произошли. Подобная слепая приверженость встречается немного реже среди программистов Windows, которые, в целом, ориентированы на решение и не идеологичны. В конце концов, Windows-программисты смогут признать недостатки своей культуры и прагматично скажут: «Смотрите, если вы хотите продать текстовый процессор множеству людей, он должен работать на их компьютерах, и если это означает, что нужно использовать Злой Реестр вместо элегантных файлов ~/.rc для хранения настроек, пусть будет так». Тот факт, что мир Unix полон самодовольного культурного высокомерия, «пропаганды» и сектантства для увеличения слэшдот-кармы, в то время как мир Windows более практичен («да, что бы ни было, я просто должен жить здесь»), произрастает из культуры, которая чувствует себя в осаде, не способна вырваться из серверной кельи и рынка любителей на большой декстоп. Эта надменность-с-позиции-слабости — самый крупный изьян «Искусства программирования в Unix», но он не так уж велик: в целом книга настолько полна невероятно интересных взглядов на суть столь многих аспектов программирования, что я согласен зажать нос во время редких дурнопахнущих идеологических проповедей, потому что в остальном там так много универсальных идеалов для изучения. Действительно, я должен рекомендовать эту книгу разработчикам любой культуры на любой платформе с любыми целями, потому что столь многие провозглашенные там ценности универсальны. Когда Рэймонд замечает, что формат CSV хуже формата /etc/passwd, он пытается заработать очки для Unix против Windows, но знаете что? Он прав. /etc/passwd действительно проще анализировать, чем CSV, и если вы прочитаете эту книгу, вы узнаете, почему, и станете лучшим программистом.

---

Personal tools