суббота, 10 сентября 2011 г.

[life.thoughts] Поток сознания о глупых, как кому-то может показаться, поступках

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

Жизненный опыт подсказывает мне, что действительно умственно ограниченные люди, принимающие глупые решения, именно от недостатка ума – редкость (пусть психиатры поправят меня по поводу распространенности этого явления). А когда мы оцениваем чьи-то действия как “глупые” или “дурацкие”, то мы, как правило, попадаем в одну из двух ловушек (а то и в обе сразу):

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

2. Мы оцениваем чужие поступки исходя из собственных упущенных выгод. Т.е. чем больше мы пострадали (или чем больше не получили из того, что хотелось бы нам получить), тем более глупый поступок был совершен ;)

Мне представляется, что в ловушку #2 мы попадаем намного чаще. И если читателям обидно, что я употребляю “мы” и говорю слишком обобщенно, то прошу считать это результатом слишком смелой экстраполяции моих собственных недостатков на все человечество.

Итак, повторю еще раз. В большинстве случаев признание чьих-то действий “глупыми” является следствием либо нашей неспособности оказаться в чужой шкуре, либо нашей обидой на результат этих действий. Поэтому я считаю неконструктивным простое объявление причиной какого-то поступка банальную “глупость”. Ведь если устранить фактор субъективности восприятия (обиду) и затем попытаться рассмотреть различные разумные причины рассматриваемого поступка, то в результате наверняка найдется вполне осмысленное объяснение.

Другое дело, что мы можем объявить его глупым. Поэтому для продолжения темы нужно ввести какой-то общий знаменатель. Так пусть глупое действие – это такое, которое совершено без должного обдумывания или из-за неспособности такого обдумывания. Например, глупо посылать нах миллиционера, поинтересовавшегося, куда вы направляетесь в столь поздний час в изрядном подпитии.

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

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

И еще один немаловажный фактор, который нужно отметить, прежде чем перейти совсем уж самой сути. Дело в том, что практически все люди (опять же пусть я экстраполирую свои недостатки на окружающих) время от времени демонстрируют глупость в той или иной области, будучи при этом умными во всем остальном.

Ну а теперь для тех, кто смог вытерпеть весь предшествующий поток сознания, переход к первопричине. Которой стала статья “Survival Of The Stupidest”, ссылку на которую дал у себя тов.thesz.

Мне она не понравилась тем, что в ней цитируется определение глупого человека (из другой более старой статьи). А потом в доказательство приводится два примера, которые исходя из двух описанных мной выше ловушек, могут объясняться совершенно разумными факторами, а вовсе не глупостью. Вот это определение:

A stupid person is a person who causes losses to another person or to a group of persons while himself deriving no gain and even possibly incurring losses.

Т.е.

Глупый человек – это человек, который нанося вред другому человеку или группе людей, не получая никакой выгоды для себя или даже причиняя вред себе.

Первым примером там идет эффект “Double Morton”. Вкратце: пусть три человека играют в покер – вы, Элис и Боб, и в один прекрасный момент Элис делает глупый ход из-за которого деньги теряет она сама и вы, достаются же они Бобу. А затем Боб совершает глупый ход из-за которого сам теряет деньги, вы теряете деньги, а Элис их забирает. В итоге из игры вы вылетели, а Элис с Бобом, вроде бы совершив глупые ходы, в игре остались.

Этот пример, на мой взгляд, явно демонстрирует ловушку #2. Т.е. стратегия Элис и Боба кажется вам дурацкой потому, что это вы теряете деньги. А у Элис с Бобом на разумность их ходов совершенно другой взгляд.

Кроме того, здесь видны и следы ловушки #1. Вы можете не знать исходя из каких соображений Элис делала свой ход. Может у нее в прошлом уже был успешный опыт такого поведения. Например, когда мы по молодости играли в 1000, у нас распространенным явлением было задирать ставки против того, кто “сидит на бочке”, даже если изначально было понятно, что ты свою ставку не возьмешь. Мы тем самым наносили прямой ущерб себе, но зато и не давали выиграть противнику. Ну и в дополнении к ловушке #1 – может быть прямой сговор между Элис и Бобом по выбрасыванию вас из игры, но замаскированный под серию глупых ходов :)

