среда, декабря 08, 2010

Выложили записи моих докладов с ADD-2010

Организаторы потихоньку выкладывают записи докладов с ADD-2010, мои уже выложили.

Первый доклад, Искусственный интеллект в играх
Про нечестные приемы, про поиск пути и навигацию.

218-Games-AI-add-2010.avi from Stas Fomin on Vimeo.


Материалы, которые я использовала для подготовки к докладу:
It's not fun if you fake it. Rigged gameplay mechanics are starting to piss me off.
The Pure Advantage: Advanced Racing Game AI
18 Embarrassing Game AI Bugs Caught On Tape... and Fixed!
OpenSteerDemo
The psychology of randomness
WeightedDecayRand
GDC 2010 Keynote Address: Sid Meier
Theta*: Any-Angle Path Planning for Smoother Trajectories in Continuous Environments
Near-Optimal Hierarchical Pathfinding (HPA*)
Сравнение алгоритмов поиска маршрутов в StarCraft и StarCraft 2
There's a Hole in Your NavMesh, Dear Zombie

Второй доклад, C++0x
Я не рассчитала время, доклад получился коротким. Первратим это в плюс.
Короткий, но насыщенный доклад про C++0x! Всего на 25 минут, а если вопросы не слушать, то и того меньше!

225-C0xx-add-2010.avi from Stas Fomin on Vimeo.



Updated 09.12.2010:
Во время доклада был задан вопрос, почему для атрибутов нельзя использовать слово final вместо [[final]]. Там были высказаны предположения, но ответ так и не был дан.
Отвечает Герб Саттер.
Для это пришлось бы использовать контекстный парсинг, а делать это не хотелось, потому что нигде до этого в языке это не использовалось. Но все-таки они решили сделать именно так. И final будет просто final, без каких-либо скобочек.
/Updated

Материалы, которые я использовала для подготовки к докладу:
C++0x features and their support in popular compilers
Initializer List proposed wording
Compile-time 'String' Manipulation with Variadic Templates
C++0x: An overview, by Bjarne Stroustrup
C++0x FAQ
C++0x Core Language Features In VC10: The Table
Summary of C++0x Feature Availability in gcc and MSVC
C++0x. Лямбда-выражения
C++0x lambda

P.S. Лучше все это смотреть в HD и на полный экран

среда, декабря 01, 2010

Неделя неслыханной щедрости

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

В сегодняшнюю раздачу слонов попали.

Wikipedia
О, неисчерпаемый источник полезной информации. Именно оттуда я узнала, что средняя скорость ленивца два метра в минуту, а когда опасность, то и все четыре. Что энергетический бюджет нашей планеты - 174 петаватта. Что Поль Брэгг умер от сердеченого приступа, а вовсе не утонул.
К тому же там в последнее время появился громадный баннер, Джимми Уэйлс смотрит с него большими печальными глазами и просит денег.
650 рублей Википедии. Баннер после этого никуда не исчез, правда :-)
Donate to Wikipedia

Firefox и Thunderbird - давно пользуюсь этими двумя софтинами. Firefox здоровый, у него течет память (или уже починили?) и я с него все пытаюсь на что-нибудь перелезть, но он служил мне долгие годы.
Отдельно на софтину пожертвовать нельзя, можно перевести пожертвования Mozilla Foundation. Суммы фиксированы. Я выбрала 25 долларов. И они обещают прислать плюшевого дракончика!
Donate to Mozilla Foundation

WinRAR
Отличный архиватор, и он не бесплатный. Лицензия стоит 29 у.е.
Купить WinRAR

Tortoise SVN
Лучший клиент к Subversion под Windows. Пользуюсь много лет, довольна.
Там можно сделать подарок каждому разработчику индивидуально через Амазон, я сначала так и хотела сделать. Но у меня не получилось, вы не поверите. То "мы это не можем доставить", то "не факт, что в регионе получателя этот диск будет играть". Ну нафиг.
Так что просто 10 долларов им перевела.
Donate to Tortoise SVN

Inno setup
Самая лучшая программа создания дистрибутивов под Windows. А я много какие пробовала. Простая, понятная, без дурацких разноцветных кнопочек и может все.
5 долларов
Donate to Inno setup


Были некоторые проекты, которым я хотела дать денег, но не нашла как. Это WireShark, причем у них в рассылке был по этому поводу вопрос, на него никто не ответил. Это Far Manager, и это GCC.

И помните - никогда не поздно поддержать неделю неслыханной щедрости. :-)

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

понедельник, ноября 15, 2010

Временные оценки в программировании

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

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

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

Итак, как обычно происходит оценка сроков? Вот очень распространенный сценарий. Программиста спрашивают "сколько времени этой займет?" Ответ ожидается прямо сейчас, у программиста есть несколько секунд на раздумья. У него в голове возникает некий срок. Пускай будет "три недели". При этом программист отбрасывает время, нужное для отладки, учитывается только время кодирования. Потом внутренний голос говорит ему "Ты же крут! Какие три недели! За две справишься!". "Две недели" - отвечает программист. После этого начинается торг. Менеджер пытается уменьшить уже сильно заниженный срок. В итоге они сторгуются на неделе. Это просто какой-то срок, взятый с потолка, который выполнен не будет.

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

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

Оценка времени программирования задач в часах
Этот способ рекламировал Джоэл Спольски у себя в блоге. Там вы найдете его подробную статью об этом: Evidence Based Scheduling. Разбиваем задачу на подзадачи, оцениваем время каждого этапа в часах.
Если вы привыкли брать сроки с потолка, то оценки по этому методу будут получаться пугающе большими. Это нормально.

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

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

Предоставить другую информацию

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

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




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




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

суббота, ноября 13, 2010

Интервью на OpenQuality.Ru

На OpenQuality.Ru сейчас публикуются интервью с программистами о разработке софта. Много спрашивают про обеспечение качества.

Пока там всего два интервью. Моё и Александра Дёмина, автора блога Программирование - это просто. У него там есть интересное про организацию работы в Блумберге.

OpenQuality.ru