Як можна досягти та підтримувати потік під час парного програмування?


17

Потік - поняття, запроваджене Михайлом Циксентміхалієм; коротше, це означає потрапити в "зону". Ви відчуваєте себе зануреним у своє завдання, зосередженим; завдання може бути важким, але водночас складним. Коли люди досягають потоку, їх продуктивність збільшується. Програмування вимагає великого розумового зосередження, тому що нам часто потрібно перемикати кілька речей у нашій свідомості одразу. Багатьом подобається працювати в тихому середовищі, де вони можуть спрямувати всю свою увагу на завдання. Якщо вони перерваються, для повернення в потік може знадобитися кілька хвилин або навіть години.

Я розумію, що існує практика в гнучкому розвитку та екстремальному програмуванні, що називається парним програмуванням. Це означає, що ви помістите всю команду з розробки програмного забезпечення в одну кімнату, щоб спілкування було безперебійним. Ви пишете код зі своєю парою, тому що таким чином ви отримуєте миттєві огляди коду та менше помилок.

У мене завжди були проблеми з досягненням потоку під час виконання парного програмування через постійні перебої. Я глибоко замислююся над проблемою, то раптом хтось задає мені питання від іншої пари. Мій потяг думок загублений.

Як можна досягти та підтримувати потік під час парного програмування?


4
Я не згоден, що інші пари можуть просто переплутатися в будь-який час.
JeffO

3
Альтернативою Flow є визначення і збереження позиції на Балкерському піку . Для цього може знадобитися велика кількість експериментів, часу та шотландського крою.
Hovercraft Full Of Eels

Мені неприємно читати це питання, коли мені слід писати код. Якби я програмував пару з кимось, я б не відкрив це питання, щоб прочитати його, і, імовірно, став би більше робити.
TehShrike

Відповіді:


15

Редагувати: Відмова - Ось як я визначаю "зону": A state of extreme focus, in which one is able to understand how many intricate details connect together, regardless of whether these do so elegantly (or simply) or not.

Я намагаюся уникати цього стану, тому що, хоча я можу створити правильний код у зоні, мені та іншим розробникам буде важко зрозуміти його згодом. Коротше кажучи: читання коду, записаного в зоні, часто може вимагати, щоб читач знаходився в зоні. Це обмеження - моя проблема.

Є чудова глава про «Чистий кодер», де дядько Боб переконливо пояснює, чому «потрапляння в зону» - неправдиво погана ідея.

Ось, можливо, краща альтернатива, ніж "потрапляння в зону": подумайте прямо і подумайте спокійно та професійно, що ви робите. Спілкуватися. Діліться думками зі своїм партнером. Визначте реальні проблеми. Обговоріть можливі рішення. Можливо, ви не відчуваєте надмірного зосередження, але ви, ймовірно, приймете хороші рішення та доступні конструкції.

Якщо ви з вашою парою-партнером можете обговорити проблему без того, щоб ви були вкрай зосереджені, то, швидше за все, ви вирішили цю проблему до її більш простого характеру. Це говорить про те, що ви зможете зрозуміти це знову, коли вам потрібно.

На зворотній стороні ... Якщо вам просто потрібно трохи часу в спокої, щоб випрямити голову (ми це робимо іноді), просто візьміть її. Зберіть свої думки разом. Спочатку вирішіть проблему в голові.

Але річ у тому, що якщо ви це зробите - не використовуйте цей час для написання виробничого коду. Натомість пограйте з зразком коду та прототипів. Спробуйте розібратися в проблемі, не думаючи над рішеннями. Як тільки ви все зрозумієте і записали, обговоріть це зі своєю командою та парним партнером, або навіть гумовою качкою на вашому столі. Якщо ви все ще не можете сформулювати це, або вони не можуть зрозуміти його, тоді уточнюйте свої ідеї. Після того, як ви все це прибили - інтегруйте всю цю думку та зразок коду в реальне робоче рішення.


2
Я міг би схвалити мільйон разів, якби міг, професіонали навчаються працювати, чи є вони "в зоні" чи ні. Професіонали можуть працювати з людьми, спонукаючи їх ставити запитання, із шумом навколо них, а також разом з іншими людьми насправді бесіди про те, як робити будь-яке завдання, над яким вони працюють разом. Мені не цікаво працювати з примадоннами, які повинні мати спеціальні робочі умови, щоб сконцентруватися.
HLGEM

7
@HLGEM - Я не думаю, що доступ до місця, де потрібно, не надто багато, щоб просити.
JeffO

2
@HLGEM: Звичайно, професіонал повинен мати середню продуктивність за середніх умов праці. Але з іншого боку, було б в інтересах роботодавця дозволити цю ж професійну роботу дуже цілеспрямовано, оскільки це може надзвичайно підвищити продуктивність та якість.
Джорджіо

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

