Представляю на ваш суд ещё один перевод коанов о Мастере Фу на русский язык. В данный сборник вошли все коаны, на данный момент опубликованные на сайте Эрика Реймонда. Надо сказать, что сам Эрик личность весьма неординарная, но упоминания в данной статье стоящая. Помимо холиваров в списках рассылки всевозможных проектов за его авторством также несколько серьёзных трудов о Unix — в том числе и о сообществе, без которого экосистема современных открытых проектов не была бы возможной (полный список книг). Идея перевести коаны в очередной раз пришла мне в голову во время чтения одного из таких трудов, а именно «The Art of Unix Programming», поскольку многое из скрытого смысла коанов становится ясно только после прочтения очередной главы оттуда.
Ну и конечно же, дисклеймер: все комментарии и специфика переложения есть плод воображения вашего покорного слуги.
Я публикую этот перевод в надежде на то, что он может кому-то понравиться, но не предоставляю на него никаких гарантий, в том числе соответствия канонам перевода или пригодности для цитирования где бы то ни было.
— Я слышал, ты могущественный волшебник в мире Unix. Не согласишься ли на обмен секретами, от которого мы оба только выиграем?
— Хорошо, что ты ищешь мудрость, — ответил Мастер Фу, — Но в Великом Пути нет секретов.
Администратор выглядел обескураженным:
— Но ведь говорят, что ты — Великий мастер Unix-систем, кто знает глубочайшие их секреты! Как и я в Windows: я сертифицированный инженер Microsoft. У меня имеются и другие знаки отличия, которые в мире встретишь нечасто. Я помню наизусть даже самые мрачные закоулки реестра. Я могу рассказать всё о Windows API, даже те легенды, которые в самом Редмонде уже полузабыты. Что за тайное знание даёт тогда тебе твою силу?
Мастер Фу ответил:
— У меня нет ничего. Ничто не скрыто, нечего и раскрывать.
Возмущённый администратор воскликнул:
— Отлично! Скажи мне тогда, если нет у тебя секретов: что же мне нужно знать, чтобы стать таким же могущественным в Великом Пути как ты?
Мастер Фу промолвил:
— Человек, что принимает секреты за знание, похож на того, кто в поисках света так крепко хватается за свечу, что тушит её пламя и обжигает свою руку.
Услышав это, администратор обрёл просветление.
Мастер Фу кивнул, соглашаясь.
Студент продолжил:
— Значит, Великий Путь подходит и другим операционным системам?
Мастер Фу замер на мгновение, затем сказал:
— В любой операционной системе есть тропинка к Великому Пути, если только мы способны найти её.
Студент продолжил:
— Как тогда насчёт Windows? Она предустановлена на большинстве компьютеров, и, хотя инструменты её в основном много примитивнее, их легко освоить новичкам. Windows непременно может извлечь пользу из Unix-философии!
Мастер Фу снова кивнул.
Студент сказал:
— Что ж, тогда возвращаются ли те, кто достиг просветления в Великом Пути, в мир Windows?
Мастер Фу ответил:
— Чтобы вернуться в Windows нужно просто загрузить её.
Студент воскликнул, распаляясь:
— Мастер Фу, если это так легко, почему тогда так много раздутых и сломанных приложений под Windows? Ведь и с графическим интерфейсом и модными цветами должна быть возможность писать элегантные приложения, но такое почти не случается. Что же тогда происходит с теми просветлёнными, кто возвращается в Windows?..
Мастер промолвил:
— Разбитое зеркало уже не отразит;
Опавшие цветы не вернутся на старые ветви.
Услышав это, все присутствующие обрели просветление
Возвращаясь в этот раз, я считаю, что под разбитым зеркалом Мастер понимал людей из мира Unix, кто, прельстившись сладостью и простотой, покинули сообщество ради собственного удобства и обогащения.
Опавшие цветы же — это те, кто вырос в мире, заполненном Windows во множестве, но, тем не менее, нашёл просветление и ушёл.
Опять же, вопрос «а каким образом они нашли просветление» будет раскрыт в следующих коанах.
Забегая вперёд, философия Unix расцветает в умах программистов практически спонтанно и на полу-интуитивном уровне. В каком-то смысле поначалу такие окружённые Windows являются пратьека-буддами.
— R слышал, чт0 тbl э1337ен, — начал он, — Пожалуйс7а, обуч1 меня вс3му, что зн@ешь.
Ученики мастера переглянулись, смущённые варварским языком странника. Но Мастер только улыбнулся и ответил:
— Ты желаешь обучиться Пути Unix?
— Я х0чу бытb магом-хакер0м! — отвечал странник, — и овлад3ть всеми ящиками мира!
— Я не учу этому пути, — ответил Мастер.
Странник выглядел взволнованным:
— Чув@к, да тbl пр0ст0 позеR! — воскликнул он, — Знай ты х0тb что-н1будь, ты бы ра55казал мне!
— Есть путь, — сказал Мастер, — что может привести тебя к мудрости.
Он нацарапал IP-адрес на клочке бумаги и протянул страннику:
— Взлом этой машины не представит для тебя особой трудности, стражи её некомпетентны. Возвращайся и расскажи мне, что нашёл.
Странник поклонился и вышел. Мастер закончил свою трапезу.
Шли дни, за ними месяцы. Странник был позабыт.
Годы спустя путешественник из Woot вернулся.
— Будь ты проклят! — вскричал он с порога, — я взломал ту систему, и это было просто, как ты и сказал. Но ФБР схватили меня и бросили в тюрьму!
— Хорошо. — ответил Мастер, — теперь ты готов к следующему уроку.
Он нацарапал другой IP-адрес на бумаге и протянул страннику.
— Ты свихнулся?? — отпрянул тот. — После всего того, что со мной было, я и на милю не подойду к чужим ящикам!
Мастер Фу улыбнулся.
— Здесь, — промолвил он, — и начинается мудрость.
Услышав это, странник обрёл просветление.
Жаль, но в переводах я нигде не видел литспика скрипт-кидди.
Поэтому было совсем непонятно, например, что в его языке показалось «варварским» ученикам
Он поклонился Мастеру трижды.
— Я хочу научиться Великому Пути Unix, — начал он, — но командная строка приводит меня в замешательство.
Некоторые из наблюдавших в стороне учеников начали насмехаться над пользователем, называя его невеждой и говоря, что Великий Путь Unix покоряется только умудрённым и обученным.
Мастер поднял руку, призывая к молчанию, затем подозвал самого шумного из обидчиков туда, где сидели они с пользователем.
— Расскажи мне, — спросил Мастер ученика, — о коде, что ты написал, и об анализе, что ты проделал.
Ученик начал, заикаясь, отвечать, но ничего не смог сказать.
Мастер Фу обернулся к пользователю.
— Расскажи мне, — спросил он, — почему ты ищешь Великий Путь?
— Я недоволен программным обеспечением, которое окружает меня, — сказал пользователь, — Оно не работает надёжно и не радует глаз и душу. Услышав, что Путь Unix, хоть и сложнее, но cовершеннее, я пытаюсь отбросить все барьеры и предрассудки.
— И чем занят ты в миру, — спросил Мастер, — что заставляет тебя бороться с программным обеспечением?
— Я архитектор, — ответил пользователь, — на многих домах в этом городе моя печать.
Мастер Фу повернулся обратно к ученику:
— Кошка может насмехаться над тигром, — сказал Мастер, — но это не превратит её мяуканье в рёв.
Услышав это, ученик обрёл просветление.
И перевод там был отличный. Разве что Эрик прямо указывает в заметках, что хорошо бы использовать эквивалент «печать».
Он сказал:
— Ходят слухи, что вы великий программист. Как много строк кода вы пишете в год?
Мастер Фу ответил вопросом:
— Как много квадратных дюймов кремния вы изготавливаете в год?
— Чт… нет, мы, архитекторы железа, никогда не измеряем нашу работу таким способом, — ответил тот.
— А почему нет? — поинтересовался Мастер Фу.
— Если бы мы так поступали, — ответил архитектор, — Нас бы искушала возможность изобретать микросхемы столь большие, что они не могли бы быть изготовлены, а если даже и могли бы, их крайняя сложность создавала бы непреодолимые препятствия для корректного их тестирования!
Мастер Фу улыбнулся, затем поклонился ему.
В этот момент архитектор достиг просветления.
— В одной строчке баш-скрипта больше духа Unix, чем в десяти тысячах строк кода Си.
Программист, который весьма гордился своим мастерством в Си, возразил:
— Как такое возможно? Си это язык, на котором было написано самое ядро Unix!
Мастер ответил:
— Это так. И всё же, в одной строчке баш-скрипта больше духа Unix, чем в десяти тысячах строк кода Си.
На лице программиста отразилось огорчение:
— Но ведь через Си мы познаём благодать патриарха Ритчи! Мы становимся одним целым с операционной системой и машиной, достигая несравнимой производительности!
Мастер ответил:
— Всё это истинно. Тем не менее, в одной строчке баш-скрипта всё равно больше духа Unix, чем в десяти тысячах строк кода Си.
Программист усмехнулся и встал, желая уйти. Но Мастер Фу кивнул на своего ученика Ньюби, который прикидывал баш-однострочник на доске неподалёку, и спросил:
— Мастер программист, взгляните на этот конвейер. Написанный на чистом Си, не занял бы он десяти тысяч строк?
Программист бормотал сквозь бороду, созерцая начертанное Ньюби. Наконец он согласился, что это так.
— А сколько часов бы потребовалось, чтобы написать и отладить такую программу? — поинтересовался Ньюби.
— Много, — признал программист, — но только глупец стал бы тратить время на подобное, когда его ожидает столько куда более важных задач.
— И кто же лучше постигает дух Unix? — спросил Мастер Фу, — Тот ли, кто пишет десятки тысяч строк, или же тот, кто, понимая пустоту задачи, выигрывает, не написав ни единой?
Услышав это, программист обрёл просветление.
Мастер Фу сказал ему так:
— Когда Патриарх Томпсон изобрёл Unix, он не осознал этого. Позже он пришёл к пониманию, и не изобрёл более ничего.
— Когда Патриарх Макилрой изобрёл конвейер, он знал, что это преобразит программы, но он не знал, что это преобразит сознание.
— Когда Патриарх Ритчи изобрёл Си, он обрёк программистов на тысячу адов переполнения буфера, повреждения памяти и разыменования нулевого указателя!
— Воистину, патриархи были слепы и глупы!
Фанатика немало разозлили такие сентенции Мастера:
— Эти просветлённые, — возразил он, — завещали нам Великий Путь Unix. И если мы будем насмехаться над ними, мы потеряем всякое достоинство и переродимся как звери или инженеры Microsoft!
— Бывает ли код твой истинно чист от ошибок и упущений? — вопросил Мастер Фу.
— Нет, — признал фанатик, — такое не под силу человеку.
— Мудрость Патриархов, — промолвил Мастер, — в том, что они знали, что были глупцами.
После этих слов на фанатика снизошло озарение.
Патриархи знали, что они были глупцами — это так. Юникс был придуман и реализован совершенно стихийно, главенствовал принцип «механизм, не дизайн». Многое в поздние годы было подвергнуто критике — слишком примитивная модель безопасности, слишком много названий для одного и того же, контроль задач похож на заплатку…
Но при всей кажущейся хрупкости такой системы в работе с Unix-подобными ОС прослеживается та самая идея, за которую мы так и любим их, и которая, возможно, и легла в основу коана: «Пользователю виднее». Зная о своей недалёкости, патриархи сделали свои механизмы такими, чтобы не ограничивать тех, кто будет пользоваться плодами их трудов.
И сообщество воздало им сторицей.
В конце-концов молодой гений пришёл посетить Мастера, который встретил его с почтением и предложил ему чай. Гений принял его с ответной почтительностью и объяснил цель своего визита:
— Я пришёл к Вам, — сказал он, — в поисках оценки архитектуры и кода моего последнего проекта. Ибо проект этот исключительной сложности, и я не знаю никого, кто мог бы на равных объять его. Только признанный мастер, такой как Вы (и здесь гений низко поклонился), может обладать должной проницательностью.
Мастер Фу вежливо поклонился и приступил к изучению кода. Спустя некоторое время он поднял глаза от экрана:
— Код этот на первый взгляд выглядит очень впечатляюще, — сказал он, — его архитектура элегантна, в алгоритмах чувствуется оригинальность и искусность, и написан он с чрезвычайным тщанием, что минимизирует возможность ошибки.
Гений выглядел очень польщённым такой оценкой Мастера, но тот продолжил:
— Однако, я вижу один существенный недостаток.
— Недостаток? — встрепенулся гений, — Какой недостаток?
— Код этот сложно читать, — ответил Мастер, — он только слегка откомментирован, переменные его размыты, и я нигде не вижу описания логики и внутренних структур. Эти проблемы будут сильно препятствовать совместной работе с другими программистами.
— Я не ищу сотрудничества с иными программистами, — свысока ответил гений, — Меня постигало разочарование каждый раз когда я считал, что нашёл того, кто может сравниться со мной мастерстве. Поэтому я работаю один.
— Но даже работая один, хакер сотрудничает с другими и всегда должен изъясняться понятно, иначе работа его станет запутанной и забытой.
— Кто эти «другие», о которых вы говорите? — потребовал ответа гений.
Мастер Фу ответил:
— Все будущие ты.
Услышав это, гений обрёл просветление.
Что в них было общего, так это любовь к совершенству и программированию. Они пытались сделать свои подручные программы настолько хорошими, насколько это вообще возможно. И ещё хотели, чтобы те работали изящно. Они хотели бы сделать что-то в настолько ошеломляющем ключе, что никто не поверил бы даже в реальность подобного, и сказать: «Смотри, насколько это прекрасно. Спорим, ты не верил, что так можно!»
— Ричард Столлман
— Мастер Фу, — спросил он, — почему адепты Unix не пользуются антивирусными программами? И дефрагментаторами? И очисткой от троянов?
Мастер Фу улыбнулся и сказал:
— Когда дом твой построен хорошо, нет нужды в колоннах, чтоб держать крышу.
Послушник ответил:
— Не лучше ли всё равно использовать их — просто чтобы быть уверенным?
Мастер Фу подобрал клубок бечёвки, лежавший неподалёку, и стал оборачивать ею ноги послушника.
— Что вы делаете? — спросил тот в изумлении.
Мастер Фу ответил просто:
— Завязываю тебе шнурки.
Услышав это, послушник обрёл просветление.
Обнаружив, что они исходят от одного из новичков, он осведомился:
— В чём твоя трудность?
— Я в отчаянии от своих инструментов, — ответил новичок, — Каждый раз мне приходится использовать целый сонм редакторов, потому что ни Emacs, ни Vi, ни любой другой текстовый процессор не обладает всеми возможностями, что мне нужны.
Мастер Фу кивнул:
— Как, — спросил он, — решил бы эту трудность Мастер Великого Пути?
Ученик подумал пару минут, потом ответил:
— Ну, это очевидно. Я напишу лучший редактор на свете. Он будет делать всё, чего я захочу. Он будет делать всё, чего захочет кто угодно. И мир станет лучше, потому что…
… Тут речь ученика прервалась резким ударом посоха Мастера по затылку.
— М… Мастер? — спросил ученик, осторожно потирая ушиб, — В чём я был неправ?
— Глупец! — сказал Мастер Фу, — неужели ты думаешь, что я хочу учиться ещё одному редактору?
Услышав это, ученик обрёл просветление.
Представьте мою радость, когда я вижу первое за полтора года обновление на сайте Реймонда.
— Мастер Фу, я серьёзно обеспокоен. В молодости моей в ходу у тех, кто следовал Великому Пути, были простые и незатейливые программы — ed, mailx. Сегодня они используют vim и mutt. Завтра, я опасаюсь, они освоют KMail и Evolution, и Unix станет таким же как Windows — раздутым и испещрённым всевозможными графическими интерфейсами.
Мастер Фу сказал:
— Но какую программу использовать, если нужно нарисовать плакат?
— Я…, — осёкся программист, — никогда не делал подобного. Но я уверен, что мог бы найти истинный путь Unix и использовать LaTeX или pic чтоб справиться с этим без графического интерфейса.
Тогда Мастер Фу спросил:
— Кто быстрее переберётся через реку: тот ли, кто мечтает о плоте, или же тот, кто голосует автостопом до ближайшего моста?
Услышав это, программист достиг просветления.
mailx — потоковый и очень простой почтовый клиент, до сих пор используется кое-где на HP-UX или Solaris и для простых посылок писем по конвейеру.
vim — мощнейший на данный момент консольный текстовый редактор. Есть плагины практически на все случаи жизни.
mutt — консольный почтовый клиент с удобным интерфейсом на ncurses.
KMail — графический почтовый клиент от KDE e. V. Долгое время был огромным монолитным слепком полуработающего кода.
Evolution — графический почтовый клиент от Gnome Foundation. Долгое время не предоставлял практически никаких возможностей подгонки интерфейса и поведения под нужды пользователя.
— В пути дхармы есть учение, примером которому служит изречение Патриарха Макилроя: «Делай одну вещь, и делай её хорошо», которое демонстрирует, что программа тогда следует пути Unix, когда имеет простое и соответствующее поведение, с понятными пользователю и иным программам параметрами.
— Но есть и иное учение дхармы, примером чему служит великая мантра Патриарха Томпсона «Будучи в сомнении используй грубую силу», наравне с различными сутрами о получении 90% прямо сейчас, нежели 100% поздно, что демонстрирует ясность и простоту реализации.
— Скажите мне теперь, каким программам более присущ дух Unix?
После некоторого молчания Ньюби заметил:
— Учитель, но эти учения могут противоречить друг другу.
— Простая реализация алгоритма не покрывает все узкие места, такие как исчерпание ресурсов, состояние гонки или тайм-аут транзакции.
— Когда такое случается, поведение программы становится сбойным и непредсказуемым. Ведь не может это быть духом Unix?
Мастер Фу одобрительно кивнул.
— Но с другой стороны, хорошо известно, что идеальные алгоритмы на деле хрупки. И очередная попытка покрыть узкое место ведёт к взаимодействию и с кодом центральной логики программы, и с кодом из других узких мест.
— Таким образом, желание покрыть все узкие места сразу в стремлении достичь «простоты описания» может на деле привести к переусложнённому и хрупкому коду или к такому, который из-за обилия ошибок никогда не заработает. Ведь и это не дух Unix?
И снова Мастер одобрительно кивнул.
— Какое же учение дхармы верно, в таком случае?
И Мастер ответил:
— Когда орёл летит, забывает ли он, что ноги его касались земли? Когда тигр хватает свою добычу, забывает ли он о моменте, проведённом в прыжке? Три фунта VAX!
Услышав это, Ньюби обрёл просветление.
VAX — архитектура построения компьютеров, весьма популярная в 1980-е, на которой долгое время велась разработка Unix. Интересно отметить, что именно из-за своей приверженности к VAX адепты Unix не обратили в своё время внимание на появление неприметного в те времена Intel x86, а позже и Windows на них.
— Нам говорили, что компания Novell удерживает истинную власть над Unix.
Мастер Фу кивнул.
Ученик продолжил:
— Но также нам говорили и то, что компания OpenGroup также удерживает истинную власть над Unix.
Мастер Фу кивнул.
— Как такое возможно? — поинтересовался ученик.
Мастер Фу ответил:
— Novell действительно удерживает власть над кодом Unix, но код Unix — это не Unix. OpenGroup действительно удерживает власть над именем Unix, но имя Unix — это не Unix.
— Что же тогда такое дух Unix? — спросил ученик.
Мастер Фу сказал:
— Не код. Не имя. Не мысль. Не вещь. Вечно меняясь, остаётся тем же.
— Дух Unix прост и пуст. Из-за этой простоты и пустоты он мощнее тайфуна.
— Двигаясь согласно законам природы, он неумолимо расцветает в умах программистов, ассимилируя проекты в своё естество. Все программы, которые хотят состязаться с ним, должны стать таким как он — пустыми, пустыми, глубоко пустыми, совершенным ничто, да будет так!
Услышав это, ученик обрёл просветление.
— Я в смятении. Разве не в том путь Unix, что каждая программа должна делать одну вещь и делать её хорошо?
Мастер Фу кивнул.
Новичок продолжил:
— Разве также не в том Путь Unix, что колесо не до́лжно переизобретать?
Мастер Фу снова кивнул.
— Почему тогда есть похожие по возможностям инструменты в обработке текста?
Мастер Фу спросил ученика:
— Какой из них использовал бы ты, будь у тебя текстовый файл и необходимость заменить несколько слов в нём другими?
Новичок нахмурился, потом сказал:
— Регулярные выражения Perl слишком избыточны для такой задачи. Я не знаю awk, но в последние недели я писал sed-скрипты. Поскольку у меня уже есть некоторый опыт, на данный момент я предпочёл бы sed. Но если нужно отредактировать лишь один файл один раз, хватит и текстового редактора.
Мастер Фу кивнул и ответил:
— Когда голоден, ешь; когда у тебя жажда, пей; когда устал, спи.
Услышав это, ученик обрёл просветление.
В один из таких дней среди внимающих был и методолог.
— Если вы не будете регулярно профилировать свой код в поисках узких мест при отладке, вы станете подобны рыбаку, который забрасывает сеть в пустое озеро, — говорил Мастер Фу.
— Если это так, тогда не является истинным также и то, что если вы не измеряете регулярно свою успешность и эффективность в работе при руководстве ресурсами, вы станете подобны рыбаку, который забрасывает сеть в пустое озеро? — спросил методолог.
— Я однажды наткнулся на рыбака, который как раз уронил свою сеть в озеро, где плавала его лодка, — сказал Мастер Фу, — Он довольно долго рылся на дне лодки, пытаясь найти её.
— Но.., — сказал методолог, — Если он уронил сеть в озеро, почему же он искал её в лодке?
— Потому что он не умел плавать, — ответил Мастер Фу.
После этих слов на методолога снизошло озарение.
— Инструменты командной строки Unix грубые и отсталые, — бросил он, — современные правильно спроектированные операционные системы делают всё через графический интерфейс!
Мастер Фу промолчал, но ткнул пальцем на луну. Собака неподалёку залаяла на руку Мастера.
— Я не понимаю вас! — сказал программист.
Мастер Фу, по-прежнему храня молчание, ткнул на изображение Будды. Затем на окно.
— Что вы пытаетесь сказать? — вопрошал программист.
Мастер Фу ткнул на голову программиста. Затем на камень.
— Почему вы не можете сказать ясно? — потребовал ответа программист.
Мастер Фу задумчиво нахмурился, затем дважды щёлкнул программиста по носу и бросил его в ближайшую мусорную корзину.
Пока программист пытался выбраться оттуда, пробегавшая мимо собака помочилась на него.
В этот момент программист достиг просветления.
Мораль же проста — графический интерфейс не делает твою программу современной и удобной за тебя.
Спасибо за внимание. Хотелось бы, чтобы такие жемчужины не пропадали в огромном море контента в нынешней сети. Комментарии, поправки к переводу приветствуются.
ссылка на оригинал статьи http://habrahabr.ru/post/273023/
Добавить комментарий