Вот так, тихо и незаметно, подкрался десятилетний юбилей моего маленького блога. Десять лет назад здесь появилась сразу пара первых заметок (#1, #2).
суббота, 22 декабря 2018 г.
среда, 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++ с такими задачами мало кто сталкивается? А когда сталкиваются, то просто делают свои велосипеды, которые на публике никогда не показываются?
суббота, 1 декабря 2018 г.
[life.cinema] Очередной кинообзор (2018/11)
Пришло время публиковать очередной список просмотренных за минувший месяц фильмов. Как обычно, в начале списка перечислены фильмы, которые понравились мне больше.
Мотылек (Papillon, 2017). Не ожидал. Начал просмотр со скепсисом, но был очень сильно и приятно удивлен. И история хорошая, и рассказана мастерски, и никаких перегибов в розовые сопли или чернушный жесткач не было. Определенно лучший из просмотренных за месяц.
Король вне закона (Outlaw King, 2018). Уж не знаю, как там с историзмом обстоит, но мне понравилось. А качественно сделанные батальные сцены по нынешним временам так вообще приятно удивили.
Фантастические твари: Преступления Грин-де-Вальда (Fantastic Beasts: The Crimes of Grindelwald, 2018). В принципе, очень достойное продолжение и первых "Фантастических тварей", и всей киновселенной Гарри Поттера в целом. Визуальная составляющая выше всяких похвал. Но, как мне показалось, немного скучновато и нудновато, первые "Фантастические твари" были динамичнее.
Поиск (Searching, 2018). Очень даже неплохо. Нужно только набраться терпения пока последняя треть фильма не начнется.
Багровая мята (Peppermint, 2018). Двойственные ощущения. С одной стороны, вроде бы и экшен есть. Но, с другой стороны, этого экшена не так много, как хотелось бы. Да и хрупкая женщина в роли супер-пупер ниндзя -- это так себе идея.
Веном (Venom, 2018). Отличная картинка и, местами, динамичный экшен. Но мозги при просмотре включать категорически не рекомендуется. Смотреть можно разве что ради видеоряда.
Кин (Kin, 2018). Не понятно, что это было. Для детского кино слишком взрослый. Для взрослого -- слишком детский. Местами вполне себе ничего, местами занудно и не интересно. Ни то, ни се.
Истории призраков (Ghost Stories, 2017). Начало обещало качественный ужастик. В конце все скатилось в какую-то фигню. Да, в финале фильма все объяснили, но от фильма ужасов ждешь вовсе не логичного объяснения происходящего.
Придержи тьму (Hold the Dark, 2018). Снято, конечно, классно. Но ведь ни черта не понятно!