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

Поскольку это не был курс AP, учитель, мистер С, установил свою собственную программу, и мы могли отклоняться от нее, если класс начинал так или иначе склоняться. Вместо изучения Java и механических определений классов или наследования мы потратили время на создание приложений Visual Basic 5.5 и программ командной строки на C++.

Я сделал клон TriPeaks, а мой друг сделал клон AIM, который работал путем чтения и записи в файл на одном из общих дисков школы. Это было веселое занятие, и, возможно, единственная причина, по которой я не слишком часто прогуливал занятия после обеда. (Я был старшеклассником, у меня была машина, и я вышел пообедать в конце дня. Такие вещи случались ¯\_(ツ)_/¯)

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

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

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

Я сказал что-то о ком-то, сидящем за столом, имеющем второй стол с его именем на нем, а затем меняющем свое имя. Это не имело особого смысла ни для кого.

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

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

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