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

ПРОШИВКА ДЛЯ МОЗГОВ

Февраль 2010! 1 час промывания мозгов!

ПРОШИВКА ДЛЯ МОЗГОВ
Безшабашные практики вытягивания проекта из ... для хлюпиков, карьеристов и лидеров.

Надоело вкалывать? Начни получать удовольствие!

Бонус! Вы сможете улучшить свою сексуальность!!!

Когда? Где? Кто? О чем? А мне пять киллов!
Ищите в январе подробности своей гениальности! :)

PS. Для танкистов - в январе опубликуем адженду и где будем проводить встречу. Будет он-лайн трансляция. Мы рады будем ответить на все ваши вопросы!

пятница, 27 ноября 2009 г.

Новый сайт - Agile Guru!

Коллектив бесшабашных практиков и философов в сфере ИТ решили создать общий ресурс для своих битв и идей! Приглашаю вас подключиться к ресурсу и вносить/выносить доброе-полезное и светлое!

http://agileguru.ru

четверг, 29 октября 2009 г.

Individuals and interactions over processes and tools


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

11-13 февраля 2001 года на лыжном курорте The Lodge at Snowbird в горах Юты семнадцать человек собрались, чтобы пообщаться, покататься на лыжах, расслабиться и попытаться прийти к общему знаменателю и, конечно же, поесть. Что из этого вышло - Agile-манифест разработки ПО. Съехались представители Extreme Programming, SCRUM, DSDM, Adaptive Software Development, Crystal, Feature-Driven Development, Pragmatic Programming и других подходов, вызванных потребностью в альтернативе к основанным на документации, тяжеловесным процессам разработки ПО. В конце своей встречи они подарили миру "Манифест Agile", определяющий Agile как 4 ценности + 12 принципов + 0 практик.

Далеe: ссылка

вторник, 27 октября 2009 г.

Разработка стратегии тестирования

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

0-16 - не нанимать
16-18 - может быть нанят на полставки
18-55 - нанимаем на полный рабочий день
55-99 - не нанимать

Вопрос: сколько тест кейсов нужно написать? Какие возраста вы покроете?

Понятно, что задача простая. Но все же хотелось бы узнать ваше мнение :)

Гуру, дерзайте!

Ответы будут здесь.

воскресенье, 25 октября 2009 г.

Паттерн "@"

Собака - это единственное животное, которое
не обязано работать для своего существования
Дейл Карнеги


Паттерн @
Предназначен для решения проблем непонимания и неконструктивной критики.

Область применения
Общение.

Проблема
Эмоции - это лакмусовая бумажка любой активности. Разговоры и обсуждения не исключения. Например, начал разговор накаляться. Здравствуйте эмоции. Вы чувствуете, что вас не понимают и продолжают настаивать на своих глупых аргументах. Вы доказываете, что все не так и приводите самый значимый аргумент, которые поставит все точки над I. Но происходит странное, собеседник не только вас не понимает, но начинает повышать голос и настаивать на своём. Он полностью не понял аргумента…

Далее: ссылка

понедельник, 5 октября 2009 г.

Time Management & Agile

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

Классическая книга, с которой я начал свой тайм менеджмент - это Ален Лакейн "искусство успевать" и его 61 правило. Самое главный вывод сделал из книги - не надо напрягаться :) Как этот вывод во мне появился не знаю, автор на нём вроде не настаиват, но Дэвид Аллен (см. ниже) очень подробно объясняет эту особенность тайм-менеджмента.

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

И последнее, книга раскрученного на западе автора - Дэвид Аллен. Как привести дела в порядок. Искусство продуктивности без стресса. Книга мне не нравится, так как идёт однобокая подача материала. Плюс охаиваются в начале книге других подходы в таум-менеджменте, причем всех он записывает в жесткие планновые тайм-менеджмент стратегии. Это подрывает к автору моё доверие. Но это не мешает послушать эту книгу. Автор очень часто настаиваивает на одной практие "думай всегда о следующем шаге". И самая шикарная практика это формирование списков (первоочередных дел и ожидание). В общем техник мало, но зато психологию разгрузки мозга передал, эта идея в других системах как бы неявно, как следствие. Автор же эту особенность тайм-менеджмента взял за причину :)

И одна сногсшибательная книга. Практик не очень много, но идеи заряжающие: "Осипенко - 33 способа самомотивации"

Я бы рекомендовал следующий план обучения тайм-менеджменту.

План обучения тайм-менеджменту:
1. Осипенко - 33 способа самомотивации
2. Дэвид Аллен. Как привести дела в порядок. Искусство продуктивности без стресса.
3. Глеб Архангельский "Тайм-драйв"
4. Алан Лайкен "искусство успевать".

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

А дальше у вас появится вкус. Книги простые, поэтому много времени не отнимут. После прохождения курсо молодого бойца можно приступить к классике. О ней как-нибудь потом расскажу :)

Книги нужно не просто читать. А практиковать. Делаете так - читая книгу выписываете полезные практики. Как набралось 3-5 штук. Отложите книгу и попрактикуйте недельку. В конце неделе пересмотрите как вам удалось выполнять практики. Какие получили результаты. Продолжайте читать дальше.

Новая модель мотивирования

Шикарное подтверждение идеи внутренней мотивации:
- автономность
- целенаправленность
- мастерство



PS. Материал найден по наводке Ильи Сербиса:)

воскресенье, 13 сентября 2009 г.

5G

Участники стади-групп постепенно синхронизируют свои знания как между собой, так и с такими великими людьми как Кент Бек, Мартин Фаулер, Роберт Мартин, Эрик Эванс и многие другие. Становится иногда сложно отличить (было: отлЕчить :) ), где чьи мысли.

Поэтому можно говорить о неком общем подходе в разработке программного обеспечения, которого придерживаются участники стади-групп.

Чтобы отстаивать свою точку зрения на форумах и подчеркнуть принадлежность к ордену света было решено подписываться следующим образом:

Денис, 5G

суббота, 22 августа 2009 г.

Agile (определение)

Agile - это культура разработки программного обеспечения. Как любая культура имеет четко определенные ценности и принципы. В отличии от методологий не определяет практики, оставляя каждому определить тот набор практик, которые целесообразно применять в данном контексте. Или коротко Agile - это методология с нулём практик.

И краткое определение. Agile - это то, про что пишут в Agile-журналах, -блогах и -сайтах

Agile Guru

Долго пытался понять, что мне не хватает. Регистрил один домен, второй, создавал блоги пачками, чтобы отразить своё миропонимание происходящему. И вчера я понял, как можно объединить все это дело под одной шляпой. Шляпа эта - Agile-гуру.

Цель проекта: выработать критерии понятия Agile-гуру и стать им!

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

Так что приглашаю вступить со мной на трудную ступеньку саморазвития - http://agileguru.org

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

Kanban vs. SCRUM

Запись встречи: http://team.custis.ru/2009/07/kanban-vs-scrum.html (видео)

Просмотрел запись, просто супер! Согласно Core Protocol: 6 баллов из 10
+ 3 балла за классные обсуждения
+ 2 балла что используется принципов Study Group - когда заранее было сказано подготовиться к встрече.
+ 1 балл за запись отличную и отчёт

Чтобы поставить 10 баллов, я бы добавил следующее
+ 2 использовать паттерны StudyGroup, тогда и встреча интересней будет
+ 1 попросить участников потом (так как есть е-мыл) написать отзыв в митинг- статью
+ 1 включить вещание в инет, хотябы через скайп или rutube!!!! (это делается за 5 минут, зато аудитория будет в тыщи раз больше!!!)

