?

Log in

No account? Create an account

November 20th, 2009 - Excelsior — LiveJournal

Nov. 20th, 2009

12:27 pm - Acceptance

Давненько хотел написать на эту тему, но вчерашняя находка - статья Джоэла Спольского Fire and Motion - прямо-таки подтолкнула к этому. Как и почти во всех статьях Джоэла, в этой много интересных мыслей, но вот эти слова "достучались до моего сердца" (с) Джей.

"Sometimes I just can't get anything done. Sure, I come into the office, putter around, check my email every ten seconds, read the web, even do a few brainless tasks like paying the American Express bill. But getting back into the flow of writing code just doesn't happen... What drives me crazy is that ever since my first job I've realized that as a developer, I usually average about two or three hours a day of productive coding... But it's not the days when I "only" get two hours of work done that worry me. It's the days when I can't do anything."

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

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

В жизни и так дофига ситуаций, когда внешние обстоятельства накладывают органичения на то, что хочешь сделать (жесткий дедлайн из-за фейла менеджмента, неотложные бытовые дела и так далее), поэтому, имхо, нет смысла генерировать эти ограничения самостоятельно (например, "вот люди делают такие клевые программы, пишут такие замечательные статьи, а я за сегодня нихрена не успел"). Я об этом писал еще вот тут - http://xeno-by.livejournal.com/6856.html.

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

***

Каг бэ, такая посылка оправдывает ничегонеделание. Из моего опыта это совсем не так. Когда позволяешь себе отдых, тогда через некоторое время начинает дико хотеться что-то скреативить - это и есть сигнал того, что надо возвращаться к работе. По факту, такой стиль работы лично мне доставляет больше радости и, на удивление, приносит больше value.

Tags:

05:55 pm - Smart acceptance

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

Невероятно, но факт - для того, чтобы было, на что переключаться, надо составить список и отранжировать таски по важности. После того, как это до меня дошло, стало все просто - взять составить mind map своих активитей (кстати, тулзы для рисования майндмапов рулят рисование на бумажке), присвоить им ранки и в день выполнять по 2-3 кусочка активитей. Пока что я только начал юзать эту технику, о резалтах отпишусь, когда наберу статистику. Upd. Вот обещанное описание резалтов: http://xeno-by.livejournal.com/19813.html.

Tags:

09:22 pm - IntelliTrace

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

Более подробно: если врубить соответствующий режим, то студия начнет запоминать важные события (брейкпоинты, иксепшны, нажатия на кнопки, выбор итемов из комбобокса и так далее - можно добавить и свои ивенты) и историю исполнения (контрол флоу, вызовы методов, результаты вызовов методов, параметры методов, в том числе и this, но не локалсы, блин) приложения. Этот лог может быть сохранен и позже заюзан для отложенной отладки приложения, во время которой можно ходить туда-сюда по стеку, отматывать и перематывать программу по шагам, просматривать параметры и возвращаемые результаты методов (впрочем, есть ограничения - о них под катом). Ессно, этот же лог можно юзать и в live сеансе отладки.

Стырив с работы вторую бету 2010й студии, я решил заценить эту фичу самостоятельно (до этого все мое общение с VS 2010 заключалось в исследовании синтаксического сахара, сгенеренного для dynamic переменных и работы с ними). Вот картинка (на фоне отладка Датаволта - одного из моих опен-сорс проектов), а вот мои каменты:
1) Оно действительно работает - запоминает дерево вызовов и результаты, которые возвращали методы!!
2) Для каждого метода можно посмотреть действия, которые выполнялись в процессе его исполнения. Список не деревянный, а плоский, то есть навигация неудобная. Действия циклов кидаются в одну пачку, то есть для большого размера циклов будет ужос.
3) Очень прикольная фича - тултипы, которые обычно показываются студией при просмотре локальных переменных в режиме break, можно прикрепить к месту их появления и написать к ним камент. Прикольная тема, чтобы по сто раз не лазить в локалсы. Думаю, это новая фича дебаггинга как такового, но все равно весело.

Ограничения на собираемые данные: when you enable IntelliTrace Events and Call Information, IntelliTrace collects a record of each call entry and exit. On entry, IntelliTrace collects name and value information for each parameter. For arrays, only the first 256 objects are recorded. For objects, only the top level of the structure is recorded. On exit, IntelliTrace collects the return value of the method.

Короче, все тормозит, иногда глючит, русский текст в каменты вводить нельзя - но потенциал у этой фичи просто охренительный. Подробности в бложеке одного из программ-манагеров студии: http://blogs.msdn.com/habibh/default.aspx, вот пару моих хайлайтов:
* Есть такая штука ивенты (примеры: вот и вот) - они запоминают такие действия, как: исключения, клики мышкой, изменение состояния контролов, открытие файлов, запросы к базе, можно, наконец, добавлять свои (только пока хз как - наверное плагином к студии). Upd. Оказывается, в 2005/2008 студиях есть похожая, но гораздо менее мощная штука - tracepoints.
* Следующая вещь практически из научной фантастики - тестер у себя может записать воспроизведение бага, после чего сохранить лог и отслать его девелоперу, который увидит сценарий воспроизведения и сможет заценить общую обстановку и прямо оттуда начать дебаг.
* Логи также могут продьюситься студийным тест-раннером и студийным CI продуктом. Интересно, насколько эту штуку можно подъюзать у себя в приложении. Upd. Файлы логов лежат по умолчанию в папке "C:\Documents and Settings\All Users\Application Data\Microsoft Visual Studio\10.0\TraceDebugging\" (у меня Win XP, в Vista+ все будет по-другому), поэтому, если любопытно, там их можно посмотреть (внимание: студия очищает эту папку после выхода, поэтому смотреть надо при живой студии!). На первый взгляд, какой-то непонятный бинарный формат. Надеюсь, хотя бы апи к нему будет.

Наконец, вот еще пару потсов на тему интеллитрейса и того, как он устроен изнутри:
* http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/10/19/vs-2010-beta-2-intellitrace-in-depth-first-look.aspx
* http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/06/16/how-does-vs2010-historical-debugging-work.aspx

upd. За два года тулзу не заюзал ниразу. Либо она не интегрируется с платформой (к примеру, с шарепоинтом), либо является оверкиллом (и трейсы + юнит-тесты ее заруливают). Вывод: идея впечатляющая, но непонятно, как ее практично реализовать. Прямо как с STM (читаем ретроспективу Джо Даффи на тему STM).

Tags:
Previous day (Calendar) Next day