Поделиться

Показаны сообщения с ярлыком ностальгия. Показать все сообщения
Показаны сообщения с ярлыком ностальгия. Показать все сообщения

суббота, 15 сентября 2012 г.

Игры и совместное прохождение


Наверное первой игрой, в которую я играл с кем-то вместе в режиме кооператива была Diablo 1. Всякие игры для Nintendo Entertainment System (AKA Dendy и множество никому неизвестных брендов китайских производителей) и поздних консолей не берем - речь о сети и о "долгих" играх. В то время еще мало у кого дома были провода "с Интернетом", идущие до самого системного блока, - в Интернет выходили через модем (в моем случае это был внешний Courier 33600 - век его не забуду, обалденная вещь). На Diablo 1 скорости соединения вполне хватало, сидели на русских каналах с друзьями и не просто бегали, а еще и знакомились с "партейцами", обсуждали какие-то вопросы, пристрастия, не касающиеся непосредственно игры.

Во времена буйствования Diablo 2 у меня было дома два компьютера, соединенных в сеть коаксиальным кабелем (даже не обжатым - BNC-коннекторы были присобачены, как попало, а самого кабеля было в разы больше, чем нужно, так что неосторожные движения ногами, вырывающие кабель из коннектора, были не редкостью). По выходным вместе с пивом и закуской друзья приносили с собой еще два компьютера, что обуславливало спагетти из проводов на полу, значительно большую частоту случаев вырывания кабелей из компьютеров, но также позволяло при наличие четырех человек собрать полноценную партию для уничтожения угрозы в виде Мефисто, самого Диабло и чуть позже (календарно) Бейла вместе с приспешниками. Партия выбиралась грамотно, как и стратегия: я был паладином, который "бафил" партию, переключаясь с ауры на ауру при необходимости (в основном с Redemption-а на Fanatism); один из моих друзей был варваром - обеспечивал как дамадж, так и прикрытие; другие - колдунами.

Было весело, но это было "камерное" развлечение. На Battle.net никто из нас не выходил, и вот сейчас, спустя годы я понимаю, что какой-то эволюционный виток я тогда явно пропустил. Это стало очевидно, когда я плотно сел играть в Diablo 3. Я не буду перечислять по пунктам, что меня озадачивает в "коопе" этой игры - пунктов будет много, но все равно - это все эмоции, так что лучше изложу впечатления без особой структуры.

Абсолютное отсутствие общения внутри игры, если не считать совместных выносов тел или общения по скайпу с IRL-друзьями: в Diablo 1 центром был чат канала на Battle.net. Именно там люди общались, знакомились, объединялись, вываливались на квест и туда же возвращались, обсуждая результат, например десяток смертей к ряду от больших мечей больших рыцарей. Во времена Diablo 3 (то есть в настоящем) ничего подобного нет и близко. Есть каналы чата внутри самой игры, но нет ощущения какой-то общности по какому-либо признаку, даже если ты один из трех охотников на демонов во всей Европе, которые на этом канале сидят.

Отсутствие общения (и в этом прав Гордон Рамзи) порождает отсутствие ответственности и координации действий внутри игры. "Отступаем!" - истошно кричит варвар трем наглухо заблокированным стенами, уже давно потенциально мертвым охотникам, причем сам он (танк!) убегает быстрее всех, ловко прыгая с уровня на уровень в ботинках на +12% скорости. Иногда попадаются нормальные партии, врать не буду: герои сообщают друг другу о замеченном гоблине, элите, чемпионах, необходимости слетать в город, двигаются кучкой. Однако где-то в половине случаев партия напоминает немногочисленное стадо коров, разбредающихся по полю в процессе кормежки. Вот только в данном случае имеется в виду кормежка для монстров. С умилением наблюдаю, как распределившиеся по карте партейцы по очереди ложатся каждый от своей группы элиты, а затем, когда они собираются-таки все вместе, пластом ложится уже вся партия, потому что в одну точку сбежались все три элитных отряда (я всегда цепляюсь паровозиком к какому-нибудь варвару или монаху, поэтому в партии максимум три части).

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

Механика с автоматическим подключением игроков к неполной партии удобна, но и она создает свои сложности. Ты уже почти готов из последних сил покончить с Fast Waller Fire chain Teleporter Extra Health чемпионом, как игра радостно сообщает, что к тебе присоединилось еще три героя, и оставшееся здоровье недобитых монстров вырастает на 225%..., а твое - нет.

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

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

Что мешает наладить общение? Как я уже говорил, отсутствие желания. Кроме того, если я начну командовать: "Let's get together!", мне кажется, что меня кикнут быстрее, чем поймут (причем через 3 минуты после этого в партии не останется никого из тех, кто меня кикал). Может быть, это только Diablo 3, может быть, это только мои впечатления, но если это и впрямь современный "кооп", то глаза б мои его не видели!

P.S. Самая лучшая кооперативная игра на моей памяти по сумме ощущений - Resident Evil 5. Жалко, что лишь на двоих игроков. Посмотрим, что будет в 6-ом.

вторник, 10 июля 2012 г.

Новое - это хорошо "вспомненное" старое!

Не могу не поделиться сокровищами, которые по случаю отоварил через букинистический раздел Ozon-а. Мне они показались полезными на перспективу изысканий по докторской.


Это несколько выпусков "Кибернетического сборника" Издательства иностранной литературы (1960-1962 годы) и "Кибернетического сборника. Новая серия" издательства "Мир" (1985 год) под редакцией таких личностей, как А. П. Ершов, А. А. Ляпунов. Книги включают статьи Дж. Неймана, К. Э. Шеннона, Ф. П. Брукса, Н. Хомского, Э. Н. Гилберта, Д. Э. Кнута и многих других. Радуюсь!



среда, 11 апреля 2012 г.

Игры и ожидания

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

И самовар у нас электрический, и сами мы довольно неискренни. - М. Жванецкий.

Возникает вопрос: постигнет ли когда-нибудь меня еще то волшебное ощущение, которое рождалось раньше при вскрытии новой коробочки? Большинство мощных игровых сериалов погрязли в самоцитировании, либо в цитировании кого-то другого ("Все любят Call of Duty!"), либо перешли в чужие руки и перестали быть сами собой навсегда. "Инди-игры" пока что не внушают. Новые изобретения либо совсем похожи на старые, либо настолько ни на что не похожи, что часто даже страшновато пробовать. Но ждать-то что-то надо!

