Инь и ян в разработке ПО. Диалектика программирования
«Если два коммуниста не могут договориться друг с другом, значит, один из них враг»© Л.Берия… Или оба, — добавлю я от себя.
В программировании много противоречий. Например, память/быстродействие, качество/трудоемкость, сопровождаемость/сроки. Но эти противоречия скорее технические, с которыми мы как-то научились справляться. А есть еще противоречия психологические, которые образуют целое лишь в своем единстве и служат залогом гармонии в проекте.
Когда-то давно я писал, что программист должен сочетать в себе легкость и полет таланта Моцарта с усидчивостью и скрупулезностью Сальери.
С одной стороны, программист работает с абстракциями. Ему приходится держать в голове гораздо больше абстракций, чем любому ученому. Абстракции сопутствуют программисту на всех уровнях разработки программы от описания ее целей до исполняемого машинного кода. И этих уровней могут быть десятки. И на каждом уровне абстракций их деталей становится все больше и больше.
С другой стороны, программист должен обладать маниакальной усидчивостью, сосредоточенностью и упорством для перебора всех возможных вариантов поведения своих абстракций и доскональной проработки всех деталей. Проработка должна быть абсолютно точной и не должна содержать ни одной ошибки, неправильного, лишнего или отсутствующего символа исходного кода (а это порой сотни тысяч и миллионы строк).
Но только этим, разумеется, действие второго закона диалектики «Единство и борьба противоположностей» в разработке ПО не ограничивается.Зарисовка из жизни. Два опытных программиста обсуждают очередную проблему.
Вася. Пытается решать проблему для самого общего случая, повторяется, рассматривая вопрос с разных сторон, пытается связать обсуждаемую проблему с другими.Петя. Постоянно задает вопросы: «А кто? А где? А когда? А ты это пробовал? А сколько раз? А это нам сейчас надо?»
Оба расходятся недовольные друг другом.
Вася: «Этот Петя просто тянет время своими глупыми вопросами! Он не хочет ничего менять! Лишь бы нечего не делать! «Петя: «Этот осел опять рассуждает о сферических конях в вакууме! Конкретные вопросы его не интересуют! Будет и дальше постоянно генерировать свои новые идеи! Лишь бы ничего не делать!»
Есть гипотеза, что большинство профессиональных программистов принадлежат всего двум типам личности по типологии MBTI: INTJ (Вася) и ISTJ (Петя). Часть из них руководствуются интуицией, а часть — здравым смыслом.
У каждого из этих типов есть свои достоинства и свои недостатки.
Те, которые iNtuition, любят решать новые, сложные проблемы. Больше любят осваивать новые навыки и знания, чем применять их. Склонны следовать своей интуиции, удачно или неудачно. Могут допускать ошибки в фактах. Любят работу с новаторским уклоном. Говоря о работе, сначала представляют ее общий обзор. Любят изменения своей работы, порой весьма радикальные. Действуют по настроению, в соответствии с приливами сил. Обращают внимание на новые возможности и интересные проблемы. Склонны усложнять решаемую задачу. Задаются вопросом о причинах сложившейся ситуации.
Другие, которые Sensing, любят решать проблемы, используя прошлый опыт и стандартные подходы. Любят применять уже освоенные навыки и знания. Склонны не доверять своей интуиции и игнорировать ее. Редко ошибаются в фактах. Любят работу с практическим уклоном. Говоря о работе, сначала сообщают конкретные детали. Предпочитают работать установившимся способом, оттачивая свое мастерство. Обычно действуют методично, продвигаясь шаг за шагом к цели. Обращают внимание на специфику каждой ситуации. Склонны упрощать решаемую задачу. Принимают существующую ситуацию как данность, с которой надо работать.
Поведение представителей обоих этих типов конструктивно. Более того на стыке их позиций возникает синергетический эффект, который обеспечивает более качественное решение проблемы.
А есть еще противоположности командных ролей по Белбину. Например, Генератор идей/Критик.
Генератор идей. Оригинальный мыслитель, который дает жизнь новым идеям. Независимый сотрудник с развитым воображением. Как правило, нетерпим к критике.Критик. Оценивает предложения и занимает позицию наблюдателя за продвижением. Не дает группе двигаться неправильным путем. Осмотрительный, бесстрастный, имеет аналитический склад ума. Может казаться равнодушным, незаинтересованным, иногда становится чрезмерно критичным.
Согласно исследованиям Белбина эффективная командная работа строится на единстве и противоположности ролей. Мотиватор/Вдохновитель, Реализатор/Педант, Координатор/Исследователь ресурсов. И каждая роль имеет как свои плюсы, так и свои минусы.
ЗЫ. Бог или большой взрыв (кому что нравится) создал нас всех разными. И в этом наша сила. Взгляд с разных сторон на одни и те же проблемы обеспечивает нам стереоскопичность видения. А следовательно более эффективное решение наших задач. Ошибка подбирать в команду подобных себе людей. Верно подобранные «лебедь, рак и щука», как правило, оказываются гораздо успешнее «родственных душ».
ЗЗЫ. Противоречия — основа развития. Единообразие — это единомыслие и стагнация.
ЗЗЗЫ. Помним, что недостатки людей это очень часто продолжение их достоинств.