суббота, 15 ноября 2014 г.

[prog.c++.flame] Момент, когда хочется забросить программирование куда подальше

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

Вот как сегодня, когда я решил посмотреть пост Tiny Metaprogramming Library в блоге Eric Niebler. Триггером послужил приведенный ниже код функции tuple_cat, которая принимает на вход набор туплов, а возвращает новый тупл, в котором последовательно перечислены значения из всех туплов-аргументов:

namespace detail
{
    template<typename Ret, typename...Is, typename ...Ks,
        typename Tuples>
    Ret tuple_cat_(typelist<Is...>, typelist<Ks...>,
        Tuples tpls)
    {
        return Ret{std::get<Ks::value>(
            std::get<Is::value>(tpls))...};
    }
}
 
template<typename...Tuples,
    typename Res =
        typelist_apply_t<
            meta_quote<std::tuple>,
            typelist_cat_t<typelist<as_typelist_t<Tuples>...> > > >
Res tuple_cat(Tuples &&... tpls)
{
    static constexpr std::size_t N = sizeof...(Tuples);
    // E.g. [0,0,0,2,2,2,3,3]
    using inner =
        typelist_cat_t<
            typelist_transform_t<
                typelist<as_typelist_t<Tuples>...>,
                typelist_transform_t<
                    as_typelist_t<make_index_sequence<N> >,
                    meta_quote<meta_always> >,
                meta_quote<typelist_transform_t> > >;
    // E.g. [0,1,2,0,1,2,0,1]
    using outer =
        typelist_cat_t<
            typelist_transform_t<
                typelist<as_typelist_t<Tuples>...>,
                meta_compose<
                    meta_quote<as_typelist_t>,
                    meta_quote_i<std::size_t, make_index_sequence>,
                    meta_quote<typelist_size_t> > > >;
    return detail::tuple_cat_<Res>(
        inner{},
        outer{},
        std::forward_as_tuple(std::forward<Tuples>(tpls)...));
}

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

Даже не прошу понять меня правильно. Жизнь слишком коротка, чтобы тратить изрядную ее часть на изобретение способов преодоления проблем, для решения которых язык не был предназначен, да еще и посредством негодных инструментов. Или на то, чтобы разбираться в таких вот решениях. И если подобный навороченный код становится нормой в мире C++, то возникает непреодолимое желание держатся от C++ в частности, да и от программирования вообще, как можно дальше.

Это типичный случай, когда интуитивно понимаешь, что слишком мудрено, что должно быть проще. А вот формализировать это впечатление не можешь, для этого нужно слишком много усилий. Разве что вспоминаются мои старые споры на RSDN-е с C++никами, которые считали, что Boost.Lambda, реализующая лямбда функции на шаблонах C++03, -- это нормально. И что пока встроенных язык лямбда-функций нет, вполне уместно пользоваться Boost.Lambda-ами. Если кто-то не понимает, о чем речь, то вот маленький пример из штатной документации к Boost.Lambda:

std::for_each(v.begin(), v.end(),
  ( 
    switch_statement(
      _1,
      case_statement<0>(std::cout << constant("zero")),
      case_statement<1>(std::cout << constant("one")),
      default_statement(cout << constant("other: ") << _1)
    ), 
    cout << constant("\n"
  )
);

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

пятница, 14 ноября 2014 г.

[marketing.idiotic] "Такой карты еще ни у кого нет" -- это реальный аргумент?

В последние дни на глаза попадается информация о новой пластиковой карте "Альфа-Банка" -- "Близнецы". Суть в том, что это двухсторонняя карта, на одной стороне дебитовая карта, на другой -- кредитная карта.

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

Ну да ладно, я не об этом хотел сказать. Зацепил один из пунктов в разделе "преимущества двусторонней карты" вот на этой инфографике:

Посмотрите сами, четвертый пункт обозначен как "Инновационность -- такой карты еще ни у кого нет". Ну прям: афигеть, дайте два! :)))

Может меня бы это не очень бы и зацепило. Ну нужно было маркетологам почему-то четыре преимущества вписать в инфографику, а три не прокатывало ну никак. Видимо, кто-то из боссов сказал, что нужно четыре, вот и разбились в лепешку, чтобы хоть чего-то придумать. Реально же задача сложная была -- придумать преимущество, которого нет. Далеко не каждый бы справился. Я, например, минут пять думал, что можно указать четвертным пунктом, но ничего придумать не смог :)

Но вот что реально доставляет, так это апелляция сначала к "возможности выпуска в рамках зарплатного проекта", а затем к "такой карты ни у кого нет". Так и представляю себе какой-нибудь Зажопинск с единственным, едва дышащим градообразующим предприятием, рабочим которого в рамках зарплатного проекта выдают вот такие двойные карты. Ну круто, ёптыть! Ни у кого такой карты нет! :)))

ЗЫ. С другой стороны, насмотревшись в Интервэйле на вышедших из банка креаклов и результаты их творчества, остается только позавидовать Альфе. У них все еще очень и очень хорошо. Альфа на рынке банковских услуг в РФ ща чуть ли не самый инновационный банк. Мелкие ляпсусы, вроде этого, общего впечатления не портят. Так что остается только пожелать людям удачи.

