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

О блоге

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

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

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

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

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

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

воскресенье, 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). Снято, конечно, классно. Но ведь ни черта не понятно!