Второй пример в статье – это теннисная дилемма. Вам и двум вашим приятелям дают возможность сыграть в теннис. Общаться между собой вы не можете, но каждому из вас нужно сделать выбор корта. Есть корт “А”, на котором играть можно всего 45 минут. И есть корт “B”, на котором можно играть 60 минут. При этом, если вы трое сделаете одинаковый выбор, то вы втроем сможете занять выбранный корт. Т.е. каждый из вас играет 2/3 отведенного времени. Однако, если двое выберут один корт, а третий – другой, то третий выбывает и не сможет сыграть со сделавшими одинаковый выбор игроками.

Автор статьи говорит, что неглупые люди сделают выбор в пользу корта B. А вот глупые – корт A.

Этот пример, с моей стороны, явно не соответствует процитированному выше определению глупого человека. Поскольку выгода от выбора корта A в некоторых случаях очевидна. Если оставить в стороне патологических олигофренов, не способных вычислить, что 2/3 от 45 минут явно меньше, чем 2/3 от 60 минут, то какие разумные причины могут толкнуть кого-то из ваших приятелей назвать корт А вместо корта B?

Ну, например: “Я точно знаю, что Боб выберет корт B. А я бы лучше поиграл 45 минут с Элис. Поэтому лучше я выберу B и, надеюсь, Элис сделает то же самое”. По мне, так это вовсе не глупость, а эгоизм.

Или, например, у Элис и Боба есть свободное время только для того, чтобы провести на корте 45 минут, а не 60. Глупостью ли с их стороны в этом случае будет выбрать корт А, а не B?

Да и ловушка #2 здесь так же не сильно спрятана. Сетовать на глупость выбора корта A будут, в основном, те, кто сам сделает выбор в пользу B и окажется вне игры :)

Т.е. в статье приведены примеры, которые, будучи сильно абстрактными и, посему, допускающими широкое толкование, не доказывают точку зрения автора статьи. Посему примеры хреновые, да и сама статья – фигня, с явным оттенком “интеллектуального снобизма”. Поскольку в качестве контр-примеров к примерам можно подвести вполне разумные объяснения “глупым” на первый взгляд поступкам. И я не считаю такие контр-примеры домыслами.

PS. Я помню чей-то совет о том, что не нужно искать следы разума в том, что можно объяснить глупостью. Тем более, что если прислушаться к проф.Савельеву, то работа мозга – это серьезная нагрузка на организм, а организм стремится минимизировать нагрузки. Поэтому лишний раз не подумать (т.е. совершить глупость) – это оправданное с точки зрения расхода энергии поведение :)

PPS. У меня все же остаются сомнения в том, что тов.thesz употреблял “дурость” как синоним “глупости”. Поскольку цитируя определение дурости он в скобках указал “м*дачество”. А в моем понимании “дурак” и “мудак” – это совершенно разные понятия (собственно, мое понимание ближе к изложенному в Википедии).

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

[prog] Афоризм Алана Перлиса в тему волны языкостроения

Сегодня с утра увидел на RSDN-е тему, поднятую ув.тов.Курилкой (коего я всегда рад видеть у себя в блоге и пользуясь случаем передаю привет): Волна языкостроения продолжается?

Хотел разродится пространной заметкой на эту тему. Действительно, за последний год или чуть больше, появились сведения о новых языках от, что важно, солидных игроков на софтверном рынке. Go от Google, Ceylon от RedHat, недавно, кажется, Kotlin от JetBrians. Теперь вот Dart опять от Google (не знаю, как язык, но название уже зачетное ;) Только вот, на мой взгляд, не взлетят. По крайней мере шансы есть только у Go.

Собираясь потратить кучу слов на объяснение своей точки зрения я, к счастью, стал перечитывать афоризмы Алана Перлиса. И обнаружил очень точное и лаконичное объяснение:

A language that doesn't affect the way you think about programming, is not worth knowing.

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

Когда я учил Паскаль после Бейсика – это поменяло мое сознание. Равно как и С с ассемблером после Паскаля. Еще больше мозги перестроились после C++. Даже сильно похожая на C++ Java и то на какие-то вопросы заставила смотреть сильно иначе. Точно как и Ruby. И, в какой-то степени, OCaml.

Но вот Ceylon, Kotlin, да и в изрядной степени, Go, не заставляют думать иначе. Потому их лучше и не знать ;) А значит и не взлетят :)