ЗЗЫ. Пост, к сожалению, никем не проплачен :)

четверг, 13 ноября 2014 г.

[prog.wow] Афигеть: OpenSource .NET Core, да еще и Visual Studio Community Edition

Имхо, Microsoft-у следовало сделать это гораздо раньше. Лет на десять. Ну да лучше поздно, чем никогда: Announcing Open Source of .NET Core Framework, .NET Core Distribution for Linux/OSX, and Free Visual Studio Community Edition.

Больше всего в связи с этой новостью меня интересует, а будет ли Visual Studio 2015 в виде Community Edition?

Ну и еще один вопрос, уже чисто праздный, а нафиг теперь Mono? ;)

PS. Если честно, то лет десять назад я бы понял, какие выгоды MS может извлечь от перевода .NET в OpenSource. Сейчас уже не понимаю. Может быть от того, что далек от сферы применения .NET-а в "живой природе". Но больше склоняюсь к мысли, что MS опенсорсит то, что самой тянуть уже тяжело, а может и не нужно.

PPS. Наброс с неожиданной стороны: боюсь, что OpenSource может тупо убить разработку софтового инструментария. Как бы не случилось так, что зарабатывать на софте можно будет только при работе "на заказ" или "на пожертвования". Внутренние разработки (вроде той же Kafka (в недрах LinkedIn) или Thrief (в недрах Facebook)) попадают под категорию "на заказ", только заказчик и исполнитель работают под одной крышей.

[prog.humour] Статья для поднятия настроения: "Игры: как это делается"

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

PS. Лично я твердо убежден в том, что при разработке нового продукта бардак -- это нормальное и естественное состояние проекта. И очень здорово, когда на проекте собираются люди, которые это понимают и воспринимают как данность. Соответственно, им хватает здравого смысла принимать правильные решения в этих условиях. Гораздо хуже, когда к проекту подключается один или несколько сторонников "формализованных процессов" и "опробованных временем методологий". Вот тогда реально веселуха: приходится бороться не только с присущей новому проекту неопределенностью, но и с обличенными властью альтернативно-одаренными личностями, для которых следование букве "процесса" важнее итогового результата.

среда, 12 ноября 2014 г.

[cinema;history] Две рецензии на фильм "Ярость"

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

Первая от историка Алексея Исаева, известного в ЖЖ как dr-guillotin. Положительная.

Вторая от Алексея Кунгурова. Разгромная. Но, по моему личному мнению, более адекватная. Хотя, повторюсь, фильм "Ярость" не смотрел, но зато мое впечатление об упомянутом Кунгуровым фильме "Спасти рядового Райана" полностью совпадают с мнением Кунгурова. Ну и да, я сам помню тех ветеранов, которые лет 30 назад приходили в школы и пионерские лагеря с рассказами про свое военное прошлое. Как помню и то, что мой дед по отцовской линии умер от ран в конце 1941-го года в блокадном Ленинграде, был похоронен в братской могиле, найти которую мой отец смог лишь в 1988-м, когда Пескаревское кладбище было реконструировано и был наведен порядок в его архивах.

Ну и не могу не согласиться с выводом Алексея Кунгурова:

В общем, сдали наши сраные мэтры военную тему Голливуду, сдали со всеми потрохами. И теперь пиндосы будут рассказывать нашим детям о том, как они победили во Второй Мировой.

вторник, 11 ноября 2014 г.

[management] Несколько пунктов из списка "смертельных болезней" Эдвардса Деминга

Еще одну, до боли знакомую, картинку встретил в книге Эдвардса Деминга "Выход из кризиса". Вот соответствующая цитата из самого начала третьей главы под названием "Болезни и препятствия":

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

Есть болезни, и есть препятствия. Различия между ними кроются отчасти в трудности искоренения, а отчасти в тяжести возникающих последствий...

Перечень смертельных болезней

  1. Отсутствие постоянства цели при конструировании товаров и услуг, которые позволят компании сохранить бизнес и обеспечат рабочие места.
  2. Нацеленность на сиюминутный результат: краткосрочное мышление (что совершенно не совместимо с постоянством цели сохранения бизнеса), подпитываемое страхом недружественного поглощения и давлением со стороны банкиров и владельцев акцией.
  3. Аттестация и ранжирование персонала.
  4. Перескакивание менеджеров с места на место.
  5. Менеджмент, основанный только на известных количественных критериях.

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

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

  1. Воинствующая некомпетентность.
  2. "Я начальник -- ты дурак, ты начальник -- я дурак".
  3. Отсутствие желания заботиться о собственной репутации и, как следствие, невыполнение обещаний и договоренностей.

понедельник, 10 ноября 2014 г.

[life.book] Александр Марков "Рождение сложности"

Обалденно интересная книга.

Про биологию практически ничего не читал со времен школы. А тут устал читать всяких гуру от менеджмента, решил чуть отвлечься. И не пожалел. Толстенная книга на 500 страниц была "проглочена" меньше, чем за неделю. Во время чтения очень часто ловил себя на мысли, что впечатления такие же, как в далеком детстве при чтении журналов "Юного техника" и "Техника молодежи": любознательный ребенок читает об уникальном и совершенно незвестном мире вокруг.

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