На мой взгляд, имеет смысл надеяться и верить в новые серии хорошо зарекомендовавших себя франчайзов, если дополнительно к этому они обладают следующими характеристиками (одной или несколькими сразу):
  • сериал еще не надоел (God of War 4 и Assasin's Creed 3 - в качель);
  • игроки утверждают, что они бы с радостью приняли следующую серию сериала даже в том случае, если бы в ней за исключением размеров мира (новых областей, планет, врагов) не изменилось ничего;
  • франчайз не менял разработчика/издателя (немалый страх вызывает разработка Devil May Cry 5).
Лично я жду Virtua Fighter 5: Final Snowdown, Dead or Alive 5, Darksiders 2 и Resident Evil 6.

пятница, 23 декабря 2011 г.

Косой взгляд на эволюцию

Прочитал доклад председателя об итогах VI заседания Форума по управлению Интернетом (IGF). Ничего нового, ничего неожиданного. Возможно, что Форум по управлению – это не то мероприятие, где что-то неожиданное должно было произойти или быть озвучено, но тогда где те, другие мероприятия?

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

Существует ряд слоганов или «кричалок», которые можно услышать на любом мероприятии, посвященном любой теме. Вот только несколько из них: «Интернет», «права человека», «кризис». Эти слова и словосочетания можно привязать к любому выступлению, на любом уровне, хотя для тематических мероприятий, конкретных регионов и уровней существуют и другие, более специализированные «кричалки»:
  • для любого собрания по вопросам, связанным с Интернетом, это: «безопасность», «приватность», «спам», «обеспечение доступа»;
  • для любого собрания, проходящего в России это: «электронное правительство», «государственные услуги», «нанотехнологии», «Сколково» и т. д.
Когда я называю эти выражения «кричалками», я не хочу сказать, что суть, которая в них заложена, не важна, что этими вопросами не стоит заниматься – отнюдь. Но в моем понимании бесконечное повторение одних и тех же слов, «поминание их всуе» и пережевывание не приводит к решению каких-либо проблем, так же как не приводит ни к каким решениям создание тысяч комитетов, комиссий на локальном или международном уровне (вне зависимости от количества участников), издание сотен приказов и других актов. Эти действия ведут только к тому, чтобы обеспечивать «работой» кучу чиновников и «замыливать» проблемы. Я сторонник подхода «problem – solution» («проблема – решение»): формулируем проблему, определяем порядок действий, которые нужно предпринять для ее решения, выполняем, смотрим, что получилось, корректируем или выбираем новую проблему. Я понимаю, что я сильно упрощаю, я понимаю, что для реализации каких-то мер, скажем, на международном уровне, нужна некая инфраструктура, но иногда хочется над ней подняться, хотя бы мысленно, и посмотреть, а куда, собственно, движется человечество в целом? И вот тогда понимаешь, что человечество не движется никуда, а кроме инфраструктуры ничего и нет.

Еще одна проблема – это по-настоящему новые технологии. Дело в том, что движение человечества должно, хотя бы иногда, сопровождаться, стимулироваться и до определенной степени направляться некими прорывами, а не только вялыми эволюционными изменениями. Мы же завязли в эволюции уже по уши. По моему мнению, в части информационных технологий последним прорывом был Веб 2.0, который действительно поднял общение или даже «цифровую жизнь» людей в Интернете (предыдущем прорыве) на новый уровень («цифровую жизнь» и «электронные личности» Веб 2.0, скорее, даже породил). Еще было второе пришествие свободного программного обеспечения. А дальше? А дальше – все!

Возьмем, к примеру, замечательную поисковую систему Google. В ней впервые для ранжирования веб-страниц был применен подход, основанный на количестве ссылок на данную страницу (Сегаран Т. Программируем коллективный разум. – СПб: Символ-Плюс, 2008). Удачно? Безусловно! Но потрясло ли это мир? Не думаю. Создатели Google предложили более эффективное решение для существующей проблемы поиска информации в Интернете. Решения менее эффективные уже существовали, да и более эффективные появились бы и без Google рано или поздно. То же касается и браузера Google, и операционной системы Google, и карт Google и всего остального, безусловно, являющегося инновационным, но до прорыва недотягивающим. Это не вина Google – у компании своя функция, но, опять-таки, где же те, другие компании? В большинстве случаев мир занят не созданием нового, а рихтовкой и доделыванием старого, и, к сожалению, так может продолжаться до бесконечности – никакой полноценной виртуальной реальности, колонизации других планет, никаких межпланетных перелетов и новых источников энергии.

С другой стороны, я помню, что, по-моему, еще тело Стивена Джобса не успело остыть, как Интернет и пресса разразились комментариями, наподобие: «…автор инноваций, которых спокойно могло бы и не быть», «…по сути, ничего не создал» и так далее. Да, в последние годы коммерция взяла свое: iPod был прорывом, каким, на самом-то деле не был iPhone (насчет iPad-а у меня нет однозначного мнения, так что не буду его трогать), и ко всей культуре Apple у меня отношение сложное. Однако я человек из поколения конца семидесятых, и я помню, что ни одна другая компания, за исключением, может быть, IBM и Microsoft не внесла такого вклада в развитие идеологии и индустрии ПК, да и о Стивене Джобсе помню еще кое-что: он создал культовые Apple ][ (а также Apple ][+, Apple ][e и прочие) и Macintosh (Полунов Ю. Л. От абака до компьютера: судьбы людей и машин. Книга для чтения по истории вычислительной техники в двух томах. Том II. – М.: Издательско-торговый дом «Русская редакция», 2004). Здесь даже не так важно, насколько велика в разработках роль Стефена Возняка, или какую долю идей Джобс позаимствовал в «Исследовательском центре Пало-Альто» Xerox Corp. – идея сама по себе имеет строго определенную цену: 0 рублей 0 копеек. Для того чтобы эта идея приобрела цену (и не только в денежном выражении), для того, чтобы она стала известна миру, нужна вера, воля и силы. Деньги и все остальное могут появиться или не появиться потом.

У Джобса вера, воля и силы, а также сами идеи были, а вот много ли в мире сегодня таких людей? Ведь именно они совершают прорывы и заставляют планету вертеться. Без них все, что мы имеем, так это постепенное, но неуклонное обмельчание дум и стремлений. Мы заменили их текучкой, стандартами обеспечения качества и корпоративной культурой, сузили ответственность каждого отдельного индивида, человека, ученого, специалиста, руководителя до корпоративной «миссии», а корпорации и компании – это вовсе не человечество, и у них совсем другие интересы.

Эта статья – не ода покойному Джобсу, этот персонаж взят в качестве примера. Приходится согласиться с тем, что при наличии весьма ярких личностей в ИТ-истории: Мур, Вирт, Страуструп, в конце концов, Чарльз Бэббидж, который, не закончив работу над одной машиной («Разностной»), взялся за другую («Аналитическую»), трижды добивался выделения государством финансирования, добился строительства специального здания, доверял работы каким-то странным людям и в итоге не сделал ни одной полноценной машины, – найти какой-то идеальный светлый образ, на который стоит равняться, довольно сложно, если вообще возможно. Но все упомянутые люди думали о по настоящему новом, стремились к новому, что сегодня встречается, по ощущениям, значительно реже.

среда, 30 ноября 2011 г.

Игры и два взгляда на защиту и дополнительный контент

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

Первый сюжет это интервью Марчина Ивински, CEO и одного из основателей компании CD Projekt - разработчика The Witcher 2, журналу PC Gamer, где он вспоминает былое и анализирует нынешнее. Вот мой вольный перевод нескольких тезисов:

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

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

При объеме продаж легальных копий The Witcher 2 в 1 миллион, количество нелегальных скачек можно оценить где-то в 4,5 миллиона копий.

Ну тут остается только посочувствовать: 1 к 5 - это солидное и унижающее достоинство соотношение.

За 20 лет в индустрии я никогда не видел системы управления цифровыми правами (англ. DRM - Digital Rights Management), которая бы работала, то есть обеспечивала бы защиту и не досаждала легитимным пользователям. Систем было много, но все сводится к двум вариантам: либо это "легкая" система, которая быстро взламывается, либо "тяжелая", которая взаимодействует с операционной системой, вызывает тормоза и отказы игры работать на компьютерах некоторых вполне законопослушных пользователей.

Ну, это старо, как мир.

К счастью и к несчастью одновременно игры становятся большим бизнесом. И как в случае с любым растущим бизнесом, в него приходят люди, которые понятия не имеют об играх. Они не задаются вопросами: "Что будет чувствовать игрок?" или "А честно ли это"? Из заботят только колонки с приятными цифрами в Excel и наличие подходящих объяснений для их боссов.

Ну и дальше, короткие фразы:

  • Я не верю в то, что можно заставить людей покупать: если они не купили, значит у нас не было для них качественного предложения.
  • Многопользовательские режимы в игре хороши до тех пор, пока многопользовательский опыт реально добавляет игре ценности, лучший пример - Blizzard с ее Diablo 2.
  • Масштабы пиратства в каждой отдельно взятой стране сильно зависят от среднего дохода на душу населения.

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

Марчин говорит то, что знает любой опытный геймер и любой более-менее опытный разработчик ПО, а остальные люди, если они знакомы с логикой, догадываются. Разница в том, что он - представитель индустрии, о которой он говорит. Несмотря на то, что Интернет позволяет высказываться всем и каждому, по-прежнему есть мнения и МНЕНИЯ, различающиеся по тому, какое отношение говорящий имеет к тому, о чем он говорит: к отрасли, власти, предмету или чему-то еще. Ваши слова имеют разный вес в зависимости от того, кто вы: обиженный потребитель, государственный регулятор или производитель. К сожалению, ваши слова только в зависимости от этого могут иметь еще и разный смысл, хотя думать в момент их произнесения и прослушивания все присутствующие людей из всех указанных категорий могут одинаково.

Продолжим об очевидном. Второй сюжет - это видео Джима Стерлинга про то, что Elder Scrolls 5: Skyrim идет вразрез всему, что нам обычно вещают про современные видеоигры их создатели и "печатники" (издатели). У Skyrim-а нет мультиплейера, нет пароля для мультиплейера за 10 отдельных долларов, нет (правда, пока что) скачиваемого контента и так далее. И тем не менее, уже за первые 48 часов с начала продаж, игру купили 3,4 миллиона раз (при этом на долю Xbox360 пришлось 59%, на долю PS3 - 27% и лишь 14% - на PC... ха-ха, поговорим о возвращении и подъеме PC-гейминга). И еще в Skyrim-e 200+ часов однопользовательского прохождения (за 100 я уже перевалил).

Людям нужны хорошие игры. Укладывание всех игр в одну канву, содержащую, помимо прочего, многопользовательский режим, который может совсем не сочетаться с их духом (если этот дух есть), и записывание всех игр в категорию хороших - не работает! Я удивлялся многопользовательскому-дополнительно-за-деньги-скачиваемому бреду еще в "Реальности 2.0b", но вряд ли у меня получилось бы удивиться эффектнее, чем это делает Джим (хотя он не выглядит особо удивленным - он выглядит как... Dragonborn, который слишком поздно узнал о своем великом предназначении).

среда, 13 июля 2011 г.

Игры и самомнение

Для начала немного похвастаюсь. Я как-то писал про необходимость лопаты на собраниях разработчиков ПО и в частности видеоигр. Лопата необходима для того, чтобы отбивать желание у индивидов высказывать идеи не вовремя и не к месту. Рад был убедиться, что не я один придерживаюсь такого мнения:

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

Тут у кого-то появляется “хорошая идея”, вы с ней соглашаетесь - и вот вы уже переделываете проект под свежую версию Hibernate, чтобы воспользоваться ее новейшими возможностями, или используете AJAX на некоторых веб-страницах, потому что разработчик показал пользователям, как круто это смотрится, или пересматриваете архитектуру базы данных, чтобы задействовать те возможности по работе с XML, которые предлагает СУБД. Вы говорите руководителю проекта, что для реализации этой “хорошей идеи” понадобится еще несколько недель, однако изменения затрагивают больший объем кода, чем предполагалось, и график начинает трещать по швам. Вдобавок, приняв первую “хорошую идею”, вы, как в поговорке, “выпустили джинна из бутылки”: вскоре на свет появляются новые “хорошие идеи”, а вам уже гораздо труднее отказать (а джинн тем временем уже выглядывает из всех щелей).

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

- Грег Найберг (Greg Nyberg) - независимый консультант в области J2EE с 18-летним опытом проектирования, построения, тестирования и развертывания крупномасштабных транзакционных приложений, таких как системы оформления предварительных заказов, центры приема звонков и потребительские веб-сайты. Является автором справочника "WebLogic 6.1 Server Workbook for Enterprise JavaBeans, 3-е издание" (O'Really) и ведущим автором книги "Mastering WebLogic Server" (Wiley) (Форд Н., Найгард М., де Ора Б. "97 этюдов для архитекторов программных систем". - СПБ.: Символ-Плюс, 2010).

Это не про видеоигры, а про все ПО, и не про лопату - помягче, но суть та же.

Тем не менее, вынужден обнажить еще один недостаток присущий игроделам и не только, который даже более греховен, нежели падкость на "хорошие идеи".

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

В качестве примера рассмотрим карьеру японского игрового дизайнера Шинджи Миками (Shinji Mikami). Когда меня спрашивают, есть ли хоть одна игра, к которой у меня нет претензий, я отвечаю молниеносно: Devil May Cry 1, Devil May Cry 3, Resident Evil 4, Resident Evil 5. Из названного списка в работе над первой и третьей игрой принимал участие Шинджи Миками (в первом случае в качестве исполнительного продюсера, во втором - в качестве режиссера). Игры не только задавали тренды (ставший классическим вид "из-за плеча" в шутерах от третьего лица появился впервые именно в Resident Evil 4, а кроме того игра практически переопределила жанр "survival horror"), но помимо этого они были длинными, притягательными, проходились много раз.

Однако, вопреки расхожим представлениям, принцессы тоже пукают. Спустя годы начинают появляться какие-то настолько же шедевральные, но как-то совершенно неиграбельные или непритягательные произведения: сначала безмерно глючный GodHand, затем технически совершенный, но почему-то провалившийся Vanquish, теперь Shadows of the Damned...

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

Что до Shadows of the damned, то как специалисту мне интересна механика (то же чувство, которое преследовало меня при игре в Vanquish), но как игрок я отмечаю:

  • несимпатичного мне и откровенно тупого героя;
  • перебор с сюрреализмом и мифологией с одновременным избытком левых диалогов и деталей и недостатком стержня и истории, как таковой;
  • безмерно тупой юмор, похоже генерируемый по скрипту (ключевые слова "демоны", "секс", "большие члены", "оружие" - але-гоп, поехали!);
  • прицел, всегда направленный наискось (то есть в режиме прицеливания прицел всегда находится не в центре экрана, что раздражает);
  • ужасно маленький радиус поражения у любого оружия;
  • звуковое сопровождение авторства Акиры Ямаоки (Akira Yamaoka), создателя знаменитых треков для игр серии Silent Hill, которое абсолютно неуместно в этой игре - в сочетании с качеством юмора здесь лучше бы звучала заглавная тема из фильмов Бенни Хилла.

Техдемо делаются для того, чтобы показать возможности. Я понимаю, зачем они разработчикам игр, я представляю себе, что это все было бы полезно к демонстрации на специализированных конференциях. Названные произведения отлично бы выглядели в качестве инсталляций на выставке современного искусства "Шинджи Миками в XXI веке" или в буклете "1001 игра Шинджи Миками", но почему я как игрок должен платить за это, вот это мне не понятно. Это все "от-кутюр" в игровой индустрии, а "от-кутюр", как известно, интересует отнюдь небольшой процент населения. И не каждую идею, пришедшую к голову с бодуна утром или на голодный желудок вечером (снова "демоны", "секс", "большие члены" и "оружие") вообще-то стоит воплощать в нечто материальное, что ты потом будешь пытаться продать.

пятница, 13 августа 2010 г.

Жизненный путь: Ассемблер

Имеется в виду ассемблер x86. Несколько программок было написано под i286 и i386 для защищенного режима работы процессоров, но в основном - реальный режим, пробы пера и стандартные лабораторки.

В 90-х на фоне DOS, историй о вирусах, быстрейших программ на "асме" и прочего, понимать (хотя бы) Ассемблер было круто! Я пишу "Ассемблер" с большой буквы - это неправильно, вообще-то, поскольку "ассемблер" - это тип языка низкого уровня, а не имя собственное. В моем случае правильно было бы писать "Ассемблер x86", но я уж, извините, по привычке. Так вот, возвращаясь: конечно, после кодирования на нескольких языках высокого уровня кодирование на Ассемблере было мукой, но мукой почетной. Для сегодняшних студентов это, по-моему, просто мука. Как я и говорил ранее, и сейчас от этой муки есть польза: программирование на Ассемблере позволяет разобраться с адресацией, тем, почему какая-то функция или процедура выполняется дольше, чем другая, тем, как в памяти организуются классы и выполняются виртуальные функции (если у вас хватит безумия заниматься объектно-ориентированным программированием на этом языке). И, вообще, Ассемблер открывает перед программистом новый слой реальности, подвигая его ближе к сокровенному - тому, что на самом деле происходит с компьютером, когда он что-то делает (следующий шаг по направлению к истине - трансляция ассемблерных кодов в машинные, еще один - загрузка и исполнение операций в процессоре той или иной архитектуры, а следующий и последний - понимание того, как отдельные транзисторы собираются для создания тех или иных схем, и того, какова связь между электрическим током из розетки и текстом на экране). За исключением специфических случаев, каждый сам для себя решает, нужно ему все это понимание или нет, но, если вы решили пойти до самого конца и "просветиться по полной", могу порекомендовать пару книг:Это все не про Ассемблер - это про транзисторы. Что касается Ассемблера, то даже и не знаю, что предложить - сейчас книг стало намного больше, но хорошие выбирать стало намного сложнее. Я изучал язык в основном по двум (всего лишь) книгам:
  • Сван Т. "Освоение Turbo Assembler". - К.: Диалектика, 1996. ISBN: 5-7707-9254-X.
  • Финогенов К.Г. "Самоучитель по системным функциям MS-DOS". 2-изд. - М.: Радио и связь, 1995. ISBN: 5-900797-02-3.
Книга Финогенова в каком-то варианте в интернет-магазинах находится, Свана найти мне не удалось - он вообще был отличным автором, который писал и о Delphi, и об Ассемблере, и о форматах файлов очень доступно и даже весело, но... пропал с российского книжного горизонта. Итак, за то время, пока я ковырялся в Ассемблере (с 1996 по 1998 годы, на втором и третьем курсах), я наковырял, в общей сложности, 12388 строк, из которых приходится:
  • 3596 строк - на лабораторки и собственные эксперименты с графикой и защищенным режимом процессора;
  • 5028 строк - на библиотеки, которые потом активно использовались в вышеозначенных лабораторках и экспериментах;
  • 1918 строк - на объектно-ориентированные эксперименты;
  • 1846 - на программы для Windows (задумка даже маленькой программы для Windows превращается на Ассмеблере... в общем, программ было всего 2).

суббота, 17 июля 2010 г.

Жизненный путь: Java и Java-script

Смысл последующего изложения легче понять, если прочитать преамбулу здесь.

Что касается языка программирования Java и его производных, то тут, надо признать мне похвастаться особо нечем. Я начал изучать его из соображений чистого энтузиазма где-то в 1996 году по книге одного из его создателей Патрика Нотона (эту книгу потом "заныкала" моя сокурсница, утверждая, что не отдаст, пока я не выдам ей подарок на день рождения, на который меня, кстати, не пригласили; подарок так и не получила, так что книжку так и не отдала). В то время Java не была таким монстром, как сегодня - воспринималась как средство для анимации картинок на веб-страницах, создания часиков и прочей мишуры. Этой мишурой был набит до отказа каждый второй сайт (с появлением Dynamic HTML от Microsoft ситуация еще более усугубилась). Только спустя несколько лет стало понятно, насколько мощным может быть этот язык в умелых руках - мне доводилось видеть и работать над огромнейшими и полезнейшими приложениями целиком или большей частью реализованными на Java.

Помню в той самой книге Нотона меня привлекло несколько тезисов относительно Java. На сегодняшний день все это не ново, не уникально или уже показало свою несостоятельность, а вот тогда было и ново, и уникально, и хотелось верить во все это:
  • наличие автоматической сборки мусора;
  • неотделимость объявления класса от его реализации;
  • строгая типизация;
  • отсутствие непосредственной работы с указателями;
  • интерпретация и переносимость;
  • безопасность ПО для клиентского компьютера благодаря "sandbox" или, согласно Нотону, "железному занавесу" (это к вопросу о несостоятельности - первый вирус на Java появился еще в августе 1998);
  • отсутствие goto и так далее.
По поводу последнего из приведенных особенностей, мне каждый раз вспоминается пара предложений, которые у Нотона стояли в книге рядом:

В Java нет оператора goto... Оператор break в Java работает с метками.

Да, у оператора break с метками в Java имеются определенные особенности, ограничивающие его бесконтрольное применение, и все же у меня тогда прочтение приведенного текста вызвало отчетливое: "Хех! Ну вы, блин, даете"! В итоге, отчасти благодаря скептицизму, я не ушел на Java дальше пробы пера, так что наколдовал за всю свою программистскую жизнь лишь 2 791 строку кода на этом языке в трех десятках аплетов, среди которых были:
  • мини-программы для рисования;
  • динамические фильтры для изображений;
  • простейшие прыгающие надписи (с музычкой в формате AU!);
  • те самые электронные часики;
  • примитивная по интеллекту противника и графическому исполнению игра с компьютером в крестики-нолики (истинное мастерство игрока в нее проявляется не в выигрыше, а в способности проиграть или хотя бы свести к ничьей) и т.д.
Что касается пользы Java в ИТ-производстве, то тут вопросов уже нет - время уже все решило. Относительно этого языка в обучении, я думаю, что он вполне может выступать даже первым и основным - на его базе можно научить практически всем аспектам разработки приложений каких угодно типов (привет переносимости и универсальности), только нужно понимать, что программист, который получится в итоге, будет не тем же самым, который был обучен на базе "Паскаль + Ассемблер + Си + C++". Почему? Потому что примеры, на которых будет обучаться Java-программист, за пределами круга базовых, будут и должны быть, наверное, иными, концепции и парадигмы опять-таки за пределами базовых и их реализация однозначно будут иными (ну, самый простой пример - в Java отсутствует множественное наследование реализаций), книги и их авторы будут иными (со своим видением, так сказать). Java, вообще, стала одним из первых и первым мега-популярным языком, который ставил своей целью не только и не столько эффективность исполнения кода, но и удобство, простоту и заботу о программисте при одновременном наличии широчайших возможностей, а это - совершенно иной мир и иная доктрина.

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

C++ поддерживает множество стилей программирования. Все они основаны на строгой проверке типов, и целью большей их части является достижение высокого уровня абстракции данных и непосредственного отображения идей программиста. Каждый стиль может эффективно достичь этих целей, в то же время обеспечивая эффективность выполнения и использования ресурсов. Программисты, приходящие из различных языковых сред (например, C, Fortran, Lisp, ML, Ada, Eiffel, Pascal или Modula-2), должны понять: для того чтобы воспользоваться преимуществами C++, необходимо потратить время на изучение и применение стилей программирования, приемлемых для C++. Тоже самое касается программистов, пользовавшихся более ранней и менее выразительной версией C++.

Бездумное применение в новом языке методов, эффективных в другом языке, обычно ведет к неуклюжему, медленному и сложному в сопровождении коду. Такой код к тому же еще и неприятно писать, потому что каждая строка кода и каждое сообщение компилятора об ошибке напоминает программисту, что используемый язык отличается от "старого языка". Вы можете писать в стиле Fortran, C, Smalltalk и т.п. на любом языке, но это и неприятно и неэкономично в языке с другой философией. Любой язык может послужить щедрым источником идей о том, как писать программы на C++. Однако для того, чтобы быть эффективным в новом контексте, эти идеи нужно трансформировать в нечто другое, более соответствующее общей структуре и системе типов C++. Над базовой системой типов возможны только пирровы победы. (Б.Страуструп "Язык программирования C++", 3-е изд. - СПб.: М.: "Невский диалект" - "Издательство БИНОМ"), 1999 г.)

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

суббота, 3 июля 2010 г.

Жизненный путь: Паскаль

С написанием программ я завязал в 2004 году. Последней программой стала разработанная в качестве расчетной для кандидатской диссертации. На время завязал или навсегда - не знаю, но, учитывая, что первую программу на Sinclair ZX Spectrum я написал в 7 лет в 1985 году (я знаю, что много раз об этом говорил, но еще неоднократно, наверное, об этом вспомню - горжусь), можно сказать, что у меня к 2004 году было 19 лет практики - не стыдно уже и переключиться на что-нибудь другое.

Давно хотел подвести некую черту, посчитать/вспомнить сколько и чего я создал за все эти годы. Начать решил с Паскаля. С этим языком я познакомился в 1995 году на первом курсе института, в который пришел с отличным знанием 8-ми диалектов Бейсика (gw, Q, Spectrum, Yamaha, БК - не помню, правда, какой именно диалект и т.д.), подозревая, что существуют и другие языки, но не имея опыта работы с ними.

Собственно, все лабораторные работы на первом курсе писались именно на Паскале (Borland Turbo Pascal 7.0). Объектно-ориентированным программированием на нем в моем исполнении разве что только "пахло" - было несколько небольших программ-примеров. Беготни и восторгов по поводу Delphi я не разделял. В свободное время тоже кое-что писалось (я разрывался между тягой к программированию и фанатизмом по установке и сносу Windows 95). По инерции на втором курсе было написано еще несколько программ на Паскале, после чего произошла смена курса - в жизнь пришли C/C++ (к сожалению, сразу вместе) и не желали покидать ее вплоть до 2004 года, смеясь в мозгу над всеми новомодными время от времени появлявшимися новыми языками.

Поскольку в общей сумме на Паскале было написано не так уж много, я взял за труд пересчитать все свои LOC (англ. Lines Of Code - строки кода) во всех файлах, которые смог найти. С ужасом предвижу, что будет, когда я дойду до C++ - там тысячи файлов, разбросанных по сотням каталогов за период в 10 лет. С Паскалем все было проще: программы в основном по одному файлу, под DOS, без излишеств в интерфейсах (зачастую интерфейсом служит командная строка), минимум адресной арифметики, чистые реализации придуманных или позаимствованных алгоритмов в разных комбинациях плюс обработка данных. Жизнь была куда проще, как мне кажется.

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

При подсчете строк я, естественно, выкидывал пустые, а вот комментарии учитывал - не зря же я их писал в назидание себе и потомкам! Еще, думаю, стоит упомянуть, что в качестве стиля расстановки скобок и отступов я всегда использовал так называемый "расширенный стиль" или "стиль Олмана" (конечно, только с тех пор, как узнал, что такое отступы, что такое стиль в кодировании, выработал хоть какой-то свой и решил его придерживаться). Это важно, потому что стиль Олмана предполагает, например, размещение каждого оператора (begin/end) или операторной скобки в отдельной строке, что, естественно, увеличивает общее число строк.

Итак, в общей сложности я насчитал 21 366 строк кода на Паскале. Из них:
  • 11 778 строк - это, собственно, лабораторные работы по программированию (I курс, осень 1995 - июнь 1996 гг.);
  • 5 709 строк - это лабораторные работы по другим дисциплинам (периодически на протяжении обучения с 1995 по 2000 я решал, что все-таки стоит использовать Паскаль для программ, где не требуется интерфейс, которые по характеру являются чисто расчетными) например по таким, как:
    • "Физика" - работа по визуализации действия законов Брюстера и Маллюса;
    • "Формальные языки и формальные грамматики" - вычисление лишних правил в контекстно-чувствительных грамматиках;
    • "Анализ алгоритмов" - задача о восьми ферзях;
    • "Технология разработки ПО" - сейчас уже не могу ни вспомнить, ни понять, что именно это было, так странно оно выглядит;
    • "Оптимальное управление" - программа численного решения однопродуктовой задачи и т.д.;
  • оставшиеся 3 879 строк - это то что писалось для души, например:
    • шифровка и архивация файлов с применением бинарного дерева по методу Хаффмана;
    • всякая мелочь с применением Turbo Vision (хотя любая "мелочь" с применением Turbo Vision превращается в большую программу) - кто не знает, есть такая библиотека оконных классов для DOS (и в консольных окнах отлично работает), собственно, на ее основе реализованы пользовательские интерфейсы самого Turbo Pascal 7.0, других продуктов Borland и не только Borland той эпохи;
    • фракталы (посмотрел сейчас на них - ну и жуть);
    • модули общего назначения для отображения меню;
    • несколько программ для Windows на чистом Паскале и т.д.
Интересно копаться в старых программах - рекомендую. Иногда находятся весьма любопытные творения. Я, например, уже который год восхищаюсь своим опусом под названием chtoto.pas. Году так в 2001, если не изменяет память, я уже пытался вспомнить/понять, что же эта программа рисует. Основных версий было 2: то ли она визуализирует какие-то данные, то ли пытается вращать куб в странной проекции. Нужно сказать, что я писал ее на раннем жизненном этапе и, видимо, в расширенном сознании, потому что ни одного отступа в коде нет, ни одного комментария нет плюс программа объектно-ориентированная (по-моему, на Паскале она таковая чуть ли не единственная более-менее крупная, остальные так - "Hello world!"). Так вот тогда в 2001 я отчаялся, переименовал ее в chtoto.pas и забросил. C той поры я раз в год повторяю эту процедуру: открываю, смотрю, забрасываю. Традиция...

пятница, 21 августа 2009 г.

Приватизация истории (частичная)

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


В 31 я себя старым или зрелым как-то не считаю (хотя в 25 думал, что буду считать), отрасль нашу в общем тоже престарелой не назовешь, и потому еще более удивительно, что при относительной молодости нас обоих, обнаруживается большое количество "реликвий" из нашего общего и довольно отдаленного (по ощущениям) прошлого.

Последнее открытие я сделал, изучая двухтомник Ю.Л.Полунова "От абака до компьютера: судьбы людей и машин" (М.: Русская редакция, 2004), посвященный как раз истории ВТ.

С самого начала чтения у меня появилось ощущение, что это уже когда-то было... Потом вчитался в предисловие, где автор пишет, что первая книга по истории ВТ в СССР была написана им и Р.С.Гутером в 1975 году и называлась "От абака до компьютера: жизнь замечательных идей". Вот тут-то меня и озарило: я читал ту книгу, правда не в 1975 (меня тогда и в проекте не было), а где-то уже в 1985-86. Прочитать книгу - небольшая заслуга по тем временам, не спорю. Но в семь или в восемь лет в СССР наткнуться и вцепиться в книжку единственную в своем роде... странно и забавно. Это сейчас что-нибудь про компьютеры есть в каждом магазине, а тогда... Тогда я по-моему брал ее в библиотеке... в детской (тогда были хорошие детские библиотеки, там много чего было и, слава богу, много чего не было - "Телепузиков", "Смешариков" и прочего... хм... прочей ерунды не наблюдалось).

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


Конечно, содержание книги не избежало некоторого связанного с общественным строем того времени пафоса и наивности, но это сейчас "пафос и наивность", а тогда это были вера и устремления, которые я как бывший член школьного совета пионерской дружины и сын бывших коммунистов весьма уважаю. Цитирую последние абзацы книги:
Так, в мире капитала "новые, до сих пор неизвестные источники богатства благодаря каким-то странным непонятным чарам превращаются в источники нищеты. Победы техники как бы куплены ценой моральной деградации. Кажется, что по мере того, как человечество подчиняет себе природу, человек становится рабом других людей, либо же рабом своей собственной подлости". (К.Маркс и Ф.Энгельс Соч., т. 12, стр. 4.)

По-моему, весьма актуально для сегодняшней действительности.
Совершенно иначе обстоит дело в социалистическом обществе.

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

А вот сие, может и было тогда актуальным, но...

Все это, в общем-то не так важно. Важно то, что с точки зрения ВТ-истории повествование останавливается на БИС. Обратите внимание, как сильно всего за 29 лет история подросла.


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

Вот так - еще один кусочек истории, с которым, как выяснилось я столкнулся впервые еще 20 с лишним лет назад.

понедельник, 6 июля 2009 г.

Детерминизм

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

В списке нынешних "векторов приложения усилий":
  1. Книга "Реальность 2.0b".
  2. Научно-редакторская деятельность в журнале "Прикладная информатика".
  3. Проект TopRecruit;
  4. Общественная деятельность в рамках Межрегиональной общественной организации "Информация для всех".
  5. Этот блог, к ведению которого, к слову сказать, меня подвиг мой бывший начальник, у которого я занимался...
  6. техническим писательством и техподдержкой (честно говоря, этим как-то так и не получилось увлечься, хотя опыт бесценен - в маленьких компаниях бардака не меньше, чем в больших).
  7. Научная и публицистическая деятельность (например, в журналах "Экономические стратегии", "Защита информации: инсайд", электронном журнале "Образовательные технологии и общество" и той же "Прикладной информатике").
  8. Два онлайн-проекта, о которых пока ничего говорить не буду - рано.
  9. Художественная литература, если ее можно так назвать.
Не стоит также забывать и про экс-деканство, имевшее место быть до прошлого года (век не забуду и в хорошем, и в плохом смысле слова). То есть вроде как и ИТ, но, как выразился мой преемник на посту декана Факультета программирования МФПА И.А.Нестеров: "компьютерная лирика".

Неоднозначный такой жизненный путь, мягко говоря. Ладно бы еще метался просто от одного дела к другому, тогда понятно: не знает человек, чем себя занять. Но ведь везде довольно успешно все. Как говорится, не хвастовства ради, а пользы для все это рассказываю, ведь как выражается мой близкий друг Игорь Семёнов: "поиски смысла жизни - это наиболее естественное состояние человека". Так вот путем долгих (не очень) измышлений, пришел я к выводу, что все не так уж и странно:
  • на 11-м году школьной жизни я сам преподавал пару раз своим одноклассникам информатику - физики часто менялись, а информатику преподавали почему-то всегда они;
  • в школе мне пророчили ГИТИС, а я подался в математики;
  • в компании своих друзей, в коей нас было четверо, мне из всех мушкетеров досталось наименование Арамис;
  • именно я 01.09.1997 не будучи вполне трезвым (в честь Дня знаний) поехал в институт узнавать расписание для себя и своих одногруппников, где и был застукан своим тогдашним деканом, с которым мы совместно работаем с тех пор вот уже 12 лет на разных постах;
  • после одной из поездок на олимпиаду по программированию я был единогласно назначен "духовным лидером" команды, а позднее запечатлен в электронном тексте и графике (на технического лидера я, видимо, не тянул);
  • в RPG на базе AD&D я всегда играю клериком!
В общем, если разобраться, то как бы все и понятно: жизнь она на правду все равно выводит и рано или поздно (если повезет) внутреннее с внешним таки сойдется. Так что счастливый я человек: занимаюсь наконец тем, что больше всего люблю, и вроде получается, и вроде востребовано, чего и Вам желаю! У нас в ИТ и для разработчиков, и для ученых, и для философов места, слава Богу, хватает, вот уж воистину ЦЕЛЫЙ МИР! :)

