Психология программирования
При создании высокоэффективных, надежных и безопасных программ (программных комплексов), отвечающих самым современным требованиям к их разработке, эксплуатации и модернизации необходимо не только умело пользоваться предоставляемой вычислительной и программной базой современных компьютеров, но и учитывать интуицию и опыт разработчиков языков программирования и прикладных систем. Помимо этого, целесообразно дополнять процесс разработки программ экспериментальными исследованиями, которые основываются на применении концепции психологии мышления при исследовании проблем вычислительной математики и информатики. Такой союз вычислительных, информационных систем и программирования принято называть психологией программирования.
Психология программирования— это наука о действиях человека, имеющего дело с вычислительными и информационными ресурсами автоматизированных систем, в которой знания о возможностях и способностях человека как разработчика данных систем могут быть углублены с помощью методов экспериментальной психологии, анализа процессов мышления и восприятия, методов социальной, индивидуальной и производственной психологии.
К целям психологии программирования наряду с улучшением использования компьютера, основанного на глубоком знании свойств мышления человека, относится и определение, как правило, экспериментальным путем, склонностей и способностей программиста как личности. Особенности личности играют критическую роль в определении (исследовании) рабочего стиля отдельного программиста, а также особенностей его поведения в коллективе разработчиков программного обеспечения. Ниже приводится список характеристик личности и их предполагаемых связей с программированием. При этом особое внимание уделяется тем личным качествам программиста, которые могут, в той или иной степени, оказать влияние на надежность и безопасность разрабатываемого им программного обеспечения.
Внутренняя/внешняя управляемость.Личности с выраженной внутренней управляемостью стараются подчинять себе обстоятельства и убеждены в способности сделать это, а также в способности повлиять на свое окружение и управлять событиями. Личности с внешней управляемостью (наиболее уязвимы с точки зрения обеспечения безопасности программного обеспечения) чувствуют себя жертвами не зависящих от них обстоятельств и легко позволяют другим доминировать над ними.
Высокая/низкая мотивация.Личности с высокой степенью мотивации способны разрабатывать очень сложные и сравнительно надежные программы. Руководители, способные повысить уровень мотивации, в то же время, могут стимулировать своих сотрудников к созданию программ с высоким уровнем их безопасности.
Умение быть точным.
Кроме того, психология программирования изучает, с точки зрения особенностей создания безопасного программного обеспечения, такие характеристики качества личности как исполнительность, терпимость к неопределенности, эгоизм, степень увлеченности, склонность к риску, самооценку программиста и личные отношения в коллективе.
Корпоративная этика
Особый психологический настрой и моральные стимулы программисту может создать особые корпоративные условия его деятельности, в частности различные моральные обязательства, оформленные в виде кодексов чести. Ниже приводится «Кодекс чести пользователя компьютера» [СМ].
Обещаю не использовать компьютер в ущерб другим людям.
Обещаю не вмешиваться в работу компьютера других людей.
Обещаю «не совать нос» в компьютерные файлы других людей.
Обещаю не использовать компьютер для воровства.
Обещаю не использовать компьютер для лжесвидетельства.
Обещаю не копировать и не использовать чужие программы, которые были оплачены не мною.
Обещаю не использовать компьютерные ресурсы других людей без разрешения и соответствующей компенсации.
Обещаю не присваивать результаты интеллектуального труда других людей.
Обещаю думать об общественных последствиях разрабатываемых мною программ или систем.
Обещаю всегда использовать компьютер с наибольшей пользой для живущих ныне и будущих поколений.
studfiles.net
Психология языком программирования: system_psiholog — LiveJournal
Что может быть общего между такой наукой, как психология и программированием? Казалось бы ничего. Но общее все-таки есть. Оно хотя бы в том, что и тех, и других тянет на поиск вопросов о том, кто они, зачем, в чем смысл жизни человечества и конкретного субъекта. В конечном итоге, объединяет их ведущее желание в познании себя, только идут они разными путями.Точность программирования
Программирование относится к точному виду деятельности. Программист всегда точно и определенно знает, какая строчка кода делает ту или иную работу, и какой результат будет на выходе. У него всегда есть возможность запустить программу и проверить, насколько он находится на верном пути. Программист не работает вслепую, на авось. Рабочая среда программирования устроена очень жестко. Один неверный символ – и вся программа будет нарушена. Программа либо вовсе откажется запускаться, либо на выходе мы получим не тот результат, который ожидали.
У каждого программиста, несмотря на общепринятые правила, есть свой стиль написания программ, и, тем не менее, когда он видит перед собой программу, написанную другим программистом, он в состоянии разобраться в ней, даже если он видит всего лишь фрагмент кода и не знает конечной цели всей программы. То, что доступно его пониманию, это какой код был использован в программе и какой промежуточный эффект дают блоки кода, которые он видит.
В программировании ставятся конкретные задачи, в решении которых существует некоторая свобода в оформлении кода, а так же в выборе решения. Но конечный результат будет всегда одинаков, несмотря на то, какой программист писал код.
Полученный результат может быть перепроверен много раз и он всегда должен быть одинаков. Поэтому программирование — несомненно точно по определению.
Психология и программирование. Две стороны одной медали
Все понятно о программировании, но при чем тут психология? При том, что практически нет такого программиста, который не интересовался бы психологией. И это не случайно. Почему, поясню позже.
Как бы там ни было, а все науки, точные и гуманитарные, есть не что иное как плод нашего ума. А наш ум это производная нашей психики. Когда мы делаем открытия в науке, мы, на самом деле, не придумываем ничего из того, чего бы не было уже заложено в нашей психике. Заложено все это в виде одной универсальной системы, которая в нашем мире проявляет себя во всем, что мы наблюдаем и ощущаем. Познание этой универсальной системы — процесс длительный и нелегкий. По нему человечество идет последние 6000 лет. По пути познания мы совершаем много ошибок и создаем промежуточные, ошибочные теории, от которых со временем откажемся.
Наука становится точной тогда, когда она точно отображает принцип действия универсальной системы, заложенной во всей природе, в то числе и в нас самих.
Психология до самого последнего времени не относилась к точным наукам лишь по одной причине: в ней не было системы. А что было? Психология не занималась поиском внутреннего системного устройства человеческой психики, а лишь изучала и пытаясь систематизировать поверхностные ее проявления. Это все равно, что пытаться разобраться в программе калькулятора не влядея программированием, а лишь нажимая на его кнопки.
Вот точно так же психология до недавнего времени пыталась понять человека: по его реакциям.
Но сегодня этому пришел конец, потому что 13 лет назад появилась системно-векторная психология, которая сделала прорыв в познании человеческой психики и продолжает набирать обороты.
Этот прорыв стал возможен благодаря основателю системно-векторного психоанализа ВиктОру Толкачеву. Его главное открытие состояло в том, что он обнаружил систему, 8-мерную матрицу, с помощью которой можно было описать и спрогнозировать любое проявление человеческой психики.
Дальнейшей разработкой этого нового направления занялся друг и соратник Толкачева, Юрий Бурлан. На базе системно-векторного психоанализа он создал то, что сегодня называется системно-векторная психология.
Основная идея системно-векторной психологии состоит в том, что психика отдельно взятого человека — это часть целостной системы. Поэтому не имеет смысла изучать и рассматривать психику индивидума без понимания его роли в социуме. Эта роль, так называемая видовая роль – врожденная. Человек уже при рождении имеет в своей психике определенные заданности, называемые векторами. Вектор – это группа желаний, а также способностей к их реализации. У каждого человека свой набор векторов, и именно этот набор определяет куда устремятся его желания. У одного из нас проявится тяга к музыке и он станет композитором. Другому покажется привлекательной военная карьера, третий захочет стать врачом. Какие направления человеческой деятельности будут интересны взрослому человеку, а какие нет, заложено в нем самом еще в утробе матери. И эта заданность не наследуется генетически. Поэтому часто говорят, что в семье талантливых людей «природа на детях отдыхает».
Природа никогда не отдыхает. Просто дети талантливого композитора, могли родиться с другим набором векторов, который задает другие таланты.
Так же как в программировании, нет смысла рассматривать часть кода, не имея доступа ко всей программе, не понимая смысла этой программы и замысла разработчика, точно также в психологии нет смысла заниматься психологическими проблемами отдельно взятого человека, не зная его места в системе общего психического, не понимая его роли в общем процессе.
Каждый человек в отдельности, это как маленький фрагмент огромной программы написаной, если хотите, самим Господом Богом. Если до недавнего времени считалось, что смысл и замысел человеческого бытия непостижим, то сегодня он становится постижим все больше и больше. Человеческий разум достиг в своем развития того объема, который позволяет постигать самого себя.
Как это происходит? В первую очередь через осознание взаимосвязи между людьми, понимание, что мы все – с одной стороны: одна целая, неделимая, коллективная психика. А с другой – имеем индивидуальное сознание, в котором у нас возникает ложное ощущение собственной отдельности, единственности. Я – это только Я! Так считает любой нормальный человек.
Так что же общего между программированием и психологией? И почему почти все программисты интересуются психологией?
Дело в том, что программистами чаще всего становятся люди имеющие в своем врожденном векторальном наборе, так называемый, звуковой вектор. Этот вектор толкает человека к познанию самого себя, и именно отсюда возникает интерес к философии, религии и психологии.
Именно звуковой вектор задает человеку огромный умственный потенциал, который затем находит свое применение в социуме. Люди со звуковым вектором, это те, кто генерирует идеи, делает открытия в науке. Только звуковику под силу решать сложные умственные задачи. Чем более сложные задачи он решает, тем больше удовольствия от жизни получает звуковик. До такой степени, что все остальные удовольствия становятся неинтересны. Взять, например, известных звуковиков нашего времени: Стив Джобс, Григорий Перельман, Марк Цукерберг.
Далее, остается только понять: зачем, ради чего было так устроено природой, чтобы звуковик без отдыха и сна трудился над решением сложных задач, забывая даже поесть и попить, не говоря уж про все остальное?
Понимание всего, что касается нашей психики приходит во время тренинга по системно-векторной психологии Юрия Бурлана. Быстрее всех понимают о чем речь, как раз люди со звуковым вектором. Для них наступает прозрение уже на первых ознакомительных лекциях, которые планируются в ближайшее время.
Автор Елена Айдогдыева
Статья написана с использованием материалов тренингов по системно-векторной психологии Юрия Бурлана
Читайте также:
Ответ на вопрос системно-векторного психолога. Как забыть прошлое: разрушаем невидимые решетки обид
Поменять свою судьбу. С понедельника и каждый день
ВОПРОС СИСТЕМНО-ВЕКТОРНОМУ ПСИХОЛОГУ. Семейный бюджет: любовь любовью, а зарплата по расписанию
system-psiholog.livejournal.com
Скрытое психологическое программирование. Как поиметь мир [Настоящие техники подчинения, влияния, манипулирования]
Скрытое психологическое программирование
Одиннадцатая техника – скрытое психопрограммирование. Что это такое?
Представьте, что на работу принимают нового сотрудника. Начальник говорит новичку: «В настоящее время ТЫ находишься среди наших сотрудников и понимаешь, что каждый из нас ДОЛЖЕН соответствовать предъявляемым к нему требованиям и критериям. Нам всем, так или иначе, приходится ПОДЧИНЯТЬСЯ предъявляемым требованиям и нормативным актам. МНЕ кажется, что это совсем не трудно».
Что на самом деле сказал начальник? «Ты должен подчиняться мне». Если это повторить раз пять, установка закрепится в подсознании сотрудника. Ключевые слова можно выделять голосом, движением головы, жестом. Или дополнительным звуком, например, слегка постукивая рукой по столу. Или повтором.
Внушение не обязательно должно быть вербальным. Его можно осуществлять и с помощью письменного текста. Если в тексте выделить особым шрифтом некоторые буквы или слова, то они будут слагаться в отдельный смысл помимо сознания.
Психолингвистика ориентирована на побуждение к действиям в обход сознания. То есть все направлено на то, чтобы обойти сознание, избежать участия мышления. Любое действие, которое выполняется в обход сознания, выполняется однозначно и успешно. Действие, в совершении которого участвует сознание, выполняется неуспешно и неоднозначно.
На чем основана техника двадцать пятого кадра? На том, что человеческий мозг воспринимает двадцать четыре кадра в секунду. Потому что если вы смотрите фильм и видите в течение десяти секунд рекламу: «Вы хотите пить, пейте кока-колу!», вы подумаете – «А почему я хочу пить? Я не хочу пить! А если я и захочу, то попью лучше чая или кофе. Не буду я пить эту отраву, простите, напиток!».
Если та же самая рекламная надпись загорелась на одну двадцать пятую секунды, вы и прочитать ее не успели, но призыв был воспринят подсознанием. А оно лишено критичности. Поэтому, когда вы действительно захотите пить, то из всех напитков выберете кока-колу, объясняя самому себе: «На самом деле я давно не пил кока-колу. Я, конечно, знаю, что это отрава, которую пить нельзя. Да и пить я, в общем-то, не хотел. Но вот ведь вдруг захотелось выпить кока-колы». Понимаете?! Вы подтащите к себе объяснение.
Кстати, имейте в виду, обучать таким способом нельзя, можно только примитивным образом влиять на подсознание.
Однажды, во время избирательной компании об одном из кандидатов была выпущена листовка, позорящая его честь и достоинство. В ней лаконично объяснялось, что представляется собой человек. Ни слова правды, но «написано пером» на листе бумаги. Естественно, что человек был возмущен.
И тогда другой кандидат выпустил листовку, которая называлась «Грязь и мерзость не должны пройти». В ней было написано: «Вчера неизвестными лицами была выпущена листовка, порочащая честь и достоинство кандидата такого-то. Я считаю, что в предвыборной борьбе недопустимо использовать подобные технологии. Коллеги, давайте бороться честно. Кандидат в депутаты такой-то».
Вроде, все правильно, но… Но в тексте шрифтом были чуть-чуть выделены слова «грязь и мерзость… кандидата такого-то» И каждый избиратель, читая эту листовку, преисполнялся необъяснимым отвращением к кандидату, с которым связано что-то плохое.
Поделитесь на страничкеpsy.wikireading.ru
Психологическая деформация программистов. Взгляд с обеих сторон баррикад / Habr
Само наличие психологической деформации у какой-либо профессии, как правило, достаточно спорный момент ввиду того, что у разных людей она проявляется по-разному. Однако общую тенденцию можно выделить и, пожалуй, настало то время когда можно достаточно смело говорить, что программисты всё же имеют свой особенный психологический портрет который обусловлен их профессиональной деятельностью. Я достаточно часто сталкивался с подобным мнением и не придавал ему особого значения, но когда женский коллектив нашей организации поздравил программистов с 23-м февраля по доброму назвав их «космическими войсками», решил всё же расставить определенные акценты в данном вопросе, т.к. одна из моих профессий связана напрямую с психоанализом. Да и баш уже не молчит.
Сразу стоит заметить, что программист много времени проводит за компьютером, следовательно, многие из перечисленных пунктов относятся не только конкретно к программистам, а и к «компьютерщикам» в целом.
Гиперконцентрация
Каждый программист знает, что хорошая и качественная работа над кодом требует очень высокой степени погруженности в код. Кто-то старается себя изолировать наушниками, кто-то ставит таймеры, выключает все внешние раздражители и т.п. Степень концентрации при работе программиста сравнима с работой на ядерной станции. Соответственно, всё это порождает повышенную раздраженность при прерывании данного процесса, что внешне воспринимается непосвященными людьми как «замороченность на работе» и т.п.
Погруженность во внутренние образы и конструкции
Работа программиста имеет свою специфику, которая в аналогичном виде более всего присуща профессии инженера-изобретателя. Если вы знакомы с трудами Никола Тесла, то сможете вспомнить как он описывал то, что происходит в его голове. Если вкратце, то в голове Тесла мог построить механизм, запустить его и даже «прокрутить во времени» его работу, чтобы понять какие детали будут изнашиваться и где могут возникнуть проблемы в будущем. Не менее сложные конструкции возникают и в процессе профессиональной работы программиста. Данный эффект называется образно-чувственным конструированием. Если обыватель видит на экране только наборы символов, то в голове программиста этот код превращается в целые части мира. Как чтение книги создает образы и переживания в человеке, так и код способен такое же делать с программистом. Именно поэтому программисты «чувствуют» код, знают когда он «красив», когда «грязен», будет ли он работать и т.д. С какой-то стороны хороший программист сравним с писателем художественных произведений.
В реальной жизни это проявляется в чрезмерной погруженности внутрь себя, особенно если программист пытается что-то понять. Если деформация значительна, то программист может начать строить целую схему того, что сейчас происходит. Именно поэтому часто «построенные схемы социальных взаимодействий», например политика, у программистов вызывают чувство «грязного кода» и отторжение. В повседневной жизни это иногда может частично восприниматься как легкая форма аутизма, хотя на самом деле это не так. Человек вполне адекватен и открыт к взаимодействию с внешним миром, но вот сами механизмы взаимодействия имеют указанную специфику.
Низкий уровень социального взаимодействия и его разнообразия в повседневной работе
Данный момент не является «де факто», однако всё же периодически встречается и может играть свою определенную роль в деформации психики. Так как большую часть рабочего времени программист проводит в мире кода, и единственными «собеседниками» в нем являются «методы, функции, объекты, модули, пакеты и т.п.», соответственно и уровень социального взаимодействия у программистов, как правило, ниже, чем в большинстве профессий. Это связано еще не столько с тем, сколько людей вовлечено в работу, сколько с тем, думает ли о других людях в данный момент сам человек. Если работу дворника сложно назвать «активно социальной», тем не менее, сам дворник может в этот момент размышлять о жене, детях, друзьях и т.п. А для программиста же такая возможность отсутствует, он должен быть погружен в код. И хотя часто имеется рабочий коллектив, но коллектив, как правило, таких же программистов. Программистам иногда сложно работать рядом с людьми других профессий. Так что если степень деформации в коллективе высока, то это лишь усугубляет данный фактор (социального разнообразия отношений).
Обостренное восприятие причинно-следственных связей
Любой код должен работать, но чтобы написать работающий код, нужно понимать структуру причинно-следственных связей этого кода. Проще говоря «что, почему и как происходит», а также «что произойдет, если что-то не произойдет как ожидалось». Всё это накладывает свой отпечаток и на мышление человека. Данный способ мышления еще принято называть «техническим складом ума», когда человек старается найти всему рациональное объяснение и понять причинно-следственную связь. Отдельные программисты помимо написания кода часто втягиваются в технические аспекты, как например разработка аппаратуры под свои нужды (привет «паяльникам»). Порой это может доходить до уникальных надстроек в психике. Например, когда сложная застежка бюстгальтера девушки вызывает столько же интереса, как и то, что этот бюстгальтер скрывает.
Со стороны это часто может восприниматься как «замороченность над мелочами». То что не вызывает интереса для большинства людей, в программисте может порождать огромные потоки размышлений. Соответственно, так как не пропорциональны объемы приложения умственных усилий, то выводы, которые делает программист об эффектах реального мира, порой могут казаться «чудаковатыми» и восприниматься с определенным удивлением. Но что удивительно, если вы спросите программиста почему он так решил, то, скорее всего, получите целую цепочку причинно-следственных связей, и почти всегда вполне разумных. В целом такое происходит в голове каждого человека, однако именно у программистов этот момент часто обострен и порой он способен привлекать для анализа те аналогии, которые не пришли бы в голову обычному человеку.
Привыкание к формализованной постановке задач
Так как программист должен создавать код, который должен работать ровно так, как это требуется для задачи, то привычка делать то, что было сказано, постепенно перетекает и в другие области жизни. Но так как в большинстве случаев социального взаимодействия имеет место невербальное восприятие, «угадывание» и «додумывание», то у программистов обостряется чувство конкретизации.
Не то чтобы сказать, что программисты не умеют читать мыслей и предугадывать действия других людей, но скорее они предпочитают задать лишний вопрос, чем потом «переделывать заново». Отправляете программиста в магазин? Скажите на одно предложение больше, но избавьте его и себя от лишних вопросов. Например, не «купи яиц», а «купи десяток яиц первого сорта посвежее». И не воспринимайте его как «робота» если на свой вопрос вы получите детализированную инструкцию с кучей «ненужных вам деталей». Он старается сделать всё правильно. Если для большинства «будь проще» это «говори меньше», то для программистов «будь проще» это часто «говори точнее».
Жертвы «инженерного-гламура»
Рискую быть «съеденным заживо», но данный момент требует всё же освещения в рамках этой статьи. Речь пойдет не столько о программистах, сколько о «компьютерщиках». Гламур является нормальным и естественным порождением человеческих потребностей, вкратце девизом гламура можно назвать «Кто круче», соответственно для реальной жизни это «тачки, шмотки, бабло и т.п.». В сфере «инженерного-гламура» действует тот же принцип «Кто круче», однако с иными критериями. Так как основная концентрация «компьютерщика» направлена не на других людей, как в «гламуре реального мира», а на собственный внутренний мир образов и причинно-следственных связей, соответственно и цели здесь преследуются из области этого мира. Последний навороченный по характеристикам смартфон; мощный комп/сервак/ноут чтобы всё бегало еще быстрее; свежие программы, которые делают вбивание автокомплита на 32 миллисекунды быстрее; новые приложения с более плавной проруткой и модным голосовым распознавателем; знания о тайных особенностях новой версии компилятора и т.п.
Как и в «реальном гламуре», так и в «инженерном» есть свои «иконы», например недавняя статья про модем U.S. Robotics явный тому пример.
Так что не спрашивайте «зачем ему такой же телефон» и не удивляйтесь ответу «он не такой же, тут же на 500 мегагерц сильнее проц».
Интересный момент. В отдельных случаях «инженерный гламур» может быть подавлен обостренным требованием к причинно-следственным связям. То есть новый комп не будет куплен, пока реально не потребуется его мощность.
Заключение
Собственно весь сериал «Теория Большого Взрыва» построен на гиперболах явлений, которые были описаны выше. Если не так сильно преувеличивать то, что показано в ТБВ, то в целом именно подобная картина наблюдалась бы в человеке, который был бы значительно подвержен всем указанным эффектам работы программиста.
С учетом всего описанного не без оснований программистов воспринимают как «космических товарищей», однако по своему субъективному мнению, хочу сказать что если бы не добровольный выбор тех, кто идет в ряды программистов, то им бы стоило давать «молоко за вредность», но в данном случае психологического характера.
Тем не менее, каждый человек сам строит свою жизнь и сам факт психологической деформации «труженников кода» пока не так велик. Большинство имеет семьи, друзей, интересы помимо кода и компьютера. Так что не ведитесь на шаблонное «да он программист». Это не диагноз, это просто стиль мышления )
Лексунин Евгений,
«Сокращая энтропию в разработке»
UPD:
Небольшой бонус от пользователя ikra: жж пост «Не будите программиста».
habr.com
Психология программирования в команде / Habr
Когда над одним и тем же проектом (кодом) работает несколько людей, процесс разработки ПО начинает значительно отличаться. С этим фактом нельзя не согласиться. Вступает в действие целый ряд дополнительных факторов. Общим результатом является понижение скорости разработки, а иногда может понизиться и качество разрабатываемого ПО.Как же быть тогда? Ведь есть проекты, которые в одиночку написать невозможно. В этой статье я попытаюсь показать один психологический аспект работы в команде программистов. Я вас вооружу некоторыми теоретическими знаниями, благодаря которым вы сможете повысить эффективность программистов и их общий эмоциональный фон.
С чем же связано снижение эффективности и качества ПО?
Факторы снижения эффективности программистов можно поделить на объективные и субъективные.
Как я понимаю эти 2 термина
Объективные — это нечто, что не зависит от точки восприятия… Своего рода константы, которые не меняют своего значения, под каким углом ты на них не смотри. А вот субъективные факторы — это те, которые зависят от точки восприятия.
Субъективные факторы влияния на эффективность
Отбрасывая банальную межличностную неприязнь, предположим, что в нашей ситуации мы имеем коллектив из нескольких программистов с достаточным уровнем эмоционального взаимопонимания и уважения. Тем не менее, даже в таком коллективе могут быть проблемы.
Дело в том, что программист развивает чувство собственности к коду. Ведь код — это нечто, что он создал, и это нечто осязаемое (его видно на экране монитора). Программист может воспринимать код, как предмет (это я написал этот код) и как пространство (когда у меня в редакторе открыт этот код, я чувствую себя уютно). Таким образом код может быть «моим», «не моим» точно так же, как и стул или как комната. Это мой стул, и я на нем сижу (я написал этот код). Это стул Васи, и Вася им пользуется, и мне на нем сидеть эмоционально неудобно (Вася написал этот код).
Я хочу подчеркнуть, что мы сейчас говорим о субъективной самоидентификации программиста с кодом, который он видит на своем экране.
Программист, работая, может ощущать что этот код «его» или «не его». Эта самоидентификация с кодом довольно важна. Если человек считает, что код «его», то он:
- не будет ощущать отторжения (нечто вроде «свое говнецо не так сильно воняет»)
- общее эмоциональное ощущение программиста будет приподнято. Он будет ощущать себя в зоне комфорта и «у себя дома» (подумайте как он себя будет ощущать, работая с «чужим» кодом… 8 часов в день… несколько месяцев подряд)
- у него возникнет чувство хозяина и владельца (еще примитивнее: чувство вожака, все-таки в основном программисты — мужчины). Эти чувства провоцируют мужчину к проявлению инициативы, ответственности и проактивной позиции по отношению к объекту собственности (к коду, в нашем случае)
- в «моем» коде не страшно делать рефакторинг. Нечто вроде «это моя собственность, и я делаю с ней все, что хочу»
- дорабатывая «свой» код, программист сделает ровно столько изменений в коде, сколько нужно для внесения необходимых корректировок и поддержания архитектуры кода. А вот если код был бы «чужим», то программист скорее всего постарался бы внести минимум необходимых изменений. Добавляя функционал, но не поддерживая архитектуру, он скорее всего «прилепил» бы новый функционал сбоку к уже существующему.
- людям свойственно осторожничать в чужом/новом месте: если от программиста потребуется внести существенные изменения в «чужой» код, то он потратит много времени на ознакомление с кодом (попытается сделать этот код «своим») и банально будет ощущать себя более скованным в эмоциональном плане, внося нужные изменения. В худшем случае он просто «прилепит» свой код к уже существующему (см. предыдущий пункт)
- правя «чужой» код, мы эмоционально затрагиваем его владельца. Сознательно или подсознательно, но программисты признают право собственности других программистов на участки кода точно так же, как в семье за обеденным столом негласно признается место за каждым членом семьи. Сознательно садясь на «чужой» стул за столом, вы ощущаете дискомфорт из-за оказанного эмоционального влияния на «владельца» стула.
Также, отдельно замечу, что мы сейчас говорим о правках в коде. Чтение кода и особенно использование (вызов «чужих» функций) не влияет на эмоциональное состояние программистов.
Объективные факторы
Есть еще и объективная составляющая: может быть так, что программист знает этот код, или не знает этот код. Под «знать код» я подразумеваю помнить названия функций и что они делают. Не трудно заметить, что эти знания действительно объективны — они либо есть, либо нет, и не важно как себя ощущает наш бедный подопытный программист. Для того, чтобы внести правильные изменения в код, человек должен объективно знать его.
Конкретика и постановка задачи
Что же имеем? Теоретическое идеальное состояние для проекта было бы: все программисты объективно знают весь код и все программисты считают весь код «своим». Но скажите мне, пожалуйста, может у одной зубной щетки быть 2 хозяина? К сожалению, нет. Любой программист «трогая», внося изменения в код, делает этот код более «чужим» в глазах автора кода («текущего» владельца).
Цель: каждый программист должен работать (максимум возможного времени) с кодом, который он знает, и который он считает «своим». Вот такого результата уже возможно добиться.
Решение задачи
В процессе разработки ПО объективные знания о проекте и субъективные самоидентификации программистов к коду будут меняться. Нашей задачей будет влиять на распределение знаний и чувств собственности с тем, чтобы поддерживать поставленную в прошлом абзаце цель. Чем больше программист знает о проекте или чем больше кода он считает «своим» — тем лучше. Кашу маслом не испортишь. Понижать эти вещи нам не за чем, а вот повышать всегда полезно.
Другое дело, что повышение этих факторов отнимает время у наших программистов. И тут уже встает вопрос рационализации: программисты могут тратить 2 ч в день на знакомство со своим проектом и 2 ч в день на повышение чувства собственности… Но ведь тогда у них будет лишь 4 ч в день на продуктивную работу :(.
Прежде чем мы перейдем к вопросам рационализации, давайте рассмотрим рычаги влияния. Для повышения объективных знаний о коде подходят:
- самый проверенный способ — быть автором кода 🙂
- любая письменная документация о коде
- устные и письменные коммуникации между программистами
Для повышения чувства собственности по отношению к коду подходят следующие методы:
- опять же, способ №1 — быть автором кода
- объективные знания о коде. Все-таки проще признать за «свое» ту вещь, в работе которой ты хотя бы разбираешься
- code reviews — когда автор кода показывает код и советуется с другим программистом, этот другой программист оказывает влияние на код (возможно даже некоторые его советы попадут в код). Своеобразно, автор «знакомит» второго программиста с кодом и возникает некоторого рода собственность «наше».
- придерживание стандартов оформления кода повышает чувство собственности «мое» среди всех членов команды, но тут есть свои оговорки (о них ниже)
Отдельный абзац о стандартах оформления кода (еще один способ повышения чувства собственности, просто слишком длинный)
Стандарты оформления кода (какие бы они не были) в основном преследуют цель унификации внешнего вида кода. Так они облегчают чтение кода, и так же они способствуют повышению самоидентификации программиста с этим кодом, даже если он его первый раз видит.
Как думает программист
О! Написано так, как будто я писал
или
О! Смотри, а он тоже жигулевское пиво любит, и диван у него такой же мягкий как у меня дома! Мне здесь уютно!
Но не тут-то было. Код может быть оформлен идентично, но вот логика, которой следует код, будет отличаться от той, которую использовал бы наш подопытный программист (наш программист тут бы использовал
while
цикл, а в коде написан foreach
). Эти разницы между логикой кода и логикой того, кто читает этот код, и приводят к тому, что чувство собственности в итоге не создается. Вот поэтому требования к оформлению кода не дают полного ожидаемого результата с одной стороны, с другой стороны они в определенной мере сковывают свободу программистов и добавляют еще один слой бюрократии.Одним из решений было бы заставить всех программистов думать одной и той же логикой, насаждать одну и единственно правильную логику (или детализировать требования к оформлению кода вплоть до того, когда использовать while
, а когда использовать foreach
). Но ведь это утопия. К тому же, все люди разные, и зачем «клонировать» 10 программистов под копирку.
Лучше культивировать взаимопонимание среди программистов и помогать им знакомиться с логикой своих коллег-программистов. В частности, code reviews, могут весьма хорошо заставить программистов узнать логику друг друга. Волшебство code review в том, что программисту Васе достается в руки код, написанный программистом Петей, но Вася не должен ничего в нем править. Он лишь изучает труд Пети и после этого рассказывает Пете свои мысли (Вася предлагает Пете что-то изменить в обеденном стуле Пети, но сам стул не трогает). Пока Вася и Петя общаются, они успевают понять как и что обоим из них нравится. Таким образом в будущем Вася, видя код Пети, уже будет ощущать себя намного уютнее, зная логику Пети.
Вопросы рационализации
Как же найти баланс между тем, чтобы программисты продолжали развитие проекта, но в тоже время всегда работали над кодом, который они чувствуют «своим»? Ответ на такой вопрос будет очень сильно зависеть от контекста. Я вам лишь покажу 2 самых радикальных метода, и вряд ли эти 2 крайности когда-либо будут уместны для использования в живой ситуации, скорее вам нужно будет найти баланс между этими 2 противоположностями.
Способ №1. Разделение ответственности и «личные комнатушки»
Если специфика вашего проекта позволяет:
- четко разбить проект на несколько подзадач, практически невзаимосвязанных друг с другом
- иметь незаменимых программистов (если программист уйдет, то проект разрушится или очень сильно пострадает),
то дайте вашим программистам маленькие норки, где они будут единственными хозяевами ситуации. Вам нужно будет лишь четко условиться о том, как эти «норки» будут взаимодействовать друг с другом, а внутреннюю реализацию каждой норки возьмет на себя ее «хозяин» (ответственный программист).
Это довольно радикальный подход, и поэтому он обладает довольно существенными недостатками:
- у вас будут незаменяемые программисты (если хозяин норки уйдет, то сопровождать эту норку кому-то другому будет трудно)
- если все, кроме одной «норки», будут готовы, то уже завершившие работу программисты не смогут толком помочь программисту, который отстал от графика, т.к. не знают специфики «норки» и скорее лишь будут раздражать программиста
Плюсы:
- можно обойтись без документации внутри-норковых процессов. Т.к. одну норку поддерживает один программист, то он все это может удержать у себя в голове
- программисты практически не тратят время на коммуникацию
Способ №2. Форум
Форум — площадь для массового общения. Так же и ваше ПО можно превратить в площадь для массового общения, когда все будут знать все части проекта и будут очень плотно взаимодействовать друг с другом. Плюсы и минусы этого метода — это, практически, инверсия плюсов метода «личных норок».
Заключение
Помимо правильного распределения программистов и коммуникации между ними, так же еще важно брать во внимание способ менеджмента и развития проекта. Ожидается ли часто менять вектор развития и часто менять текущие задачи проекта? Зрелый ли это проект? Берите во внимание особенности ваших программистов, может быть среди них есть гений, но он просто-напросто под громадным количеством бюрократии не может разогнаться и взлететь ввысь? Насколько вы уверенны в ответственности ваших программистов и в том, что они не уйдут от вас на полпути? Думайте и решайте.
habr.com
Психология программирования.
Главная → Книги и компьютерная пресса → Новосибирская школа программирования. Перекличка времен. → Психология программирования
Л. В. Городняя, Ф. А. Мурзин
Несколько лет назад И.В. Поттосин с большим энтузиазмом поддержал идею спецкурса «Психология программирования» на матфаке НГУ. По его мнению, такой курс совершенно необходим при профессиональной специализации программистов. Теперь накоплен опыт преподавания в этом направлении, и материал курса рассматривается как направление исследования и разработки учебных систем информатики.
1. Введение
Психологические и социальные аспекты процессов разработки и применения информационных систем, по мнению авторов, нашли свое отражение в эволюции языков и систем программирования, что позволяет рассматривать последние как удобный материал для исследования формализуемых моделей психологической информатики.
Человеческие факторы во многом определяют практику разработки и совершенствования информационных систем, а также влияют на трудоемкость проектов и жизнеспособность производственных команд. Поэтому целесообразно проанализировать проблемы формирования процесса профессиональной информатики как социальной деятельности, изучая личностные факторы, проблему лидерства, жизненный цикл программисткой команды и особенности прохождения производственного проекта через кризисные полосы. Обзор результатов исследований психологии программирования как проявления индивидуальности, взаимосвязи интеллектуальности и способности к принятию решений представляет несомненный интерес.
2. Социальный контекст
Не вызывает сомнения связь производительности труда в информатике с механизмами поисковой активности и внимания, их видами и нарушениями. Экспериментальная база исследования призвана проявить конкретику таких связей. Она может формироваться как система мероприятий по предпроизводственной подготовке информатиков, включая молодежные проекты и конкурсы. Это позволяет в сжатые сроки подвергать практической проверке формальные методы исследования связей в коллективах, оценивая особенности творческих процессов, осваивая технику переговоров в конфликтах и методы ведения коллективного проекта. Полезно найти подходы и навыки классификации производственного микроклимата и прогнозирования трудоемкости проектов в зависимости от квалификации персонала.
В центре внимания — психологические (человеческие) факторы, отраженные в процессе разработки и совершенствования информационных систем, а также влияющие на трудоемкость проектов и жизнеспособность производственных команд. (Психологическая информатика — ПИ.) В процессе исследования ПИ можно анализировать проблемы формирования профессиональной информатики как социальной деятельности, зависящей от личностных факторов, лидерства, жизненного ритма команды и особенностей прохождения производственного проекта через кризисные полосы. Особо интересны психология программирования как проявление индивидуальности, взаимосвязи интеллектуальности и способности к принятию решений, а также другие аспекты этико-социального контекста информатики.
ПИ граничит с соционикой и психофизиологией умственного труда, со стрессовыми и другими реакциями человека, влияющими на связь производительности труда в информатике с механизмами поисковой активности и внимания.
3. Приложение и перспективы
Исследование ПИ может дать рекомендации для разработки и совершенствования системы подготовки бакалавров и магистров, специализирующихся в области информационного и электронного бизнеса. Высокий темп развития информатики требует исследования глубинных психологических и социальных факторов, определяющих закономерности эволюции конструктивных идей информатики, смену парадигм программирования и других форм концентрации знания человеком, а также этико-социальный контекст современных технологий.
Основные акценты исследования человеческих факторов в процессах совершенствования и применения информационных технологий заключаются в анализе гуманитарных аспектов отечественной информатики и выработке на их основе рекомендаций по организации проектов, обладающих исследовательскими аспектами, обычно сопутствующими деятельности в области информационного бизнеса.
4. Специфика подхода
Задача исследования ПИ в первую очередь нацелена на психологические и этико-социальные аспекты современных технологий и человеческой деятельности, выявленные при изложении и исследовании отечественных достижений информатики непосредственно их авторами, сумевшими объективно отразить роль личностных и субъективных факторов, определивших основные достижения известных научных школ в России и за рубежом. Все это формирует систему представления знаний по гуманитарным аспектам компьютерных наук, начиная с анализа разных явлений, связанных с восприятием информации и особенностями работы с текстами и изображениями. Ключевые вопросы следующие. Как отличить хорошую информационную систему? Откуда берутся хорошие информационные системы? Как обосновывается роль квалифицированных специалистов в рамках специально разработанных технологий?
Важные моменты любых технологий: ясность требований к квалификации специалистов, адекватность используемых средств, спецификация проектов систем, четкость графика разработки, определенность методов проверки качества результата, приспособленность проекта к возможности улучшения реализуемых систем и пр.
Сквозные вопросы следующие. Как исследовать гуманитарные аспекты применения и производства информационных систем? Можно ли опереться на самоанализ информатиков, наблюдения менеджеров и научную проверку известных гипотез? Богатый фактический материал дает экспериментальная, творческая, досуговая и учебная информатика. Большой интерес представляют психологические и поведенческие оценки, накопленные в опыте учебных заведений, производственных организаций и научно-исследовательских проектов по разработке информационных систем.
5. Методы и приоритеты
Используются социологические методы для исследования производственных команд, связанных общей постановкой задачи. Анализируется влияние целей на основные аспекты рабочего ритма команды. Рассматриваются кризисы в производственном проекте с учетом проблемы лидерства.
Статистически исследуется длительность проектов и время пребывания в них исполнителей, а также измеримые характеристики информационных систем.
Системный подход используется для выбора приемов обеспечения стабильности путем изменений с учетом структуры проекта в контексте общих проблем больших проектов. Оценивается достоверность отчетов и результативность контроля за ходом работ, компетентность исполнителей и руководителей.
Комплексный подход позволяет унифицировать жизненный цикл информационной системы. Рассматриваются компьютерные игры и учебные тренажеры в условиях эволюции систем и обновления технологий. Отслеживается уровень изученности задач, решаемых информатиками при программировании. Важные факторы — общность и переносимость компонентов, приспособленных для повторного использования. Определяется направленность развития систем и принципы обработки уникальной информации. Формируются прототипы «идеальных» систем. Сравниваются консервативные и открытые системы.
6. Уровень изучености и образование
Современные представления о социально-психологических факторах в информатике отражают преимущественно зарубежные достижения, значимость которых очевидна неспециалистам благодаря высокому качеству элементной базы.
Современное состояние исследований по проблемам ПИ представлено множеством интересных для практики результатов, слабо отраженных в отечественной литературе. Основные направления исследований по данной теме в мировой науке активно развиваются, они нацелены на решение проблемы стабильного производства информационных систем, обладающих длительным жизненным циклом или допускающих целенаправленные улучшения. Такие исследования, по существу, опираются на человеческий фактор.
Выявлены значительные трудности в преподавании студентам проблем поддержки полного жизненного цикла информационных систем, таких как определение требований, разработка спецификаций, организация сопровождения. Трудности обусловлены недостатком практического опыта у студентов. Следует отметить, что многие наши студенты теперь вовлечены в производство. Это помогает преодолеть трудности преподавания ПИ в условиях совмещения учебы с производственной деятельностью при использовании средств дистанционного образования. Результаты исследований ПИ используются фирмами, ведущими сертификацию специалистов и кадровый маркетинг.
Целесообразно развернуть проект, который выполнял бы работу по упорядочению и изучению гуманитарных факторов информатической деятельности, проявившихся в истории отечественной вычислительной техники и ее программного обеспечения. Труды Д.А. Поспелова, Я.И. Фета, И.В. Поттосина, собравших фактические материалы по истории отечественного программирования и школы А.П. Ершова, а также личный опыт участников проекта, рассматриваются как фактическая основа для выработки практических рекомендаций.
Литература
- Городняя Л.В., Мурзин Ф.А. Об опыте преподавания спецкурса «Психология программирования» // Тез. IX Междунар. конф. «Применение новых технологий в образовании», Троицк, 1998. — С. 101–102.
- Кирпотина Н.А. Модель процесса принятия решений и соответствующая классификация типов личности. // Там же. — С. 93–95.
- Городняя Л.В., Мурзин Ф.А. Психология для программистов // Тр. IV Междунар. конф. «Перспективы систем информатики». Секция «Школьная информатика». — Новосибирск, 2001. — С. 29–30.
- Андреева Т.А. О проблеме накопления результатов методических разработок школьных педагогов. // Тез. конф. «Информационные технологии в образовании» Москва. — Институт ЮНЕСКО, 1998. — С. 124–128
- Городняя Л.В. Быть или не быть — для информатики вопрос не в этом // М.: Информатика и образование. — 2000. — Т. 7. — С. 80–84
- Городняя Л.В., Кирпотина И.А. Электронное издание как механизм самообучения // Тр. Междунар. научно-практической конф. «Новые информационные технологии в университетском образовании». — Томск, 2000. —
С. 101–102 - Андреева Т.А. Об автоматизации подготовки и проведения заочных (электронных) олимпиад // Тр. научно-практической телеконф. «Информационные технологии в общеобразовательной школе», ноябрь 2000. — Новосибирск, 2000. — http://www.edu.nsu.ru/ites
- Ким Н.А., Городняя Л.В. Измерители знаний по информатике // Тр. Междунар. научно-практической конф. «Новые информационные технологии в университетском образовании». — Новосибирск, 1999. — С. 97.
- Берс А.А., Городняя Л.В., Поляков В.Г., Чурина Т.Г. Организация творческой работы учащихся в контексте общеобразовательной информатики // Там же. — С. 86.
- Kalinina N., Kostyukova N. The Basic Principles of Building of Ergonomic Component of Automated Training System // Internat. J . of Occupational Safety and Ergonomics ( JOSE ). — Poland , 2001. — P . 203–207
- Городняя Л.В., Калинина Н.А., Костюкова Н.И. О соотношении кибернетики, математики и психологии // Тр. XXVIII Междунар. конф. «Информационные технологии в науке, образовании, телекоммуникациях и бизнесе» (IT+SE’2001). — Гурзуф, 2001. — С. 113–116.
- Городняя Л.В. Откуда берутся хорошие программисты // Становление новосибирской школы информатики. Мозаика воспоминаний / Под ред. И.В. Поттосина. — Новосибирск, 2001. — С. 117–123.
Следующая статья сборника
Из сборника «Новосибирская школа программирования. Перекличка времен». Новосибирск, 2004 г.
Перепечатываются с разрешения редакции.
www.computer-museum.ru
Психология программистов — Уползище — LiveJournal
Тезисы сегодняшнего доклада Романа Сидорченко на симпозиуме:* Программисты думают сложными абстракциями. Не образами, не метафорами, не силлогизмами. Многоуровневыми многопоточными абстракциями. Просто потому что постоянно работают с ними, а переключаться между способами мышления — затратно.
* Как следствие, все программисты способны к глубокому, длительному трансовому сосредоточению (состоянию потока). Эта способность — и профессиональное показание, и профессиональная деформация. Программист норовит войти в рабочий транс по любому вопросу, который стоит размышлений.
* Всё сущее программисты категоризируют по удобным критериям. То, чему не удаётся дать компактное рабочее определение и разложить по категориям — не существует, потому что с ним невозможно работать.
* Гармонию, красоту и соразмерность сложных структур программисты чуют интуитивно. Потому что иначе со сложными абстракциями работать не получается. Дисгармония вызывает острое ощущение неправильности и почти физическое отвращение.
* Отстранённая метапозиция по отношению к чему угодно, которой психотерапевтов долго специально учат, у программистов встроена.
* «Вылечить» психику программиста до общечеловеческих стандартов — значит, с большой вероятностью, сделать его профнепригодным. Потому что потеряются вышеперечисленные особенности.
* Хотите работать с программистом? Выработайте общий разговорный словарь и не лезьте трогать в его психике то, что и так работает.
Дополню своими наблюдениями:
* Программисты — предельно честные реалисты. Написанный код либо работает, либо нет, и никакими словесными реверансами это не изменить. Программисты презирают пустые слова и символы статуса. Ты крут? Покажи свой работающий код. Это отношение распространяется на все сферы жизни.
* Программирование ближе всего не к математике, а к лингвистике и оперированию смыслами.
* Программисты не так уж помешаны на строгой логике и причинности. Большинство современных систем сложны и запутанны выше человеческого понимания. Поэтому они во многом некрасивы и нелогичны, и программисты умеют с ними работать. Но нелогичность и непоследовательность отвратительны, поскольку негармоничны.
* Программисты кажутся аутичными, шизоидными социофобами. На самом деле с эмоциями у программистов всё в порядке, и типы личности у них встречаются всякие. Просто для их работы живое эмоциональное общение с другими людьми не требуется.
* Как вы уже поняли, большинство обычных людей с точки зрения программистов — неприятные негармоничные пустословы, неэффективно мыслящие. Исключения из большинства попадаются не каждый день, программисты таких людей ценят и уважают.
* Если надо, программист вполне способен понять, категоризировать и принять человеческие особенности — просто как ещё одну монструозную операционную систему, работающую на специфическом железе. Окей, люди устроены так, обладают такими интерфейсами — будем пользоваться тем, что есть. Прискорбно несовершенно, но программисты — честные реалисты.
* Программист чувствует эмоции по-настоящему, но общепринятые способы их выражения для него — не более чем условность, очередной уровень абстракции. Если для людей надо выводить переживания в таком виде, программист это для них сделает. Но это будет специально разработанный перевод со внутреннего на человеческий как иностранный.
* Человеческие этика, мораль, обычаи и всё остальное — тоже только абстракции.
[ DW ]
andrzejn.livejournal.com