[life.wow] Две подборки минималистичных реклам

Часть первая: Все гениальное — просто.

Часть вторая: Чем проще, тем лучше.

Для затравки то, что понравилось из второй части:

Хайникен – социальная сеть с 1873 года.

PS. Вот завидую я иногда создателям рекламы – они делают отличную простую рекламу и это видно. Всем и сразу :) В программировании так же зачастую бывают отличные, удачные простые решения. Только вот мало кому они видны. Да и то не сразу. Посему вспоминается отличный афоризм Алана Перлиса:

Simplicity does not precede complexity, but follows it.

четверг, 8 сентября 2011 г.

[life.rest] Пару слов о спиртном в отпуске

Продолжу вспоминать минувший отпуск. На этот раз пару слов о спиртных напитках.

К сожалению, в Турцию я отправился без должной теоретической подготовки в области традиционных для Турции алкогольных напитков. К счастью, в какой-то степени пробел в знаниях восполнила представительница турагентства, которая сопровождала нас из аэропорта в отель.

Так вот, традиционное виноделие в Турции, можно сказать, плодово-ягодное. Вино делают из граната, шелковицы (тутовое вино), абрикос и пр. Самыми лучшими местными винами как раз считаются гранатовые и тутовые. Про виноградные турецкие вина я ничего не слышал.

В отеле было два класса алкогольных напитков – местные, к которым относятся турецкие вина (красные, розовые и белые) и пиво Effes (так же с турецкого завода). Все остальное, т.е. виски, коньяки, шампанское, ром и пр. – это уже вторая категория. Местные напитки бесплатно, в любое время и в любых количествах. Остальное, понятное дело, за деньги. Цен точно не скажу, но вроде порция купажированного виски класса Jack Daniels – $3, бутылка шампанского в баре – $39.

Местного вина я попробовал за первым же ужином. Сухого красного, вроде гранатового. Может я уже избалован, но по мне, вино должно быть все-таки виноградным. А это так, баловство, какой-то кисленький алкогольный напиток. Никакого букета и удовольствия от употребления :) Попробовал еще какого-то белого – страх и ужас, кислятина похлеще дешевых молдавских вин времен начала 90-х :)

В ресторанчиках отеля местные вина можно было взять двумя способами. Во-первых, попросить бокал вина у официанта. Он тогда идет к специальному столику с бутылками вина, наливает бокал из подходящей бутылки и приносит тебе. Во-вторых, рядом со столиками с чае- и кофе-машинами обязательно располагался столик с “бочонком” вина с тремя краниками – для красного, розового и белого. А рядом – батарея бокалов. Просто подходишь, наливаешь сколько тебе хочется и все. Никаких ограничений :) По вкусу разницы в красных винах из бутылок и “бочки” я не заметил.

Пиво, светлый Effes, разливают в барах. Я уже давно не любитель пива, но на мой вкус это такой же Effes, какой продают у нас в бутылках. Так что те несколько раз, когда мне хотелось пива, я с удовольствием пил местный Effes. Опять же никаких ограничений в количестве его потребления нет – пей сколько хочешь.

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

Единственное, что я знал до поездки в Турцию – это то, что национальным крепким напитком там является турецкая рака (см. о названии чуть дальше). Естественно, хотелось попробовать. Посему решился на покупку маленькой бутылочки в местном магазинчике:

Впечатления смешанные. Во-первых, поскольку напиток настаивается на анисовом корне, то полное ощущение, что пьешь не водку, а лекарство (памятный с детства вкус алтейки, так мы эту микстуру называли). Во-вторых, не смотря на свою приличную крепость, пьется очень легко и мягко. И, в-третьих, на утро во рту было ощущение такой жуткой помойки, что словами не передать :)

По возвращении домой я заглянул в Википедию и еще раз убедился в правильности изречения RTFM :) Оказывается, это не раки, а ракы. И пьют ее не так, как я, а изрядно разбавленной – на три четверти воды всего лишь одна четверть ракы. Т.е. моих 200 мл, которые всего лишь средняя доза для меня одного, должно было бы хватить на четверых :)

