Психология программирования: Психология программирования в команде / Хабр

Содержание

Психология программирования в команде / Хабр

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

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

С чем же связано снижение эффективности и качества ПО?

Факторы снижения эффективности программистов можно поделить на объективные и субъективные.


Как я понимаю эти 2 термина

Объективные — это нечто, что не зависит от точки восприятия… Своего рода константы, которые не меняют своего значения, под каким углом ты на них не смотри. А вот субъективные факторы — это те, которые зависят от точки восприятия.


Субъективные факторы влияния на эффективность

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

Дело в том, что программист развивает чувство собственности к коду. Ведь код — это нечто, что он создал, и это нечто осязаемое (его видно на экране монитора). Программист может воспринимать код, как предмет (это я написал этот код) и как пространство (когда у меня в редакторе открыт этот код, я чувствую себя уютно

). Таким образом код может быть «моим», «не моим» точно так же, как и стул или как комната. Это мой стул, и я на нем сижу (я написал этот код). Это стул Васи, и Вася им пользуется, и мне на нем сидеть эмоционально неудобно (Вася написал этот код).

Я хочу подчеркнуть, что мы сейчас говорим о субъективной самоидентификации программиста с кодом, который он видит на своем экране.

Программист, работая, может ощущать что этот код «его» или «не его». Эта самоидентификация с кодом довольно важна. Если человек считает, что код «его», то он:

  • не будет ощущать отторжения (нечто вроде «свое говнецо не так сильно воняет»)
  • общее эмоциональное ощущение программиста будет приподнято. Он будет ощущать себя в зоне комфорта и «у себя дома» (подумайте как он себя будет ощущать, работая с «чужим» кодом… 8 часов в день… несколько месяцев подряд)
  • у него возникнет чувство хозяина и владельца (еще примитивнее: чувство вожака, все-таки в основном программисты — мужчины). Эти чувства провоцируют мужчину к проявлению инициативы, ответственности и проактивной позиции по отношению к объекту собственности (к коду, в нашем случае)
  • в «моем» коде не страшно делать рефакторинг. Нечто вроде «это моя собственность, и я делаю с ней все, что хочу»
  • дорабатывая «свой» код, программист сделает ровно столько изменений в коде, сколько нужно для внесения необходимых корректировок и поддержания архитектуры кода. А вот если код был бы «чужим», то программист скорее всего постарался бы внести минимум необходимых изменений. Добавляя функционал, но не поддерживая архитектуру, он скорее всего «прилепил» бы новый функционал сбоку к уже существующему.
  • людям свойственно осторожничать в чужом/новом месте: если от программиста потребуется внести существенные изменения в «чужой» код, то он потратит много времени на ознакомление с кодом (попытается сделать этот код «своим») и банально будет ощущать себя более скованным в эмоциональном плане, внося нужные изменения. В худшем случае он просто «прилепит» свой код к уже существующему (см. предыдущий пункт)
  • правя «чужой» код, мы эмоционально затрагиваем его владельца. Сознательно или подсознательно, но программисты признают право собственности других программистов на участки кода точно так же, как в семье за обеденным столом негласно признается место за каждым членом семьи. Сознательно садясь на «чужой» стул за столом, вы ощущаете дискомфорт из-за оказанного эмоционального влияния на «владельца» стула.

Также, отдельно замечу, что мы сейчас говорим о правках в коде. Чтение кода и особенно использование (вызов «чужих» функций) не влияет на эмоциональное состояние программистов.

Объективные факторы

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

Конкретика и постановка задачи

Что же имеем? Теоретическое идеальное состояние для проекта было бы: все программисты объективно знают весь код и все программисты считают весь код «своим». Но скажите мне, пожалуйста, может у одной зубной щетки быть 2 хозяина? К сожалению, нет. Любой программист «трогая», внося изменения в код, делает этот код более «чужим» в глазах автора кода («текущего» владельца).


Цель

: каждый программист должен работать (максимум возможного времени) с кодом, который он знает, и который он считает «своим». Вот такого результата уже возможно добиться.

Решение задачи

В процессе разработки ПО объективные знания о проекте и субъективные самоидентификации программистов к коду будут меняться. Нашей задачей будет влиять на распределение знаний и чувств собственности с тем, чтобы поддерживать поставленную в прошлом абзаце цель. Чем больше программист знает о проекте или чем больше кода он считает «своим» — тем лучше. Кашу маслом не испортишь. Понижать эти вещи нам не за чем, а вот повышать всегда полезно.

