суббота, 31 января 2015 г.

[work] Рекомендации для Артура Суднеко

Мой бывший подчиненный, член моей C++ной команды, Артур Суднеко, собирается переезжать в Минск. В связи с чем уходит из Интервэйл-Гомель и ищет себе работу. Как человек, который работал с Артуром с 2010-го года, могу отрекомендовать его следующим образом.

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

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

Интересное впечатление производил Артур на собеседованиях. Было очевидно, что передо мной не мега-гуру, который сходу может назвать раздел стандарта C++, описывающий чистые виртуальные деструкторы. Не харизматичный лидер, который через минуту после обдумывания любой проблемы озвучит план по ее решению и заразит всех окружающих энергией и верой, что так оно все и будет. Не лузер-неудачник, который во всем винит обстоятельства и козни недоброжелателей. Артур произвел впечатление очень хорошего человека. И, как показали затем годы совместной работы, так оно и оказалось. Открытый, честный, доброжелательный, трудолюбивый, скромный и неконфликтный человек, 100%-ный командный игрок.

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

Лично я опасаюсь, что некоторые особенности характера Артура (в частности, скромность, доброжелательность и тактичность) в совокупности с отсутствием энциклопедических знаний языка C++, могут помешать Артуру на собеседованиях. Ну что поделать, отличное знание C++ никогда не было его сильной стороной. Хотя то, что нужно по работе он осваивает не хуже других. Важно другое -- Артур не гуру, который может все. Это надежный тыл, без которого сложно браться за что-то большое и сложное. Именно это самое главное. Именно поэтому мне жаль, что он покидает Интервэйл-Гомель и еще больше жаль того, что собранная мной команда уменьшилась еще больше. Но такова жизнь, все течет, все изменяется.

В общем, если кто-то ищет себе хорошего командного игрока, то смело рекомендую Артура Суднеко. Его профиль на linkedin находится здесь.

При необходимости можно поговорить об Артуре Суднеко более подробно в приватном режиме.

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

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


Кольт 45 (Colt 45). Очень добротный французский криминальный боевик.

Мистериум. Начало (Kvinden i buret, 2013) и Убийцы фазана (Fasandræberne, 2014). Две первых части из, предположительно, трилогии. Посмотрел с удовольствием. Хорошее европейское кино. Может чуть нудновато, но зато атмосфера в фильме создана весьма умело. С интересом буду ждать третью часть.

Мул (The Mule, 2014). Если суметь абстрагироваться от, в прямом смысле слова, анально-фекальной темы, то это вполне себе качественный и достойный криминальный фильм. С хорошей стилизацией под атмосферу 1980-х годов.

Эверли (Everly, 2014). Отличное мочилово, бессмысленное и беспощадное. Любителям фильмов жанра “убей их всех” смотреть обязательно.

Ёлки 1914 (2014). Очень даже неплохо. Как по мне, так один из лучших фильмов в этой серии.

Любит не любит (2014). Красиво, смешно, симпатично, романтично. Молодым зрителям должно понравится.

Зеро 2 (Zero II, 2010). Отличненько. Этакий Гай Ричи постсоветского разлива. Но матерно.

11:14 (2003). Шикарный набор фрагментов, сплетенных в один невероятный клубок событий.

Седьмой сын (Seventh Son, 2014). Приступал к просмотру с изрядным скепсисом. Как оказалось, напрасно. Вполне себе смотрибельное фэнтези.

Заложница 3 (Taken 3, 2014). К сожалению, очередной пример того, как каждое следующее продолжение оказывается слабее предыдущего.

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

Викинги (Northmen - A Viking Saga, 2014). Фактурные герои, динамичные события, нормальное мочилово. Местами сказочно. Но в общем хороший и простой исторический боевичок получился.

Я выслежу тебя (I’ll Will Follow You Down, 2013). Очень и очень посредственно, как мне показалось. Не хватило в фильме какого-то сюжетного напряжения. Все весьма уныло и предсказуемо.

Добро пожаловать в рай (Vice, 2015). Под небольшой бюджет собрали вышедших в тираж актеров и попытались сделать что-то в духе “Суррогатов”, но получилась дешевая копия.

