суббота, 16 октября 2010 г.

Что читаю

Решил опубликовать около-профессиональные блоги*рассылки, которые сейчас читаю. Через некоторое время будет интересно оценить тренд в подписках. :)

http://googlerussiablog.blogspot.com/atom.xml

Без комментариев :)

http://company.yandex.ru/news/news.rss

Тут тоже все понятно

http://blogs.sun.com/main/feed/entries/atom?tags=projectcoin

Новости про Project Coin для JDK 7. Чтобы быть в курсе

http://www.javaworld.com/features/index.xml

Статьи с одноименной Java конфы

http://www.joelonsoftware.com/rss.xml

Широкоизвестный в узких ИТ-кругах блоггер

http://martinfowler.com/bliki/bliki.atom

Мартин Фаулер. Сейчас в основном пишет про свою новую книжку и про конференции в которых учавствует

http://nighthacks.com/roller/jag/feed/entries/atom

James Gosling. Папа Java. Главным образом идеологические новости вроде "Оракл - жадные хапуги" и "Даешь Java моей мечты". Также всякие интересные истории из жизни Sun.

http://blogs.sun.com/theplanetarium_ru/feed/entries/atom

Русскоязычные новости про Java от Sun. Давно уже не обновлялся - наверное загнулся

http://yakov-sirotkin.livejournal.com/data/rss

Бывший Яндексовый программист, основатель JUG.ru, Java-программист, ну и просто хороший вентилятор

http://codingmatters.blogspot.com/feeds/posts/default

Мой бывший коллега. Апологет test driven development и agile. Просто хороший спец

http://smart-haos.livejournal.com/data/rss

Еще один человек из Яндекса. Тим-лид. На тему менеджмента и тим-лидерства и пишет

http://d-zh.livejournal.com/data/rss

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

http://kholodova.livejournal.com/data/rss

Project manager оттуда же.

http://aivanov.livejournal.com/data/rss

Циничный ИТ-менеджер из Borland, теперь из JetBrains. Пишет про программирование и ИТ-менеджерство

http://dolzhenko.blogspot.com/feeds/posts/default

Коллега пишет про ФП и иногда копипастит задачки с braingames.ru

http://feeds2.feedburner.com/stephansblog

Опытный разрабочик о работе программиста во всех ее аспектах

http://just-developer.livejournal.com/data/rss

Белорусский Java программист работающий в Лондоне. Понравился во здравым комментам в ru_java


Ну вот и всё. Если поделитесь своими - буду рад.

воскресенье, 3 октября 2010 г.

Peopleware - команды

Продолжение впечатлений от Peopleware

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

Команда - понятие скорее спортивное - там просто правила игры такие, что всем вместе надо добиваться общей цели. В то же время, конкуренция внутри может достигать космических масштабов. Как пример можно взять любой чемпионат мира, где какая-нибудь команда "без звезд" обыгрывала "дрим тим" апологетов футбола. Просто потому, что при слабом составе ни на что, кроме как на командную работу рассчитывать не приходится. Это как 2+2=5 в слабой персоналиями но слаженной команде, и 3+3=3 в звездной но конкурирующей (за мяч) команде.

Другое дело с оркестром. Одну и ту же сонату, в общем-то, может сыграть как квартет, так и большой симфонический оркестр. И скрипач никак не может отобрать работу у виолончелиста (ну только если он и на виолончели играть может), а альтист - у скрипача. Если же кто-то начинает "лажать" - общий результат сразу страдает, причем сильно. Квартет может играть сам, но большой оркестр - только с дирижером.

Теперь - что вам ближе как участнику группы программистов? Я бы точно "ушел" в оркестр.

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

Кроме того, авторы резюмируют действия направленные на разрушение команды:

  • недоверие начальства к команде (ну-ка, объясни мне в деталях как ты будет решать эту задачу)
  • бюрократия (сначала получи подтверждение у господина Х)
  • физическое разделение
  • дробление рабочего времени (40% своего времени делай эту задачу и 60% другую)
  • снижение качества продукта (давайте выпустим как есть - все равно никто не заметит)
  • идиотские сроки сдачи (9 месяцев на ребенка - это не годится. Давайте это будут 2 женщины - но за 4,5 мес)

Тут правда хочется плакать. В связи с нашей реструктуризацией, наша команда имеет 4 пункта и 6ти. Правда месяца три назад их было все 6.

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

А вот что нужно делать, чтобы команда становилась все более "оркестром":

  • возводить качество в ранг культа
  • создавать многочисленные промежуточные финиши, приносящее удовлетворение
  • внушать чувство элитарности
  • допускать и поощрять неоднородность
  • сохранять и защищать успешные команды
  • раздавать стратегические но не тактические указания

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

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

Осталось определиться с чего начать...

суббота, 2 октября 2010 г.

Peopleware - корпоративная культура

Продолжение впечатлений от Peopleware