Другое дело, что повышение этих факторов отнимает время у наших программистов. И тут уже встает вопрос рационализации: программисты могут тратить 2 ч в день на знакомство со своим проектом и 2 ч в день на повышение чувства собственности… Но ведь тогда у них будет лишь 4 ч в день на продуктивную работу :(.

Прежде чем мы перейдем к вопросам рационализации, давайте рассмотрим рычаги влияния. Для повышения объективных знаний о коде подходят:


  • самый проверенный способ — быть автором кода 🙂
  • любая письменная документация о коде
  • устные и письменные коммуникации между программистами

Для повышения чувства собственности по отношению к коду подходят следующие методы:


  • опять же, способ №1 — быть автором кода
  • объективные знания о коде. Все-таки проще признать за «свое» ту вещь, в работе которой ты хотя бы разбираешься
  • code reviews — когда автор кода показывает код и советуется с другим программистом, этот другой программист оказывает влияние на код (возможно даже некоторые его советы попадут в код). Своеобразно, автор «знакомит» второго программиста с кодом и возникает некоторого рода собственность «наше».
  • придерживание стандартов оформления кода повышает чувство собственности «мое» среди всех членов команды, но тут есть свои оговорки (о них ниже)

Отдельный абзац о стандартах оформления кода (еще один способ повышения чувства собственности, просто слишком длинный)

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


Как думает программист
О! Написано так, как будто я писал

или


О! Смотри, а он тоже жигулевское пиво любит, и диван у него такой же мягкий как у меня дома! Мне здесь уютно!

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

while

цикл, а в коде написан

foreach

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

Одним из решений было бы заставить всех программистов думать одной и той же логикой, насаждать одну и единственно правильную логику (или детализировать требования к оформлению кода вплоть до того, когда использовать

while, а когда использовать foreach). Но ведь это утопия. К тому же, все люди разные, и зачем «клонировать» 10 программистов под копирку.
Лучше культивировать взаимопонимание среди программистов и помогать им знакомиться с логикой своих коллег-программистов. В частности, code reviews, могут весьма хорошо заставить программистов узнать логику друг друга. Волшебство code review в том, что программисту Васе достается в руки код, написанный программистом Петей, но Вася не должен ничего в нем править. Он лишь изучает труд Пети и после этого рассказывает Пете свои мысли (Вася предлагает Пете что-то изменить в обеденном стуле Пети, но сам стул не трогает). Пока Вася и Петя общаются, они успевают понять как и что обоим из них нравится. Таким образом в будущем Вася, видя код Пети, уже будет ощущать себя намного уютнее, зная логику Пети.

Вопросы рационализации

Как же найти баланс между тем, чтобы программисты продолжали развитие проекта, но в тоже время всегда работали над кодом, который они чувствуют «своим»? Ответ на такой вопрос будет очень сильно зависеть от контекста. Я вам лишь покажу 2 самых радикальных метода, и вряд ли эти 2 крайности когда-либо будут уместны для использования в живой ситуации, скорее вам нужно будет найти баланс между этими 2 противоположностями.

Способ №1. Разделение ответственности и «личные комнатушки»

Если специфика вашего проекта позволяет:


  • четко разбить проект на несколько подзадач, практически невзаимосвязанных друг с другом
  • иметь незаменимых программистов (если программист уйдет, то проект разрушится или очень сильно пострадает),

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

Это довольно радикальный подход, и поэтому он обладает довольно существенными недостатками:


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

Плюсы:


  • можно обойтись без документации внутри-норковых процессов. Т.к. одну норку поддерживает один программист, то он все это может удержать у себя в голове
  • программисты практически не тратят время на коммуникацию
Способ №2. Форум

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

Заключение

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

Хотите стать счастливым и продуктивным программистом? Используйте эти 5 методов из Психологии! | by Саша Азарова | NOP::Nuances of Programming

Во всемирно известной книге “Поток: Психология оптимального переживания” психолог Михай Чиксентмихайи раскрывает секрет того, как добиться максимальной производительности. Суть заключается в том, чтобы выполнять работу в оптимальном состоянии, называемым “поток”.

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

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

Изучите навыки заранее

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

Сначала выполните задачу, а уже потом отполируйте ее до блеска ✅

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

Разделяй и властвуй ✅

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

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

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

Deep Work (В работу с головой): Профессиональная деятельность, выполняемая в состоянии полного погружения в процесс, развивает ваши когнитивные возможности до предела.

Выделите время для сосредоточенной работы✅

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

Техника Pomodoro ✅

Техника Pomodoro позволяет без каких-либо препятствий погружаться в сосредоточенный режим.

По сути, вы работаете над заданием в течение 25 минут, ни на что не отвлекаясь. Затем вы делаете короткий 5-минутный перерыв и переходите к следующему “помидору”. После 4-х “помидоров” можно сделать длинный перерыв. В Интернете вы легко можете найти соответствующие этой технике приложения.

💠 Не будьте слишком пунктуальны с графиком Pomodoro. Если вы находитесь в состоянии потока, вам не нужно заставлять себя делать перерыв в тот момент, когда истекли 25 минут. У вас есть и другое время для отдыха, и позже я об этом расскажу.

Данный метод отлично подходит для внешних отвлекающих факторов, но что насчет внутренних отвлекающих факторов?

Записывайте свои мысли ✅

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

Но благодаря исследованиям Блюмы Зейгарник мы знаем, что:

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

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

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

В своей книге “Парадокс выбора” Барри Шварц описывает, как более широкий круг выбора приводит к тревожному состоянию и беспокойству. Он приводит множество примеров: от “Что купить?” и “Что ей/ему подарить?”, до “Куда поступить?”, чтобы показать, что менее широкий круг выбора может не только увеличить нашу производительность, но и поможет почувствовать себя счастливее.

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

Выбирая язык или фреймворк, подумайте вот о чем ✅

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

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

Соберите необходимые материалы заранее ✅

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

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

Продумайте план проекта перед тем как писать код ✅

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

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

Есть некоторые методы, которые помогут избежать борьбы с вашей силой воли.

Как победить прокрастинацию?

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

Ставьте перед собой четкие цели и задачи ✅

Одной из основных причин прокрастинации являются слишком сложные цели и задачи. Если вы поделите ваши “глобальные” задачи на подзадачи и уточните: что, как и когда вы будете делать, тогда вы с гораздо большим успехом избежите прокрастинации. Кроме того, наш мозг устроен таким образом, что, если вы ставите неточные или неоднозначные цели — он склонен воспринимать их как нечто трудное или тяжелое. Таким образом, наличие четко поставленных целей и задач позволит вам не вступать в борьбу со своей силой воли.

Начните выполнять следующее задание прямо сейчас ✅

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

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

Как решать сложные задачи?

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

Перерыв на прогулку ✅

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

Достаточно просто ненадолго отойти от своего рабочего места или компьютера и вы сами все поймете.

Сон ✅

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

Начните работу над другой проблемой или проектом ✅

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

Эмпатия — важный навык, который приведет вас к успеху и счастью в личной жизни и выбранной профессии. Я призываю вас проявлять эмпатию в программировании. Программирование — это не просто логика, это еще и искусство!

Пишите легкий в поддержке код ✅

Помните, что код, который вы пишете, в будущем будут читать и поддерживать другие люди!

Программы должны быть написаны для того, чтобы люди могли их читать, а машины могли исполнять.

Следуйте определенным нормам хорошего кода, таким как понятные и логичные имена переменных, небольшие методы и т.д.

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

// 
// Dear maintainer:
//
// Once you are done trying to 'optimize' this routine,
// and have realized what a terrible mistake that was,
// please increment the following counter as a warning
// to the next guy:
//
// total_hours_wasted_here = 42
//

Упростите дизайн ✅

Неважно, разрабатываете ли вы API или пользовательский интерфейс, ваш конечный продукт должен быть простым для пользователей. Основной принцип, которого следует придерживаться:

Простые вещи должны быть проще. Сложные вещи должны быть возможными.

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

Если вы ненавидите программирование или собираетесь бросить его, эти идеи могут изменить ваше отношение и сделать вас счастливее.

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

Перевод статьи Rajasekar Elango: Want to become a Happy and Productive Programmer? Use these 5 techniques from Psychology

IT и психология. Человеческий фактор в парном программировании: почему многие не получают желаемого от его внедрения?

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

Отдельную благодарность за рецензию и время, потраченное на прочтение первого варианта статьи, выражаем Асхату Уразбаеву,ценные замечания которого позволили не только улучшить данную статью, но и позволили убедиться в необходимости и востребованности именно цикла статей!

А вы друзья как не садитесь, все в музыканты не годитесь…

Сфера ИТ полна парадоксов и противоречий! Ожидая от компьютерных программ математической точности, мы забываем о том, что их делают люди… А программы наследуют все те же «черты характера», которые присущи их разработчикам: педантичность, аккуратность, взбалмошность, непостоянство, системность, надежность и т.д. Хорошая команда работает единым слаженным организмом, и продукт у нее получается цельный, стройный, гармоничный и не глючный. Если же над программным продуктом работает группа плохо ладящих друг с другом людей, то единого целого не будет, системы не будет, будет просто сборище различных частей, не всегда даже сочетающихся друг с другом, и у каждой части будет свой характер, и не известно будет, чего ожидать от продукта в целом.

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

На своих тренингах мы очень часто спрашиваем участников – руководителей и тимлидов:

И если по первому вопросу найдется на 15 человек 3-4, которые прочитали всего одну книгу, то о психологии и говорить не приходится: 0 из 15 человек – такова статистика… Сам собой напрашивается не очень приятный вывод: ТЕХНАРИ не читают ГУМАНИТАРНЫХ книг… А зря 

Как вы думаете, сколько чистых технарей в природе? Не так давно нам попалась статья, в которой приводились результаты опроса  11634 человек, разного возраста и полов. Цель была одна — выяснить соотношение гуманитариев и технарей. Причем исследование проводилось в двух плоскостях: в одной людей опрашивали «кем вы себя считаете?», а во второй пропускали через тесты и выявляли соответствующие способности. Получилась интересная статистика по результатам тестов на способности:

 

Как видим, чистых технарей, по тесту всего 8%.  Кстати, а вот во время интервью 17% респондентов дали утвердительную самооценку «Технарь, но не гуманитарий«. Гуманитарии в свою очередь не ошиблись — их самооценка совпала со способностями.  Получается, что даже если вы считаете себя «чистым» технарем, вполне возможно, вы ошибаетесь 

Широко распространенное заблуждение: если взять задачу и найти крутых специалистов, то всё решится – если не само собой, то очень быстро и эффективно. О таких «мелочах», как совместимость людей, психологическое состояние, тип мышления – просто не заботятся. Причем, это не злой умысел, а просто об этом никто не задумывается. А между тем важно понимать, что человеческий фактор в широком смысле этого слова может позволить как «вытянуть» проект, так и тем более он способен его похоронить.

Возможно, это и интересная для дискуссии тема, но мы не будем рассуждать о том, как у нас в ИТ становятся руководителями… В лучшем случае в кресле руководителя вы встретите человека с хорошим знанием предмета, но ничего не знающего в управлении, и, как правило, совсем профана в психологии, не редко не умеющего связать двух слов и членораздельно объяснить подчиненным, чего же он хочет на самом деле. (Если вы из числа тех руководителей, к которым это не относится, и вы немного слышали о психологии и разбираетесь в менеджменте, то мы вас поздравляем – вы попали в те 5% счастливчиков, которые скорее являются исключением из правила!) И, в общем-то, это даже не вина руководителей. Просто нас так учат: начиная с вуза, если мы выбрали техническую специальность, нам твердят, что всё остальное знать не обязательно… Вот и получается: сначала не обязательно, а потом – некогда.

Чтобы увидеть все «прелести» такого однобокого подхода к руководству ИТ-проектами и управлению ИТ-коллективами, давайте для начала поговорим об одной из наиболее дискуссионных и противоречивых практик гибких методологий. А именно – речь пойдет о парном программировании. Панацея это или проблема? Чудо или закономерность? Почему одним с ее помощью удается получить положительный результат, а другие только плюются и презрительно фыркают, когда слышат о парном программировании? Почему такая, казалось бы, простая вещь, как взять двух разработчиков и посадить их вместе, в одном случае приводит к улучшению качества продукта и взаимоотношений в команде, а в другом – ругань, брань и прочие неприятности?

Давайте разберемся! А чтобы разобраться, обратимся к психологии. То есть к той области знаний, которая как раз и изучает нас, людей: наше поведение, наши поступки, наши мысли, чувства, настроения, состояния и т.д. Прежде всего, важно понимать, что два человека – это не набор документированных процедур, вызывая которые можно получить желаемое. Люди гораздо сложнее. Говоря об этом, Алистэр Коуберн называет людей «нелинейными и наиболее важными компонентами в разработке программного обеспечения» [1]. Наибольшая сложность заключается в том, что «человек — существо изменчивое, он меняется в зависимости и от времени, и от пространства» [1], и от многих других факторов…

Кстати, ребята, которые придумали и XP и Scrum, очень хорошо разбирались в психологии. Подтверждается это и тем, с какой любовью данные методологии внедряются в компаниях. Айтишники просто сами не осознают, что, на самом деле, для них взяли лучшие практики из психологии, направленные, в том числе, на возникновение драйва, положительных эмоций и командного духа, облачили это всё в понятную для ТЕХНАРЕЙ оболочку и дали – берите, работайте… И заработало!

Не нужно объяснять, что парное программирование начинается с формирования пар… Как это происходит? С кем мы оказываемся в паре? Кто выбирает нам партнера? Или кого выбираем мы?

А.Н. В юности наша компания частенько собиралась у кого-нибудь дома, кто имел хорошую аудио-систему, и мы с упоением слушали забугорные группы: Led Zeppelin, Deep Purple, Pink Floyd и прочие. Пластинки и кассеты в магазинах не продавались, и послушать можно было только у тех, чьи родители выезжали за границу. Но дело не в этом. У нас была игра – мы хотели собрать группу мечты: вокалист оттуда, басист оттуда, гитарист – вон тот самый классный… и так далее. И самое интересное, что в истории рок-музыки были такие супергруппы, которые формировались уже не юношами, но профессионалами. И история каждый раз показывала, что такие группы долго не живут. Я увлекался уже тогда (нет, не самбо и не горными лыжами) психологией и каждый раз говорил, что такая группа не факт, что сработается,… на что мои друзья возражали, что профессионалы на то и профессионалы, а не подростки – они-то умом (!) понимают, у них всё будет хорошо…

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

Кстати, мы все ходили в школу, институт. Вспомните школу! С кем вам было приятно сидеть за одной партой? С тем, кого вы выбрали, или с тем, кого выбрал учитель? У меня бывало по-разному: иногда учитель правильно рассаживал детей, руководствуясь некоторыми психологическими приемами, а иногда мне было комфортнее сидеть с приятелем.

Еще А.С. Макаренко [2], работая с детьми-беспризорниками в исправительной колонии им. Горького, формировал группы по принципу «выбери того, кто тебе нравится».

Так кого же мы берем в пару при парном программировании? Того, кто нравится? Или того, кто больше знает? Или, может, всё равно кого?

От точки зрения зависит очень многое.

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

В своей книге Алистер Коуберн [3] говорит, что «при парном программировании разработчики решают все задачи совместными усилиями, работая бок о бок за одним компьютером. За последние несколько десятков лет такая практика уже неоднократно получала самые лестные отзывы, так как с ее помощью удавалось значительно улучшить процесс разработки ПО».

«Однако, – утверждает Коуберн, существует мнение, сводящее на нет любые доводы в пользу парного программирования – многие полагают, что посадить двух программистов за один компьютер, значит поручить двум разработчикам работу одного». Это есть чистая правда – многие так и считают. В России распространено и еще одно мнение: «у нас другой менталитет». Оно, конечно, имеет под собой основу – наша система образования не учит тому, как работать в группах. Но это вроде не страшно – как-то мы выбираем друзей, создаем семьи, входим в какие-то группы… – это не страшно: и у нас могут быть и спаянные группы, и надежные пары.

Там также [3] подробно рассматриваются экономические и прочие выгоды от использования парного программирования:

  1. Программисты в сработавшейся паре тратят всего на 15% больше времени. (Запомним термин «в сработавшейся» — он нам пригодится позже.)

  2. В результате парного программирования код содержит на 15% меньше ошибок, чем код одиночек.

  3. Изначальное 15% увеличение стоимости разработки окупается за счет уменьшения количества ошибок. (Заметим, что в статье [3] говорится о 15%-ом увеличении количества часов, затрачиваемых двумя разработчиками на решение одной задачи, по сравнению со временем, которое тратит один разработчик. Если считать в человеко-часах, то получатся совсем другие цифры. Поэтому вывод о всего лишь 15%-ом увеличении стоимости разработки нам кажется сомнительным. Возможно, это опечатка или неточность перевода. А вот окупаемость увеличения стоимости разработки за счет уменьшения количества ошибок вполне реальна.)

  4. Повышается общая квалификация программистов: молодые начинают быстро расти, т.е. проявляется элемент наставничества – молодого программиста «ведут» более опытные товарищи.

  5. Каждый из членов команды при ротации пар охватывает весь проект в целом, а не только свой сегмент – коллективное владение кодом.

  6. А также повышение «боевого духа», быстрое обучение всему, а не только программированию и так далее.

Список можно продолжать, но и первых пяти пунктов хватит, чтобы воскликнуть: я тоже хочу, чтоб в моем проекте так было!!!

Но все это не будет работать если:

  1. Не получится построить сработавшиеся пары. А не получиться может по многим причинам, большинство которых носят чистопсихологический характер: один много болтает, другой молчит… и так далее – важен психологический аспект, такой как банальная совместимость двух людей.

  2. Программисты не будут получать удовольствия от парной работы. Тоже психология – программист, как и любой инженер, стремится быть уникальным, много знать и так далее. Он эгоистичен. Как и тот булочник у Адама Смита [4], который вставал в 4 часа утра, чтобы испечь вкусные и румяные булочки. И заботился о том, чтобы они были не очень дорогими. И делал всё это отнюдь не из любви к своим покупателям, а потому что хотел заработать. И знал, что есть и другие булочники, которые тоже хотят заработать. Так, думая о собственной выгоде, булочник делал общественное благо.

    То же и с парным программированием: если от него есть толк лично для каждого программиста, то парному программированию неминуемо быть. 

    Адам Смит делает важный вывод: людям не нужно приказывать, чтобы они что-то делали, нужно просто создать такую систему, при которой человек, будучи эгоистичным, думал бы о своих интересах, и, думая о своих интересах, одновременно заботился об интересах потребителя, а, следовательно, и общества в целом. Так он разрешал конфликт между двумя ведущими мотивами человеческой деятельности: альтруизмом и эгоизмом [5].

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

  3. Программировать в одиночку гораздо проще и привычнее. Это самый тяжелый фактор – фактор привычки. Всем известно, что «изучить новые способы легко; значительно труднее изменить привычку людей работать так, а не иначе» [6].

  4. И прочее, связанное с психологией индивида и психологией группы.

Парное программирование никогда не заработает, если при переходе на него руководитель не будет понимать ВАЖНОСТИ данного перехода, а также того, что люди – не сосуды с описанным набором функций, а эмоционально нестабильные, подверженные различным веянием, меняющие точку зрения в зависимости от настроения… в общем, люди. Мы все индивидуальны, и в случае нас, людей, 1+1 не факт, что будет два.

Итак, важные «за» и возможные «против» мы рассмотрели.

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

Википедия дает следующее определение [7]: это область научного знания, исследующая особенности и закономерности возникновения, формирования и развития (изменения)

  • психических процессов (ощущение, восприятие, память, мышление, воображение),

  • психических состояний (напряжённость, мотивация, фрустрация, эмоции, чувства)
  • и психических свойств (направленность, способности, задатки, характер, темперамент)

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

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

 

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

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

 

Продуктивность малой группы в зависимости от ее фазы:

1-формирование группы, 2-притирка, 3-нормирование+деятельность, 4-дезинтеграция

Мало того, группы классифицируются по принципу их возникновения и так далее. Все это хорошо описано в учебнике Андреевой Г.М. [8].

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

Надеемся, мы не слишком утомили вас? Больше ничего сложного не будет. J

Ползем дальше. В социальной психологии очень большое место отведено экспериментам. Тем самым психологическим экспериментам, которые могут дать СТАТИСТИЧЕСКУЮ базу для ИТ-руководителей при принятии управленческих решений. То есть, повторимся:правильных рецептов и алгоритмов нет, но есть статистические данные, на которые можно опираться, принимая те или иные решения.

Особенно много экспериментов проведено над индивидами и над малыми группами. Из всего многообразия экспериментов [8,9] нас интересуют те, которые объясняют, почему и что может работать, а что нет, применительно к парному программированию.

Объясняем техники и смысл парного программирования через социальную психологию

2. Суть парного программирования

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

Началом лабораторного экспериментирования принято считать эксперименты Н. Трипплетта [10], выполненные в 1897 году. Суть эксперимента состояла в том, чтобы измерить влияние ситуации соревнования на изменение скорости велосипедиста по сравнению с результатами, полученными в одиночной гонке. Испытуемыми были дети. 20 из 40 испытуемых показали в соревновании более высокие результаты, 10 — немного улучшили их, а у 10 наблюдалось даже ухудшение в связи с перевозбуждением (запомним этот факт). Трипплетту принадлежит и термин, которым он определил открытое зафиксированное явление – «социальная фацилитация» (social facilitation), – впоследствии ставшее одним из популярнейших объектов исследования, особенно при написании диссертаций. Здесь, так же, как позднее и во многих других лабораторных экспериментах, устанавливалось то, что было известно людям давным-давно. Главное же достижение состояло в том, что общеизвестные истины могли быть «сосчитаны, измерены и взвешены». Это было огромным шагом вперед.

Феномен получил и второе название «Наблюдатели нас возбуждают» – под этим наименованием в обычных статьях вы и найдете его описание. Погуглите 

Рассмотрим еще один эксперимент [11]:

Роберт Зайонц провел ряд экспериментов, в которых просил людей выполнять простые действия и сложные действия. Сначала поодиночке, потом в группах. В результате при многократном повторении было очевидно, что простые действия в присутствии других людей мы делаем лучше, чем когда делаем в одиночку, в то время как выполнению сложных действий дополнительные люди могут и помешать. Гипотеза Зайонца подтвердилась результатами почти 300 исследований, в которых приняли участие более чем 25 000 добровольцев.

И еще один:

Гари Эванс ставил опыт с группой из десяти студентов Университета Массачусетса, размещая их либо в комнате размером 6 на 9 метров, либо 2,4 на 3,7 метра. По сравнению с теми, кто находился в большой комнате, у тех, кто сидел компактно, кровяное давление и пульс были выше.

Делаем выводы:

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

Вспомните студенчество! В какой аудитории мы чувствуем себя комфортно? В большой или маленькой? Как правило, в маленькой. Это частично объясняется тем, что когда другие люди находятся близко, мы более склонны обращать внимание на их смех или аплодисменты и присоединяться к ним.

Запоминаем: нашу психику изменяет сам факт присутствия других людей.

Применительно к парному программированию:

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

Как же формировать пары? Да очень просто: если вы возьмете «сырого» юношу и приставите ему в пару матёрого гуру, который к тому же старше раза в два своего визави, то молодой с высокой долей вероятности не покажет блестящих результатов.

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

  • «Начинающий» — Начинающий»

  • «Начинающий» — «Мастер»

  • «Мастер» — «Мастер»

 

2. Техники парного программирования и продолжение ответа на вопрос о том, как формировать пары

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

Таблица 1. Техники парного программирования

ТехникаОчень краткое описаниеКраткий комментарий
Пинг-понгТехника, при которой один пишет черновой код, а второй ревьюит и заставляет его работать. Потом партнеры переходят на следующий этап, где могут поменяться ролями в зависимости от квалификации, типов мышления и уровня решаемой задачи.Техника подходит для пары «Мастер» — «Мастер»Меньше подходит для пары«Начинающий» — «Начинающий»
СаморазвитиеПодразумевает обмен знаниями и опытом более квалифицированного и менее квалифицированного программистов.Техника подходит для пары «Начинающий» — «Мастер»
Удаленное программированиеНе всегда можно работать лицом к лицу, часто применяется удаленное парное программирование. Т.е. разработчики вполне могут сидеть за разными компьютерами и даже находиться на разных континентах. Взаимодействуя с помощью скайпа, видео конференций и специальных средств, используемых для удаленного парного программирования, разработчики также могут неплохо сработаться.Подробно об этой технике можно почитать здесь и здесь.Может дать положительный результат
Ротация парПрименение данной техники позволяет каждому программисту знать всё по проекту, пересидев со всеми.Повышает квалификацию, избавляет от комплексов неполноценности, дает эффект коллективного владения кодом

В паре «Начинающий» — «Мастер» первый будет всегда «подавлен», и его производительность упадет, а при ротации мастер будет выполнять свою работу хорошо, но ему будет совсем скучно. Хотя в статье Алистера Коуберна [3] приводится пример, когда «даже новичок может существенно улучшить качество кода», который пишет опытный специалист.

Пара «Начинающий» — «Начинающий» также не даст ожидаемого эффекта. Напомним, что эффекты от парного программирования проявляются, как правило, в уменьшении количества ошибок, в том числе, за счет повышенного внимания и концентрации, и в повышении квалификации напарников (или хотя бы одного из них).

А вот пара «Начинающий» — «Старший Начинающий» будет весьма интересна. То есть в пару лучше посадить неопытного с чуть более опытным сотрудником, тогда тут есть место и перениманию опыта и всему остальному.

«Мастер» — «Мастер» — данная пара хороша с точки зрения производительности, но для роста потенциал не очень велик, хотя, определенно, присутствует.

Хотим отметить, что мы затронули только тему наличия дополнительного человека. Этот феномен имеет место быть и показывает классные результаты, но для получения хорошей пары надо не только «клеить» ее по функциональному признаку, но и по психологическому: способ мышления, темперамент и еще многие факторы имеют большое значение.

Еще раз отметим для руководителей: не все равно, как вы формируете пару – простое склеивание хоть кого хоть с кем даст ерунду!

3. Техника парного программирования «ротация пар» и размер команды

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

Проектная команда с точки зрения социальной психологии является малой группой. В социальной психологии есть понятие идеальной группы: 7+-2 человек. То есть максимальное количество участников в идеальной малой группе может быть 9 человек. Это, естественно, не закон, но похоже на правду. Хотя малой группой считается и 10, и 15 и даже 20 и больше человек.

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

При выборе размера команды под проект, в котором будет применяться парное программирование, можно руководствоваться эффектом Рингельмана [10], который показывает, что: «индивидуальная производительность каждого члена группы падает: чем больше группа, тем ниже производительность каждого». При увеличении группы от 1 до 12 человек средние усилия, прилагаемые каждым, уменьшаются примерно на 10%. То есть раздутая команда неизменно «провалится» в производительности, если ее не делить на мелкие подгруппы и т. д., то есть если не применять специальных действий. Руководителю важно в команде найти баланс по количеству, чтобы и общая производительность была на уровне, и ротацию можно было бы осуществлять, не опасаясь за то, что сотрудники «умрут» от объема поступающей информации.

Ротация крайне важна для повышения квалификации, так как только в этом случае начинающий разработчик будет быстро расти в квалификации и понимать суть и состояние проекта. Если не ротировать сотрудников, то тем самым можно снизить мотивацию (вспоминаем, что все программисты в душе эгоистичны, и что заставить их сделать что-либо трудно, но заинтересовать чем-то общественным через решение личных задач вполне возможно. Agile имеет в своем арсенале такую классную вещь, как «Task volonteering», которая позволят брать «на себя» интересные задачи – это тоже эффективный психологический прием, который тоже поднимает квалификацию, но о нем в следующих выпусках).

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

Застой образуется, если сотрудников не поднимают ни в знаниях, ни в должности. Это плохо для компании, так как люди в итоге будут полностью демотивированы к работе. Этот факт подтверждается экспериментами Селигмана, Джонсона, Хирото [9] и многих других, которые вывели формулу «Выученной беспомощности». То есть если человеку постоянно давать задачи, которые он не может выполнить, если на него повесить ярлык «он ничего не может», то рано или поздно человек в это поверит!!! В экспериментах был выявлен главный фактор, вызывающий выученную беспомощность: предшествующий опыт влияния на испытуемого неприятного воздействия, неподконтрольного испытуемому.

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

  • Постоянные неудачи демотивируют, они настолько «въедаются» в мозг, что человек становится не в состоянии искать выходы. Он несет на себе «бремя безысходности»;

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

  • Разрушение образа справедливости приводит к тому, что человек разуверяется в возможности контролировать свои действия, добиваться результата, зависящего от него. Возникает апатия, поведение приобретает черты «жертвы», что является следствием разрушения веры;

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

4. Удаленное парное программирование и руководство командой

Очень часто приходится слышать мнение, что «мы используем только удаленное программирование, так как…», и далее следует тирада. Или наоборот – мы его не используем.

Если говорить об эффекте удаленного парного программирования [17], то он, этот самый эффект, непременно есть (если все предыдущие рекомендации выполнены), но не такой, как очный. При удаленном контакте «возбудимость» существенно ниже. Соответственно, и эффект меньше. Проиллюстрировать это можно экспериментом «Подчинение авторитету» американского психолога Стенли Милгрэма.

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

Представьте себе следующую сцену, поставленную Милгрэмом, разносторонне одаренным человеком, обладавшим, в том числе, и талантами писателя и режиссера. Двое мужчин приходят в психологическую лабораторию Йельского университета, где им предстоит принять участие в изучении процессов обучения и памяти. Строгий экспериментатор, одетый в серый рабочий халат, говорит им, что в лаборатории проводится новаторское исследование — изучается влияние наказания на обучение, и требует, чтобы один из них («учитель») заставил другого («ученика») запомнить перечень парных понятий, наказывая за ошибки ударами электрического тока возрастающей силы. Распределение ролей — по жребию: испытуемые тянут из шляпы бумажки. Один из них, 47-летний бухгалтер с мягкими манерами, «подсадная утка», делает вид, что на его бумажке написано «ученик», и его препровождают в соседнюю комнату. «Учитель» (он пришел в лабораторию по газетному объявлению) получает несильный «ознакомительный» удар током, после чего наблюдает за тем, как «ученика» усаживают в кресло, привязывают к нему и закрепляют электроды у него на запястье.

Как далеко зашли бы вы сами? Милгрэм описывал этот эксперимент 110 психиатрам, студентам колледжей и взрослым представителям среднего класса. Все сказали, что, наверное, отказались бы выполнять распоряжения экспериментатора примерно при 135 вольтах и ни за что не «продвинулись» бы дальше 300 вольт. Понимая, что эти ответы могут отражать присущую самооценкам необъективность, Милгрэм спрашивал этих людей, как далеко, по их мнению, способны зайти другие. Практически никто не сказал, что кто-нибудь может дойти до удара, обозначенного на приборной панели символом «XXX». (Психиатры предполагали, что такую возможность допустит один из 1000.)

Однако когда участниками эксперимента Милгрэма были 40 мужчин — представители разных профессий в возрасте от 20 до 50 лет, — 26 из них (65%) дошли до 450 вольт. Впрочем, правильнее сказать, что все они подчинялись команде экспериментатора «Продолжать!» до тех пор, пока после двух ударов он сам не останавливал их.

Подчинение экспериментатору зависит также и от его физического присутствия. Когда Милгрэм командовал «учителями» по телефону, количество случаев полного подчинения снизилось до 21% (хотя многие лгали и говорили, что подчиняются). Результаты других исследований позволяют говорить о том, что если отдающий приказ находится рядом, число подчиняющихся ему возрастает. Однако власть должна восприниматься как легитимная, то есть недостаточно просто оставить вместо себя кого-то.

 

Выводы:

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

То же можно сказать и про руководство командой – чем руководитель ближе, тем выше эффективность.

Разумеется, в статье рассмотрены не все аспекты и техники парного программирования, как и не все явления и эксперименты социальной психологии. На самом деле экспериментов, объясняющих психологическую подоплеку многих практик в Agile, значительно больше. Есть объяснение и ежедневным митингам, и почему на митинги можно приглашать гостей, которые не должны вмешиваться в процесс, и так далее. Ответы находятся в социальной психологии. Мы своей статьей ставили цель показать на примере маленькой технической практики, что понимание психологической составляющей и применение техник, позволяющих проявиться положительным эффектам, связанных с человеческим фактором, может привести к ощутимым результатам. Объяснив эффекты парного программирования с точки зрения социальной психологии, мы хотели напомнить о том, что всё хорошее потому и работает, что оно естественно с точки зрения нашей психологии, т.е. того, как мы устроены. И, конечно, мы надеялись возбудить в нашем читателе желание пойти в магазин и купить самую тонкую книгу по социальной психологии. В этом смысле мы стремились дать направляющие для дальнейшего развития. J

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

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

Да будет много хороших команд! И много хороших программных продуктов!

PS В следующих частях нашей работы мы подведем теоретическую базу под многие Agile- практики, например, дадим ответы на вопросы: почему митинг должен быть непродолжительным и проходить в одно и то же время, почему они должны проходить утром, зачем каждый участник должен отвечать на вопросы «что есть», «что было» и «что будет» и многие другие. Важно понимать, что разработчики Agile-практик очень эффективно использовали все достижения психологии, направленные на создание и развитие эффективной команды. Даже если вам не нравится Agile, потому что вы любите Microsoft Solutions Framework или ГОСТ или Rational Unified Process, вы вполне можете взять эффективные практики командообразования в свой процесс.

Железки – ничто, люди – все!

Используемые источники:

  1. http://www.maxkir.com/sd/people_as_nonlinearRUS.htm
  2. http://ru.wikipedia.org/wiki/Макаренко,_Антон_Семёнович
  3. http://www.e-reading.org.ua/bookreader.php/32275/Koubern_-_Parnoe_programmirovanie__preimushchestva_i_nedostatki.html
  4. http://ru.wikipedia.org/wiki/Адам_Смит
  5. http://www.tvkultura.ru/theme.html?id=31202&cid=11846
  6. Вигерс К.И. Разработка требований к программному обеспечению.: Пер. с англ. – М.: Русская редакция, 2004.
  7. http://ru.wikipedia.org/wiki/%D0%9F%D1%81%D0%B8%D1%85%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F
  8. Андреева Г.М. Социальная психология
  9. Новичков А.Н. Коммуникации и психология: о чем могут рассказать эксперименты психологов?. Презентация с аудиоподкастом
  10. Шихирев П.Н. Современная социальная психология
  11. А.В.Либин ДИФФЕРЕНЦИАЛЬНАЯ ПСИХОЛОГИЯ на пересечении европейских, российских и американских традиций
  12. http://en.wikipedia.org/wiki/Pair_programming
  13. http://www.citforum.idknet.com/SE/project/terehov/3.shtml
  14. http://lib.rus.ec/b/96727/read#t2
  15. http://habrahabr.ru/blogs/crazydev/132354/
  16. http://poltava-ua.com/parnoe_programmirovanie
  17. http://freehabr.ru/blog/programming/617.html
  18. http://rf-biz.ru/85.php
  19. http://agilerussia.ru
  20. Гуманитарий или технарь: как найти себя и чем может быть полезно тестирование

А так же корпоративный сайт СМ-Консалт

 

почему многие не получают желаемого от его внедрения?

Правильный тандем

Авторы:  Александр Новичков, Галина Карабанова, Александр Шамрай,
СМ-Консалт — www.cmcons.com

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

Отдельную благодарность за рецензию и время, потраченное на прочтение первого варианта статьи, выражаем Асхату Уразбаеву, ценные замечания которого позволили не только улучшить данную статью, но и позволили убедиться в необходимости и востребованности именно цикла статей!


 

А вы друзья как не садитесь, все в музыканты не годитесь…

Сами знаете, чья это басня

 

Сфера ИТ полна парадоксов и противоречий! Ожидая от компьютерных программ математической точности, мы забываем о том, что их делают люди… А программы наследуют все те же «черты характера», которые присущи их разработчикам: педантичность, аккуратность, взбалмошность, непостоянство, системность, надежность и т.д. Хорошая команда работает единым слаженным организмом, и продукт у нее получается цельный, стройный, гармоничный и не глючный. Если же над программным продуктом работает группа плохо ладящих друг с другом людей, то единого целого не будет, системы не будет, будет просто сборище различных частей, не всегда даже сочетающихся друг с другом, и у каждой части будет свой характер, и не известно будет, чего ожидать от продукта в целом.

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

На своих тренингах мы очень часто спрашиваем участников – руководителей и тимлидов:

  1. Сколько книжек по проектному управлению вы прочитали за год?

  2. Сколько книжек по психологии вы прочитали за год?

И если по первому вопросу найдется на 15 человек 3-4, которые прочитали всего одну книгу, то о психологии и говорить не приходится: 0 из 15 человек – такова статистика… Сам собой напрашивается не очень приятный вывод: ТЕХНАРИ не читают ГУМАНИТАРНЫХ книг… А зря

Как вы думаете, сколько чистых технарей в природе? Не так давно нам попалась статья, в которой приводились результаты опроса  11634 человек, разного возраста и полов. Цель была одна — выяснить соотношение гуманитариев и технарей. Причем исследование проводилось в двух плоскостях: в одной людей опрашивали «кем вы себя считаете?», а во второй пропускали через тесты и выявляли соответствующие способности. Получилась интересная статистика по результатам тестов на способности:

  • Не гуманитарий и не технарь — 8%
  • Гуманитарий, но не технарь — 28%
  • Технарь, но не гуманитарий — 8%
  • И технарь, и гуманитарий — 31%
  • Сомневающийся — 5%

Самооценка и тестирование способностей. Заметьте разницу в оценке своих возможностей теми, кто считает себя чистыми технарями!

Как видим, чистых технарей, по тесту всего 8%.  Кстати, а вот во время интервью 17% респондентов дали утвердительную самооценку «Технарь, но не гуманитарий«. Гуманитарии в свою очередь не ошиблись — их самооценка совпала со способностями.  Получается, что даже если вы считаете себя «чистым» технарем, вполне возможно, вы ошибаетесь

Широко распространенное заблуждение: если взять задачу и найти крутых специалистов, то всё решится – если не само собой, то очень быстро и эффективно. О таких «мелочах», как совместимость людей, психологическое состояние, тип мышления – просто не заботятся. Причем, это не злой умысел, а просто об этом никто не задумывается. А между тем важно понимать, что человеческий фактор в широком смысле этого слова может позволить как «вытянуть» проект, так и тем более он способен его похоронить.

Возможно, это и интересная для дискуссии тема, но мы не будем рассуждать о том, как у нас в ИТ становятся руководителями… В лучшем случае в кресле руководителя вы встретите человека с хорошим знанием предмета, но ничего не знающего в управлении, и, как правило, совсем профана в психологии, не редко не умеющего связать двух слов и членораздельно объяснить подчиненным, чего же он хочет на самом деле. (Если вы из числа тех руководителей, к которым это не относится, и вы немного слышали о психологии и разбираетесь в менеджменте, то мы вас поздравляем – вы попали в те 5% счастливчиков, которые скорее являются исключением из правила!) И, в общем-то, это даже не вина руководителей. Просто нас так учат: начиная с вуза, если мы выбрали техническую специальность, нам твердят, что всё остальное знать не обязательно… Вот и получается: сначала не обязательно, а потом – некогда.

Чтобы увидеть все «прелести» такого однобокого подхода к руководству ИТ-проектами и управлению ИТ-коллективами, давайте для начала поговорим об одной из наиболее дискуссионных и противоречивых практик гибких методологий. А именно – речь пойдет о парном программировании. Панацея это или проблема? Чудо или закономерность? Почему одним с ее помощью удается получить положительный результат, а другие только плюются и презрительно фыркают, когда слышат о парном программировании? Почему такая, казалось бы, простая вещь, как взять двух разработчиков и посадить их вместе, в одном случае приводит к улучшению качества продукта и взаимоотношений в команде, а в другом – ругань, брань и прочие неприятности?

Давайте разберемся! А чтобы разобраться, обратимся к психологии. То есть к той области знаний, которая как раз и изучает нас, людей: наше поведение, наши поступки, наши мысли, чувства, настроения, состояния и т.д. Прежде всего, важно понимать, что два человека – это не набор документированных процедур, вызывая которые можно получить желаемое. Люди гораздо сложнее. Говоря об этом, Алистэр Коуберн называет людей «нелинейными и наиболее важными компонентами в разработке программного обеспечения» [1]. Наибольшая сложность заключается в том, что «человек — существо изменчивое, он меняется в зависимости и от времени, и от пространства» [1], и от многих других факторов…

Кстати, ребята, которые придумали и XP и Scrum, очень хорошо разбирались в психологии. Подтверждается это и тем, с какой любовью данные методологии внедряются в компаниях. Айтишники просто сами не осознают, что, на самом деле, для них взяли лучшие практики из психологии, направленные, в том числе, на возникновение драйва, положительных эмоций и командного духа, облачили это всё в понятную для ТЕХНАРЕЙ оболочку и дали – берите, работайте… И заработало!

Не нужно объяснять, что парное программирование начинается с формирования пар… Как это происходит? С кем мы оказываемся в паре? Кто выбирает нам партнера? Или кого выбираем мы?

А.Н. В юности наша компания частенько собиралась у кого-нибудь дома, кто имел хорошую аудио-систему, и мы с упоением слушали забугорные группы: Led Zeppelin, Deep Purple, Pink Floyd и прочие. Пластинки и кассеты в магазинах не продавались, и послушать можно было только у тех, чьи родители выезжали за границу. Но дело не в этом. У нас была игра – мы хотели собрать группу мечты: вокалист оттуда, басист оттуда, гитарист – вон тот самый классный… и так далее. И самое интересное, что в истории рок-музыки были такие супергруппы, которые формировались уже не юношами, но профессионалами. И история каждый раз показывала, что такие группы долго не живут. Я увлекался уже тогда (нет, не самбо и не горными лыжами) психологией и каждый раз говорил, что такая группа не факт, что сработается,… на что мои друзья возражали, что профессионалы на то и профессионалы, а не подростки – они-то умом (!) понимают, у них всё будет хорошо…

А вы друзья как не…

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

Кстати, мы все ходили в школу, институт. Вспомните школу! С кем вам было приятно сидеть за одной партой? С тем, кого вы выбрали, или с тем, кого выбрал учитель? У меня бывало по-разному: иногда учитель правильно рассаживал детей, руководствуясь некоторыми психологическими приемами, а иногда мне было комфортнее сидеть с приятелем.

Еще А.С. Макаренко [2], работая с детьми-беспризорниками в исправительной колонии им. Горького, формировал группы по принципу «выбери того, кто тебе нравится».

Так кого же мы берем в пару при парном программировании? Того, кто нравится? Или того, кто больше знает? Или, может, всё равно кого?

От точки зрения зависит очень многое.

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

Худшая модель в парном программировании

В своей книге Алистер Коуберн [3] говорит, что «при парном программировании разработчики решают все задачи совместными усилиями, работая бок о бок за одним компьютером. За последние несколько десятков лет такая практика уже неоднократно получала самые лестные отзывы, так как с ее помощью удавалось значительно улучшить процесс разработки ПО».

«Однако, – утверждает Коуберн, существует мнение, сводящее на нет любые доводы в пользу парного программирования – многие полагают, что посадить двух программистов за один компьютер, значит поручить двум разработчикам работу одного». Это есть чистая правда – многие так и считают. В России распространено и еще одно мнение: «у нас другой менталитет». Оно, конечно, имеет под собой основу – наша система образования не учит тому, как работать в группах. Но это вроде не страшно – как-то мы выбираем друзей, создаем семьи, входим в какие-то группы… – это не страшно: и у нас могут быть и спаянные группы, и надежные пары.

Там также [3] подробно рассматриваются экономические и прочие выгоды от использования парного программирования:

  1. Программисты в сработавшейся паре тратят всего на 15% больше времени. (Запомним термин «в сработавшейся» — он нам пригодится позже.)

  2. В результате парного программирования код содержит на 15% меньше ошибок, чем код одиночек.

  3. Изначальное 15% увеличение стоимости разработки окупается за счет уменьшения количества ошибок. (Заметим, что в статье [3] говорится о 15%-ом увеличении количества часов, затрачиваемых двумя разработчиками на решение одной задачи, по сравнению со временем, которое тратит один разработчик. Если считать в человеко-часах, то получатся совсем другие цифры. Поэтому вывод о всего лишь 15%-ом увеличении стоимости разработки нам кажется сомнительным. Возможно, это опечатка или неточность перевода. А вот окупаемость увеличения стоимости разработки за счет уменьшения количества ошибок вполне реальна.)

  4. Повышается общая квалификация программистов: молодые начинают быстро расти, т.е. проявляется элемент наставничества – молодого программиста «ведут» более опытные товарищи.

  5. Каждый из членов команды при ротации пар охватывает весь проект в целом, а не только свой сегмент – коллективное владение кодом.

  6. А также повышение «боевого духа», быстрое обучение всему, а не только программированию и так далее.

Список можно продолжать, но и первых пяти пунктов хватит, чтобы воскликнуть: я тоже хочу, чтоб в моем проекте так было!!!

Но все это не будет работать если:

  1. Не получится построить сработавшиеся пары. А не получиться может по многим причинам, большинство которых носят чисто психологический характер: один много болтает, другой молчит… и так далее – важен психологический аспект, такой как банальная совместимость двух людей.

  2. Программисты не будут получать удовольствия от парной работы. Тоже психология – программист, как и любой инженер, стремится быть уникальным, много знать и так далее. Он эгоистичен. Как и тот булочник у Адама Смита [4], который вставал в 4 часа утра, чтобы испечь вкусные и румяные булочки. И заботился о том, чтобы они были не очень дорогими. И делал всё это отнюдь не из любви к своим покупателям, а потому что хотел заработать. И знал, что есть и другие булочники, которые тоже хотят заработать. Так, думая о собственной выгоде, булочник делал общественное благо.

    То же и с парным программированием: если от него есть толк лично для каждого программиста, то парному программированию неминуемо быть.

    Адам Смит делает важный вывод: людям не нужно приказывать, чтобы они что-то делали, нужно просто создать такую систему, при которой человек, будучи эгоистичным, думал бы о своих интересах, и, думая о своих интересах, одновременно заботился об интересах потребителя, а, следовательно, и общества в целом. Так он разрешал конфликт между двумя ведущими мотивами человеческой деятельности: альтруизмом и эгоизмом [5].

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

  3. Программировать в одиночку гораздо проще и привычнее. Это самый тяжелый фактор – фактор привычки. Всем известно, что «изучить новые способы легко; значительно труднее изменить привычку людей работать так, а не иначе» [6].

  4. И прочее, связанное с психологией индивида и психологией группы.

Парное программирование никогда не заработает, если при переходе на него руководитель не будет понимать ВАЖНОСТИ данного перехода, а также того, что люди – не сосуды с описанным набором функций, а эмоционально нестабильные, подверженные различным веянием, меняющие точку зрения в зависимости от настроения… в общем, люди. Мы все индивидуальны, и в случае нас, людей, 1+1 не факт, что будет два.

Итак, важные «за» и возможные «против» мы рассмотрели.

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

Википедия дает следующее определение [7]: это область научного знания, исследующая особенности и закономерности возникновения, формирования и развития (изменения)

  • психических процессов (ощущение, восприятие, память, мышление, воображение),

  • психических состояний (напряжённость, мотивация, фрустрация, эмоции, чувства)
  • и психических свойств (направленность, способности, задатки, характер, темперамент)

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

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

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

Объекты исследования в социальной психологии

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

 Продуктивность малой группы в зависимости от ее фазы:

1-формирование группы, 2-притирка, 3-нормирование+деятельность, 4-дезинтеграция

Мало того, группы классифицируются по принципу их возникновения и так далее. Все это хорошо описано в учебнике Андреевой Г.М. [8].

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

Надеемся, мы не слишком утомили вас? Больше ничего сложного не будет. J

Ползем дальше. В социальной психологии очень большое место отведено экспериментам. Тем самым психологическим экспериментам, которые могут дать СТАТИСТИЧЕСКУЮ базу для ИТ-руководителей при принятии управленческих решений. То есть, повторимся: правильных рецептов и алгоритмов нет, но есть статистические данные, на которые можно опираться, принимая те или иные решения.

Особенно много экспериментов проведено над индивидами и над малыми группами. Из всего многообразия экспериментов [8,9] нас интересуют те, которые объясняют, почему и что может работать, а что нет, применительно к парному программированию.

Объясняем техники и смысл парного программирования через социальную психологию 

2. Суть парного программирования

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

Началом лабораторного экспериментирования принято считать эксперименты Н. Трипплетта [10], выполненные в 1897 году. Суть эксперимента состояла в том, чтобы измерить влияние ситуации соревнования на изменение скорости велосипедиста по сравнению с результатами, полученными в одиночной гонке. Испытуемыми были дети. 20 из 40 испытуемых показали в соревновании более высокие результаты, 10 — немного улучшили их, а у 10 наблюдалось даже ухудшение в связи с перевозбуждением (запомним этот факт). Трипплетту принадлежит и термин, которым он определил открытое зафиксированное явление – «социальная фацилитация» (social facilitation), – впоследствии ставшее одним из популярнейших объектов исследования, особенно при написании диссертаций. Здесь, так же, как позднее и во многих других лабораторных экспериментах, устанавливалось то, что было известно людям давным-давно. Главное же достижение состояло в том, что общеизвестные истины могли быть «сосчитаны, измерены и взвешены». Это было огромным шагом вперед.

Почти как у Трипплетта

Феномен получил и второе название «Наблюдатели нас возбуждают» – под этим наименованием в обычных статьях вы и найдете его описание. Погуглите

Рассмотрим еще один эксперимент [11]:

Роберт Зайонц провел ряд экспериментов, в которых просил людей выполнять простые действия и сложные действия. Сначала поодиночке, потом в группах. В результате при многократном повторении было очевидно, что простые действия в присутствии других людей мы делаем лучше, чем когда делаем в одиночку, в то время как выполнению сложных действий дополнительные люди могут и помешать. Гипотеза Зайонца подтвердилась результатами почти 300 исследований, в которых приняли участие более чем 25 000 добровольцев.

И еще один:

Гари Эванс ставил опыт с группой из десяти студентов Университета Массачусетса, размещая их либо в комнате размером 6 на 9 метров, либо 2,4 на 3,7 метра. По сравнению с теми, кто находился в большой комнате, у тех, кто сидел компактно, кровяное давление и пульс были выше.

Делаем выводы:

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

Вспомните студенчество! В какой аудитории мы чувствуем себя комфортно? В большой или маленькой? Как правило, в маленькой. Это частично объясняется тем, что когда другие люди находятся близко, мы более склонны обращать внимание на их смех или аплодисменты и присоединяться к ним.

Запоминаем: нашу психику изменяет сам факт присутствия других людей.

Применительно к парному программированию:

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

Как же формировать пары? Да очень просто: если вы возьмете «сырого» юношу и приставите ему в пару матёрого гуру, который к тому же старше раза в два своего визави, то молодой с высокой долей вероятности не покажет блестящих результатов.

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

  • «Начинающий» — Начинающий»

  • «Начинающий» — «Мастер»

  • «Мастер» — «Мастер»

 

2. Техники парного программирования и продолжение ответа на вопрос о том, как формировать пары

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

Таблица 1. Техники парного программирования

ТехникаОчень краткое описаниеКраткий комментарий
Пинг-понгТехника, при которой один пишет черновой код, а второй ревьюит и заставляет его работать. Потом партнеры переходят на следующий этап, где могут поменяться ролями в зависимости от квалификации, типов мышления и уровня решаемой задачи.Техника подходит для пары «Мастер» — «Мастер»Меньше подходит для пары«Начинающий» — «Начинающий»
СаморазвитиеПодразумевает обмен знаниями и опытом более квалифицированного и менее квалифицированного программистов.Техника подходит для пары «Начинающий» — «Мастер»
Удаленное программированиеНе всегда можно работать лицом к лицу, часто применяется удаленное парное программирование. Т.е. разработчики вполне могут сидеть за разными компьютерами и даже находиться на разных континентах. Взаимодействуя с помощью скайпа, видео конференций и специальных средств, используемых для удаленного парного программирования, разработчики также могут неплохо сработаться.Подробно об этой технике можно почитать здесь и здесь.Может дать положительный результат
Ротация парПрименение данной техники позволяет каждому программисту знать всё по проекту, пересидев со всеми.Повышает квалификацию, избавляет от комплексов неполноценности, дает эффект коллективного владения кодом

В паре «Начинающий» — «Мастер» первый будет всегда «подавлен», и его производительность упадет, а при ротации мастер будет выполнять свою работу хорошо, но ему будет совсем скучно. Хотя в статье Алистера Коуберна [3] приводится пример, когда «даже новичок может существенно улучшить качество кода», который пишет опытный специалист.

Пара «Начинающий» — «Начинающий» также не даст ожидаемого эффекта. Напомним, что эффекты от парного программирования проявляются, как правило, в уменьшении количества ошибок, в том числе, за счет повышенного внимания и концентрации, и в повышении квалификации напарников (или хотя бы одного из них).

А вот пара «Начинающий» — «Старший Начинающий» будет весьма интересна. То есть в пару лучше посадить неопытного с чуть более опытным сотрудником, тогда тут есть место и перениманию опыта и всему остальному.

«Мастер» — «Мастер» — данная пара хороша с точки зрения производительности, но для роста потенциал не очень велик, хотя, определенно, присутствует.

Хотим отметить, что мы затронули только тему наличия дополнительного человека. Этот феномен имеет место быть и показывает классные результаты, но для получения хорошей пары надо не только «клеить» ее по функциональному признаку, но и по психологическому: способ мышления, темперамент и еще многие факторы имеют большое значение.

Еще раз отметим для руководителей: не все равно, как вы формируете пару – простое склеивание хоть кого хоть с кем даст ерунду! 

3. Техника парного программирования «ротация пар» и размер команды

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

Проектная команда с точки зрения социальной психологии является малой группой. В социальной психологии есть понятие идеальной группы: 7+-2 человек. То есть максимальное количество участников в идеальной малой группе может быть 9 человек. Это, естественно, не закон, но похоже на правду. Хотя малой группой считается и 10, и 15 и даже 20 и больше человек.

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

При выборе размера команды под проект, в котором будет применяться парное программирование, можно руководствоваться эффектом Рингельмана [10], который показывает, что: «индивидуальная производительность каждого члена группы падает: чем больше группа, тем ниже производительность каждого». При увеличении группы от 1 до 12 человек средние усилия, прилагаемые каждым, уменьшаются примерно на 10%. То есть раздутая команда неизменно «провалится» в производительности, если ее не делить на мелкие подгруппы и т. д., то есть если не применять специальных действий. Руководителю важно в команде найти баланс по количеству, чтобы и общая производительность была на уровне, и ротацию можно было бы осуществлять, не опасаясь за то, что сотрудники «умрут» от объема поступающей информации.

Ротация крайне важна для повышения квалификации, так как только в этом случае начинающий разработчик будет быстро расти в квалификации и понимать суть и состояние проекта. Если не ротировать сотрудников, то тем самым можно снизить мотивацию (вспоминаем, что все программисты в душе эгоистичны, и что заставить их сделать что-либо трудно, но заинтересовать чем-то общественным через решение личных задач вполне возможно. Agile имеет в своем арсенале такую классную вещь, как «Task volonteering», которая позволят брать «на себя» интересные задачи – это тоже эффективный психологический прием, который тоже поднимает квалификацию, но о нем в следующих выпусках).

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

Застой образуется, если сотрудников не поднимают ни в знаниях, ни в должности. Это плохо для компании, так как люди в итоге будут полностью демотивированы к работе. Этот факт подтверждается экспериментами Селигмана, Джонсона, Хирото [9] и многих других, которые вывели формулу «Выученной беспомощности». То есть если человеку постоянно давать задачи, которые он не может выполнить, если на него повесить ярлык «он ничего не может», то рано или поздно человек в это поверит!!! В экспериментах был выявлен главный фактор, вызывающий выученную беспомощность: предшествующий опыт влияния на испытуемого неприятного воздействия, неподконтрольного испытуемому.

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

Окончание статьи —>


Данный материал является частной записью члена сообщества Club.CNews.
Редакция CNews не несет ответственности за его содержание.

Психология программистов — Уползище — LiveJournal

Тезисы сегодняшнего доклада Романа Сидорченко на симпозиуме:

* Программисты думают сложными абстракциями. Не образами, не метафорами, не силлогизмами. Многоуровневыми многопоточными абстракциями. Просто потому что постоянно работают с ними, а переключаться между способами мышления — затратно.

* Как следствие, все программисты способны к глубокому, длительному трансовому сосредоточению (состоянию потока). Эта способность — и профессиональное показание, и профессиональная деформация. Программист норовит войти в рабочий транс по любому вопросу, который стоит размышлений.

* Всё сущее программисты категоризируют по удобным критериям. То, чему не удаётся дать компактное рабочее определение и разложить по категориям — не существует, потому что с ним невозможно работать.

* Гармонию, красоту и соразмерность сложных структур программисты чуют интуитивно. Потому что иначе со сложными абстракциями работать не получается. Дисгармония вызывает острое ощущение неправильности и почти физическое отвращение.

* Отстранённая метапозиция по отношению к чему угодно, которой психотерапевтов долго специально учат, у программистов встроена.

* «Вылечить» психику программиста до общечеловеческих стандартов — значит, с большой вероятностью, сделать его профнепригодным. Потому что потеряются вышеперечисленные особенности.

* Хотите работать с программистом? Выработайте общий разговорный словарь и не лезьте трогать в его психике то, что и так работает.

Дополню своими наблюдениями:

* Программисты — предельно честные реалисты. Написанный код либо работает, либо нет, и никакими словесными реверансами это не изменить. Программисты презирают пустые слова и символы статуса. Ты крут? Покажи свой работающий код. Это отношение распространяется на все сферы жизни.

* Программирование ближе всего не к математике, а к лингвистике и оперированию смыслами.

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

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

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

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

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

* Человеческие этика, мораль, обычаи и всё остальное — тоже только абстракции.

[ DW ]

Профессия «программист» с точки зрения психологии

Профессиограмма программиста

Английский математик, описавший вычислительную машину, ставший первым программистом была Ада Лавлей. В 40-е годы появились цифровые электронно-вычислительные машины (ЭВМ), которые были созданы американским математиком фон Нейманом.

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

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

Определение и классификация профессии

Определение 1

Программист – профессионал в составлении задач для электронно-вычислительных машин. Программисты это те люди, которые полностью поглощены своим делом.

Профессия программиста типизирует человека в качестве знака. Ее (профессию) относят к эвристическому классу. Профессиональная область – информатика. Высшее профессиональное образование считается базой. Деятельность протекает в офисе, в большей мере, сидя за компьютером.

Виды деятельности

Можно выделить в 12 пунктах основных задач программиста:

  1. Для того, чтобы что-то разработать, необходимо основываться на анализ математических алгоритмов, которые реализуют решение задач;
  2. Работник должен подходить профессионально к выбору метода численного решения задач, т.е. из сведений сложных формул прийти к элементарным действиям;
  3. Программист должен составлять детальный план решения задач или выбрать оптимальное решение алгоритма;
  4. В обязанности сотрудника входят определение:
    • информации;
    • ее объема;
    • структуры;
    • макетов;
    • схемы ввода;
    • обработки;
    • хранения;
    • воспроизведения информации;
    • методов контроля.
  5. Программист обязан профессионально формулировать возможности использования готовых программ;
  6. Также в обязанности входит выбор языка программирования, перевод на него моделей/алгоритмов;
  7. Программист должен подготовить, провести программы к тестированию, а после завершения при необходимости корректировать их;
  8. Формулирование инструкции по работе с программами;
  9. Программист принимает участие в формировании технической документации;
  10. Также работник следит за сопровождением внедренных программ и средств;
  11. Сотрудник занимается разработкой, внедрением способов автопрограммирования;
  12. Помимо этого в обязанности входят:
    • создание каталогов;
    • создание картотек стандартных программ.

Нужна помощь преподавателя?

Опиши задание — и наши эксперты тебе помогут!

Описать задание

Качества профессиональной деятельности

Программист должен обладать следующими способностями:

  • логического мышления;
  • гибкости мышления;
  • динамичности мышления;
  • оценивания различных ситуаций;
  • высоким уровнем развития памяти/ концентрации/ объема/ распределения/ переключения внимания/ технических способностей;
  • грамотным выражением мыслей;
  • математического склада ума;
  • развитого воображение.

К личным качествам программиста психологи относят:

  • внимательность;
  • аккуратность;
  • терпеливость;
  • настойчивость;
  • целеустремленность;
  • ответственность;
  • расположенность к интеллектуальным типам работы;
  • самостоятельное принятие решений;
  • наличие собственного мнения.

Показатели, которые мешают профессиональной деятельности:

  • невнимательность;
  • рассеянность;
  • нетерпеливость;
  • отсутствие логики;
  • отсутствие способности к мыслительному процессу;
  • сильная близорукость.

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

Общие сведения о профессии программиста

Профессиональные знания востребованы в таких областях как:

  • вычислительные центры;
  • предприятия/организации разных видов деятельности;
  • система банков;
  • научно-исследовательские институты;
  • школы, техникумы и т.д.

Плюсы профессии программиста:

  • разнообразная работа;
  • творческий подход.

Минус – непрерывное развитие.

Люди данной профессии обладают исследовательским и конвенционным типом личности.

Примечание 1

Человек с данным типом личности также может работать:

  • ревизором;
  • инженером-испытателем;
  • чертежником;
  • микробиологом;
  • статистиком;
  • химиком;
  • конструктором.

В Москве существует несколько вузов по профессиональной подготовке программистов. Обучиться профессии можно в:

  1. НИЯУ МИФИ;
  2. МЭСИ;
  3. МТУСИ;
  4. МИЭТ;
  5. РГТЭУ.

Автор: Анна Коврова

Преподаватель факультета психологии кафедры общей психологии. Кандидат психологических наук

Психология языком программирования: system_psiholog — LiveJournal

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

Точность программирования


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

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

Полученный результат может быть перепроверен много раз и он всегда должен быть одинаков. Поэтому программирование — несомненно точно по определению.

Психология и программирование. Две стороны одной медали


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

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



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

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

Вот точно так же психология до недавнего времени пыталась понять человека: по его реакциям.

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

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

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



Основная идея системно-векторной психологии состоит в том, что психика отдельно взятого человека — это часть целостной системы. Поэтому не имеет смысла изучать и рассматривать психику индивидума без понимания его роли в социуме. Эта роль, так называемая видовая роль – врожденная. Человек уже при рождении имеет в своей психике определенные заданности, называемые векторами. Вектор – это группа желаний, а также способностей к их реализации. У каждого человека свой набор векторов, и именно этот набор определяет куда устремятся его желания. У одного из нас проявится тяга к музыке и он станет композитором. Другому покажется привлекательной военная карьера, третий захочет стать врачом. Какие направления человеческой деятельности будут интересны взрослому человеку, а какие нет, заложено в нем самом еще в утробе матери. И эта заданность не наследуется генетически. Поэтому часто говорят, что в семье талантливых людей «природа на детях отдыхает».

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

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

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



Как это происходит? В первую очередь через осознание взаимосвязи между людьми, понимание, что мы все – с одной стороны: одна целая, неделимая, коллективная психика. А с другой – имеем индивидуальное сознание, в котором у нас возникает ложное ощущение собственной отдельности, единственности. Я – это только Я! Так считает любой нормальный человек.

Так что же общего между программированием и психологией? И почему почти все программисты интересуются психологией?

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

Именно звуковой вектор задает человеку огромный умственный потенциал, который затем находит свое применение в социуме. Люди со звуковым вектором, это те, кто генерирует идеи, делает открытия в науке. Только звуковику под силу решать сложные умственные задачи. Чем более сложные задачи он решает, тем больше удовольствия от жизни получает звуковик. До такой степени, что все остальные удовольствия становятся неинтересны. Взять, например, известных звуковиков нашего времени: Стив Джобс, Григорий Перельман, Марк Цукерберг.

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

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

Автор Елена Айдогдыева

Статья написана с использованием материалов тренингов по системно-векторной психологии Юрия Бурлана

Читайте также:
Ответ на вопрос системно-векторного психолога. Как забыть прошлое: разрушаем невидимые решетки обид
Поменять свою судьбу. С понедельника и каждый день
ВОПРОС СИСТЕМНО-ВЕКТОРНОМУ ПСИХОЛОГУ. Семейный бюджет: любовь любовью, а зарплата по расписанию


(PDF) Психология программирования: взгляд в головы программистов

Взгляд в головы программистов

7

ENDNOTE

1. Для получения дополнительной информации о группе по интересам «Психология программирования» см. Http: //www.ppig. org

ССЫЛКИ

Abrial, JR (1996). B-метод: присвоение программ значениям. Кембридж, Великобритания: Cambridge University

Press.

Блэквелл А. и Грин Т. (2003). Системы обозначений: когнитивные аспекты системы обозначений.В

Дж. М. Кэрролл (ред.), Модели, теории и структуры HCI: На пути к междисциплинарной науке (стр. 103–

133). Сан-Франциско: Издательство Морган Кауфманн.

Дирден А., Сиддики Дж. И Нагш А. (2003, апрель). Использование когнитивных измерений для сравнения методов прототипирования

. Документ, представленный на 15-м ежегодном семинаре по психологии интереса к программированию

Group, Кил, Великобритания.

Дехнади, С.(2006). Тестирование способностей к программированию. В: П. Ромеро, Дж. Гуд, Э. А. Чапарро и С. Брайант (ред.),

Труды 18-го ежегодного семинара группы по психологии программирования (PPIG ’06;

, стр. 22–37). Брайтон, Великобритания: Университет Сассекса.

де Раадт М., Уотсон Р. и Толеман М. (2002). Языковые тенденции на вводных курсах программирования. В

Э. Коэн и Э. Бойд (ред.), Труды конференции по информационным наукам и ИТ-образованию (InSITE ’02;

стр.329–337). Санта-Роза, Калифорния, США: Информационный научный институт.

Грин, Т. Р. Г. (1989). Когнитивные измерения обозначений. В A. Sutcliffe & L. Macaulay (Eds.), People and

Computers V (стр. 443–460). Кембридж, Великобритания: Издательство Кембриджского университета.

Кадода, Г., Стоун, Р., и Диапер, Д. (1999, январь). Желательные особенности образовательных программ для доказательства теорем: точка зрения когнитивных измерений

. Документ, представленный на 11-м ежегодном семинаре по психологии

Programming Interest Group, Лидс, Великобритания.

Мэнси Р. и Рид Н. (2004). Аспекты когнитивного стиля и программирования. В Э. Дуникан и Т. Грин (ред.),

Труды шестнадцатого ежегодного семинара группы по психологии программирования (PPIG

’04; стр. 1–9). Карлоу, Ирландия: Технологический институт.

Группа управления объектами (2007). Введение в унифицированный язык моделирования OMG (UML). Получено 11 апреля

г. и

г. с сайта http://www.omg.org/gettingstarted/what_is_uml.htm

Саяниеми Дж. (2002). Визуализация ролей переменных для начинающих программистов. В J. Kuljis, L. Baldwin, & R.

Scoble (Eds.), Proceedings of the 17th Annual Workshop of the Psychology of Programming Interest

Group (PPIG ’02; pp. 111–127). Аксбридж, Великобритания: Университет Брунеля.

Саджаниеми Дж. И Наварро Прието Р. (2005). Роли переменных в знаниях экспертов в области программирования. В

П. Ромеро, Дж.Good, S. Bryant, & E. A. Chaparro (Eds.), Proceedings of the 17th Annual Workshop of

Psychology of Programming Interest Group (стр. 145–159). Брайтон, Великобритания: Университет Сассекса.

Саяниеми Дж. И Ниемеляйнен А. (1989). Редактирование программ на основе переменных планов: когнитивный подход к управлению программой

. В материалах Третьей международной конференции по человеко-компьютерному взаимодействию

Взаимодействие при разработке и использовании человеко-компьютерных интерфейсов и систем, основанных на знаниях (2-е изд.;

с. 66–73). Нью-Йорк: Elsevier Science Inc.

Шнейдерман, Б. (1986). Эмпирические исследования программистов: территория, тропы, направления. В Э. Солоуэй и

С. Айенгар (ред.), Эмпирические исследования программистов (стр. 1–12). Норвуд, Нью-Джерси, США: Ablex Publishing Co.

Strauss, A., & Corbin, J. (1990). Основы качественного исследования: процедуры и методы обоснованной теории.

Лондон: Sage Publications, Inc.

Wiedenbeck, S., ЛаБель, Д., и Каин, В. Н. Р. (2004). Факторы, влияющие на результаты курса вводного программирования

. В Э. Дуникан и Т. Грин (ред.), Материалы шестнадцатого ежегодного семинара группы интересов

Психология программирования (PPIG ’04; стр. 97–110). Карлоу, Ирландия: Технологический институт.

Психология программирования | Дилан Миус

Психология компьютерного программирования — Джеральд М. Вайнберг

Недавно я прочитал Психологию компьютерного программирования, написанную Джеральдом М.Вайнберг. Изначально книга была опубликована в 1971 году, но была переиздана в 2011 году. (Я прочитал ее на белой бумаге, и она выглядела великолепно! Так что не беспокойтесь о возрасте книги, если вы опасаетесь, что в ней она не будет хорошо смотреться. формат электронной книги).

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

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

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

Вот некоторые вещи, которые я выделил на протяжении всей книги.Если вам интересно увидеть все основные моменты, их можно найти на моей странице goodreads.

Мы увидим, как человек придает индивидуальность своей программе и как программирование придает форму самому программисту.

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

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

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

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

Идеальная команда была бы выбрана как для навыков межличностного общения, так и для навыков программирования (…)

Многие тесты кодирования в [BigCo] сосредоточены на решении технических проблем.Лично я предпочитаю работать с 1x-инженером с хорошими мягкими навыками, а не с 10-кратным инженером, который не может общаться. Если вы когда-либо работали в неблагополучной команде, вы почувствуете, насколько важны навыки межличностного общения. В конце концов, программирование — это командный вид спорта, поэтому, если у вас дисфункциональная команда, как могут появиться функциональные программы? 🙂 (В идеале, возьмите 10-кратного инженера с навыками межличностного общения!)

Даже когда больше нечего делать, ведение документации никогда не является добровольной альтернативой.

Я улыбаюсь, когда думаю, что полвека назад никто не хотел писать документацию. Это также может помочь объяснить, почему документация часто оказывается устаревшей или плохой. Но бессовестно цитировать Дика Брэндона »« Документация — это как секс: когда это хорошо, это очень, очень хорошо; а когда плохо, это лучше, чем ничего ».

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

Психология программирования

Серебряное юбилейное издание

ISBN: 0-932633-42-0 384 страницы в мягкой обложке

Издательство Дорсет Хаус

(в переводе на японский, корейский, немецкий, китайский)

«Это лучшая книга по компьютерному программированию из когда-либо написанных».

— Datamation

Образец и / или Купить книгу через:

KINDLE

Barnes & Noble

Smashwords

Купить на Amazon.com

Пусть эти выдающиеся рецензенты говорят сами за себя:

J.J. Hirschfelder, Computing Отзывы:

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

Вот что сказала Сью Петерсен в Visual Developer Magazine:

Я даже не претендую на объективность насчет этой книги.Джерри Вайнберг — наставник и друг, а также коллега и один из лучших мыслителей и писателей нашей профессии. Я слежу за развитием этого нового издания уже пару лет. У меня была возможность прокомментировать рукопись в процессе работы, как и у многих других его учеников, но я был занят и так и не смог ее прочитать. Так что я пришел к нему свежим, когда он недавно упал на мой порог.

«Психология» была написана в 1969 году, опубликована в 1971 году и с тех пор постоянно печатается, что не может похвастаться ни одной другой книгой по информатике.В этом новом издании Джерри смотрит на то, где мы были 30 лет назад, где мы находимся сейчас и где мы могли бы быть в будущем. Вместо того чтобы изменять исходный текст, он добавляет новые комментарии к каждой главе. Это позволяет читателю сравнивать и противопоставлять свои мысли на протяжении десятилетий, демонстрируя ошибки и упущения, а также нити, которые принесли свои плоды.

Технология в психологии явно устарела, но, тем не менее, мне было интересно отметить «текущие» идеи, которые впоследствии стали настолько влиятельными.Психология была написана до «Мифического человека-месяца» Фреда Брука, но Джерри вскользь упоминает мысли Брукса о командах главных программистов. Он был написан через год после того, как заявление Дейкстры «Перейти к заявлению, признанному вредным», вызвало бурю споров, но до того, как структурированное программирование охватило всю область, и Джерри делает несколько комментариев о читабельном коде, которые демонстрируют брожение идей, из которых возникло структурированное программирование.

Большинство «людей» в психологии выдержали испытание временем лучше, чем технологии.Комментарии Джерри сегодня так же актуальны, как и 25 лет назад. «… Хорошие программисты создаются, а не рождаются; поэтому мы должны обратить внимание на процесс производства или обучения ». (стр.176)

Эта единственная проблема — коммуникация — была в центре работы Джерри на протяжении десятилетий. В то время он не знал, что психология должна была составить основу работы его жизни. Он посвятил 30 лет изучению психологии, и здесь очевидны корни его недавних работ. Это не моя самая любимая книга Вайнберга, «Стать техническим лидером», вероятно, удостоена такой чести.Но психология ценна как история в области, которая слишком готова повторить ошибки своего прошлого. Прочтите «Психологию» как картину того, где мы были, где находимся сейчас и куда нам нужно двигаться дальше. Прочтите это как указатель мышления одного из самых влиятельных фигур в нашей области. © Сью Петерсен 1999

Вот что Джоанна Ротман http://www.jrothman.com сказала в своем информационном бюллетене:

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

Программирование без эго происходит, когда техническая группа коллег использует частые и часто экспертные проверки для поиска дефектов в разрабатываемом программном обеспечении. Цель состоит в том, чтобы каждый нашел дефекты, включая автора, а не доказал, что рабочий продукт не имеет дефектов. Люди обмениваются рабочими продуктами для рецензирования, ожидая, что как авторы они будут делать ошибки, а как рецензенты, они найдут ошибки.В конечном итоге каждый учится на своих ошибках и ошибках других людей. Вот почему это называется программированием без эго. Мое эго не привязано к моему «идеальному» или «несовершенному» продукту работы. Мое эго связано только с моими попытками выполнять работу наилучшим образом, которую я знаю, и учиться на своих ошибках, а не с первоначальным результатом моей работы.

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

.

Программирование как результат деятельности человека

Программирование как социальная деятельность

Программирование как отдельная деятельность

Инструменты программирования

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

Мне особенно понравились комментарии к «Главе 3: Как мы можем изучать программирование?» Вайнберг говорит: «Менеджеры, которые обращают внимание на людей, добиваются хороших результатов. Многие менеджеры (особенно те, кто когда-то были программистами) хотят, чтобы их люди вели себя как модули кода. Эти менеджеры считают, что люди должны функционировать как маленькие черные ящики, в которые загружаются задачи и из которых выходит работа, без необходимости наблюдения и особенно взаимодействия.«В последнее время встречались с такими менеджерами?

Мне также понравились комментарии к «Главе 13: Другие инструменты программирования». Вайнберг говорит в своих комментариях: «Ну, на самом деле, я не слишком много скучаю по картам (и еще меньше скучаю по бумажной ленте!), Но я достаточно негодяй, чтобы тосковать по некоторым из вынужденных задержек & emdash; задержек, которые привели меня к время подумать о том, что я делал. Что бы ни принесло будущее программирования, я твердо верю, что оно по-прежнему вознаграждает размышления над бездумностью. … Должны ли мы делать больше для поддержки программиста, которому нужно время, чтобы поразмыслить & emdash ;, и многое другое для поддержки того, кто этого не делает? » Многое из того, что я делаю с людьми и их организациями, — это помогать им увидеть, что они делают и как они это делают — это рефлексия.

Иногда старые вещи — это просто вкусности. Старые книги могут стать еще лучше, если их пересмотреть, чтобы оценить свои пророчества и мудрые советы.

Вот что сказал главный редактор IEEE Software Стив МакКоннелл:

«Психология компьютерного программирования» Джеральда Вайнберга находится на вершине моего списка любимых книг по разработке программного обеспечения. Следующий отрывок [не включен здесь] из серебряного юбилейного издания описывает очень неправильно понимаемую идею «программирования без эго». Некоторым читателям 25 лет назад это должно было казаться фантастической нирваной программирования.С тех пор программирование без эго привело к появлению множества мощных методов проверки, включая (по крайней мере частично) идею с открытым исходным кодом о том, что «при достаточном внимании к делу все ошибки мелкие». Хорошие идеи программной инженерии переживут определенные технологии на десятилетия, и нет лучшего свидетельства этого, чем идеи, содержащиеся в «Психологии компьютерного программирования».

Вот что сказал Computerworld:

Устранение несоответствий остается ключевым фактором спустя 25 лет

Майкл Шраге

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

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

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

Перечитывание книги дало воодушевление: Психология Вайнберга — классика, потому что он определил проблему, которая со временем станет более важной & emdash; забота и питание программистов и команд программистов. Даже будучи компьютерным фанатом-подростком, имеющим доступ к Имсаю и Платону, я чувствовал, что технические проблемы подчинены человеческим проблемам.

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

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

В своем Серебряном издании Вайнберг отмечает, что его бесчисленное количество раз благодарили за это прозрение руководства. Меня до сих пор поражает количество фирм, которые не ценят такую ​​эвристику дизайна.Но, как отмечает Вайнберг, «. . . отсутствие навыков программирования никогда не было проблемой. Проблема всегда была в отсутствии управленческих навыков; отсутствие навыков работы с программным обеспечением было просто удобным оправданием для тех менеджеров, которым не хватало уважения ».

Я не из тех, кто чувствует раздражение, но я понимаю, что основная истина, на которой Вайнберг сосредоточился несколько десятилетий назад, заключалась в том, что это будут деликатные вопросы & emdash; не новые инструменты, технологии или языки & emdash; это окажет наибольшее влияние на качество разработки программного обеспечения.Как и «Мифический человеко-месяц» Фреда Брукса, «Психология» Вайнберга прочна, потому что признает, что организации являются пленниками своих патологий.

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

Для меня перечитывание «Психологии» было не столько путешествием по переулку памяти, сколько напоминанием о с трудом извлеченном уроке: во время технологической турбулентности и цифровой нестабильности рычаги управления часто исходят от тех вещей, которые не меняются & emdash; несмотря на все наши усилия.

Шраге — научный сотрудник MIT Media Lab и автор книги No More Teams! Его адрес электронной почты [электронная почта защищена]

Вот что Эд Йордон написал на The Cutter IT E-Mail Advisor, еженедельной службе электронной почты для подписчиков на * Cutter IT Journal * ™.

ВОЗРОЖДЕНИЕ КЛАССИКИ

Давным-давно, в том, что сейчас кажется далекой-далекой галактикой, гуру программного обеспечения по имени Джеральд Вайнберг написал книгу под названием «Психология компьютерного программирования». Несколько моих коллег и я случайно наткнулись на книгу, когда она впервые появилась в 1971 году, и мы все были потрясены — никто никогда не предполагал, что разработку программного обеспечения можно рассматривать как деятельность человека. С годами книга стала международным бестселлером, но затем она нарушила прихоти и капризы крупных издательских компаний и незаметно исчезла.Небольшой, но очень влиятельный издатель, Дорсет Хаус, спас книгу в конце 1980-х и снова сделал ее доступной, но новое поколение разработчиков программного обеспечения не обратило на нее внимания. В конце концов, как могла книга, написанная в изначальную эпоху начала 1970-х годов, иметь какое-либо отношение к миру Java и Интернета в конце 1990-х годов?

К моему удовольствию, недавно в моем почтовом ящике появилось новое «серебряное юбилейное издание» опуса Вайнберга. Он также опубликован Dorset House и содержит комментарии автора по главам по ключевым темам, обсуждаемым на протяжении всей книги:

* Программирование как социальная деятельность

* Психологический менеджмент

* Программирование без эго

* Команда программистов

* Общие социальные проблемы крупных проектов

* Интеллект или способность решать проблемы

* Мотивация, обучение и опыт

* Некоторые принципы разработки языков программирования

Глава, озаглавленная «Что делает хорошую программу?» показывает, как все изменилось.В первоначальной главе обсуждались такие очевидные характеристики, как эффективность и адаптируемость, но в своем комментарии Вайнберг теперь отмечает, что «самый большой НОВЫЙ фактор в определении того, как мы оцениваем качество кода, — это экономический фактор. Программа, которая продает и приносит прибыль, очевидно, лучше, чем та, которая не работает. По крайней мере, несколько непрограммистов сказали мне, что Билл Гейтс — величайший программист в мире. За мою карьеру программиста большая часть кода операционной системы, которую я написал, была отдана, поэтому, естественно, я с подозрением отношусь к этой финансовой мере! »

Вряд ли стоит упоминать, что компьютерные аппаратные технологии улучшились на несколько порядков за 25 лет, прошедшие с момента первой публикации «Психологии компьютерного программирования».Напротив, можно утверждать, что человеческая природа нисколько не изменилась за тот же период; в конце концов, люди остаются людьми. Но вполне возможно, что наши ценности, восприятие и ожидания в отношении компьютеров ИЗМЕНИЛИСЬ, и это может оказать огромное влияние на то, как мы ведем себя. В то время мы не разрабатывали программное обеспечение для широкой публики, и мы, конечно, не ожидали, что наше программное обеспечение может подвергнуть публику рискам, присущим сегодняшней дилемме 2000 года.

Являетесь ли вы частью поколения 1960-х и 1970-х годов или частью нынешнего поколения 1980-х и 1990-х годов, вы обязаны приобрести копию этой замечательной книги ради себя.После того, как вы его усвоите, вам следует найти все девять других учебников Вайнберга, опубликованных Dorset House (в Интернете по адресу http://www.dorsethouse.com). Каждый из них — жемчужина.

Чао!

Эд Йордон

Cutter IT E-Mail Advisor

Серебряное юбилейное издание в золоте

Рецензент: Б. Скотт Андерсен из Актона, Массачусетс, США (Источник: Amazon.com)

Серебряное юбилейное издание — это обновленная версия классического произведения, первоначально опубликованного в 1971 году.Как это все еще может быть актуально? Легко: люди на самом деле не изменились.

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

О чем все это? Вайнберг пишет: «Эта книга имеет только одну главную цель — дать толчок началу новой области исследований: компьютерного программирования как человеческой деятельности или, короче говоря, психологии компьютерного программирования.Все остальные цели подчинены этой ». Действительно, компьютерное программирование как искусство и дисциплина изучалось как индивидуально, так и в группах. Эта книга может стать началом этих благородных усилий.

Не пугайтесь технологии, которые Вайнберг иногда использует в тексте. На момент написания этой книги FORTRAN, PL / 1 и APL были широко распространены, а OS / 360 была стандартом де-факто. Если вас беспокоят отголоски прошлого, не обращайте на них внимания! Вместо этого сконцентрируйтесь на главной теме Вайнберга: людях, разрабатывающих программные системы.Например, рассмотрим следующее: «… средний менеджер по программированию предпочел бы, чтобы проект оценивался в двенадцать месяцев и занимал двенадцать месяцев, чем тот же проект оценивался в шесть месяцев и занимал девять месяцев. Это область, в которой психологическое исследование может быть полезным, но есть свидетельства из других ситуаций, что людей раздражает не средняя продолжительность расчетного времени, а, скорее, стандартное отклонение фактически затраченного времени ». Конечно, это понятие применимо сегодня так же, как и тогда.Вайнберг дает многочисленные убедительные идеи по всему тексту, которые выдержали испытание временем. Он понял это тогда — и до сих пор верно.

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

Психология программистов — DZone Agile

Последние пару дней я думал, что должны быть некоторые фундаментальные различия в том, как программисты думают, действуют и работают по сравнению с другими профессионалами или простыми людьми.Итак, здесь я поделюсь некоторыми моментами, которые я выяснил и изучил.
  1. Программисты обычно обладают большей продолжительностью внимания и большей способностью к концентрации, чем большинство населения. [1]
  2. Программисты по натуре творческие, они всегда любят исследовать, вводить новшества и создавать что-то новое, поэтому им не нравятся проекты обслуживания [1].
  3. Программисты покидают организацию, когда у них нет работы, и даже когда-то, когда у них больше нет творческой работы.Во многих других профессиях люди любят оставаться, когда они не работают.
  4. Хорошие программисты больше склонны к лидерству, чем к менеджменту, т.е. делать лучшее, а не делать лучше всего, ориентированы на людей, а не на вещи, эффективность, а не эффективность, принципы, а не методы, ориентированы на направление, а не на скорость и т. Д.
  5. Программирование требует точности мышления. Это заставляет программистов применять точность и в социальных вопросах.
  6. Обычно они не любят участвовать ради участия (что иногда отрицательно влияет на них, поскольку в социальной жизни люди считают их неактивными членами). Они продолжают искать что-то логичное, чтобы добавить, сказать или спросить. Поскольку это не очень логичные вещи в общих разговорах (а просто разговоры ради разговоров и баллы ради баллов), поэтому они иногда выглядят очень спокойно. Но когда они встают, они обычно сопротивляются на очень высоком уровне, предлагая логические аргументы.
  7. В обычной жизни они не любят выполнять процедурную (повторяющуюся или рутинную) работу, но любят делегировать такие задачи. Например, подсчет наличных денег, составление балансовых отчетов, ведение счетов, глажка тряпок, мойка машины, поддержание чистоты в комнате (это не значит, что они не любят чистоту, а наоборот, и любят, если кто-то делает это за них). Это также из-за их общей творческой и логической позиции.
  8. Часто говорят, что программисты — интроверты [1].Хотя это не совсем так. Это происходит (когда это применимо) потому, что они практикуют более длительное внимание, большую концентрацию, а также применяют логику в социальных аспектах (и даже когда они думают в одиночку), что заставляет людей называть их интровертами. Но именно красота логики позволяет им чувствовать себя комфортно.
  9. Они высоко ценят и всегда стремятся изучить психологические и философские теории. Как дополняет их логика.
  10. Они в основном идеалисты.И очень озабочены своей рабочей средой, общей эстетикой офиса и т. Д.
  11. Надо помнить, баланс добавляет красоты в жизнь. По сути, красота означает, что все атрибуты нашей личности находятся в равновесии. Если мы потеряем одно свойство из-за нашего отношения, это повлияет на красоту жизни. Но их никогда не опаздывают всегда, а впереди у нас много дел. Итак, мы должны жить сбалансированной жизнью, и мы знаем, что сможем это сделать.

    Блог Асифа Шахзада
    Ссылки:
    1.Понимание психологии программирования в Devx, Брайан Доллери.

Кто программирует ваш мозг?

Эта статья была написана Дэвидом Смитштейном, сенсеем из San Francisco Isshin-Ryu Academy и владельцем компании Lean & Mean Business Systems, в Сан-Франциско, Калифорния. Перепечатано с его разрешения.

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

Некоторые примеры включают:

Так что же такое важная вещь, называемая «практикой», и как можно сравнивать вещи из этого списка? Ясно, что вещи в этом списке не все одинаковы, и многие сами по себе не обязательно были предназначены для личной практики.Однако все они способны привести людей к одной и той же цели: осознанию того, что человек — это не просто его или ее мысли; на самом деле мы намного больше.

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

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

У нас часто бывают мысли, которые являются реакцией на жизнь и на окружающих. Это можно понимать как программное обеспечение, установленное в операционной системе. Наиболее важная для большинства из нас «интеллектуальная программа» была установлена ​​в детстве, когда на жестком диске было больше всего места, и мы были открыты для новых установок. Большинство из нас принимают эти мысли как должное за истину, а не считают, что они исходят изнутри. Цель личной практики — помочь человеку увидеть, что у каждого из нас есть собственная «операционная система» внутри нас, и она способна устанавливать и деинсталлировать, а также запускать или не запускать другое «программное обеспечение» или мысли. , что у нас есть.

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

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

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

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

Боевые искусства, как и йога, — это искусство движения. Изучение движений дает возможность много подумать о процессе обучения.Простой пример: вы думаете: «Это сложно, я не могу». Но, будучи терпеливым и решительным, вы продолжаете практиковать, а затем обнаруживаете, что действительно можете. Тогда вам может прийти в голову спросить себя: «Почему у меня возникла такая мысль о том, что я не смогу сделать это, хотя очевидно, что могу?» Есть ли у вас мысль «Я не могу этого сделать» обо всем? Была ли это необходимая или полезная мысль? Это начало процесса развития способности думать о наших собственных мыслях.

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

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

«Ибо одержать сотню побед в сотне сражений — не вершина мастерства. Сдержать врага без боя — это вершина мастерства ». — Сунь Цзы

[эта статья была впервые опубликована на веб-сайте Академии Иссин-Рю в Сан-Франциско]

Фото Пола Гилхэма / Getty Images для DAGOC

Психология программирования — Человеческие технологии

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

Если вы уверены, что имеете правильный веб-адрес, но столкнулись с ошибкой, обратитесь в Администрация сайта.

Спасибо.

Возможно, вы искали…

  • Психология программирования .
  • Том 13, Выпуск 1 Специальный выпуск о хореографии человека и технологии: тело, движение и пространство в выразительных взаимодействиях, май 2017 г., стр. 1-144
  • Том 10, Выпуск 1 Специальный выпуск о поддержке неотложных базовых навыков чтения у детей.Май 2014 г., стр. 1–60.
  • Том 3, Выпуск 1 Специальный выпуск о культуре, творчестве и технологиях. Февраль 2007 г., стр. 1–115.
  • Том 7, Выпуск 1 Специальный выпуск о распределенном лидерстве и онлайн-сообществах.Май 2011 г., стр. 1–102.
  • Том 12, Выпуск 1 Специальный выпуск «Хореографии человека и технологии: тело, движение и пространство». Май 2016, с. 1–102.
  • Том 5, Выпуск 1 Специальный выпуск о конце познания? Май 2009, стр.1–115
  • Том 4, Выпуск 1 Спецвыпуск по психологии программирования. Май 2008 г., стр. 1–91.
  • Том 6, Выпуск 1 Специальный выпуск о творчестве и обосновании в разработке программного обеспечения. Май 2010, стр.1–150
  • Том 2, Выпуск 1 Спецвыпуск о человеческих технологиях для особых нужд. Апрель 2006 г., стр. 1–153.
  • Том 15, Выпуск 1 Февраль 2019, стр. 1-135.

Краткое введение в Python для исследований в области психологии

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

Эта статья призвана представить Python как надежный язык программирования в психологических исследованиях пользователям с минимальным опытом программирования.Хотя в этой статье основное внимание уделяется Python, это один из многих языков, которые могут помочь повысить продуктивность исследований. Например, R является столь же популярным языком программирования с открытым исходным кодом, используемым в науке, и выделяется в организации, анализе и визуализации данных.

Почему Python?

Python — мощный язык программирования общего назначения, который становится все более популярным инструментом в исследованиях. Он интуитивно понятен, имеет процветающее онлайн-сообщество и имеет открытый исходный код (бесплатный для вас и других).Его популярность отчасти объясняется простотой использования и универсальностью. Python может выполнять большинство повседневных исследовательских задач и может использоваться на нескольких этапах исследовательского конвейера (например, проведение экспериментов с участниками, организация данных, обработка / манипулирование данными, статистический анализ / моделирование и визуализация). Вместо того, чтобы использовать разные программы для выполнения разных задач, Python может сэкономить исследователям значительное количество времени и сэкономить нервы.

Учитывая движение к открытой и воспроизводимой науке, Python предлагает преимущество перед другим проприетарным программным обеспечением, которое часто требует дорогих лицензий и поэтому недоступно для некоторых исследователей.С Python после того, как вы напишете и поделитесь своим «кодом», другие могут легко получить к нему доступ и использовать, не сталкиваясь с проблемами платного доступа или лицензирования. Этот управляемый сообществом аспект позволяет разработчикам развертывать сторонние «пакеты» (также называемые «библиотеками») или легко обмениваемые пакеты кода (часто включающие документацию, примеры данных и учебные пособия), которые расширяют базовую функциональность Python. Пакеты значительно экономят ваше время. Если у вас есть проблема, которую нужно решить (например, статистика, построение графиков, фильтрация данных), вероятно, кто-то уже решил ее и развернул пакет, открытый для использования.

Python в настоящее время доступен в версиях 2.7 или 3.X. Python 3 чище и быстрее, но обратите внимание, что некоторые сторонние пакеты по-прежнему предлагают поддержку только 2.7. Обычно текущие пакеты пишутся или обновляются для использования с Python 3 (разработка для Python 2 прекращена). Загрузите предпочитаемую версию Python на веб-сайт или можете установить Python через Anaconda, полезный менеджер среды, который поставляется с набором множества полезных предустановленных пакетов с открытым исходным кодом.Поскольку пакеты иногда зависят от других пакетов, Anaconda избавляет исследователей от любых проблем совместимости, когда разработчики обновляют свои пакеты.

Что я могу сделать?

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

  • Сбор данных. Использование Python для сбора данных привлекательно, потому что эксперименты по программированию дают пользователям полный контроль над каждым аспектом процедуры психологической задачи.Например, пользователи могут создавать электронные опросы или поведенческие эксперименты с гибкостью в отношении того, как они представляют визуальные или звуковые стимулы (например, формы, текст, изображения, звуки, анимацию, фильмы), записывать точные временные измерения (например, начало и продолжительность стимулов), и собирать поведенческие реакции (например, начало нажатия кнопки, время реакции). PsychoPy (Peirce, et al., 2019) — это пакет Python, который позволяет исследователям проводить широкий спектр нейробиологических и психологических экспериментов. Вы можете настроить аспекты своих экспериментов с помощью графического пользовательского интерфейса PsychoPy (представление Builder).В качестве альтернативы исследователи могут написать код для всего эксперимента с нуля. Если вы решили писать поведенческие эксперименты с использованием кода Python, я рекомендую начать с поиска онлайн-руководств и редактирования чужого кода в качестве шаблона для вашего эксперимента.
  • Обработка и организация данных. Base Python содержит множество полезных инструментов для очистки и организации данных, позволяющих многократно создавать, перемещать, копировать или переименовывать файлы / папки / каталоги. Модуль os позволяет пользователям использовать Python для взаимодействия с базовой операционной системой компьютера (например, с.g., Windows, Mac, Linux), что особенно полезно при работе с большими объемами данных, которые не хранятся в форматах, подобных электронным таблицам Excel. Пакет pandas — это гибкий и интуитивно понятный инструмент, который позволяет исследователям работать со всеми видами данных, такими как текстовые данные, данные, разделенные запятыми, или электронные таблицы в стиле Excel. Подобные данные могут храниться в «DataFrames», а pandas упрощает выполнение операций с данными, помеченными как строками, так и столбцами, например, оценка данных анкеты или слияние и изменение наборов данных.
  • Анализ данных. Python также может выполнять широкий спектр статистических данных для анализа данных. Например, используя pandas, вы можете выполнить быструю парную корреляцию Пирсона между данными по столбцам (если наблюдения перечислены в строках). Существуют также более формальные пакеты для статистики, включая statsmodels, модуль scipy.stats в SciPy и Pymer4.
  • Визуализация данных. Как только вы освоитесь, модуль matplotlib.pyplt в пакете Matplotlib может создавать всевозможные графики.Seaborn также является мощным и набирающим популярность пакетом, основанным на Matplotlib, который создает красивую статистическую графику.

С чего начать?

Обучение программированию и изучение нового языка программирования могут быть очень разными. Например, два разных языка программирования могут выполнять одну и ту же задачу или давать одинаковый результат, но методы могут отличаться. Это часто происходит из-за того, что языки имеют разный «синтаксис» или правила для каждого языка.Я рекомендую начать с описания задач, которых вы хотите достичь при программировании, с помощью блок-схем. Блок-схемы могут помочь вам визуализировать ваш «алгоритм» или набор операций или инструкций, определенных для достижения желаемого результата. Алгоритмическое мышление будет иметь решающее значение для вашего успеха. Когда у вас есть алгоритм, попробуйте кодировать его, используя синтаксис языка.

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

  • Запишитесь на курс в вашем учреждении. Большинство учебных заведений предлагают курсы для ознакомления студентов с программированием. Если ваше учреждение не предлагает курсы, проверьте, входит ли оно в консорциум колледжей / университетов в вашем регионе.Если это так, вы можете найти поблизости подходящий курс.
  • Записаться в мастерскую. Найдите академическую мастерскую по вашей специальности. Обычно объявления о новых семинарах рассылаются по различным рассылкам (попробуйте подписаться на рассылку вашего подразделения APA). Некоторые факультеты университетов организуют местные семинары, чтобы создать возможности для обучения студентов. Если вы планируете посетить научную конференцию, проверьте, будут ли на ней также проводиться семинары. Некоторые семинары предлагают путевки в помощь стажерам.Большинство семинаров по программированию также публикуют свои материалы в Интернете, поэтому обязательно проверьте их, если вы не можете присутствовать.
  • Найдите бесплатные ресурсы в Интернете. В Интернете есть много открытых ресурсов. Например, простой поиск в Google, такой как «как выполнить t-тест в python», может дать чрезвычайно полезные результаты. Интернет-форумы, такие как StackOverflow, позволяют пользователям задавать и отвечать на вопросы о всех видах языков программирования. Список полезных ресурсов и руководств также доступен ниже.

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

Список литературы

Пирс, Дж. У., Грей, Дж. Р., Симпсон, С., МакАскилл, М. Р., Хёхенбергер, Р., Сого, Х., Кастман, Э., Линделов, Дж. (2019). PsychoPy2: эксперименты над поведением стали проще. Методы исследования поведения, 51 (1), 195-203.

Дополнительные полезные ресурсы (Python и R)

Питон

R

Об авторе

Шон Роудс — социальный / личностный представитель в Научном студенческом совете APA.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *