вторник, 1 января 2030 г.

О блоге

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

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

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

[life.photo] Характерный портрет: вы и ваш мир моими глазами. Безвозмездно :)

Вы художник? Бармен или музыкант? Или, может быть, коллекционер? Плотник или столяр? Кузнец или слесарь? Владеете маленьким магазинчиком или управляете большим производством? Реставрируете старинные часы или просто починяете примус? Всю жизнь занимаетесь своим любимым делом и хотели бы иметь фото на память?

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

среда, 19 декабря 2018 г.

[management.flame] "Ад своими руками" или "не читайте до обеда советских газет"

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

Но давеча был опубликована очередная статья этого автора под названием "Ад своими руками". Статья уже набрала почти 60K просмотров и 130 комментариев и, полагаю, это еще не предел.

Сам я эту статью вчера прочел с интересом. Автор, что называется, сделал камингаут расчехлился. Так откровенно слить самого себя -- это нужно суметь. Если кому-то хочется увидеть наглядное подтверждение случая, когда про человека говорят "умный-то он умный, но дурак", то раздел "Главный вывод" из этой статьи -- это вот оно и есть. Подтверждение.

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

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

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

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

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

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

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

  • руководителям приходится принимать решения в условиях гораздо большей неопределенности, чем обычные сотрудники могут себе представить;
  • внимание руководителя постоянно разрывается между стратегическими (долгосрочными) и тактическими (краткосрочными) задачами. Плюс есть огромное количество других как производственных, так и непроизводственных проблем, которые так же отвлекают внимание на себя;
  • решения приходится принимать в постоянно меняющихся условиях. То, что вчера было объективно актуально и что следовало делать, сегодня может оказаться уже никому не нужно (смена обстоятельств, появление новых продуктов/игроков на рынке, потеря клиентов, форс-мажоры и пр.);
  • на принятие решений могут оказывать воздействия шкурные и сиюминутные интересы. Как собственные интересы руководителя, так и интересы групп влияния, в орбиту которых попадает руководитель;
  • на принятие решений могут оказывать влияние заблуждения или недостаточные знания как самого руководителя, так и людей, на мнения/рекомендации которых руководитель полагается. Например, модно сейчас применять Agile или Stack ranking -- значит нужно попробовать применить;
  • людям свойственно ошибаться. В том числе и руководителям.

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

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

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

Печально то, что в результате тех 60K просмотров статьи "Ад своими руками" наверняка найдется некоторое количество читателей, которые воспримут вывод автора всерьез и не подвергнут этот вывод критическому осмыслению.

понедельник, 17 декабря 2018 г.

[prog.c++] Поддержка unit-тестирования для агентов в SObjectizer-е начинает дышать!

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

Важная штука: средства для тестирования агентов будут входить прямо в состав SObjectizer-5.5. Это значит, что в их реализации нам придется ориентироваться на какое-то подмножество C++11, что нас не радует. Но, думаю, возможность писать тестовые сценарии для агентов без необходимости ставить себе какой-нибудь so_5_extra, сделает SObjectizer привлекательнее для тех, кто еще кипятит не решился сделать выбор в пользу SObjectizer-а (и кого, может быть, смущает двойное лицензирование so_5_extra).

Еще очень и очень многое предстоит сделать, как в коде, так и в документации. Даже то, что реализовано сейчас, представляет из себя грязный черновой код, который еще предстоит доводить напильником, причесывать и документировать. Шансы успеть до Нового Года есть, но это если никаких принципиальных барьеров не возникнет.

Тем не менее, отрадно.

воскресенье, 16 декабря 2018 г.

[work.thoughts] Мимоходом про высшее профильное образование для программистов

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

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

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

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

Мне сложно судить о том, какой уровень профильного образования для программистов сейчас. Судя по тому, что я слышу про текущую ситуацию с системой высшего образования у нас в РБ, то не очень высокий. Но вот лет 25 назад этот уровень, как мне сейчас думается, был весьма высок. Возможно, это нам просто сильно повезло. Поскольку в связи с распадом СССР весьма толковые люди из различных КБ и бывших "почтовых ящиков", которые не хотели уходить из профессии, пытались преподавать. Поэтому зачастую предметы читали не профессиональные ВУЗ-овские преподаватели, а действующие разработчики с многолетним опытом за плечами.

Так вот о роли высшего образования вообще и профильного высшего образования в частности.

С точки зрения работодателя наличие высшего образования у соискателя означает то, что соискатель a) способен вписаться в рамки достаточно жесткой системы и b) способен обучаться в рамках этой самой системы. Т.е., говоря совсем просто: если у человека хватило мозгов закончить технический ВУЗ, то высоки шансы, что у него хватит мозгов для нормальной работе на производстве.

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

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