Мои мысли по теме:
1. Чтобы понять одну из методологий, нужно понимать скоуп её использование. Это продукт, проект, или только одна разработка. Другой нюанс срез в даже в скоупе. И даже в рамках могут быть разные срезы. Поэтому определив какие области покрываются предлагаемой практикой облегчело бы обсуждение.
2. Был график, когда каждая последующая методология уменьшает количество включенных практик. SCRUM исключил технические, отдав на усмотрение команде, Kanban исключил множество других практик. Каждая следующая методология даёт выбор, чем мы покроим свои активности. Поэтому я бы ввёл следующую методологию - Agile. В которой не одной практики вообще, а другие практики выбираем по усмотрению.
3. По поводу менеджера и улучшения процесса. Кайдзен-команды это альтернатива ретроспективам. То есть Just-in-time по отношению к улучшению процесса, и не нужно ждать ретроспективы.
4. По поводу цепочки задач, и почему хорошо не ложиться вытягивание от маркетинга, через тестирование, к разработке. То тут лучше к Lean в построении цепочки создания ценностей. А тестирование по определению Lean должно быть убито как явление. Так как любые ошибки добавляют потраченное время, поэтому здесь практики Unit Testing для разработчиков, и Acceptence (Fitness) тестирование для тестировщиков. Цель уменьшить время фидбека после каждого чекина. Сюда же идут - ScoreCards, Testable Units, разделение кода и дизайна. Что позволяет работу QA вплести в разработку.
5. И вообще мне усматривается, что менеджмент, как средство управления процессом (придумать документы, поставить практики, мотивировать людей в разборках тет на тет), а не продуктом, исчезает. То есть практика Канбан и Лин делает так, чтобы менеджмент процесса убрать за счет способности команды стопорнуть процесс и его улучшить, как только обнаруживается дырка. Что очень хорошо в канбан видно. Просто форсируются изменения как только обнаружены дырки процесса.

В общем все супер! А можно вебвещание сделать, я хотел бы в следующий раз через скайп поучаствовать тоже :)

воскресенье, 5 июля 2009 г.

Бережливое производство программного обеспечения: от идеи до прибыли

Мэри Поппендик, Toм Поппендик
Implementing Lean Software Development (Signature Series)
Mary Poppendieck, Tom Poppendieck

"Эта замечательная книга объединяет практические советы, готовые к использованию методы и глубокое понимание, почему именно так следует создавать программное обеспечение. Мне приходилось наблюдать коллективы, полностью трансформировавшиеся благодаря идеям этой книги."
— Майк Кон, автор книги Agile Estimating and Planning

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

* Расширять и развивать практику гибкой методологии разработки
* Создавать истинные коллективы разработчиков, а не просто рабочие группы
* Добиваться высокого качества с помощью быстрой обратной связи с потребителями
* Принимать решения как раз вовремя и ни в коем случае не позже
* Осуществлять поставки быстро, как в компании PatientKeeper: 45 качественных релизов приложения ежегодно
* Принимать компромиссные решения, способные по-настоящему удовлетворить заказчиков

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

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

Об авторах

Мэри Поппендик является специалистом в области менеджмента и разработки продуктов с более чем тридцатилетним опытом использования информационных технологий. Ей приходилось возглавлять коллективы, занятые реализацией разного рода проектов — от управления цепью поставок на предприятии до цифровых медиа, а также участвовать в создании одной из первых бережливых систем производства, ориентированных на поставки "точно вовремя" (на предприятии 3М, где она когда-то работала). Мэри является президентом компании Poppendieck LLC, специализирующейся на внедрении бережливых подходов в разработку программного обеспечения.
Том Поппендик является аналитиком в области предпринимательской деятельности, специалистом по архитектуре ПО и инструктором по применению гибкой методологии разработки с более чем двадцатипятилетним опытом разработки и реализации комплексных систем. В настоящее время он помогает организациям применять принципы бережливости в процессах создания программного обеспечения. Мэри и Том Поппендик также являются авторами книги Lean Software Development (вышедшей в издательстве Addison-Wesley), которая выиграла премию Jolt Software Development Productivity Award (Премия за высшую продуктивность в разработке программного обеспечения) 2004 года.

256 стр., с ил.; ISBN 978-5-8459-1538-2, 0-321-43738-1; формат 70x100/16; твердый переплетсерия Signature Series; 2009, 4 кв.; Вильямс.

среда, 24 июня 2009 г.

Критерий Lean судья процессов

Забавно, но ключевая идея Lean (бережливого производства) может показать кардинальные различия в Waterfall & Agile. Идея заключается в переходе от массового производства, в терминах ПО - поэтапного производства, в производство по требованию.

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

Agile с игрой в планирование (фокусировка на самых приоритетных задачах) и итеративно-инкрементный (причем важнее инкрементная, нежели итеративная разработка) подход фокусируется на поставке как можно быстрее рабочего, хотя не 100% набитого функционалом приложения. Но самое главное - реализующего ключевой функционал. Зная закон Паретто можно сказать, что 20% функционала покрывают 80% потребности. И это факт :) Agile ориентируется на ключевых для бизнеса вещах, нежели поставка через -цать лет и в полном объеме. Это отличие превращает поэтапное производство в производство по требованию. В гармоничный поток создания ценностей. И аджайл позволяет взглянуть на разработку с точки зрения ценностей клиента, нежели ценностей производства (следования этапам и повышения эффективности оных: CMMI, оценки производственных процессов и т.п.).

Исходя из этого можно предположить, что code&fix, самая лучшая практика. Не соглашусь. При уменьшение цикла от заявки до реализации начинают набирать силу муда ( потери, отходы, то есть любую деятельность, которая потребляет ресурсы, но не создает ценности). То есть можно очень мощно рвануть в создании ценностей и выкатить результат. Но каждый следующий шаг будет давать сложнее и сложнее.

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

Терминология Core Protocol

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

ЧЕСТНОСТЬ – полная согласованность единство чувств, мыслей, слов и действий. Полное присоединение.

ПОЗНАНИЕ – процесс структурирования потока поступающей информации.
Познание можно рассматривать как процесс, состоящий из нескольких стадий:
1. Сомнение в тех или иных убеждениях.
2. Анализ и интеграция информации, содержащейся в мыслях, эмоциях и интуитивных догадках.
3. Формирование гипотетических действий на основе собранной информации.
4. Осуществление «наилучшего» действия из тех, которые были сформированы на стадиях 1–3.

ЗНАНИЕ – знание или уверенность – это патологическая вера. Патология знания проявляет себя в стремлении «знайки» уничтожить собственное восприятие и подавить в себе процесс непрерывного экспериментирования и анализа, который ведет к приобретению опыта. Опыт повышает жизненную силу верующего. Как правило, знание тормозит или даже устраняет процесс познания. Следовательно, знание обычно не так хорошо обеспечивает взаимодействие с миром, как вера.

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

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

Вырожденным состоянием веры является постижение – то есть состояние, при котором гипотеза становится «знанием» или «уверенностью». Знание – это вера вне зависимости от истинности.

ИССЛЕДОВАТЬ – непредубежденно изучать что-либо, руководствуясь реальным или воображаемым любопытством.

ИСТИНА – убеждение, которое при практическом применении чаще порождает изобилие по сравнению с другими убеждениями. Истины открывают путь только другим истинам. Причем постоянно и, как кажется, ускоренными темпами.

ВОВЛЕЧЕННОСТЬ – взаимосвязанность с другими сотрудниками, работой и объектами.

ПРИСУТСТВИЕ – влияние личности в данный период времени; ощущение влияния другой личности. Качество и ценность вашего присутствия, а также расходы, связанные с ним, определяются (1) влиянием вашего присутствия, оказанным на взаимодействовавших с вами людей во время и после данного периода времени, (2) влиянием, оказанным на вовлеченные объекты и процессы, (3) влиянием, которое вы оказали на свою жизнь посредством полученного опыта и взаимодействия с другими людьми. Степень вашего присутствия в течение заданного времени, в заданном месте, в составе заданной группы определяет уровень ваших результатов.

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

ВОСПРИНИМАТЬ – получать информацию при помощи органов чувств, одновременно сознавая приобретаемый опыт.

ЗАЗОР МЕЖДУ ГОЛОВАМИ (затраты) – увеличение расходов (сверх расходов базового зазора), которые необходимы для при менения способностей другого человека. Затраты на преодоление психологического расстояния между двумя людьми (зазор между головами) – это дополнительные затраты, необходимые для того, чтобы сотрудник А смог предоставить свои способности сотруднику Б, плюс дополнительные затраты (сверх базовых) сотрудника Б на освоение этих способностей. Зазор включает в себя все затраты, связанные с межличностным взаимодействием А и Б, с усилиями, которые А и Б должны предпринять, чтобы повысить свою доступность друг для друга, и с усилиями, которые Б должен предпринять, чтобы применить способность, которой обладает А. Также этот показатель включает в себя затраты, вызванные ошибками в процессе взаимодействия А и Б.