Корпоративные делишки

  1. Отношения к корпоративным ценностям и целям. Цели организации постоянно критически рассматриваются сотрудниками этой организации, и большинство этих целей оценивается как ужасный бред. На дворе 2010 год, а в коридорах всё также висят плакаты "Даешь произвотельность!"... Смешно и грустно.
  2. Недавно был свидетелем зарождения нового как любят говорить "горизонтального" сервиса в банке. Назвали его "Enterprise Architecture". Не буду вдаваться в подробности смысла существования сего подразделения, но подавляющему большинству он остается непонятен. Или каждый его понимает по-своему. Но суть не в этом. Как часть расходов бюджета этого подразделения были изданы плакаты и заказаны футболки с логотипом. Прямо-таки пример из книги (напомню 85 год написания): "Эти так называемые мотивирующие аксессуары (включая кружки для кофе со слоганами, плакаты в рамках, булавки, брелоки, награды) символизируют победу формы над смыслом... Мотивирующие аксессуары настолько лживы, что у большинства людей от них мурашки по коже"
  3. Переработки или сверхурочные. "Мы работаем сверхурочно не для того чтобы сделать работу, но для того, чтобы оградить себя от обвинений, когда работа не будет сделана в срок". Абсолютно согласен. Никак не вяжутся переработки человека с его способностью сдавать дела в срок.

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

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

Peopleware - управление проектами

Почитал классическую книжку из тех, которые пришли к нам из 80х об управлении проектами.

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

Моменты которые меня зацепили - касающиеся управления проектами.

Управление проектами

  1. Ошибки и люди, которые их совершают. И отношение к ним. Если в команде за ошибки сурово наказывают, возникает достаточно тяжелая атмосфера. Люди будут занимать оборонительную позицию в контексте рисков и инициатив. Идея в том, чтобы минимизировать вред который ошибка причиняет и максимизировать опыт который из нее извлекается. В такой среде каждая ошибка - это практически вклад в успех.
  2. Управление людьми - не пытаться сделать их одинаковыми и взаимозаменяемыми в производственном процессе (как на заводе), а уметь использовать их уникальность. Очень тонкий момент. Насколько часто хочется "сделать всех взаимозаменяемыми" настолько же часто хочется чтобы "каждый имел свою специализацию". Тонкий и холиварный момент...
  3. Отношение к качеству. Профессионализм программиста не позволяет сдавать продукт с низким качеством. С другой стороны, на идеальное качество уйдет бесконечно большое время. Продавливание сдачи продукта с качеством, которое не удовлетворяет программиста обычно отражается на его самооценке и мотивации. Тонкий момент... С другой стороны, те кто готов в конечном итоге платить за качество большую цену, для них оно  в конечном итоге ничего не стоит.
  4. Давление начальства на ход выполнения проекта. Оказывается "проекты в которых шеф не оказывал временного давления вообще ("Разбудите меня когда будет готово"), характеризовались самой высокой производительностью". Например с этим у нас сейчас тяжело. Каждый день разработчика кто-нибудь да спросит (причем в синхронном режиме по телефону / мессенджеру / лично): "Как там у нас дела? Как сроки?" Думаю давление можно и нужно сводить к минимуму путем асинхронной отчетности (как я её называю) - например через JIRA.
  5. Производительность разработчиков и факторы которые на ее влияют. Оказывается, язык значения не имеет (опыт 84-85 годов). Склонен согласиться с этим. Не думаю, что ОО-дизайн программы на Java будет как-то отличатся по времени от С++. При условии достаточного профессионала с обеих сторон. Также не имеет значения опыт, в определенных границах (от 2х до 10 лет). И, главное, зарплата - лучшие получали всего на 9% больше худших (при двукратно лучших результатов). Теперь финансовое  стремление нанимать звезд.
  6. Эффект Готорна. "Люди работают лучше когда пробуют что-то новое". Подписываюсь 
  7. Отличная мысль по поводу экспериментов и пилотов: Не экспериментируйте более чем с одним технологическим аспектом в пределах одного пилотного проекта.

Продолжение следует...


воскресенье, 15 августа 2010 г.

Проактивность

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

А. и Б. Стругацкие. Сценарий к к/ф "Сталкер"

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

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

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

  • рефакторить, то что его давно раздражало 
  • сочинять новый фрэймворк
  • писать все "с нуля", чтобы когда-нибудь в один прекрасный момент это выпустить
  • прикручивать новомодную технологию / фреймворк, которую так давно хотелось попробовать
  • бросаться в неопределенные академические изыскания

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

А теперь представим что в одной команде оказалось больше одного такого "проактиватора". Если в команде / продукте есть определенные проблемы, наверняка оба заметят их и начнут решать. Параллельно. Причем, наверняка разными способами.

Приходим к выводу что "проактивные" в том смысле в каком описано выше, это "неэффективные". Потому что упущен главный момент - коммуникация.

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

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

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

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

Другая же часть оценивала ситуацию по-другому: "Мы не слышали, что он хотел до нас донести", "Мы должны ему помочь с его новой зоной ответственности", "Нам нужно принимать во внимание его мнение, пусть оно даже нас не устраивает", "Мы должны дать ему понять, что он такой же как и мы, и мы ценим его так же, как и всех остальных".

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

Будьте проактивны - это интересно