суббота, 20 июня 2009 г.

Детская непосредственность

Коллеги своими речами навели на одно занимательное воспоминание. В 2000-2001 году я разрабатывал довольно крупное приложение - графический конструктор для весьма сложной системы проектирования. Предыдущая его версия для той же системы была крайне неудобна для непрограммистов, а именно они и являлись ее основными потребителями. Мой конструктор должен был полностью избавить пользователей от необходимости вникать в синтаксис и логику языков программирования, которые были необходимы при работе с системой "вручную".

Конструктор на мой взгляд (и, к счастью, не только на мой) удался. На определенном этапе была выпущена рабочая версия, обладающая всем основным функционалом. Занимательно другое: архив с шаблоном (приложение было реализовано в виде шаблона MS Visio) включал файл под названием install.txt (даже не помню сейчас, как получилось, что он не назывался read_me.txt), в котором перечислялись все замечания к текущей на тот момент версии конструктора. Я много говорю об отношениях между разработчиками и пользователями, о преодолении непонимания, а потому решил честно поделиться содержимым этого файла, из которого ясно, что мои взгляды на данную проблему сформировались эволюционно, не сразу, и в 2000 они еще даже не начали формироваться. Тогда 9 лет назад я смотрел на происходящее с точки зрения молодого специалиста, живущего в несколько ином мире, чем мои пользователи. Сейчас Вы в этом убедитесь.

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