КОМАНДА – разумная надличностная сущность. Она может состоять из некоторого количества людей (или команд), которые стремятся действовать сообща для достижения общей цели с максимальной эффективностью. Командное поведение всегда включает в себя два вида деятельности:
• Аккумуляция личных ресурсов, особенно времени, информации и способностей.
• Эффективное применение этих ресурсов для достижения индивидуального и коллективного успеха и изобилия.
Кроме того, команда всегда способна говорить одним голосом.

КОНФЛИКТ – несогласованность интересов. Для разрешения конфликта зачастую требуется большая идея.

РАЗГОВОР – неструктурированное применение голоса, которое может иметь совершенно различные показатели сигнал/шум. Разговор – это самый распространенный способ не руководить и не быть руководимым. Кроме того, это стратегия, позволяющая помешать другим сотрудникам руководить или подчиняться руководству. Зачастую, когда ктото хочет поговорить, вы чувствуете себя обязанным слушать. Это проявление уже исчезающей формы вежливости. Хотя слушание обычно является полезной стратегией, чрезмерное внимание к пустым разговорам не приносит никакой пользы. Более того, внимание к таким разговорам несомненно вредит всем, кто в них участвует.

БОЛТОВНЯ – разговор, который не приближает команду к поставленной цели. Этот разговор может вызывать интерес людей, а может оставлять их равнодушными.

РУКОВОДСТВО – публичная уязвимость. Смелое раскрытие собственных сил.

РУКОВОДИТЬ – быть первым, кто начал действовать в соответствии со своими убеждениями.

ЭМОЦИИ, ЭМОЦИОНАЛЬНЫЙ – высокоскоростные персональные элементы обработки информации, описываемые одним или несколькими примитивными состояниями: раздражением, печалью, радостью и страхом. Функция эмоций состоит в том, чтобы проинформировать человека быстрее или поиному – по сравнению с рациональным мышлением. Эмоции ярче и медленнее интуиции, быстрее и туманнее, чем мысли.

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

AgilePodcast 1. Сезон 1. Что такое Agile?

Участники:
Асхат Уразбаев, Денис Миллер, Никита Филиппов

Обсуждаемые темы
* Проблемы разработки ПО
* Что такое Agile?
* Чем приятен Waterfall
* Сравниваем Agile и не-Agile
* Буддизм в Agile







четверг, 11 июня 2009 г.

Пирамида требований



Записал несколько подкастов на тему управления требованиями и оценки.

http://agile.rpod.ru/112496.html - здесь я ввёл понятие пирамиды требований
http://agile.rpod.ru/112634.html - тут введено понятие условных единиц измерения для каждого уровня. И показано как условная единица уровня User Story превращается в Story Points.
http://agile.rpod.ru/112772.html - ну а здесь краткое объяснение супер техники коллективной оценки трудоёмкости Planning Poker

Подключайтесь и задавайте вопросы. Будем искать ответы :)

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

Аджайл активности

Асхат решил создавать обзор аджайл за неделю. Поэтому очень рекомендую заходить на его сайт. Самые интересные моменты с его точки зрения за неделю читайте по адресу: ссылка. Я думаю это приведёт к реанимации agilerussia и ru_agile под флагом ScrumTrek и Асхат выйдет из подполья, куда втянула его работа. А мы будем снимать самые сливки с его блога. Ням-ням. Супер!

Это провоцирует оживить http://agile.rpod.ru для записей не только стади-групп встреч, но и сам подкаст, где выкладывать свои мысли. Кстати, если вы аджайлист и хотите практиковать английский в разговорной и письменной речи. Agile Study Group решили перейти на английский язык, там мы изучаем всякие полезные источники и обсуждаем их по английский. Так же сделан сайт: http://agileexperts.blogspot.com, где мы комбинируем тренировку в English Writing и изучении Agile. Приглашаю к участию!

пятница, 29 мая 2009 г.

Share the pain : система мотивирования

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

Нечестно, что только программист разделяет боль за некачественное решение. Отдел качества должен быть на передовой взаимодействия с заказчиком. После непродолжительной беседы по чату с Виталием Стаховым, мы решили, что и это не совсем верно. Поэтому предложена схема: клиент разделяет боль с тестером, тестер с программистом. Но стал вопрос, а с кем разделяет боль программист? И поняли, что с аналитиком. А аналитик? С пользователем! Круг замкнулся!

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

После рассуждений мы поняли. Боль должна разделятся по объёму ответственности. А абсолютная ответственность как выяснилось у менеджера. Поэтому схема упростилась: клиенты, программисты, тестеры, аналитики пинают менеджера.

И это правильно!


среда, 27 мая 2009 г.

Ретроспектива решает конфликты

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

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

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

Упрощёная схема:
1. Конфликтная ситуация.
2. Остановится
3. Понять свои эмоции.
4. Найти причину (см. технику)
5. Провести ретроспективу на то КАК вы обсуждаете, а не ЧТО вы обсуждали.

Секретная техника действует! Люди меняются и культура разработки растёт!
Приятной ретроспективы!

понедельник, 25 мая 2009 г.

Эволюция культуры команды - ретроспектива

Как я отличаю аджайл команду от не-аджайл? По наличию одной лишь практики - "Ретроспектива". Мне не достаточно сказать - у нас есть она. Я должен увидеть как происходит это таинство. У меня в загашнике есть ряд критериев по которым определяю качество "ретроспективы". Может быть когда-нибудь напишу :)

Сегодня хотел чуток о другом. Я просто несказанно рад, что Дмитрий у себя на блоге описал эту штучку (ссылка). И этот пост воодушевил закончить находящийся в черновике пост про ретроспективу. Асхат подхватил эстафету про ретро. Рекомендую зайти - ссылка.

Продолжать чтение моего поста нужно после чтения поста Дмитрия.

Я привык использовать облегчённый вариант ретроспективы. Я за упрощение во всем её многообразии. Мои ретроспективы просты по структуре
1. ХОРОШО
2. УЛУЧШИТЬ
3. ИДЕИ

Народ интересуется, почему же есть пункты "Хорошо", "Улучшить" и "Идеи", но нет "Плохо" ) Весь сыр бор вокруг пункта 2. Он показывать отличие в психологии проведения ретроспективы. Готовы ли на свершения (которые оформляются Action-планом, который я забыл упомянуть), или просто "вздыхатели" :)

Для русского менталитета пункт 2 должен быть "ПЛОХО". Для европейского - "УЛУЧШИТЬ".

Разница грандиозна. Во-первых, описать "ПЛОХО" нужно 1 мозго-силу. Констатируем факт и мы в шоколаде. Для описания "УЛУЧШИТЬ" нужно 2 мозго-силы. Первая для описания "плохой" ситуации, а вторая мозго-сила для предложения пути как исправить. Вот и получается пункт "УЛУЧШИТЬ" это посложнее, чем "ПЛОХО.

Во-вторых, "ПЛОХО" характеризует натуру, которая больше любит жаловаться, а не решать проблемы. "УЛУЧШАЮТ" в эффективных коллективах, когда идентифицируют неэффективное поведение, ситуацию и ставят задачи по улучшению. Игра слов. Но все же обращу внимания: жалуются - решают, проблемы - задачи. Можете подумать на досуге к какому поведению приводят две эти стратегии, если ими руководствоваться по жизни.

В общем народ можно разбить на две большие группы по этому критерию. Первая - кто ищет оправдания (для них в ретро нужен пункт ПЛОХО) и другая группа, кто ищет возможности (для этих нужен пункт УЛУЧШИТЬ).

А если получается много "УЛУЧШИТЬ" и улучшения достигаются. Это развивает команду. Команда за счёт "УЛУЧШЕНИЙ" изменяется, изменяется её культура.

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

четверг, 21 мая 2009 г.

Секреты построения команды (Team Building)

Использование практик Agile позволяет эффективно управлять созданием продукта. Но создание команды и динамика построения команды в Agile освещены не очень хорошо. В предлагаемом подкасте я рассказываю о практиках, которые ориентированы на развитие командных отношений и повышение эффективности работы. Весь подход состоит из четырёх этапов:
1. Развитие эмоционального интеллекта
2. Коллективное принятие решений
3. Интеграция личных и командных целей
4. Общее видение

