Архив метки: программирование

Классы и объекты ООП. Или что творится в голове у программиста?

Особенности мышления программиста. Как устроено мышление программиста, пишущего на объектно-ориентированных языках программирования. Аналогии между концепцией объектно-ориентированного программирования и концепцией эйдосов Платона. Объекты и классы, вещи и эйдосы. О мирах, в которых живут программисты. Экспериментальное исследование мышления студентов программистов, которым давали задания до изучения языков программирования (Java, PHP, C++) Сравнение мышления программистов и непрограммистов. Логическая задача, при помощи которой в ребенке можно выявить  способности к программированию. Какие акцентуации характера свойственны программистам? Кто может стать программистом и кто не может.

 

Недопсихология с еще одним психологом. Привет друзья.

В особенности те, кто занимается каким либо программированием.

И те, у кого среди родственников есть программисты.

А также подруги и жены программистов.

И мужьям программистов тоже привет.

Кажется, со всеми поздоровался.

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

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

Ладно! Не пугайте человека. Не отвлекайте от решения важных задач. Да и Ницше предупреждал: «Если долго всматриваться в бездну, она начинает всматриваться в вас».

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

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

Человек за монитором говорит: «Глубоко копает»

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

Алан Кэй: «Эй, а как же Я — Алан Кэй! Что за ересь!? При чем здесь Платон!?»

Сейчас расскажу об этой модели, потом мы сравним ее с парадигмой объектно-ориентированного программирования и все встанет на свои места.

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

Платон: «Молодец сынок, хоть кто-то обо мне вспомнил»

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

Платон: «Ох уж эти потомки, все упрощают и уплощают»

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

Платон: «Ну, сынок, не стесняйся обобщать. И все объекты живой и неживой природы тоже»

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

Платон: «Да, да! Для всего видимого есть эйдосы. И у эйдосов тоже есть идея. Одни эйдосы включают в себя другие эйдосы. Это и есть иерархия»

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

И вот, самое интересное. Каждый объект является воплощением некоторого первообраза или идеи или эйдоса. В ООП такой первообраз называется КЛАСС. Итак, каждый объект программы является экземпляром класса. Точно так же, как каждая конкретная вещь является воплощением эйдоса. Все просто. У Платона: Вещи – воплощение эйдосов. У Алана Кэя: Объекты – экземпляры классов.

Алан Кэй: «Да, Да! И все классы объединены в иерархию. Одни классы включают в себя другие классы. Это все одна большая семья классов потомков с общим предком – базовым классом.

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

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

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

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

В этом втором мире программист Демиург. Силой мысли, воли и слова может создавать из ничего из пустоты новые объекты – экземпляры по образу и подобию идей – классов. Из этих объектов он конструирует программы. Улавливаете всю важность и глобальность процесса. В этом, программист подобен Богу. Помните это торжественное: «Вначале было Слово…»?

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

Ну как? Стало понятнее? Прояснилось? Не очень? Согласен, в гуманитарном ключе душа программиста тоже потемки. Давайте вернемся к статистике и моделям.

Поговорим наконец-то о мышлении и личности программиста.

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

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

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

Проиллюстрировать это можно примером из возрастной психологии.

Проведем простой эксперимент, о котором писал еще Жан Пиаже. Будем задавать школьникам в возрасте 10 лет контрфактный силлогизм и попросим дать ответ. К примеру:

Все кошки лают         (большая посылка)

Булочка – это кошка (меньшая посылка)

Лают ли булочки?

И вот тут опять начинается деление на группы.

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

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

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

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

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

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

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

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

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

Душа программиста

 

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

Начнем с того, что язык и мышление – явления очень взаимосвязанные. В детстве, когда мы учимся говорить – мы учимся думать. Слова – это знаки, которыми мы заменяем реальные объекты для того, чтобы проводить с ними различные операции. Мы можем делать это устно, на бумаге, в уме.

 

Формирование понятий

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

Разберем, что такое понятие, наблюдая за тем, как понятия формируются.

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

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

Что же изменилось за небольшой промежуток времени?

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

Давайте углубимся в механизм формирования понятия.

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

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

  1. Абстрагирование – распознавание и выделение отдельных признаков (свойств) предметов.
  2. Обобщение – выделение из множества предметов тех, что имеют схожие наборы свойств (признаков). 

CZASHKA

Так ребенок учится оперировать с предметами окружающего мира. Управлять им. Но этого мало. 

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

 

Личность, язык, речь

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

Зачем это нужно для описания особенностей личности программиста? Конкретизируем.

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

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

Вот, яркий пример отличия. Шутка, которую придумали программисты же:

«В соревнованиях по логике среди женщин победил генератор случайных чисел».

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

О женской логике мы поговорим в этой статье. Вернемся к нашим формалистам.

 

Эмоции, мышление, чувства

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

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

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

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

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

 

Выводы

Основные отличия среднего программиста от среднего непрограммиста заключаются в следующем:

  • развитая когнитивная сфера,

  • логика мышления максимально приближена к формальной,

  • эмоциональная сфера менее развита, что может проявляться в эмоциональной холодности, черствости, излишней практичности, рационализме.

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

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

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

Артем Полярин