Итак, install.txt:
1. Всем заинтересованным лицам напоминаю, что эта версия конструктора Arcitect является даже не бетой, а прототипом, поэтому за глюки я не, что не отвечаю, а даже их и не замечаю :). Тем не менее, даже эта версия, благодаря моим трехмесячным невъе###ным программистским усилиям показала стабильную работу без сбоев на как минимум 7 моделях, часть из которых насчитывала до 40-50 узлов. Всем спасибо!

2. Для инсталляции необходимо папку Imitational Modeling целиком переписать в поддиректорию Program Files\Microsoft Office\Visio10\1033\Solutions (если, конечно, Visio 2002 устанавливался в папку по умолчанию), иначе ищите, куда вы его запихнули (Визио 2002) и переписывайте папку соответственно в [Путь до папки Visio 2002]\1033\Solutions. После этой бесхитростной мега-инсталляции, запускайте Визио 2002 и в галерее шаблонов выберите Imitational Modeling\Pilgrim5 Arcitect. При загрузке шаблона 2 раза выскочит табличка с вопросами: "Включать ли макрос?" (один раз для самого шаблона, другой для набора фигурок). Следует, естественно, ответить ДА (Включать, On, Enable, Yoohoo, OOOOYes и т. д.) Вот и весь процесс установки.