Все секреты одним файлом:

суббота, 16 мая 2009 г.

Null Object и синтаксический сахар C#

public interface Null
{
}

internal class NullWord : Word, Null
{
}

if(word is Null)

Без комментариев. Красотища! :)

Использованы паттерны: NullObject и Marker Interface

Подробнее: http://agile.rpod.ru/109024.html

100% Coverage Driven Design (CDD) - борьба с тухлым кодом

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

Я же хочу раскрыть другую замечательную вещь, которая повысит качество кода во много раз. Один нюанс - вам придётся делать 100% покрытие :)

Эту идея пришла во время парного программирования с Кириллом Медведевым в рамках одной из стади-групп.

Эту разработку я называл "100% Coverage Driven Design" (или сокращённо CDD). Суть этого подхода есть сложение TDD, общего подхода написания тестов (ключевая фраза здесь - TestLast) и инструмента покрытия кодом.

Напомню цикл TDD:
1. Пишем тест (формализуем ожидания от будущего кода)
2. Реализуем код
3. Рефакторим

В "100% Coverage Driven Design" цикл такой:
1. Тест
2. Код
3. Рефакторим
4. Добиваемся 100% покрытия

Какие бонусы даёт такой подход
1. Все бонусы TDD
2. Вы всегда контролируете, что ваш код используется и нету лишнего, мертвого, того кода, который будет тухнуть из-за дня в день. Покрытие будет следить, как только что-то лишнее появляется и не используется - сразу выкидываем.

Возникает вопрос. А что делать с тестами, которые устаревают. Ведь их с помощью покрытия нельзя выявить, а тем более сказать что код, который покрывается устаревшими тестами уже начинает потухать. А решение простое - смирение. Если тест устарел, то первым делом он начинает из зеленого превращаться в красное. И вы тут же решаете, что с ним делать. В красное он может превратиться по множеству причин. Но если одна из причин - устаревший и ненужный тест. Мы его удаляем. Запускаем Code Сoverage и проверяем, где произошли смещения от точки 100% покрытия.

Покажу на маленьком примере. С помощью TDD цикла создали библиотечку. Проверили её покрытие и выяснилось не 100%. Начинаем разбираться и видим, что появился тухлый код. Сначала комментирую тухляк, а потом лопатой все убираю.


Успешно справившись с продуктами собственной жизнедеятельности (удалив тухлятину), я сталкиваюсь с автогенерённым тухляком:



Мне приходиться напрячь мозги и понять, что components объект никогда и не используется! Такое открытие позволяет мне удалить столь запутанную тухлятину тоже.



Результат не заставляет ждать. Идеально чистый код! Я с уверенностью продолжаю дальнейшую разработку.

Теперь немного GUI-шного, про разработку через TestLast и как техника рефакторинга приводит ухудшению Code Coverage.

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

public void MainForm()
{
     SetUpClass.PrepareTestFile();

     var form = new MainForm();
     var mocks = new MockRepository();

     var dialog = (OpenFileDialog)mocks.CreateMock(typeof(OpenFileDialog));
     Expect.Call(dialog.FileName).Return("filename.ew");
     Expect.Call(dialog.ShowDialog()).Return(DialogResult.OK);
     mocks.ReplayAll();

     form.openFileDialog = dialog;
     form.MenuItem_Open(null, null);

     mocks.VerifyAll();
     Assert.AreEqual(2, form.dicGridControl.Count);
}

2. Реализуем функцию

public void MenuItem_Open(object sender, EventArgs e)
{
     if (openFileDialog.ShowDialog() == DialogResult.OK)
     {
         Dic dic = new Dic();
         dic.Load(openFileDialog.FileName);
         dicGridControl.Bind(dic.ToList());
         }
}

Покрытие: 100%

3. Проводим рефакторинг Replace Nested Conditional with Guard Clauses (кстати, мой самый любимый)

public void MenuItem_Open(object sender, EventArgs e)
{
     if (openFileDialog.ShowDialog() != DialogResult.OK)
         return;


     Dic dic = new Dic();
     dic.Load(openFileDialog.FileName);
     dicGridControl.Bind(dic.ToList());
}

Покрытие: 97%.

Проведение рефакторинга привело к снижению покрытия. Мы столкнулись с усложнением кода с точки зрения поддержки покрытия. Но в тоже время облегчили с точки зрения понимания, сделав линейность выполнения основного блока. То есть основной блок в первом примере разбился на два: проверка условия выполнения и основной код.

В общем снизили покрытие. Что делать. Я останусь верным принципам рефакторинга и оставлю проверку входного условия. Но я должен дотянуть покрытие до 100%. Тут на помощь приходит старая практика Test Last. Если раньше, эта техника была вызвана сообращениями разработки тестов для уже разработанного кода, сейчас эта техника изменит своё предназначение. Используя эту технику я подтяну покрытие до 100%.

После мелких рефакторингов я добавил второй тест, используя технику TestLast:

[Test]
public void MainFormCancel()
{
     Expect.Call(dialog.ShowDialog()).Return(DialogResult.Cancel);
     mocks.ReplayAll();

     form.MenuItem_Open(null, null);

     mocks.VerifyAll();
     Assert.AreEqual(0, form.dicGridControl.Count);
}

Результат: покрытие 100%

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

Другой нюанс, если я пойду дальше и подстрахуюсь от проблем с файловой системой:

public void MenuItem_Open(object sender, EventArgs e)
{
     if (openFileDialog.ShowDialog() != DialogResult.OK)
          return;

     try
     {
          Dic dic = new Dic();
          dic.Load(openFileDialog.FileName);
          dicGridControl.Bind(dic.ToList());
     }
     catch (Exception ex)
     {
          MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
     }

}

Этот кусочек кода пишется даже без теста легко. Я нарушил правило TDD и добавил строчку кода без теста. И кара настигла меня моментально - покрытие упало, плюс протестировать статический метод MessageBox.Show - это целая проблема (ни моки, ни что либо другое здесь не поможет - в морг). А представьте сколько проблем мы делаем, когда разрабатываем более менее серьезное приложение?

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

Вывод: Данную методику изобрёл буквально вчера. За вчера её опробовал, очумел от эффективности и продолжаю праведно работать по ней. Методика 100% покрытия стала для меня точно так же как запускать юнит тесты. Стала родной и без неё уже свет не мил. Теперь не то чтобы у меня тесты есть согласно TDD, но и код очищается от мертвого кода очень удобно и легко. Теперь я не только уверен в функционировании (этому мне помогает TDD), но и что код чистый (этому помогает 100% покрытие). В общем я доволен как маленький ребёнок от такой простои и в тоже время мощной игрушки. Сейчас нарабатываю опыт от применения, о чем буду делиться и буду ждать последователей, кто готов проверить предложенный метод.

четверг, 30 апреля 2009 г.

Скобочки для if в одну строчку

(DRAFT)

Здесь расскажу про такое заблуждение как обрамление фигурными скобочками оператор if с одним простым действием.

if(condition)
{
        return 0;
}


вместо
if(condition)
        return 0;


Мифическая причина идущая от Стива Макконнела (Code Complete). К ней все обращаются, когда начинают мне её называть. Такое ощущение, что это единственная книга, которую горячие стороники скобочек читали :) Кстати, советую тогда заглянуть на http://agileconsulting.ru/wiki/Books - тут множество книг о качестве кода.
1. Защита от дурака, что кто-то в будущем добавит строчку и сделает баг в программе.

А теперь демистификация скобок. Итак, почему скобки это пережиток:
1. Отступы явно указывают на логический блок из одной строки.
2. Отступы проставляются автоматически средой разработки.
3. Тесты не дадут написать код неправильно. У вас нету тестов? Тогда улучшать качество кода начали не от туда :)
4. Скобки кушают 2 линии
5. Мы бизнес-разработчики, и должны свести к минимум все инженерные ухищрения. Ведь в любом языке фраза: "если наступит утро, то я проснусь" не содержит скобок.

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

Если вы используете современную IDE и TDD и утверждаете, что скобки полезны по названой мифической причине - просьба дайте конкретный пример. Иначе рассуждаем о коне в ваккууме.