Отмечу так же, что ракы стоит заметно подороже местных вин. Чекушка ракы (средней ценовой категории, были и подороже, и подешевле) обошлась мне в 15 турецких лир ($10). Почти столько же стоит 0.7 бутылка местного вина (опять же средней ценовой категории). Кстати, если уж зашла речь о ценах, то очень сильно меня вставила разница в цене на литровый 12-летний Chivas Rigal в магазинчике в отеле ($74) и в Duty Free в аэропорту ($32).

Ну а мне отдых скрашивал замечательный 15-летним виски Dalwhinnie, купленный в Duty Free магазинчике перед вылетом:

Литровой бутылки мне как раз хватило на все время пребывания в отеле. Причем я довольно быстро нашел оптимальный режим потребления – в отель мы возвращались где-то около 18 часов, а ужин в ресторанчиках начинался только в 19. За это время, пока жена с дочкой приводили себя в порядок, я успевал неспешно употребить рюмочку-другую виски в качестве аперитива.

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

Виски был действительно классный, свою не маленькую цену – $68 – он полностью оправдал. Рекомендую! :)

PS. Кстати, в Домодедово выбор виски в Duty Free магазинах был намного богаче, чем в аэропорту Анталии. Кроме вездесущих Jack Daniels, разноцветных Label, Jameson и Chivas Rigal, был очень приличный выбор односолодовых виски. А вот в Турции все гораздо скромнее. Поэтому я на обратной дороге ограничился 12-летним Chivas Rigal.

[life.sport.darts] Очень интересные дротики от dart9 с системой Direct Shaft System

Нравится мне экспериментировать с разными дротиками. Поэтому с интересом смотрю обзоры различных моделей у YouTube-вского пользователя double16dotcom. И вот свеженький обзор очень необычной модели от нового производителя – dart9 (ссылка на англоязычный сайт). Их система соединения хвостиков с баррелем внушаить :) Как, собственно, и цена – 77Euro за полный комплект дротиков и 2.20Euro за комплект хвостиков (для сравнения – мои нынешние боевые Bull’s-ы с заменой игл обошлись мне в ~35Euro, а комплект весьма живучих нейлоновых хвостиков стоит всего 0.22Euro).

Но все равно интересно. Прогресс не стоит на месте.

понедельник, 5 сентября 2011 г.

[prog.bugs] Вернусь к незакрытому обсуждению бага в C++ном коде

Неожиданно обнаружил в почте комментарий к старой теме “А жуки все лезут и лезут. На этот раз приплюснутые”. К сожалению, тогда почему-то не смог ответить. А жаль, тема хорошая. Поэтому возвращусь к ней еще раз.

Итак, одна из проблем была вызвана кодом:

std::string
hex_char( char ch )
{
   char v[5];
   std::sprintf( v, "%02x", ch );
   return std::string(v);
}

Напомню суть проблемы. По умолчанию char в С++ – это знаковый тип (хотя это зависит от ключей компилятора). Поэтому, если в ch содержится не ASCII символ из диапазона [128, 255], то при передаче в sprintf будет получен отрицательный int. Шестнадцатиричное представление которого никак не уместится в буфер v (по крайней мере для int-ов, чья размерность больше 8 бит).

В тогдашних комментариях звучала мысль, что я зря обозвал этот баг приплюснутым. Это типичная C-шная ошибка – неверное указание размера буфера-приемника для sprintf (как и использование sprintf вместо snprintf, а еще лучше C++ных потоков вместо функций printf-ного семейства).

Посему объясняю свою точку зрения. Проблемы с sprintf – это уже следствие главной проблемы. А главная проблема в том, что разработчик забыл об особенностях C++ со знаковостью типа char. И, поскольку в C++ эта особенность присутствует изначально и человек пишет только на C++, то это именно проблема C++. То, что С++ унаследовал ее из C уже не имеет значения (хотя я C не знаю в достаточной степени, поэтому не уверен в наличии в нем заморочек на счет signed char, unsigned char).

Более того, я уверен, что человек, забывший об особенностях знака в типе char, отгреб бы гораздо больших проблем и с применением C++ных потоков. Вот, смотрим простейший код:

#include <iostream>

int
main()
   {
      char c = -1;

      std::cout << '\'' << std::hex
            << static_cast< unsigned int >(c) << '\'' << std::endl;
   }

