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

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

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

«У меня есть идея, возьми клавиатуру».

Для традиционного спаривания мы бы сказали: «У меня есть идея, дай мне клавиатуру».

Подготовка к сопряжению

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

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

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

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

Кому следует водить машину, а кому ориентироваться?

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

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

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

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

Кто бы ни знал, что делать, будет ориентироваться. Когда я начал совместное исследовательское тестирование с разработчиком, я был навигатором. Когда я начал объединяться с разработчиком в модульных тестах, я был Драйвером. Со временем, выполняя обе задачи, я возьму на себя обе роли. И я буду расти в направлении навигации, так что первую идею, которая у меня есть, что я мог бы направить нас, я добровольно реализовал.

Есть три триггерных варианта смены ролей:

  • Своевременно: вы можете регулярно менять роли. Начните с более коротких времен и увеличивайте время по мере того, как вы вырастете, чтобы работать в паре.
  • По задаче: вы можете поменять роли, когда какая-то задача будет выполнена. Как и в случае с типичной парой в стиле пинг-понг, вы меняете так, чтобы один из них создавал модульный тест и другие инструменты, и оба могли выполнять оба типа задач.
  • По идее: вы просто меняете, когда водитель чувствует, что есть направление, в котором он хотел бы двигаться. Это все равно что сказать: «Эй, у меня есть идея, возьми клавиатуру сейчас».

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

Водитель: чем заняться

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

  • Отодвиньте. Выразите, что вам нужно изменить способ навигации навигатора. Вы можете изменить поле, в котором вы работаете, сделать его больше, чтобы дать вам больше свободы, или сделать его меньше, чтобы было понятнее, что делать. Вы можете понять, что вам нужно попробовать что-то еще, и выразите это в вопросах. Ключ должен быть активным даже при вождении.
  • Импровизируйте. Навигатор дает вам поле, в котором вы работаете. У вас есть выбор, как вы можете что-то делать. Вы выбираете то, что, по вашему мнению, лучше всего подходит для текущего контекста, и драйвер предоставляет вам более подробную информацию, если они не согласны с вашим выбором. Импровизация - это добавление вашего интеллекта к сотрудничеству.
  • Переключить уровень абстракции. Если вы чувствуете, что уровень абстракции навигации может быть выше или ниже, поговорите с навигатором. Если навигатор использует слишком низкий уровень, вы можете присвоить ему более высокий уровень. «Вы можете просто сказать мне запустить его», когда навигатор сообщает вам сочетание клавиш. Если навигатор использует слишком высокий уровень, вы можете спросить: «Скажите мне, что набрать?» или «Где это находится?». Измените уровень абстракции и включите общий опыт обучения, чтобы лучше работать вместе.
  • Задавайте вопросы. Если вы чувствуете, что что-то не так, спросите об этом. Вы можете просто ввести «Вы уверены?» чтобы не дать навигатору задуматься о происходящем. Задайте конкретные вопросы, чтобы ответы были краткими. Вы можете попробовать проверить вопросы, чтобы прояснить, что происходит прямо сейчас: «Кажется, мы используем zip-add-object для регулирования температуры, верно?». Вы можете проверить, правильно ли вы сделали то, что вы понимаете: «Я думал, что база данных принимает только одно соединение за раз. Почему мы сделали два? ». Вы можете подсказать, куда идти, не решая за навигатора: «А не сделать ли это сначала?». Избегайте общих вопросов почему и работайте, чтобы избежать длинных объяснений.
  • Инициировать переключение ролей на идею. Когда вы понимаете, что нужно делать, и думаете, что сможете лучше справиться с этой задачей, инициируйте смену ролей. Вы можете переключаться ролями по идее, не дожидаясь таймера. Или вы никогда не сможете использовать таймер и включать задачи.

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

Под тем, что мы на самом деле делаем как водители, нужно учесть несколько точек зрения:

  • Доверяйте своему навигатору. Оставайся в моменте. Будьте готовы работать с частичными знаниями. Ваш навигатор, вероятно, всего на шаг впереди вас.
  • Просто попробуйте. Вы всегда можете сделать это обоими способами, и в итоге получится третий, основанный на обоих. Учитесь на практике. Учиться во время работы так же важно, как и получить конечный результат от процесса.
  • Постоянная рефлексия. Выясните, что с вами происходит. Сосредоточьтесь на обучении. Следуя своему навигатору, вы занимаетесь обратной инженерией. Навигатор постоянно что-то рассказывает. Вы получаете очень тонкое и узкое представление о системе. Вы можете начать много собирать вместе, и это даст вам возможность поразмышлять над тем, что вы изучаете индивидуально в качестве водителя со своей парой.
  • Терпение. Дайте отношениям время. Это хорошо с обеих сторон, но особенно полезно для водителя, который работает с неполными знаниями.

В работе водителя есть две основные ловушки.

  • Мышление. Вы думаете внутри коробки или меняете коробку. Если слишком далеко задуматься о водителе, навигатор сосредоточится на том, чтобы вернуть вас к текущей задаче.
  • Тишина. Это не открытая коробка, чтобы делать все, о чем вы думаете. Если вы хотите взять на себя инициативу, поменяйтесь ролями, но старайтесь не идти своим путем с тишиной.

Навигатор: что нужно сделать

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

Как навигатор, вы должны уделять внимание трем основным задачам:

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

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

Стиль программирования имеет значение

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

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

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

Дилемма уровня абстракции

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

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

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

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

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

Составление списка дел

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

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

Выразите вкратце идею того, что вы делаете

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

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

Немедленная обратная связь

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

Закрытие мероприятий

Признавая время для переключения

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

Сделайте шаг назад и подумайте о том, что вы делаете

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

Ретроспективы

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

Завершая это словом предупреждения

Мне очень нравится изучать динамику этого стиля объединения. Но есть история, которую я узнал, и я нахожу ее очень характерной для этого стиля.

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

Пока пара наслаждалась, среда, которая не распознавала другой стиль пары, делала ставку на то, какой из двух в паре уйдет первым.

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

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