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

[software.business.thoughts] Очередное откровение от Св.Маркетинга...

...или N-ое подтверждение мудрости "век живи, век учись, а дураком помрешь".

SObjectizer -- это небольшая, но сложная штука. Понятное дело, что пытаясь продвигать SO-5 в массы, невольно хочется получить "признание заслуг" от опытных разработчиков, от гуру, которые собаку съели в теме многопоточности, а может и не одну. Это же естественно: ты проделал большую и непростую работу, оценить которую могут далеко не только лишь все, и положительная оценка от опытного проффи выглядит как заслуженное признание проделанной работы.

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

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

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

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

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

четверг, 10 ноября 2016 г.

[book.business] Добил книгу "Кодекс выживания"

Закончил затянувшееся чтение книги "Кодекс выживания" (авторы: Дэвид Хэнна, Георгий Мелик-Еганов и Максим Ильин).

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

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

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

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

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

вторник, 8 ноября 2016 г.

[prog.flame] Шаблоны, множественное наследование, policy classes... В общем, маленькая иллюстрация того, за что я люблю C++ :)

Просто малюсенький фрагментик из одного из проектика:

namespace probe_common {

template<
   // Какой диспетчер нужен агентам-пробникам.
   typename PROBE_DISP_POLICY,
   // Как быть с child_deadliner-ом.
   typename CHILD_DEADLINER_POLICY >
class a_studies_manager_t
   :  public so_5::agent_t
   ,  protected PROBE_DISP_POLICY
   ,  protected CHILD_DEADLINER_POLICY
{...};

}

namespace probe_X {

using base_studies_manager_t = probe_common::a_studies_manager_t<
      probe_common::one_thread_probes_disp_policy_t< probe_disp_name_t >,
      probe_common::no_child_deadliner_policy_t >;

class a_studies_manager_t : public base_studies_manager_t
{...};

}

PS. Вообще, читая профильные форумы, на которых люди разной степени адекватности и вменяемости хейтят C++ и агитируют кто за Go, кто за Rust, кто за, прастихоспади, plain old C, у меня складывается ощущение, что владение C++ -- это конкурентное преимущество :) Поэтому не нужно никого агитировать за использование C++, меньше народу -- больше кислороду ;)

четверг, 3 ноября 2016 г.

[prog.flame] Потролю хейтеров множественного наследования :)

Кусочек кода из реального проекта:

class has_tlv_with_value_tag_t
   :  public cls_3::tags::tag_scalar_t< tlv_maniputators_details::cls_tag_type_t >
   ,  public script_parsing_context_holder_t
   ,  public tlv_maniputators_details::tag_id_constraints_holder_t
   ,  private tlv_maniputators_details::encoding_helpers_t
   {

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

понедельник, 31 октября 2016 г.

[business] А вот по поводу современных, модных и молодежных сайтов...

От сайтостроения очень далек. Однако, даже для меня заметно, что многие современные сайты (будь то сайты компаний целиком, или же сайты посвященные отдельным продуктам) построены по одному шаблону. Вроде как у этого безобразия даже определенное название есть: lending page (она же "целевая страница"). Что лично меня не радует. Но, с большой долей вероятности, это мои личные тараканы.

А вот что по этому поводу думают уважаемые читатели?

Этот подход, этот самый landing page, -- это на самом деле такой прорыв в маркетинге, что без него никак?

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

Т.е. хочется понять, имеет ли смысл придумывать что-то свое уникальное, дабы выделиться на общем фоне одинаково ярких, бесполезных и не очень удобных однотипых landing pages? Или не стоит рыпаться и дуть против ветра?

PS. Интерес сугубо практический, но в детали вдаваться пока не хочется.

[life.cinema] Очередной кинообзор (2016/10)

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

Расплата (The Accountant, 2016). Мне показалось слегка затянуто, но вполне смотрибельно.

Девять жизней (Nine Lives, 2016). Милая, вполне себе предсказуемая комедия. Посмотрел с удовольствием.


Джек Ричер 2: Никогда не возвращайся (Jack Reacher: Never Go Back, 2016). Ожидал большего. Посмотреть вполне можно, но остается ощущение, что на нормальный сюжет и сценарий просто не хватило денег.

Механик 2: Воскрешение (Mechanic: Resurrection, 2016). Вот уж действительно: видел один фильм с Джейсоном Стейтемом -- видел все. Отличное кино для того, чтобы выключить мозги и посмотреть на чувака, круче которого только горы и яйца.

Все о мужчинах (2016). Ждал худшего, но оказалось вполне себе нормальное кино. Без изысков, конечно. Но могло быть и хуже.

ARQ (2016). Фильм из категории дешево, но сердито. Посмотреть можно, хотя масштабности не хватило.

Нерв (Nerve, 2016). Мне показалось, что фильм рассчитан на гораздо более молодую аудиторию. О том, что посмотрел не жалею, но и не могу сказать, что понравилось.

Искусственный интеллект. Доступ ограничен (I.T., 2016). Предсказуемо и не очень интересно.

В долине насилия (In a Valley of Violence, 2016). Попытка снять атмосферный, но недорогой и не масштабный вестерн. Попытка так себе.

Не дыши (Don't Breathe, 2016). Тот самый случай, когда "замах на рубль, удар на копейку". Очень добротное и многообещающее начало, которое заканчивается каким-то полным маразмом.


Инферно (Inferno, 2016). Мне показалось, что это очень дорогостоящая бредятина.

Ну и напоследок нечто под названием "Кингсглейв: Последняя фантазия XV". В свое время довольно приятные впечатления уровнем графики оставил первый анимационный фильм "Последняя фантазия", снятый 15 лет назад. Прошло немало времени, уровень графики вышел, как по мне, на совершенно потрясающий уровень. А вот сюжет и все остальное, к сожалению, просто пробило дно и устремилось куда-то в сторону минус бесконечности. Просто непонятно, как можно было вложить столько труда в такую редкостную муть...