3. То что я постоянно употребляю не Visio, а Visio 2002 --это не потому что меня клинит, а потому что все версии до 2002 безбожно глючат при программировании (точнее версия 2000 глючит, а все до нее вообще его не поддерживают). Вследствие этого шаблон реализован и работает только под (угадайте что? ...правильно) Visio 2002. Она тоже безбожно глючит, как и все остальные, но ведь версии новее еще нет? Вот то-то и оно. Как минимум в версии 2002 глюки были значительно обновлены, улучшены и запрятаны так глубоко, что натыкаешься на них уже тогда, когда разойдешься (то есть бросить уже нельзя), зато ищешь потом несколько дней в чем же дело... Ладно скажу еще, что поскольку программа работает под (еще раз) Visio 2002, этот (и последний раз) Visio 2002 должен быть предварительно установлен и не на соседней машине, а на вашей собственной. ОК.

4. Как основные преимущества данного конструктора отмечу следующие недостатки:

4.1 При трансляции модели в код на Си не проверяется наличие входов в генераторы (вообще говоря, если они есть -- модель работать не будет). Но только дурак будет рисовать вход в генератор.

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

4.3 Подслои декларируются как упрощающие процесс разработки: можно разбить модель по разным страницам и в основной модели вызывать блоки на разных страницах в нескольких местах. Только вот подслои в текущей версии не поддерживаются.

