Показаны сообщения с ярлыком век живи - век учись. Показать все сообщения
Показаны сообщения с ярлыком век живи - век учись. Показать все сообщения

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

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

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

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


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


Пустяк


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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

Эволюция


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

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

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

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

Сорняки


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

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

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

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

Река чая


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

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

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

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

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

Мусор


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

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

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

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

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

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

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

пятница, 11 ноября 2011 г.

На права без взяток 2 - Свершилось!

    Ура! Урааааа!!!!! Свершилось! 9 ноября я сдал экзамен в ГАИ, и что самое для меня приятное - ни копейки не заплатив мимо кассы. Нет, я отнюдь не жлоб, но я не люблю когда мне навязывают свои условия и терпеть не могу, когда мне говорят "Все так делают - и ты делай...". А теперь немного подробнее:
 
   Еще до того как записаться на курсы, я решил, что по крайней мере попробую сдать экзамен в ГАИ самостоятельно. Не то, чтобы я принципиальный борец против взяток и коррупции, скорее имелся чисто спортивный интерес - а смогу ли я? С самого начала занятий в автошколе я засел за решение билетов, тратил в день минут по 20-30 на их решение, не так уж много, согласитесь? Всего имеется 93 билета по 20 вопросов(Харьковские билеты). В итоге, за 2 месяца тренировок я уже на 90% вопросов отвечал верно и был уверен в своих силах, при условии, что меня не будут валить. Мне стопиццот раз рассказывали, что в ГАИ для проведения экзамена имеется специальная программулина и она заточена таким образом, что "нужные" люди сдадут экзамен неважно правильно они отвечают на вопросы или нет. Естественно было бы предположить, что она может работать и в обратном направлении. Немного забегая наперёд, поделюсь наблюдением - в программулине есть внизу строка состояния, она показывает на сколько вопросов ты уже ответил, сколько неправильных ответов, сколько времени осталось до конца, и особенно мне бросилось в глаза поле "Режим" и его значение "Обычный" :-)
 
   С вождением все было немного сложнее - всё мое вождение ограничилось 10-тью занятиями по регламентированно 2, а реально по 1,5 часа из которых я к тому же одно пропустил. Первое занятие было как и первый блин - тык-мык, то глохнет, то прыгает, то не едет. Дальше все пошло веселее, за рулём я начал себя чувствовать увереннее, начал успевать следить одновременно за управлением авто, знаками, светофорами и дорожным движением. Пару слов об учебном авто - Dacia Nova GTI, ядовито желтая, без усилителя руля(о чем я, кстати, ни разу не пожалел на сдаче вождения в ГАИ), с непонятно как отрегулированными педалями - короче, не сразу мы с ней сошлись. Инструктор неплохой мужик опытный, не давал мне партачить за рулём, хоть и трепались мы с ним всю дорогу постоянно, но работу свою делал четко, следил за мной как Око Саурона. Я ему сразу заявил, что сдавать буду сам, на что он ответил "Ну, если билеты выучишь, вполне можешь и сдать. На вождении тебя валить никто не будет". На площадке в ГАИ мы были всего 3 раза. Упражнения на экзамене, если кто не знает, такие:
  • заезд задом в "гараж"
  • разворот в ограниченном пространстве
  • эстакада - трогание на подъем с ручника
Всего лишь 3 упражнения. В принципе, как мне кажется, у меня все получалось довольно неплохо - я никогда не спрашивал у инструктора нормально у меня получается или нет, а он всегда молча мне ставил в табель "4-". Только на последнем занятии он сказал, что есть в группе девчёнки до которых мне еще расти и расти, хотя и опыта вождения у них до автошколы не было.
 
   Внутренний экзамен в автошколе по теории я сдал всего лишь с одной ошибкой, хотя его все "сдали". Экзамен в ГАИ для всей группы был назначен на 8 ноября. 8 ноября у меня прийти не получалось так как предстояла командировка в Киев. В итоге, с преподавателем договорились, что приду 9-го числа после обеда и буду сдавать один. 9-го числа я отпросился с работы "Иду сдавать экзамен в ГАИ. - Платил? - Нет, сам хочу попробовать. - Значит не сдашь. Доказано миллион раз" и снова мне начали рассказывать страшилки о злобных гаишниках, отчаянных дураках, которые пытались сдавать сами да потом все равно несли деньги, поджатых педальках тормоза на эстакаде и тд.  Короче настрой был не самый лучший. В полтретьего я был в ГАИ, зашел в экзаменационный класс, меня посадили за компьютер, кроме меня никого не было, я с дрожью в теле и замиранием сердца начал отвечать на вопросы в "Обычном" режиме :-). Как ни странно на первые 2 вопроса я ответил правильно, на последующие 5 или 7 тоже. потом ошибка, потом правильно, еще правильно, снова верно, "лять, ошибка!"..."Андрей, молодец, сдал" - это сказал гаишник, который сидит на пульте и контролирует процесс сдачи. 18 из 20! Как заказывали! "Только машины дежурной уже нет, можешь завтра прийти с утра сдавать вождение."  Ненене! Я начал вызванивать инструктора, чтобы он приехал и я сдавал на его машине(так можно!!!), инструктор был занят, потом увидел машину нашей автошколы во дворе, позвонил преподавателю, он сказал, это машина директора автошколы, что можно найти его и попросится сдать на его машине. Я его нашел, но он не разрешил. В итоге, мы с гаишником пошли на площадку, выдернули там машину другой автошколы - Chevy Aveo с усилителем руля, плавным ходом педалей, а оказалось, что это таааак непривычно и неудобно! ведь я то привык к своей учебной машинке, где руль поворачивать нужно тремя руками, а чтобы обороты ловить нужно иметь особое строение ушной раковины. Вообщем, как-то поехали, как-то заехали задним ходом в гараж, как-то взобрались на эстакаду, как-то вернулись на исходную, потом пошли обратно в ГАИ и написали мне в документах, что я сдал экзамен :-) Только вот права сразу не дали - нет бланков. Но это уже нестрашно, пару недель я потерплю.

