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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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