4.4 В Create нельзя выставить параметр копирования свойств транзактов, поскольку я о нем слишком поздно узнал.

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

if (a>b)
{
   NextTop=1;
}
else
{
   if (1)
   {
      NextTop=2; //Узел по умолчанию
   }
   else
   {
      if (c<d)
      {
         NextTop=3;
      }
   }
}

Понятно, что в этом случае до строки if (c<d) программа никогда не дойдет, если только 1 не станет 0. Так что настоятельно рекомендую делать узлом по умолчанию--последний. Наслаждайтесь.

4.6 Не сообщается о присутствии выхода из Терминатора. Но это тоже только дурень может нарисовать.

4.7 Возможности узла Delet по отбору транзактов не реализованы. кстати на практике они вообще никогда еще не использовались, если я правильно помню.

4.8 Отсутствует возможность менять размеры узлов. Это меня самого бесит. Потерпим вместе.

4.9 Нельзя группировать элементы. Не делайте этого -- трансляция не состоится...

4.10 Не поддерживается сложная работа с переменными, например, использование массивов с автоматическим сдвигом в качестве скажем матожидания в сервере. Но это уже для эстетов... Да о чем мы вообще говорим?

4.11 Еще хотелось сделать пакетное сохранение параметров всех узлов в отдельный файл и восстановление из него. Еще хотелось отчет о модели чтобы генерировался автоматически. Много чего хотелось... До сих пор хочется...