Василиса (2014). Ну хотя бы попытались что-то более-менее патриотическое сделать. Халтура, правда, получилась. Но хотя бы попытались.

Драконы Нью-Йорка (Revenge of the Green Dragons, 2014). Какая-то халтурная нудистика и мудистика.

Ограбление по-американски (American Heist, 2014). Если есть возможность не смотреть, то лучше не смотреть.


Теперь некоторые особые мнения по некоторым фильмам.

Игрок (The Gambler, 2014) и Бёрдмен (Birdman, 2014) -- ни один из фильмов досмотреть не смог. Такое впечатление, что целью их съемки была попытка доказать, что можно снять что-то, базирующееся только на диалогах и монологах. Но без стремления вложить в эти диалоги какой-то смысл. Герои произносят бесконечные потоки каких-то пустых слов и это очень быстро надоедает. Впрочем, возможно попробую Бёрдмана досмотреть хотя бы из-за совершенно феноменальной работы оператора, вдруг в фильме есть еще что-то хорошее.

Новый мультик Астерикс: Земля Богов (Astérix: Le domaine des dieux, 2014). Очень смешной. Но, как мне показалось, совсем недетский. В нем столько пересечений с тем, что сейчас происходит в мире, что складывается впечатление, что это не юмор, а умело замаскированная сатира.

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

пятница, 30 января 2015 г.

[prog.flame] Блин, он правда в это верит?

Еще более феерическое продолжение вчерашней темы. Тот же tonsky в комментариях к своей заметке:

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

Предположим, что автор не стебется и говорит то, что думает. Кто-нибудь может привести примеры прикладной ниши, где это реально так?

Upd. Специально для тех, кто думает, что ООП -- это просто инкапсуляция, наследование и полиморфизм, а посему отстой: Open/Closed Principle (в Wiki) (+ описание этого же принципа на русском языке в блоге Сергея Теплякова).

[prog.flame] LOR -- торт!!!

LOR-овские эксперты продолжают радовать:

лямбды совсем недавно накостылили в C++. И как они себя будут вести в реальных проектах — не знает никто.

четверг, 29 января 2015 г.

[prog.flame] Вот и выросло поколение...

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

Отсюда и появляются феерические посты, только подтверждающие, что количество разума на планете -- величина постоянная, а население-то растет.

среда, 28 января 2015 г.

[prog] Какая емкая характеристика!

Увидел на LinkedIn:

Опытный разработчик кроссплатформенных серверных приложений высокой надежности.

Совершенно без иронии. Хорошо человек характеристику для самого себя придумал. Даже немного завидую.

понедельник, 26 января 2015 г.

[prog.c++.sobjectizer] Разбор примера простой реализации дедлайнов для сообщений

В продолжение темы, начатой заметками "Реализация дедлайнов для сообщений своими руками" и "Агент-collector + агент-performer = паттерн для нескольких ситуаций", в SObjectizer добавлен еще один пример simple_message_deadline. Оказалось, что в данном примере задействуется много ключевых возможностей SObjectizer-а, поэтому имеет смысл разобрать пример подробнее, объясняя, по ходу рассказа, что к чему и почему. Рассказ я постарался сделать максимально простым и подробным, ориентированным на читателя, который либо вообще не имеет представления о SObjectizer-е, либо имеет самое поверхностное.

Что делает пример? Один агент-generator инициирует запросы, у каждого из которых есть дедлайн. Т.е. для запроса задано время, до наступления которого обработка запроса должна быть начата. Если этого не случилось, то запрос должен быть отвергнут.

Агент-collector, который собирает запросы от агента-generator-а в очередь и по одному отдает их агенту-performer-у. Агент-performer имитирует обработку запросов, затрачивая по четыре секунды на каждый полученный им запрос. За то время, пока агент-performer "занимается" обработкой, у части сохраненных агентом-collector-ом запросов может наступить дедлайн. Это контролируется агентом-collector-ом, который выбрасывает просроченные запросы из очереди.

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