среда, 29 апреля 2009 г.

Вебкасты про Agile

http://www.autumnofagile.net/
http://www.summerofnhibernate.com/

суббота, 25 апреля 2009 г.

«Agile по-крупному!» — ВИДЕО

Во вторник, 21 апреля, прошла аннонсированная ранее встреча сообщества AgileRussia.ru, озаглавленная «Agile по-крупному!». Изначально тема заявлялась, как разбор сложностей Agile в крупных командах и проектах, обсуждение тонкостей масштабирования, ведь все, что выходит за максимальный размер стандартной Agile-команды в 9 человек, уже требует специальных подходов.


«Waterfall2Agile — Agile для Большой Waterfall компании: нужен? как и что внедрять?» — это пришли ребята из широкоизвестной компании «C», они детально описали свой цикл разработки и структуру проектного управления своего Большого Продукта (достаточно заметить, что цикл тестирования релиза занимал у них 18 месяцев), пояснили возникающие проблемы, и запросили у сообщества предложений по улучшению процесса — включая как Agile-практики, так и технические/инструментальные решения.





«AgilePostmortem» — это была посмертная ретроспектива распределенного Agile-проекта, интересного высокотехнологичного стартапа, к сожалению, «не дожившего до весны».



Оригинал: http://team.custis.ru/2009/04/agile-agilerussiaru.html

вторник, 21 апреля 2009 г.

Строки-ресурсы или магические строки (draft)

В продолжение предыдущего поста возникли логичные вопросы. А что делать с
String.Format(StringResourse.TotalString, total)? Кстати, вам легко понять это? А я ещё не начал перечислять минусы :)

Итак, начну с переносом строк в ресурсы. Начнём сначала. Какой смысл был у строки? Если смысл кокатация строчек. То первичный вопрос - накой козе баян? Зачем делать форматирование строке "Всего: " + total + " штук"? А потом повышаем косвенность, закидывая строку "Всего: {0} штук" в ресурсы?

В отличии от string, StringBuilder, String.Format назначение ресурсов в предоставление вариационности. Вариационности в способе отображения, а для строк это либо другой язык, либо другая система отображения значений (пример: дата, дроби и т.п.). Вы часто имеете дело с мультикультурными приложениями? :) Да и там чуток по другому делают. Причем не на стадии программирования, а это свойство относится к всем процессу разработки. Другой нюанс - некоторое множество сообщений, которое на каждом углу программы используется. Некое постоянное магическое множество. Типа "Всего: {0} руб.". Тут ещё можно подумать. Но вредно. Для этого есть специальные классы. Которые должны сразу выплёвывать такие строчки и мы не должны волноваться как это получилось.

Другой сногсшибательный аргумент - если у вас есть технический редактор, и ему удобно работать с одним списком сообщений. Представляю я работу этого редактора. Вместо того, чтобы заранее написать текст, который он ожидает. Или с программистом договориться во время непосредственного написания кода. Он будет открывать файл ресурсов и не соображая, что за туча сообщений, править. Полностью оторвав от контекста применения. Кто нибудь так делает? Ух ты! Ну и как часто так делаете? Чаще чем пишете код? :)

А теперь какие бонусы мы получаем от такой системы (не для варианта мультикультурной платформы, а для нашей простой разработки)
Бонус 1. Попробуйте посчитать количество ваших действий, чтобы внести изменение в вашу строчку. Ужас на крыльях ночи. И это только ради того, чтобы внести маленькое исправление в строчку. Боюсь если вы уделяете столько внимания строчкам, то время на полезный код у вас не остаётся вообще :) Мне намного легче править то, что я вижу непосредственно.
Бонус 2. Даже если не менять. Чтобы читатель мог понял, что тут написано и что ожидается, вам прийдётся скакать как минимум по двум файлам. Кстати, поиск таких вещей и мест их потребления - это другая тема. А разговор идёт не об одной сущности, а просто об одной строчке кода. Да к тому же ещё среди кучи строчек вам нужно ещё вашу. Упасть не встать.
Бонус 3. Я молчу, насколько это эффективно программируется по сравнению с простой строчкой кода :)
Бонус 4. Нарушение ценностей и принципов Implementation Patterns и Simple Design.
Бонус 5. Программирование ради неопределенного будущего. Какой то технический

Задайте себе вопрос - что вы чаще меняете: кучу сообщений без привязки к месту использования или конкретное сообщение в конкретном коде. И из этого делайте вывод. Если вы днями программируете текст в ресурсном файле. То ресурс это ваше все. А если вы пишите код программы и добавляете в него сообщения - то вывод очевиден. Что данные (а строка это данные) должны быть в непосредственной близости от места потребления.

Следующий вопрос - Magic String. Звучит очень странно. Но давайте вернёмся к аналогии. У нас есть Magic Number. Пример: 12. Конечно, любой скажет, что нужно напрячься, причем очень сильно, чтобы найти СМЫСЛ этого. Поэтому СМЫСЛ мы заключаем в название переменной int interest = 12. Ещё раз подчеркиваю, чтобы не искать смысл числу 12 по крупицам в коде окружающем это значение мы вводим переменную, в название которой перенесли смысл числа. В нашем примере 12 означает interest (процент). Теперь взглянем на наши Magic String:

string errorMessage = "Произошла ошибка. Повторите операцию";

Вот скажите, а чего вам не понятно в исходном сообщение? Смысл? Там же по-русски написано :) Я понимаю, что фраза "@#$#@$^%$" может запутать и нужно ввести поясняющую переменную. Но в примере то чего сложного?

Теперь пошли нюансы Magic String:
Бонус 1. Переменная, у которой область видимости максимум круглые скобочки в качестве параметра вызова в MessageBox, почему то становиться видна всей нашей функции. Как будто без этого мало строчек кода.
Бонус 2. При чтение кода нам нужно прыгать сначала к тексту применения, а потом к определению. Хотите скачи - идите на ипподром.
Бонус 3. Некоторые умельцы ещё и форматирование туда запихивают. Мозг выносится напрочь, когда обнаруживается код типа:
string totalString = "Всего: {0} штук";
....
String.Format(totalString , total);

Итог, использование Magic String и ресурсов в большенстве своём плохой и неоправданный стиль программирования. Но когда же их исползовать? Ресурсы - когда вариационность текстовой составляющей (языки, отображение и т.п.), Magic String - ну когда одно и тоже в многих местах или ну совсем длинная или непонятная строчка :)

понедельник, 20 апреля 2009 г.

String vs StringBuilder

Сегодня в microsoft study-group обсуждали стринг. Собственно эта тема всех интервью - что нужно использовать для "оптимального" хранения строчек? И все хором говорят - используем StringBuilder. А на вопрос, что использовать для кокатации строк - String.Format. И все напрочь забывают, что мы программируем не для оптимизации, а для того, чтобы поддерживать код и развивать. То есть делать код понятным даже первокласснику, что не скажешь про "профессионально" оптимизированные без надобности куски творчества.

Так вот про вопросы интервью. Я с ними полностью не согласен. Люди! Не то чтобы на пороге 21 век, он уже дома! Преждевременная оптимизация - зло и порождает ДОРОГОСТОЯЩИЙ код! Качественный код приравнивается к самодокументируемому коду. Оптимизация здесь не рассматривается - она здесь не обсуждается. Так как мы бизнес-разработчики, а не любители оптимизнуть что под руку попадёт. Бизнес-разработчик пишет код, где каждая строчка отражает НАМЕРЕНИЕ, а не хитро-вычитанные фичи платформы :)

Начну развеивать заблуждение с конкатацией через String.Format. Цель функции String.Format форматирование строки, а не конкатация. То есть привращать 1 в 001,00 например. С точки зрения качественного программирования запись с целью конкатации String.Format("Total: {0} dollars", total); выглядит настолько неэкономично, что ужас. Конечно микроскопом можно гвозди забивать :) У некоторых это даже получается. Во-первых, чтобы понять это, нужно чтение слева-направа заменить на скачкообразное чтение с актвацией ячейки памяти в моём мозгу. Во-вторых, добавление новых переменных вызывает дополнительное напряжение - теряем время, за которое нам платят деньги. В-третьих, чтобы добавить новую переменную - мне нужно делать 2 (!!!!) изменения.