4.12 И ВООБЩЕ -- ЭТО ФРИВАРЕ. Не жалуйтесь!

5. Из фирменных глюков мною лично замечен следующий:

5.1 Неправильно транслируется значение true. На его место в файле на Си подставляется prty, отнако эти макросы в Simulate.h определены по-разному:

#define true 1
#define prty 3

Это создает проблемы, например, при проверке ключа на открытость генерируется строка:

if (addr[3]->op==prty)

Истинным выражение в скобках никогда не будет, как можно заметить, так как addr[3]->op может быть равно либо false (0), либо true (1), но уж точно не prty (3). Решение проблемы очевидно: проверяйте ключ не на открытость, а на закрытость или НЕзакрытость при этом будет сгенерировано что-нибудь типа:

if (addr[3]->op==none)
или
if (addr[3]->op!=none)

Как можно заметить, вместо false в этом случае генерируется none, но false и none определены в Simulate.h одинаково:

#define none 0
#define false 0

Вот так то.

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

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

Ну вот и все... Желаю счастья!!! Ikshot AKA SoulHunter
"Улыбайтесь -- это всех раздражает", (С) Василий Стрельников

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

среда, 11 февраля 2009 г.

Небольшое ностальгическое отступление

В 90-е годы произошел скачек во всем, что касалось разработки ПО. Качественно изменялись инструменты, каждый программист хотел достать последние версии той или иной среды разработки. Мы передавали друг другу на дискетках Turbo Pascal, обрезанный в плане файлов настолько, чтобы помещаться на эту дискетку.
Мы соревновались, кто кому с помощью программы качественнее «поломает» компьютер, и как быстро сможет человек с поломанной машиной ее воскресить и понять, что сделала программа конкурента. У нас была Горбушка – совсем не та, что сейчас, а развал под открытым небом.

