среда, 25 июля 2012 г.

Коаны о программировании

Репост с Хабра: http://habrahabr.ru/post/147148/

Глубокая мудрость в рассказах этих, прочти и проникнись, юный падаван! :-)


От переводчика: The Codeless Code — сборник побасенок о философии программирования. Побасенки в сборнике разные — некоторые весьма кровожадные, некоторые достаточно хардкорные с технической точки зрения (родной язык автора — Java), но встречаются очень емкие. Представляю вам перевод семи наиболее полюбившихся мне историй, остальные 30+ (новые добавляются каждую неделю) можно найти на сайте.


Пустяк


Три дня и три ночи мастер не появлялся из своей кельи. На четвертый день монахи отправили послушника проведать его.

Мастер был занят созерцанием диаграммы потоков данных. Послушник узнал в ней второстепенную деталь обширной системы, поддержкой которой занимались монахи. Поклонившись, послушник поинтересовался, над чем работает мастер.

Мастер ответил: «Здесь есть изъян, и я размышляю, как лучше его исправить.»

Послушник воскликнул: «Но вы же проповедуете важность расстановки приоритетов, как же можете вы зацикливаться на чем-то столь мелком и незначительном?»

Ни слова не говоря, мастер поднял посох и с силой опустил его на босую ногу послушника, сломав тому мизинец. Послушник закричал от боли и заплетающимся шагом покинул келью. В этот момент он достиг просветления.

Инкапсуляция


Молодой монах объявлял открытыми не только все методы классов, но также и все атрибуты. Настоятель монастыря устал делать ему замечания и обратился за советом к мастеру.

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

«Вспороть тебе живот,» — отвечал мастер, — «чтобы положить туда рис и налить чай. У меня на сегодня плотное расписание, и мне кажется, такой метод угощения гостей будет очень эффективным.»

После этого монаху не нужно было делать замечаний по этому поводу.

Бесконечности


Два монаха из клана Паутины спорили о том, вошла ли программа в бесконечный цикл.

«Сколько уже она выполняется?» спросил настоятель монастыря.

«Не больше получаса,» ответил худой бледный монах.

«Но и не меньше этого,» уточнил полный смуглый монах.

«И все это время вы бездельничали, ожидая, пока она завершится?» уточнил настоятель. Монахи пристыжено поклонились.

Настоятель рассказал об этом мастеру. Тот сказал, «Худой монах считает, что цикл не бесконечен. Дайте ему мех вина за мудрость — никакой цикл не может быть бесконечен. Однажды произойдет сбой питания, или сервер рассыпется в пыль, или солнце поглотит Землю.»

Настоятель спросил, «А как же толстый монах, который считает, что цикл бесконечен?»

«Ему дайте два меха вина, ибо он мудрее. Пользователю, который ждет за своим браузером, десять секунд кажутся агонией, минута — миллиардом лет, а все, что еще дольше, — вечностью. Когда тигр терзает антилопу, ей неважно, использует он восемь когтей или миллион.»

Эволюция


Послушник изучил код мастера и в точности следовал его стилю: паттерны разработки, способы именования, расстановка отступов были такими же, даже комментарии казались подобием голоса мастера.

Во время следующего обзора кода послушник с удивлением увидел, что мастер крайне недоволен.

«Но мастер,» — запротестовал он, — «Я следовал вашему примеру с точностью до последней точки с запятой. Вот ваш класс, написанный в том месяце — разве не похож он на мой, как два яйца из одной кладки?»

«В этом-то и проблема,» нахмурился мастер. «Вчера я был глупцом, на прошлой неделе — идиотом, а месяц назад — имбецилом. Не показывай мне код, который я мог бы написать вчера, покажи мне код, который я мог бы написать завтра.»

Сорняки


Храму был нужен новый монах, и два потенциальных адепта претендовали на это место. Мастер велел монаху провести собеседование с обоими. В тот же вечер монах доложил:

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

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

Затем они перешли в комнату кандидата, который решил задачу. Его записи тоже оставались на доске, расползаясь по ней без заметного порядка. Поспешно нацарапанные каракули вились зигзагами, иногда наползая друг на друга — паутина ахинеи. Мастер покачал головой: «Ты говоришь, что здесь душистый укроп и лимонная трава, но я не могу найти их среди сорняков.»

Река чая


Только мастер устроилась в своем любимом чайном доме, как к ней подошел молодой послушник узнать ее мнение о коде, который он написал.

Мастер изучила листинг и обнаружила, что каждый метод в нем тщательно задокументирован. Для метода setName класса Person было указано, что он устанавливает имя человека; метод getName подтверждал, что он возвращает имя, установленное setName; и даже метод toString клялся, что он вернет строку.

Мастер отбросила листинг и сидела в молчании. Через некоторое время послушник спросил, недовольна ли она.

«Интересный вопрос,» — ответила мастер и указала на код, — Это бумага, лежащая на татами. На бумаге чернила. Чернила складываются в много слов. На кипарисе снаружи сидит птица. У птицы два крыла с перьями и два глаза..."

Она продолжала в том же духе, пока послушник не покраснел. Он собрал свой код и удалился, пристыженный, но просветленный.

Мусор


Мастер изучала программу, написанную в удаленном монастыре. На ее мониторе большие фрагменты кода светились не черным, а зеленым — они были закомментированы.

«Любопытно,» — сказала мастер, — «Я открыла точные часы и обнаружила внутри кожуру апельсина и рыбьи кости.»

Настоятель объяснил, что неактивный код был ненужен, но он приказал монахам оставить его: если однажды понадобится восстановить логику, код можно будет просто раскомментировать, а не переписывать с самого начала.

«Это можно понять,» — кивнула мастер.

На следующий день монахи собрались на встречу с мастером. Их беспокоило то, что настоятеля нигде не могли найти. Мастер указала им вверх, на стропила, где висело тело настоятеля.

«Услуги вашего настоятеля больше не требуются,» — сказала мастер. — «Но оставьте его тело разлагаться над вами. В конце концов, однажды его методы могут снова потребоваться, и было бы расточительно обучать нового с нуля.»

В своем отчете мастер отмечала быстрое изменение методов работы клана. Она приписывала это хорошему примеру покойного настоятеля и писала «Нам следует рассмотреть возможность его восстановления в должности.»