Вот так, тихо и незаметно, подкрался десятилетний юбилей моего маленького блога. Десять лет назад здесь появилась сразу пара первых заметок (#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 "Программное обеспечение ВТ и АС", в дипломе значится профессия "инженер-программист").
Рад я тому, что во время учебы в ВУЗе у нас была уникальная конкурентно-дружеская атмосфера. Особенно на первых курсах универа.
Разные люди. Большинство живо интересуются программированием. Ну у каждого свои интересы, свои взгляды, свой собственный багаж знаний. Плюс тогда происходил, по тем временам, революционный переход с больших ЭВМ (вроде ЕС-ок и СМ-ок) к персональным компьютерам. От Фортрана к Паскалю, а затем и к С. С модным тогда увлечением Прологом. Учились новому тогда не только мы, но и наши преподаватели. Поэтому та самая уникальная среда включала в себя не только студентов, но и преподавателей.
Это был такой крутой питательный бульон, варится в котором было не просто интересно, а жутко интересно. И, как мне кажется, чрезвычайно полезно. Сегодня ты можешь увлечься чем-то одним, завтра -- другим, послезавтра -- третьим. И вокруг тебя будут люди, которым будет интересно то, чем ты увлекся. Даже если не поддержать тебя, то хотя бы выслушать. И ты сам постоянно узнаешь что-то новое. Пусть не поддерживая кого-то, кто, скажем, увлекся каким-то языком со странным названием Форт, то просто слушая как он с воодушевлением рассказывает о том, что он делает на Форте.
Так что лично я придерживаюсь мнения, что программисту следует получить высшее профильное образование как раз для того, чтобы несколько лет повариться в этом питательном бульоне. Вне ВУЗов такой уникальной образовательной среды, наверное, нигде и нет.