Двоекультурие
Joel on Software - Двоекультурие
Двоекультурие
Автор: Джоэл Сполски
Переводчик: Михаил Kиселев
14 декабря 2001 г.
На сегодняшний день, Linux и Windows функционально более похожи, чем отличаются друг от друга. Они оба поддерживают одинаковые основные метафоры программирования, от командной строки до графического интерфейса пользователя (GUI) и веб-серверов; они организованы вокруг фактически одинаковой оболочки системных ресурсов, от похожих файловых систем, памяти до сокетов, процессов и нитей. Они не более чем набор основных сервисов обеспечиваемых каждой операционной системой для ограничения видов приложений, которые вы можете создать.
Всё что осталось, это разница культур. Да, все мы едим пищу, но кроме того, одни едят сырую рыбу с рисом используя деревянные палочки, а мы руками едим пластины говядины на хлебе. Культурная разница не означает, что Американский желудок не сможет переварить суши или что Японский желудок не переварит Биг Мак, и это не означает что не существует Американцев которые едят суши или Японцев которые едят гамбургеры, но это означает, что у Американца впервые сошедшего с самолёта в Токио появляется ошеломляющее чувство что это место странное, чёрт возьми, и неважны философствования о том, что в сущности все мы одинаковые, мы все любим и работаем и поём и умираем будет важнее тот факт, что Американцы и Японцы никогда по настоящему не смогут смириться с устройством чужого туалета.
Какова культурная разница между программистом для Windows и Linux? Существует много деталей и тонкостей, но по большей части это сводится к одной вещи: культура Unix ценит код, который полезен для других программистов, в то время как культура Windows ценит код предназначенный для не-программистов.
Это, конечно же, сильное упрощение, но на самом деле это большая разница: программирование для программистов или конечных пользователей? Всё прочее это комментарии.
Часто обсуждаемым Эриком С. Рэймоном была недавно написана большая книга названная "Искуство программирования в Unix" подробно изучающая его собственную культуру. В можете купить книгу и прочитать её на бумаге или, если политика Рэймонда слишком анти-идиотична для вас чтобы решить дать ему деньги, вы можете даже прочитать её онлайн бесплатно и быть уверенным что автор не получит ни копейки за свою трудную работу.
Взглянем на небольшой пример. Культура программирования Unix базируется на высоко уважаемых программах которые могут быть вызваны из командной строки, получая аргументы которые управляют каждым аспектом их поведения, и результат работы которых может получен в виде строго форматированного, машиночитаемого текста. Такие программы ценятся, потому что они легко могут быть включены в состав других программ или больших системы программ, программистами. Возьмём один простой пример, существует основная ценность в культуре Unix, которую Рэймонд назвал "Молчание - золото", что означает, что программа которая сделала точно то, что вы сказали ей сделать успешно, не должна выдавать никаких выходных данных. Это не имеет значения, что вы набрали 300 символов в командной строке, чтобы создать файловую систему, или скомпилировать и установить сложный кусок программы, или послать ракету ракету с космонавтами на Луну. Если это получилось, то общепринято просто ничего не выводить. Пользователь должен заключить из появления следующего приглашения в командной строке, что все должно быть в порядке.
Это важная ценность в Unix, потому что вы программируете для других программистов. Как Рэймонд подаёт это, "Программы которые бормочут не имеют склонности хорошо работать с другими программами". Напротив, в культуре Windows вы программируете для тёти Мэдж и тёта Мэдж может заключить, наблюдая что программа которая не выдаёт результата потому что она завершилась успешно, не отличается от программы которая не выдала результата потому, что она завершилась неудачно или программы которая не выдала результата потому что она неправильно истолковала ваш запрос.
Подобным образом культура Unix ценит программы которые остаются текстовыми. Они не очень любят GUI, за исключением губной помады наносимой прямо поверх текстовой программы, и они не любят бинарных файловых форматов. Это потому что текстовый интерфейс проще для программирования, по сравнению с 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 написана кратко но полно... Стиль предполагает активного читателя, который способен сделать очевидные выводы про недосказанное выведя их из того что сказано, и кто имеет уверенность в себе чтобы доверять этим заключениям. Читайте каждое слово тщательно, потому что редко вам скажут что-либо дважды." Ой вэй, я думаю он действительно учит молодых программистов писать более невыносимые страницы помощи.
Для конечного пользователя, вы никогда не уйдёте от этого. Рэймонд может называть это "упрощающая снисходительность", но культура Windows понимает, что конечный пользователь не любит читать и если они решили прочитать вашу документацию, они прочитают лишь минимальное количество, так что вы должны пояснять вещи повторно... действительно, критерий хорошего файла помощи в Windows это то, что любую отдельную тему может прочитать средний читатель без дополнительного знания любой другой темы справки.
Как мы получили различные основные ценности? Это другая причина по которой книга Рэймонда так хороша: он идёт далеко в историю и развитие Unix и переносит молодых программистов со всей собранной историй культуры назад в 1969. Когда Unix был создан и когда было сформированы его культурные ценности, не существовало конечных пользователей. Компьютеры были дорогими, компьютерное время было дорогим, и изучение компьютерной техники означало изучение программирования. Это не удивительно, что появившаяся культура ценила вещи которые полезны для других программистов. По контрасту, Windows был создан с единственной целью: продать так много копий сколько возможно для прибыли. Туеву хучу копий. "Компьютер на каждый стол и в каждый дом" было точной целью команды которая создала Windows, постановила его повестку дня и определила его основные ценности. Лёгкость использования для не-программистов была единственным путём чтобы попасть на каждый стол и в каждый дом и так usability ?ber alles стала культурной нормой. Программисты, как аудитория, были крайним дополнением.
Культурный раскол так отчётлив что Unix никогда по настоящему не делал никаких вторжений на десктопы. Тётя Мэрдж не может по-настоящему использовать Unix, и повторяющиеся попытки сделать приятную оболочку для Unix чтобы тётя Мэрдж могла использовать проваливались, единственно потому что эти усилия делались программистами которые были погружены в культуру Unix. Например, Unix имеет ценность - отделение правил от механизма, который исторически, пришёл от создателей X. Это прямо ведёт к расколу в пользовательских интерфейсах; никто небыл вполне способен согласовать все детали как пользовательский интерфейс десктопа должен работать, и они думают, что это правильно, потому что их культура ценит это разнообразие, но для тёти Мардж это очень даже не хорошо использовать различные пользовательские интерфейсы для вырезания и вставки (cut and paste) из одной программы, которую она использует в другую. Хорошо, теперь мы пришли, 20 лет после того, как разработчики Unix начали пытаться изобразить хороший пользовательский интерфейс для их систем, и мы остаёмся на точке, где CEO крупнейшего продавца 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 полон самодовольных культурных преимуществ, "защиты" и slashdot-karma-whoring сектанства в то время как мир Windows более практичен ("да, что бы ни было, я просто должен сделать жить здесь") стержень из культуры которая чувствует себя под блокадой, неспособна вырваться из серверного клозета и рынка приверженцев и стать основным декстопом. Этот haughtiness-from-a-position-of-weakness наибольший изьян "Искусства программирования в Unix", но это действительно не большой изьян: в целом книга так полна невероятно интерестными проникновениями в сущность так многих аспектов программирования что я согласен держать мой нос во время редких дурнопахнущих идеологических проповедей потому что там так много для изучения о универсальных идеалах from the rest книги. Действительно, я должен рекомендовать эту книгу разработчикам любой культуры на любой платформе с любыми целями, потому что так много ценностей которые она возвещает универсальны. Когда Рэймонд отмечает что формат CSV находится ниже по отношению к /etc/passwd формату, он пытается заработать очки для Unix против Windows, но вы знаете что? Он прав. /etc/passwd легче анализировать чем CSV, и если вы читаете эту книгу, вы узнаете почему и вы станете лучшим программистом.
В английском оригинале статья называется Biculturalism
Джоель Спольски - основатель Fog Creek Software, небольшой компании по
разработке программного обеспечения, расположенной в Нью-Йорке.
Окончил Йельский Университет, работал программистом и управляющим в
Microsoft, Viacom и Juno.
Содержимое этих страниц представляет собой мнение одного человека.
Всё содержимое Copyright ©1999-2005 by Joel Spolsky. All Rights Reserved.
FogBUGZ | CityDesk | Fog Creek Software | Joel Spolsky