Исходя из этих соображений. А мои соображения основываются на принципах Implementation Patterns & Refactoring и трёх простых ценностях (коммуникация, простота и гибкость). В данном случае используем самую первую и самую важную ценность - коммуникация. Напомню: Коммуникация (communication) - разрабатываемый код должен явно отражать намерение создателя. Этот принцип подчёркивается и в рефакторинге. Так вот начиная читать строку String.Format - я чётко фиксирую себя на мысле "форматируем"!, а когда плюсиками - то конкатируем. Просто и разумно.

Ужасная конкатация через форматирование: String.Format("Total: {0} dollars", total);
Поэтому намного лучше и приятней: "Total: " + total + " dollars";
Хотя, перед PHP код снимаю шляпу: echo "Total: $total dollars";

Все сразу начинают вспоминать эффективность и оптимизацию. Не знаю, что пишут в современных книжках. Но я читал книги 1970-х годов, ещё в то время писали - "народ у нас мощные компы, бросьте оптимизаций заниматься заранее, делаете более читаемый и хьюмэн ориентед код". И это писал практик, а чуть ранее теоретик программирования Кнут писал тоже самое :)

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

Итак с точки зрения качественного кода (а это код, которых легко читать):
StringBuilder - вещь хорошая, но его стоит применять, когда мы подходим к объекту как механизму с накапливанием значения, а результат будет снят как сливки намного дальше от кода наполнения. То есть в одном месте явно накапливаем (сложный код... преимущественно бывает в циклах), а в другом вы забираете результат (особенно часто встречается со словом return ;).
String.Format - для форматирования кода, но не конкатации. Причем в отличие от String.Builder результат забирается в месте форматирования.
+ (любимый плюсик для строк) - приятный и дешевый способ конкатации

PS. "Экономично", "дорогостоящий" и "дешевый" читать с точки зрения разработки и поддержки. Меньше тратим время, чтобы "врубиться", значить дешевле. Время - деньги.
PS2. А оптимизация делается на заключительной стадии. Ключевое слово: профайлер.

понедельник, 13 апреля 2009 г.

Что такое Agile?

Часто задается вопрос, что такое Agile или XP. В чём ключевое отличие от других подходов. Ответ очень простой. Agile - это культура разработки, включает гармонично подобранные ценности, принципы и практики. Мета-методология, которая определяется входящими в неё методологиями. Эти вещи уже проверены по отдельности различными командами. Но в совокупности они порождают нечто большее. Синергию. Другие подходы ориентируются преимущественно на практики, иногда на принципы. Про ценности же забывают напрочь. То есть на то, что человека отличает от болтика.

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

Натянутые попытки использовать ряд практик, без комплексного подхода, приведёт к неудаче. И это нельзя назвать работаю по Agile. Потом неудачники с радостью и гордостью рапортуют о своих неудачах. Кстати меня удивляет, почему он обсуждая только практики делает столь поспешные выводы. Полностью забыв про принципы и ценности. Да и существует 1000 способов делать неправильно, а постарайся сделать так, чтобы получилось!

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

Да... а для работы с ценностями можно использовать практику - Team Value Sync-up Practice, о которой я писал ранее.

Кстати, в тему цитата Кент Бека (link):

There is 3 legs on the stool: practices, values and principles and I think people who are successful applying XP are paying attention to all 3. This gets back a little bit to some of my disenchantment with the direction of agile development in general, people are now asking the question: "How am I going to do agile development?" and agile development isn't a thing you do, it's an attitude, it's a set of personal values about responding to the real world, being open to the information that is there and being willing to do something about it.

That is agility. Yes, there is a lot of practices that come out of that but to me that is where it starts, it's this attitude. If somebody understood a bunch of practices and tried to do them, you could do agile development without being agile and it's a disaster because you're acting out of harmony with what you really believe when you do that.


И в заключение: весь мир делится на два лагеря - 1) те кто работает в новом стиле и 2) те кто работает постаринке. Честно говоря я рад, что вторых больше. Потому что именно вторые оплачивают мою работу :)

суббота, 11 апреля 2009 г.

Эмоциональный интеллект

Уже сложно найти сайт и специалиста в области менеджмента, которые не говорят о важностях эмоционального интеллекта применительно к проектной деятельности. Я спрашиваю их - а делать то чего? Разводят руками или начинают говорить о красивых абстракциях и грандиозных результатах. Но я опять не понимаю. Тогда говорят, это сложный вопрос, а тебе стоит найди правильного человека для своей команды, он чувствует это всё. А другие советуют почитать Кови или книгу о сабже, после этого ты и поймешь.

Мне кажется можно организовать все проще. Основная идея - потенциал команды складывается из ментальных и эмоциональных усилий команды. IQ + EQ. Если с IQ понятно, то вот как прокачивать EQ?

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

Исходные материалы для развития эмоционального интеллекта:



Делаем простой уголок, который потом будем ставить себе на стол. C одного листа А4 вырезается 5-6 полосок, таким образом получаем 5-6 уголоков с листа.



И в итоге получаем тренажёр для эмоционального интеллекта:



Вот и инструмент готов.

Как это работает? Перед тем как что-то делать, вы садитесь и чувство-думаете:
Я ЧУВСТВУЮ ________, ПОТОМУ ЧТО __________

Чувства: РАДОСТЬ, ГРУСТЬ, СТРАХ, РАЗДРАЖЕНИЕ. Других недопустимо. Важно объяснить себе, почему я это чувствую. Важно называть минимум 2 чувства. В "ПОТОМУ ЧТО" немного напрягшись нахожу причину своего чувства. Понимая причину, я повышаю осведомленность. Ибо только зрелые личности испытывают чувства и осознают причины их побудившие. Таким образом мы повышаем осведомленность как на уровне EQ, так и IQ. А дальше либо миримся с причинами, то есть забиваем на свою осведомленность, либо решаем возникшую проблему :)

Теперь о правилах. Они простые, как всё эффективное и работающее:

1. Перед каждой активностью говорить себе "Я чувствую..."
2. Минимум 2 чувства
3. Ставить уголки на стол, чтобы другие видели
4. Если кто-то интересуется "почему" - отвечать честно.
5. Запрещено врать и убирать под давлением.

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

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

Жду ваших отзывов о внедрение :)

Об этих и других практиках развития эмоционального интеллекта слушайте в подкасте Agile Study Group: ссылка сообщества Study Group.

PS. Практика называется "Вход" (Check-in). То есть я ментально и эмоционально вхожу в работу.

PS2. Alexander Lipatov: У меня в аське частенько раньше спрашивали что-то вроде Как дела? Как настроение? :) Я теперь отвечаю: я чувствую радость, что на улице хорошая погода и чувствую раздражение, потому, что на работе много мелких дел, которые никак не хотят заканчиваться

воскресенье, 15 марта 2009 г.

govnokod.ru

Срочно всем на http://www.govnokod.ru/.

Без слёз не взглянешь :)

четверг, 12 марта 2009 г.

5th value to Agile Manifesto "Craftsmanship over crap"

Agile Manifesto является путеводной звездой, которой руководствуются корабли Agile команд в достижение целей. Дополнительно к этому, спустя 8 лет, Роберт Мартин (дядя Боб, автор книги PPP, которая обсуждается в стади-групп Design Pattern Study Group и один из соавторов Agile Manifesto) создал новые принципы. Принципы мастерства - которые показывают, как нужно грести :)

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

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

As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:

Not only working software, but also well-crafted software
Not only responding to change, but also steadily adding value
Not only individuals and interactions, but also a community of professionals
Not only customer collaboration, but also productive partnerships


That is, in pursuit of the items on the left we have found the items on the right to be indispensable.

http://manifesto.softwarecraftsmanship.org/main

© 2009, the undersigned.
this statement may be freely copied in any form,
but only in its entirety through this notice.

вторник, 3 марта 2009 г.

Система бонусов как механизм демотивации

Если спросить программиста, что его мотивирует, то он честно ответит: "достойная зарплата, бонусы, изучение новых технологий, обучение, засылка на тренинги и семинары, возможности карьерного роста". Звучит достойно? Вот только, где здесь хотя бы слово о работе и заинтересованность в результате??? Ах, да иногда говорят "интересный проект" - но это о работе, а не о мотивирование :)