Рад я тому, что во время учебы в ВУЗе у нас была уникальная конкурентно-дружеская атмосфера. Особенно на первых курсах универа.

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

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

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

вторник, 11 декабря 2018 г.

[life.memories] К 25-летию DOOM-а

Говорят, что давеча стукнуло 25 лет знаменитому DOOM-у: Reflections on DOOM's Development. Ну а раз так, то невозможно не вспомнить это знаковое явление давно минувшего прошлого.

Сам я с DOOM-ом познакомился или в конце 1994-го или уже в 1995-ом. Причем, как мне помнится, сперва я прошел DOOM2. А затем уже, из спортивного интереса, и первый DOOM. А потом и все add-on-ы к ним, которые попадали мне в руки. До рисования собственных уровней дело не дошло, хотя какой-то редактор уровней мы раздобыли.

В соревнованиях по DOOM-у я не участвовал. Да и их в нашей местности в 1995-96, наверное, и не было еще. Потом про соревнования слышал и кто-то из моих коллег по аспирантуре даже пытался в них участвовать, но мне это уже было не интересно. Так что на каком уровне я сам играл не могу сказать. Но когда несколько раз прошел DOOM-у, то развлекался следующим образом: запускал DOOM, затем с помощью чит-кодов переходил на нужный мне уровень и начинал проходить его начиная с одним пистолетом, поднимая остальное оружие уже на самом уровне. Первый DOOM я так прошел полностью. Во втором DOOM-е добрался до 17-го, что ли уровня, и все. Там уже с одним пистолетом против толпы монстров не попрешь.

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

Играл на уровне сложности ultra-violence, без чит-кодов.

Вообще, в то время я был большим фанатом стрелялок от первого лица. Но вот другие игры на движке DOOM-а, вроде Hexen или Heretic, мне не зашли.

Зато потом появился Duke Nukem. А еще чуть позже сделанный на его движке Redneck Rampage. Правда, Duke Nukem был не первой стрелялкой, в которой можно было поднимать ствол вверх или опускать вниз. Первой такой стрелялкой был Jedi Knight по мотивам вселенной Звездных Войн. Вроде как Jedi Knight прошел совсем незаметно на фоне DOOM-ов и Duke Nukem, но это была очень хорошо сделанная игра, атмосферная, в которой даже световым мечом можно было противников рубать (и не только рубать, но и отражать выстрелы врагов).

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

А жирную точку в увлечениях шутерами поставила такая малоизвестная стрелялка, как NAM. Написана она была на движке Duke Nukem-а и в конце 1990-х это выглядело уже архаично, конечно же. Но атмосфера, которая возникала в игре была просто какой-то невероятной. Такого я больше нигде не видел. Какой-то уровень начинался вообще с того, что открывалась дверь приземлившегося на опушке джунглей вертолета и по тебе начинали палить со всех сторон. Не успеваешь моргнуть глазом, как ты уже труп. Нужно было сходу брать ноги в руки и бежать со всех сил, да еще по ковбойски стреляя в возникающих то тут, то там врагов. Ну а хождение по ночным джунглям -- это вообще отдельная история. Только вот пройти полностью NAM не удалось. Застрял на каком-то уровне и все. Несколько дней тыкался, тыкался. А потом раз, и отвернуло от шутеров. Навсегда :)

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

четверг, 6 декабря 2018 г.

[prog.c++] Fast formatted input в C++: есть ли и нужен ли кому-нибудь?

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

Собственно, невысокая скорость штатных C++ных iostreams -- это ни для кого не новость. Но вот что интересно: а для C++ существуют живые и поддерживаемые библиотеки для работы с форматированным вводом? Ну т.е. чтобы читать данные из текстовых файлов (или stdin) не вот так:

int x, y;
char comma;
std::cin >> x >> comma >> y;

а, например, вот так:

fastinput::read(std::cin, "{},{}", x, y);

Или, если нужно прочитать значения в шестнадцатиричном формате:

fastinput::read(std::cin, "{:x},{:x}", x, y);

И, если таких библиотек нет (либо нужно разыскивать их днем с огнем), то нужен ли вообще кому-нибудь подобный инструмент?

Причем акцент здесь на том, чтобы быстро разбирать большие объемы информации в текстовом виде, без учета локалей и пр., включая, возможно и UTF-8.

Или в мире C++ с такими задачами мало кто сталкивается? А когда сталкиваются, то просто делают свои велосипеды, которые на публике никогда не показываются?