Нам было интересно, преподавателям было интересно. Наша специальность была самой крутой и самой программисткой, несмотря на то, что в дипломах у нас написано «математик». Builder-a не было, первые версии VB были настолько ужасны, что непонятно было что с ними делать. Первые версии Delphi были каким-то откровением. Люди которые начинали писать под Windows, а не под DOS вообще считались «ламерами» (тезис о том, что "настоящая программа должна работать с командной строки", сегодня не кажется таким уж мудрым, но тогда казался). Borland была могуча, она не была тем, что от нее сейчас осталось.

Была романтика, была целая культура избранности, если хотите. Но потом все это стало постепенно размываться, появились смешанные специальности – не поймешь ИТ или не ИТ. Больше вузов накинулось на ИТ-кусок в плане подготовки студентов, компьютеры распространились везде, и «каждый суслик стал считать себя агрономом». Компании стали дрессировать свободолюбивых программистов… и романтика исчезла. Сейчас ТА наша культура практически вымерла. А в вымирающей культуре редко появляются фанатики и вообще талантливые люди, иначе бы она не вымирала. Даже на факультете Вычислительной математики и кибернетики МГУ студенты не всегда могут правильно назвать свою специальность и больше озабочены тем, как открыть дело, а не тем, какой код они пишут.

А ведь на самом деле такая специальность как «Математическое обеспечение и администрирование информационных систем» (МОиАИС) восходит корнями к «Прикладной математике», которую я имел честь заканчивать (и мы свою специальность никогда не забывали – нам не давали, поскольку ласково называли «приматами»), а та к «Механизированной обработке информации», каковая существовала на заре развития ИТ в СССР. Эта специальность имеет свою историю и традиции. Так что если мы – это метафорически дети, тех кто строил ИТ в стране, то нынешние студенты специальности МОиАИС – это метафорические внуки этих людей. Очень бы хотелось, чтобы они это понимали. Чтобы понимали, что помимо эгоистичных желаний денег и всего остального, что конечно важно (программисты щедры в своем эгоизме и эгоистичны в своей щедрости), у них есть часть славы этих людей и часть унаследованной ответственности. Это важно помнить.