Паттерн: Мотивирование
Назначение: Понижение качества труда, снижение заинтересованности, эмоциональное увольнение.

Описание: F -> R -> B, где
F - усилие, которые оказывает работник на работе
R - результат, который ожидается от человека
B - если результат хороший, то начальник платит бонус

Суть этой формулы такова. Что только глупый человек не оптимизирует процесс. Люди настолько изобретательны, что лишнее выкидывается. Получаем формулу: F -> B, а R (результату) здесь не место - зачем на него тратить время? :)

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

ТО ВНЕШНИЙ СТИМУЛ (МОТИВИРОВАНИЕ) РАЗРУШАЕТ ВНУТРЕННИЙ ИМПУЛЬС (МОТИВАЦИЮ)

Мотивация, в отличии от мотивирования, свойственно человеку. Мы созданы по подобию Бога. А Богу свойственна работа, так как она определяет его бытиё. Ему только нужно довериться, дать ответственность, дать возможность принимать решения.

Кстати, практикуется очень хорошая практика у менеджеров. Мотивировать работников за их же деньги. Как это делается? Очень просто. Схема такова. Пусть у вас есть 1000 рублей для человека. Менеджер говорит, что 800 рублей будет зарплата, а раз в квартал будет бонус в размере 200 рублей x 3 = 600 рублей при условии, если будешь хорошо работать. Выходит, что МЕНЕДЖЕР НЕ ВЕРИТ, ЧТО ЧЕЛОВЕК БУДЕТ РАБОТАТЬ! Получив такую схему оплаты труда человек чётко понимает формулу F->R->B и оптимизирует работу не исходя из ориентации на результат, а ориентируется на достижение бонуса. Не говоря о чувствах человека, когда его сосед получил бонус, а он нет. В результате мы получаем: команду зависливых людей, ложь, подлог, забивание на цели проекта и команды, текучку и провал.

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

Что делать? Думайте сами :) А можете спросить у команды, раз вы уже сделали правильный шаг :)

Или зовите меня, будем вместе проводить профилактику :)

PS. Другой вопрос. Если у вас есть лишнее бабло, и вы решаете так от него избавиться в надежде поднять лояльность сотрудников. Бростьте это неблагодарное дело. Просто сделайте зарплату выше средней по рынку. Меня бы разбирало чувство собственной значимости, когда каждый месяц я за работу бы получал больше, чем средний работник на рынке... Поголовную безусловную 13-ую зарплату никто не отменял, как ежегодная прививка для поднятия настроения :) Но тут я ещё до конца не продумал :)

воскресенье, 1 марта 2009 г.

Адаптивная точка зрения

Это один из последних рефреймингов, который я проделал над собой (никакого нлп, просто рассуждал сам о себе), почему мне иногда хочется в форуме пофлеймить с народом :)

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

Иногда, когда я высказываю какие-то идеи в блогах либо в форуме, кто-нибудь обязательно найдётся и двинет непоколебимую теорию всего и вся. Он без сомнения в ней уверен, за ним куча соглашателей или просто он много пишет на форуме, и создался контекст, что это верное и правильное... А мои идеи, даже не идеи, а лишь доли сомнения... Когда я вижу напор, силу, непоколебимость... в глазах у меня всплывает другая картина... наша жизнь не более 100 лет... а собеседник с упором хочет эту бедную жизнь прожить придерживаясь только одной правильной точки зрения... конечно это здорово, если она ему приносит плоды (я бы уж точно не напрягался)... но если он один из тыщи, миллионов... миллион баранов на одном мосте... под названием земля... и я один из них. не понятно, зачем в такой перспективе - краткости пребывания на мосте - так сильно упорствовать в какой-то точке зрения... и поэтому интерес у меня к диалогу пропадает, так как я не хочу останавливаться на одной идеи и её опровергать/улучшать... когда тысячи других путей есть, которые нужно успеть осилить в этот миг, под названием жизнь.

пятница, 27 февраля 2009 г.

Зачем Story Points?

В дополнение к http://denismiller.blogspot.com/2008/12/story-points-vs-ideal-hours.html появилось несколько вопросов. Редакция отвечает :)

Мой посыл такой. Требования имеют разный размер. От большого до маленького. В зависимости от игры декомпозиции. Моё предложение и единицы измерений выбрать для разных уровней декомпозии свои. То есть

User Story - условная единица своя - Story Point
Tast - условная удиница своя - Task у.е. в простонародии часы идеальные :)

vsavkin: Запутанно и непонятно.
Значит, длину удава мы сначала оцениваем приблизительно в попугаях, а затем поточнее в метрах. Но следить за скоростью роста удава легче в попугаях, согласно вышенаписанному.
Где логика?
Зачем нам в двух единицах измерения оценивать? И зачем выбирать в качестве основной единицы попугая, размер которого не является константой, вместо метра, который стандартизирован, и можно точно измерить рулеткой?


Ответ простой:
1) удав (требование/юзер стори) меряется в условных удавках (функциональных точках/стори поинты),
2) попугай (таски) в попугайных условных единицых (условных единицах размера тасок - часы).

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

Как расстояния. Между городами в киллометрах. А между точками на листе в сантиметрах. Просто нам уже вдолбили в голову что соотношение между ними 1 к 100000. Так и размеры sotry point очень хорошо соотносятся с часами. Только нужно набрать статистику :)

А когда статистика приобретает глобальный масштаб - её называют стандартом :)

1. Почему в пирамиде фичи продукта выше User Story?
Должно быть наоборот - на основе User Story вырабатываются конкретные фичи. Собственно User Story нужны именно для того чтобы от общего представления о продукте с помощью конкретных описаний применений перейти к фичам продукта.

2. По ссылке "Об agile по-русски: User Stories" описаны фактически Use Cases, а не User Stories.


User Stories = история пользователя. Я как пользователь хочу пользовать ту или инную штучку. User Story маркер-напоминалка, которую можно расписать до Use Case.

Фича это сумма вариантов использования чего-то. Поэтому и выше поставлено.

Можно фичу называть User Story но очень крупную :) Которая требует декомпозиции. Кстати, User Story так же бьются на юзер-стори или таски. Критерий классно подсказан Сергеем Назаренко в одной из стади-групп по Agile: пока юзер-стори имеет бизнес-значимость - это юзер стори, как потеряла в результате декомпозиции - стала таской :)

Задавай ещё вопросов, попробуем найти истину :)

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

Обязанность Agile-коучера: фасилитация

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

Было бы здорово получить список тех практик, которые должен выучить коучер, а потом предложить команде. Вот давеча нашёл сайт, на котором собраны практики фасилитации :)

Facilitation comes from the latin facile, which mean easy. In fact, the role of a facilitator in a group setting is to “make things easy”. It involves planning, organizing, and setting or supporting rules and goals within such groups. It is my goal here to collect and share many of the tricks, techniques and practices that facilitators use in their work.


Более подробнее читайте на сайте: http://facilitationpatterns.org

А inquisitor_rus подсказал суперскую статью - http://ru.wikipedia.org/wiki/Consensus_decision-making

вторник, 24 февраля 2009 г.

Правильные разработчики

Интересный термин предложен Сашей Орловым - "правильные" люди. Я конечно у него спросил, что это значить. А пока он не ответил попытаюсь порассуждать.

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

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

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

В-четвертых. Не понятно какая цель приследуется разделив всех людей на правильные и неправильные. Разделить команду на хороших и плохих. Вместо того чтобы людей объединять менеджер вводит искусственное поле напряженности. Даже если он это не высказывает но принебрежительный взгляд на одного разработчика и часовые беседы с другим сделают своё дело. Сформируется потенциальное поле "правильности". Народ будет осозанно и неосозанно либо одобрять (те кто "правильные") и не одобрять (тех кого обделила барская рука). Это создаст основу для будущих конфликтов как явных, но и опасных - неявных. А ещё хуже - эта куча народу лобает ОДИН продукт. Как ребята, которые действуют несогласовано, желания, цели и чувтсва которых задеты могут сделать ЦЕЛЬНЫМ продукт. Вывод: продукт можете сразу выкидывать - качества там не будет, пока в вашей голове живёт желание оценивать и разделять.