2
@Yam Marcovic: Це не така продуктивність, яку я мав на увазі (створюючи більше коду нижчої якості): якщо хтось використовує ізоляцію як привід робити те, що хоче, вони не будуть більш продуктивними. Для мене потік не означає возитися, а потім записувати багато коду, а скоріше систематично працювати над конкретною задачею, не перебиваючись іншими, не пов'язаними між собою завданнями.
Джорджіо

5

Парне програмування іноді вимагає періодів ізоляції від партнера.

Приклад

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


Чому реалізація не повинна здійснюватися в парному програмуванні?
пробуй-нарешті,

5

Я виявив, що існує невеликий клас проблем, для якого працює парне програмування. Наприклад, якщо ви працюєте над продуктом на різних платформах, а хлопець Winders реалізував функцію, яка вимагає специфічного коду ОС, він може допомогти хлопцеві Mac реалізувати ту саму функцію на коді Mac, коли хлопець Mac працює.

Однак, на моєму досвіді, пара програмування незвичайно призводить до чистої втрати продуктивності. Так часто виникає враження, що ми платимо двом розробникам, щоб виконати роботу одного.

Так, це зменшує жахливу можливість того, що розробник може зробити перерву в обміні ставок протягом робочого дня.

ІМХО було б дешевше для тих компаній, які хочуть заарештувати своїх розробників, щоб просто з’єднати кожного розробника з приватним охоронцем, щоб стати за розробником і вдарити його в паличку, якщо він коли-небудь сповільнить або намагатиметься досягти максимальної кількості веб-сторінка.


1
Суть парного програмування - це не зупиняти один одного від збивання; це навіть не було б ефективним. Справа в тому, щоб переглянути код у режимі реального часу.
Лев

3
@Lev: Перегляд коду перед вступом набагато ефективніше: огляд займає від декількох хвилин до півгодини, а не цілий робочий день.
Джорджіо

@Giorgio Не зовсім. Наприклад, може статися так, що ви робите помилку, а потім витрачаєте час на її ловлення, і лише після цього перегляньте свій код і виконайте його. Якби ви програмували пару, ваш партнер помітив би помилку і заощадив час налагодження.
Лев

1
@Lev: "Якби ви програмували пару, ваш партнер помітив би помилку і заощадив час налагодження.": Немає гарантії, що помилка помічена ні при програмуванні пари, ні в оглядах коду. Наприклад, після шести годин парного програмування людина може бути настільки стомленою, що можна легко не помітити помилок.
Джорджіо

Очевидно, що гарантії немає, але це може допомогти.
Лев

3

Як розробник, який намагається потрапити в зону, ви намагатиметесь ізолювати себе якнайкраще, щоб комфортно та зрозуміти свій розум. Чому парне програмування має бути різним?

Ви та ваш партнер повинні знайти середовище, що викликає зону, яке працює для вас обох. Можливо, це вимагатиме компромісу з деякими речами, але головний мій момент полягає в тому, що оточення пари повинно бути схожим на сольне. Вимкніть зовнішній світ. Пара програмує разом; інші пари (взагалі інші колеги) не повинні перебивати (крім критичних проблем, що роблять, що ти робиш).


0

Потік - це чудовий стан, коли ви знаєте точні кроки для вирішення проблеми. тобто небагато невідомих. Ви сидите в тихому куточку і забиваєте рішення. Однак більшість проблем / історій / особливостей не дуже зрозумілі, коли ви починаєте їх програмувати. Завжди буде "розрив" між очікуваним кінцевим станом і тим, як ваш мозок "спланував" це. Ви дізнаєтесь багато речей, коли насправді "зробите це". Ваш мозок жонглює

  • Дизайн коду

  • Введення тексту

  • Дізнайтеся про нові речі про домен та код

Коли я програмую наодинці, я намагаюся збалансувати ці речі. Я схильний потрапляти в "кролячі нори", де мої затоплені кошти заважають мені зробити крок назад і подивитися на велику картину і змінити дизайн. Мені також важко поговорити з уявною гумовою качкою або справжньою з цього приводу. Я врешті-решт у «потоці».

Хоча я продуктивно програмую пару, я отримую чергування періодів набору тексту з наступними періодами мислення та роздумів. Тут виявляється багато прихованих речей, і може з’явитися інший дизайн. Якщо я заходжу в кролячу нору, мій партнер по пару може витягнути мене з неї. Якщо говорити / пояснювати щось справжній людині, це чудовий ефект, щоб зробити ваші думки яснішими. Іноді я сумую за "потоком", але думаю, що я вкладаю набагато більше в свою команду, коли парую програму, ніж коли програмую соло. Зрештою програмування! = Набрати. Програмування відбувається в мозку, а краще програмування відбувається, коли два мозку співпрацюють і критикують один одного.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.