вторник, 18 октября 2011 г.

На права без взяток? да ну как же!

Сижу учу ПДД. Экзамен в ноябре. Буду пробовать сдаться своими силами - договорился о нескольких дополнительных индивах по вождению, конкретно налегаю на билеты... Млин! КАК? сдавать экзамен, если даже в онлайн-билетах содержатся подвохи?!


В данной ситуации водителю грузовика опережение запрещено, так как в населенном пункте максимальная скорость движения 60 км/ч.  НО "правильный" ответ - опережение "Разрешено" потому, что знак 3.26 "Конец запрещения обгона" превратился в 3.30 "Конец ограничения максимальной скорости" 50 км/ч, а мы оказались вне населенного пункта почему-то. Пардоньте! Во-первых, где знак "Конец населенного пункта"? Во-вторых, где там взялся знак 3.30, за деревом спрятался, как обычно?

Ну я, конечно, слышал слухи, что при сдаче теории в ГАИ неправильные ответы имеют место быть "по умолчанию", но, чтобы так откровенно... Напомню, билеты на этом сайте - это реальные билеты(Киевское издание) для сдачи экзамена в ГАИ.

UPDATE: Йода Магистр в билете несомненно этом условие составлял.


пятница, 2 сентября 2011 г.

Здравствуйте, я ваш кастомер!

История одного фэйла :)

Сегодня к нам приехал из Штатов кастомер. Сам он индус,  живет там уже почти 30 лет. Прикольный дядька,компанейский такой. Ну, короче, познакомились, "хау ду ю ду?", "глэд ту си ю!", то да сё, и кто-то предложил вечером сходить двинуть пивка в ближайший кабак. Да гавно вопрос!... Сидим в кабаке пьем. А Рао(кастомер) последние полтора суток питался только ништяками, которые в самолетах дают, стало быть голодный как волк, но молчит из вежливости. "Давай", - говорим, - "покушать себе закажи, пока сознание не потерял". А он: "Да я, мол, не в курсе чего у вас тут съедобное, закажите мне чего-нибудь на ваш выбор". Ну и я, от всей души желая спасти Рао от голодной смерти, выискал в меню самый увесистый стэйк из телятины и картошку-фри и попросил официантку все это как можно быстрее приготовить и подать. Когда блюдо принесли, Рао бросил на нас озадаченный взгляд и сконфужено спросил "Is it beef?"("Это телятина?"). Ну мы в ответ - "Йес, мол, да - самая лучшая телятина, вкусно, ням-ням!".

FAIL: Только через полчаса меня осенило! Корова у индусов - священное животное, её не то что есть, пальцем трогать грешно! И было мне и стыдно, и смешно одновременно. Вот такая фигня сегодня случилась.


А стэйк Рао все-таки съел. :) Голод даже индусу не тётка.

пятница, 1 июля 2011 г.

Константная ссылка на временный объект

Век живи - век учись!

Только намедни узнал о том, что привязка временного объекта к константной ссылке продлевает жизнь временного объекта до тех пор, пока живет сама ссылка. Это декларирует Стандарт(р12.2.5).

Например, в результате работы следующего кода, на экран будет выведено "temporary string". Удивительно, не правда ли!

string foo()
{
    return string("temporary string");
}

int _tmain(int argc, _TCHAR* argv[])
{
    const string& str = foo();
    cout << str.c_str(); // outputs "temporary string"

    return 0;
}