И это только аргументы на горячую голову. Если подумать - то вообще лучше не думать :)

Что же делать? Повышать осведомлённость, присутствие, вовлеченность, стремление к целям, взаимозависимость, эмпатия и взаимопомощь. Даже слабое звено делает команду командой, а не кучкой нанятых людей. Становится вопрос, а слабое ли оно? Про силу слабых звеньев можете посмотреть в тренингах по "командообразованию" :)

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


И как я понимаю сделав вывод ты уже им руководствуешься. Полностью исключив возможность человеку достичь большего. Только вот так просто исходя из твоего субъективного “правильного”. Кашмар, чесслово! :)

Александр Орлов: Возможности наблюдать себя со стороны - я не имею.


Объясню. Исходя из некоторой совокупности критериев ты делаешь оценку людей. Почему ты эту совокупность критериев не можешь наложить на себя?

В общем я понял, что истина где-то рядом и написал:
Денис: Жаль. Только началось то, что настоящим командам не хватает… Открытые чувства и эмоциональный интеллект…
Любой вопрос можешь задавать мне - я отвечу.


На что получил странный ответ:

Александр Орлов: Денис, за выдающиеся коммуникативные навыки вынужден тебя забанить. Комментарий, который вывел меня на чистую воду и показал недостаток эмоционального интеллекта, тоже убрал, извини, пожалуйста.


Я так и не понял, как и кого я вывел на чистую воду, и у кого недостаёт эмоционального интеллекта :)

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

Скажи, что тебе задело и я скажу, что я подразумевал :)

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

Кстати по поводу зрелости хорошая информация лежит здесь: http://denismiller.blogspot.com/2009/02/blog-post.html

В общем я не понял почему Александр решил "Вот на этом предлагаю дискуссию и завершить. Этот сайт не для обсуждения моей личности, копания в моей жизни или игры в “убей автора”. Мне это не интересно. Full stop.".

В общем, я полностью потдеживаю работу Александра, но считаю её можно улучшить выкинув этот термин - "правильные" разработчики :)

Принципы здравого менеджмента

Очень поучительный список принципов для менеджера. Каждый пункт требует отдельного раскрытия я думаю. Мне очень понравился четвертый принцип :) К пункту пять я бы ещё добавил, что и хорошие вещи протухают, если к ним не обращаются :)

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

The Principles of Common Sense Project Management

1. The process of Project Management is basically the same on EVERY project; it is the intangibles that make the difference in the success of the project.
2. LEADERSHIP is not synonymous with Project Management.
3. CREATIVE PROBLEM SOLVING is essential to Project Management. The SIMPLEST answers are usually the best one.
4. If you are not part of the SOLUTION, then you are part of the PROBLEM.
5. Bad news is not like an expensive bottle of wine; it DOES NOT get better with age.
6. Communication should never be MANAGED from stakeholder to stakeholder.
7. Of all of the project constraints … TIME controls the Cost, Quality, SOW (Statement of Work) and Customer Satisfaction.
8. It is better for your project, if the TECHNICAL EXPERT is not the Project Manager.
9. Your TEAM is the most important resource you have on a project.
10. Documented Lessons Learned are MANDATORY after the closure of a Project.

Common Sense is not common; otherwise more people would have it !!


Copyright © 2009, A.Sloan Campbell, MBA, PMP, P.Mgr, F.CIM
Additionally: if you don't have time to do it right...how will you find the time to do it over? - Tim Bidlack PMP

Оригинал: ссылка

понедельник, 23 февраля 2009 г.

Битва гигантов Spolsky vs Robert Martin

Интересное пришло сообщение от Асхата. Гиганты программирования и гуру всего и вся столкнулись в битве за TDD и PPP.

Начало положил подкаст Scott Hanselman. Не нам их судить, но ряд цитат приведу:

Spolskyit seems to me like a lot of the Object Oriented Design principles you're hearing lately from people like Robert Martin and Kent Beck and so forth have gone off the deep end into architecture for architecture's sake.

Kent Beck: He has worked hard to become famous, but he hasn’t figured out that along with notoriety comes responsibility. He is a bright, experienced guy and certainly capable of more accurate, thoughtful, and constructive conversation.


На что ответили все мною почитаемые гуру: Кент Бек, Рон Джефрис.

В общем не понятно, почему Спольски подлил эмоционального огня. Видать его книги стали плохо продаваться. И по его выпадам видно, что он не читал книгу Роберта Мартина, и подавно Кента Бека. Жаль там очено много идей на фоне которых его эмоции просто детский лепет... Но устами младенца :)

К слову:
Роберт Мартин - человек, который собрал ребят в далеком 2001 году и они сделали AgileManifesto. Он так же автор книги про PPP. В ней кстати достаточно ошибок и приколов, которые мы очень хорошо обсудили и посмаковали над Design Patterns Study Group.
Кент Бек - стоял в основе Desing Patterns и идеи wiki-сайтов. Автор eXtreme Programming.

Развитие сотрудников

Александр заметил предложил тему за развитие персонала. Но мне показалось он немного односторонне осветил этот вопрос переложив ответственность за развитие не на HR-отдел или линейного менеджера (скрам-мастера), а на самих сотрудников.

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

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

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


А развивать нужно всех - не судите и судимы не будете. А правила 40 часовой недели никто не отменял. Хотя если менеджер мне выходной оплатит. А так очень нехорошее предложение. Я бы послал такого менеджера куда подальше :) Пусть сам в выходные работает, даже под эгидой тренинга. Исключения конечно составляют Agile-тусовки за счёт компании.

Продукт - творчество командного интеллекта. А если одна часть его развивается, а другая пожизненно пребывает в зачаточном состоянии. Ведь все ребята программят и делают вклад в продукт. А как наполовину развитый командный интеллект сможет выдать качественный продукт?

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

Блин, спеллчекер нужно поставить какой-нить :)

воскресенье, 22 февраля 2009 г.

Книги о качественном кодирование

Случайно решил проверить на сафари какие книжки от Diomidis D. Spinellis. Оказалось он написал ещё две новых! Теперь у этого автора три книги, которые рекомендую для чтения:





Diomidis Spinellis. Code Quality: The Open Source Perspective. Addison Wesley, 2006. ISBN 0-321-16607-8.

Diomidis Spinellis. Code Reading: The Open Source Perspective. Addison Wesley, 2003. ISBN 0-201-79940-5.

Diomidis Spinellis and Georgios Gousios. Beautiful Architecture: Leading Thinkers Reveal the Hidden Beauty in Software Design. O'Reilly, 2008. ISBN 9780596517984.

Кстати, если тема книжек пошла, то хотелось бы добавить ещё пару ссылок на тему качественного кода:

Code Craft, 1st Edition by Pete Goodliffe
Clean Code: A Handbook of Agile Software Craftsmanship by Robet Martin


Agile Software Factories by Damon Wilder Carr

In this book I attempt to show the reader my experiences on projects wanting to go beyond Agile, and actually leverage Factories. The Agile approach is a natural fit in describing a process for factories (something few have fully done and I attempt to do).

To be more specific, I show my experiences in applying Agile practices in a software factory environment (mostly in the factory construction phase but also in the use of the factory) with great success. Many taking a factory approach can slide back down into a ‘waterfall’ type mentality due to the misconception that ‘factories are not iterative’. In fact they must be in almost all cases.

I will also discuss the commonalities between factories and broader ‘Lean Manufacturing’ concepts. A full example will be presented with hands-on examples. This is not so much a ‘theoretical’ book as one which explores what can be done today using the technologies available.

Also explored (in addition to much more) is the idea that Software Factories for the Agile-enabled company today will have a smaller learning curve then others in adopting factories.
---

На горизонте появилась новая книга, которая упоминалась ещё в 2007 году (но может это только реклама).
Ссылка на магазин. К сожалению пока никакой информации о книге нету. Будем следить за событиями :)

Об опыте автора на linkid.
Блог автора: здесь
Его проект на codeplex: SOA Framework for Silverlight/WCF Cross-Platform (This code is used in our five day master's class immersion in 'Domain Driven .NET using C# 3.0'.) и хорошое известного модуля статистики для Cruise Control (ссылка)