Что мы увидим, запустив такую программу? ‘ff‘? А нетушки! Visual C++ и Intel C++ выдают `ffffffff`. Что совершено логично.

Но такой неправильный вывод, на самом-то деле, гораздо хуже аварийного завершения программы (по крайней мере во многих случаях). Представьте, что такое неправильное формирование hex-представление используется для сохранения в БД значения MD5 хеша или для передачи этого же хеша в XML-документе. Ведь ошибки не произойдет, hex-представление будет получено и уйдет куда-то дальше. Где со временем обязательно возникнут проблемы. Но ведь это же уже чужие проблемы ;)

Вот так я смотрю на это дело. И хорошо, что ошибка проявилась так жестко – падением программы. Ведь все-таки лучше сломаться, чем произвести неправильный результат. Fail fast, как говорится ;)

воскресенье, 4 сентября 2011 г.

[life.psychology] Статья о полезности напряжения собственного ума и видеоинтервью с профессором Савельевым

Уже довольно давно увидел у кого-то в блоге (наверное у Анатолия Вассермана) ссылку на статью “О вкусной и здоровой пище для ума”. Основной ее смысл в том, что наш ум, как хорошую охотничью собаку, если оставить без дела, то начнет творить пакости. Посему нужно его озадачивать – изучать иностранный язык, например. Чтобы делом был занят.

После ее прочтения всплыли два воспоминания из собственной молодости. Первое в подтверждение основной мысли статьи.

Класса после девятого, на летних каникулах, устроился на “Гомельдрев” в один из цехов разнорабочим – работа заключалась в том, чтобы в разных концах цеха собрать разные готовые куски будущего фургона, снести их все в одно место, сложить в т.н. “пакет” и погрузить его на кар для перевозки в соседний цех. Работа на уровне врожденных инстинктов, думать не нужно – берешь ближе, несешь дальше :) Так вот после месяца такой работы у меня впервые в жизни появилось острое желание пойти в школу! 1-го сентября в том году я ждал с таким нетерпением, которого никогда ни до, ни после не было. А все потому, что я физически ощущал прогрессирующее отупение. И только школа могла в то время от этого спасти.

А второе воспоминание не имеет точной привязки ко времени. Просто после поступления в университет и, особенно, после его окончания, интерес к решению каких-либо логических задач в свободное от работы время у меня постепенно сошел на нет. Интеллектуального напряжения мне на работе хватало (особенно когда приходилось работать по шесть дней в неделю). И вспоминаются случаи, когда нужно было не напрягать мозг какой-то учебно-профилактической задачкой, а напротив – отключать его, чтобы хотя бы уснуть можно было спокойно.

Так что, думаю, вещи, о которых говорят в упомянутой выше статье – это как физкультура, только для мозгов. Однако, не нужно превращать увлечение физкультурой в профессиональный спорт. Ведь в спорте высоких достижений забота о здоровье спортсмена – это так, один из факторов, может и не самый важный. А напряженная интеллектуальная работа в такой профессии, как программирование – это уже не физкультура, а профессиональный спорт. И здесь речь идет не о том, чтобы поддерживать ум в нужных кондициях небольшими упражнениями. А о том, чтобы не истощить его раньше времени. Я так думаю.

По ходу вспомнил высказывания профессора Сергея Савельева о том, насколько тяжелой нагрузкой на организм является напряженная работа мозга (один раз я уже давал ссылку на его интервью). А тут на сайте Гоблина как раз в тему попались ссылки на три ролика с очередной беседой с проф.Савельевым. Посмотрел с удовольствием, хотя два черноволосых кадра всячески мешали слушать профессора своими попытками что-то кому-то доказать. Для того, чтобы не терять эти ролики, размещаю их здесь.

Сергей Савельев в программе «В здоровом теле здоровый дух», часть 1 from Tynu40k Goblina on Vimeo.

Сергей Савельев в программе «В здоровом теле здоровый дух», часть 2 from Tynu40k Goblina on Vimeo.

Сергей Савельев в программе «В здоровом теле здоровый дух», часть 3 from Tynu40k Goblina on Vimeo.

PS. Особенно понравилось во второй части (где-то с 1:55) объяснение про невозможность восприятия и появления из-за этого имитации. А последующий спор двух ведущих на счет критериев новизны – как раз яркая иллюстрация имитации вместо интеллекта.