Motto

В тихом саду здравомыслия
Пусть на вас постоянно падают
кокосовые орехи пробужденности.
Чогьям Трунгпа РИНПОЧЕ


Версия для мобильного


воскресенье, 2 августа 2009 г.

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

команда =)Вопрос о том, работают ли Delphi программисты в команде волнует меня давно. И если работают то как? Причина в том, что во всех местах где мне доводилось работать, Delphi программисты работали поодиночке. Каждый над своим проектом. Максимум – один из программистов заведовал общей библиотекой компонентов.

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

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

На этой неделе мы сделали первый шаг к совместному использованию общего кода и в других проектах.

Мне понадобилась одна функция, которую уже написал мой коллега. По сути, функция была универсальной, но реализована она была так, что тянула за собой весь проект. Простейшим вариантом было бы применить “классический приём Copy&Paste”, но это было как-то неправильно. Поэтому, я убедил коллегу провести реорганизацию кода в его программе, выделив нужный мне функционал в независимые классы, которые можно будет положить в общий репозиторий.

Мы впервые попробовали парное программирование. Сидя за одним компьютером мы изучали код и вместе принимали решение, о том, как удобнее разорвать зависимости. Всё это заняло чуть больше часа (примерно столько, сколько я набирал этот пост). Но главное, что первый шаг сделан.

Кстати

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

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

А пишу я об этом затем, что несмотря на очевидность выхода, почему-то никто попытался вернуться к общим корням. Такие дела.

И самое главное – ради комментариев. Так-то. =)

10 комментариев:

  1. Еще бы и примеров побольше... Что было, как стало - каково впечатления от работы (свои и других членов команды)

    ОтветитьУдалить
  2. Слушай, а у Вас в конторе не только Delphi-программисты работают?

    Если да, может есть совместные проекты? Часть на одном ЯП, часть на другом. Было б интересно услышать как там дела обстоят...

    ОтветитьУдалить
  3. А чтонибуть типа StarTeam пробовали?

    ОтветитьУдалить
  4. У нас на работе один проект на дельфе разрабатывается 4 программерами. Пока что (как минимум 4 года пока я работаю) спасает MS Source Safe

    ОтветитьУдалить
  5. В большинстве случаев я работал в команде 2-3 человека.Более того, за последние года три нам попадались "мервые" проекты. Т.е. их уже до нас кто-то делал, а мы их потом реанимировали и доводили до ума.
    Вот в этом случае системы контроля версий - самое оно.

    Но бывало и иначе...
    Когда делали проект с нуля.
    Садились вместе, максимально дробили проект по функционалу.
    Выделяли функции (классы и т.д.)
    Опять же вместе прописывали их заголовки и потом расходились писать начинку.
    Часто в процессе написания начинки функции дробились на более мелкие. Все это подписывалось и складывалось в отдельные модули.
    Очень удобно. Последние дни проекта диалоги между нами были примерно такие...
    - А это у нас есть?
    - Есть - возьми там-то
    - А это?
    - Там-то лежит...
    - Ну тогда я поставил на тест - пошли курить

    Вероятно, это вот действительно то, что называется "практики экстремального программирования"

    ОтветитьУдалить
  6. Кирилл, я не совсем понимаю какие примеры тут были бы уместны.

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

    ОтветитьУдалить
  7. 2 kemiisto:
    У нас чётко разделены программисты на Delphi и программисты Баз Данных. Программисты Баз Данных фактически ставят задачу, и создают таблицы и пишут процедуры, реализующие бизнес-логику, а Delphi-программисты пишут интерфейсную часть. В случае несогласий или споров, они разрешаются в диалоге.

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

    ОтветитьУдалить
  8. > Alexo комментирует...
    > А чтонибуть типа StarTeam пробовали?
    Мы используем Subversion и нас он вполне устраивает. Хотя, не все проекты регулярно коммитят изменения в хранилище. Сказывается тот факт, что каждый работает над своим модулем. Надеюсь что это вопрос времени.

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

    ОтветитьУдалить
  9. Участвовал и участвую в нескольких проектах. Использовались MS SourceSafe, Borland StarTeam и др. Сейчас в серьёзных проектах используется TRAC + SVN и MS Team Foundation, а в несерьезных распределённых - Mercurial.
    Mercurial в последнее время очень нравится, он быстро и в нужном направлении развивается, а интерфейс у TortoiseHg вполне достойный.

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

    ОтветитьУдалить
  10. Я сам распределённые системы ещё не пробовал, но замечаю, что они в последнее время стремительно набирают популярность.
    Про TortoiseHG ещё не слышал. Зато слышал про TortoiseGit, который является веткой TortoiseSVN переделанной для работы с Git. =)

    ОтветитьУдалить

Постоянные читатели