matmex.zip/m.K./pedo/bp

Witness of singularity
32 min readOct 28, 2022

--

Основы программирования

В университете я читал четыре больших курсах. Два из них были винами — это Основы программирования (вместе со спин-оффом Основы проектирования) и Научное мышление, еще один получился очень хорошо, но не полетел из-за специфичной тематики (Теория алгоритмов), и еще одним — Интеллектуальными системами — я сейчас не очень доволен: как я уже упоминал, по идеологии он представлял собой продолжение работы в лаборатории, с повсеместным «фатальным недостатком» (aka Not Invented Here), с игнорированием сложившейся практики. Первая его часть, история ИИ и логический подход, пожалуй, хороши — но вот все, что касалось нейронных сетей, следовало бы рассказывать совсем по-другому даже тогда, не то что сейчас.

Далее я расскажу о трех успешных курсах, с концентрацией на методологии — чем я руководствовался, отбирая и выстраивая материал для этих курсов так, чтобы получилось интересно, увлекательно, и полезно. Это, если хотите, педагогика — но не та, которую изучают на специальных предметах в университете (насколько я знаю, контент этих предметов сейчас в России свелся к правильному заполнению технологических карт и БРС-системы), а интуитивная. Тут такая вещь — мы не знаем, как правильно учить студентов. Может быть, и существует точная методика, но она вне нашего разумения. Есть отдельные помогающие рецепты (которые, как правило, нужно дозировать, потому что если строить курс только из них — будет перебор и тоже добром не кончится), но общей методики нет. В педагогических исследованиях старые, опытные преподаватели пытаются обобщить свои представления об этой методике в какие-то понятные слова — но, поскольку методика в слова не укладывается, получается как правило что-то очень запутанное и нереализуемое. Собственно, все эти мега-таблицы, «технологические карты» и «учебные планы» — наглядная демонстрация того, как методика в слова не укладывается.

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

Начну я с самого масштабного курса — Основ программирования. У него получилось очень большое проникновение в профессиональной среде: я до сих пор натыкаюсь на его слушателей в совершенно неожиданных местах, типа патрон-чата СВТВ ньюз или тусовки настолочек в Берлине. Я много раз получал ВК благодарности за курс, за то, что он помог начать карьеру в IT и тем самым изменил жизнь слушателя к лучшему — и они меня всегда радовали.

Мотивация

Почему мы вообще решили взяться за этот курс? До него ситуация с преподаванием программирования на факультете была, прямо скажем, не очень. Да, всевозможные преобразования движения системщиков во главе с БМВ улучшили ситуацию за счет множества новых курсов — но это были курсы в довесок к основным, вроде собственно Основ программирования (ОП). Эти основные курсы имели огромное количество часов, 6 часов в неделю только у ОП, то есть это был большой процент жизни в универе, и, если этот процент был некачественный, то обучение страдало. Курсы системщиков это исправляли — например, «Скрипты» добавили первокурсникам задора — но зачем исправлять, если можно просто не портить?

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

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

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

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

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

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

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

Тут хорошо совпало, что все это хотел не только я для своей лаборатории, но и Контур — для стажировок.

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

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

Во-вторых, я не считал программирование — особенно то, которое на первом курсе — высокой наукой. В этом мы, кстати, расходились с системщиками, которые наделяли программирование на первом курсе какими-то высокими скрытыми смыслами. Я же считал, что это элементарное ремесло. Да, конечно, архитектура, асинхронка или ML — это уже потруднее, там есть что научно поизучать (хотя и это больше черная магия, чем наука) — ну так и написать роман это не то же самое, что «мама мыла раму», и не нужно это сравнивать: написание романов искусство, правописание — ремесло.

Концепция

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

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

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

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

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

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

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

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

Les Miserables

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

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

Мое решение, которое я всегда защищал и надеюсь его защищают те, кто остался после меня — никакого левачества. Никаких мыслей о проблемах les miserables. Это не наша проблема и не наша работа, о них думать.

За это меня всегда критиковали: а как же бедная девочка из села Кукуево, которая не может программировать, а ее заставляют, а у нее не получается и она от этого плачет. Я тут на самом деле только одно могу ответить: побольше поплачет, поменьше пописает. Я тупо не занимался всеобщим образованием. Мне интересно видеть, как талантливый человек вырастает, оперивается, расправляет крылья — и потом уже летит, на проектной работе или на стажировке. Это мне доставляет эстетическое удовольствие, такое наблюдать. Я хочу видеть на парах программистский эквивалент вайба «Олимпии» Риффенштайль, гениально резюмированный Рамштайном в «Stripped»: торжество таланта над мирозданием. Что там будет с девочкой из села Кукуево — меня попросту не интересует.

https://www.youtube.com/watch?v=-3C0-W_BSNs

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

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

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

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

Кроме того, мы с двоек ничего не получали, кроме головной боли пересдач. Я еще коснусь этого момента, но это опять-таки глупость: получается, что на неспособного или лентяя ты тратишь больше экзаменационного времени, чем на способного. А зачем на него это время тратить? Чем он заслужил это внимание?

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

Материал

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

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

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

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

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

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

Язык

Самый большой и самый сложный дискуссионный вопрос вокруг этого курса — почему он на шарпе?

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

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

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

Шарп — это хороший выбор для первого языка. Во-первых, у него есть готовые, хорошо работающие библиотеки под все что угодно — в том числе Unity, с помощью которой студенты могут написать игру (а это важно, потому что у многих абитуриентов мечта именно такая). Можно делать веб-сайты, мобильные приложения, системы управления роботами — в общем-то, все что угодно, кроме data science, который, по сути, нельзя нигде, кроме питона, но на первом курсе им дата сайенс все равно не затащить. С шарпом студент может поставить себе какую-нибудь мини-цель в виде pet project, которая ему была бы интересна, сделать его, набить шишек — а это, на мой взгляд, самый лучший способ чему-то по-настоящему научиться. Этим шарп выгодно отличается от Паскаля, на котором ничего, кроме задач по курсу программирования, сделать нельзя.

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

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

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

Что же касается C++ — лично я просто не знаю, в каком этот язык сейчас состоянии. Вроде бы стало лучше, чем было 20 лет назад, когда я его в последний раз трогал, но подробностей я не знаю. Из того, что я слышал — у шарпа более дружелюбный синтаксис и более читаемые сообщения компилятора.

Понятен минус — привязка к винде. Но тут казалось, что в то время в России это не очень большая проблема, и Windows был более-менее у всех. Но и о тех, кто с линуксом, мы подумали — все наши проекты открывались и запускались в mono. А потом уже .NET Core появился, и стало совсем все равно.

Преподаватели

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

Где взять преподавателей?

На кафедре с преподавателями было очень туго. Они и раньше с трудом закрывали нагрузку, а потом и нагрузка выросла, и преподаватели некоторые умерли — так что стало совсем плохо. Эта кафедра вообще находилась в неком упадке. Формально, ее заведующим долгое время был Третьяков, который на самом деле был ректором, потом — первым проректором. Был, естественно, завкаф де-факто, но это плохо работает, кафедре нужен настоящий заведующий. Это же самое касается, кстати, и кафедры матэнокомики, которой руководил декан, и кафедры термеха, которой руководил первый проректор УрГУ (еще до слияния), и кафедры матфизики, которой руководил проректор по науке. Все эти кафедры были какими-то статичными, застывшими, маленькими и малозаметными. Причем на каждой из них были активные люди, которые знали, куда вести кафедру — но особо развернуться они, видимо, не могли, потому что окончательное решение любого вопроса было за заведующим, который, вероятно, все такие вопросы спускал на самотек, ибо был озабочен более важными вопросами. А вот самые активные кафедры — алгебры, матанализа и вычмата — все имели заведующих, которые никаких других постов не занимали и кафедрой занимались в приоритете.

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

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

Ненавижу совершенно эту часть работы, отстраивался от нее по максимуму — в том числе и на этом курсе. У курса был регламент, все спорные ситуации я решал с его помощью, а на любые личные просьбы войти в положение говорил, что этим не занимаюсь, и все решается регламентом. Регламент, кстати, был отличным. Мне кажется, вообще любой курс в университете бы выиграл от такого регламента, который бы простым языком описывал, что в целом происходит на парах и на экзамене. Опять же теоретически, это должны делать многочисленные нормативные документы — но их невозможно читать, потому что они ссылаются на терминологию и практики из госстандарта, и в целом сводятся к таблицам с циферками. А нужно писать простым языком, понятным студентам: «если А, то будет Б». Единственное, чего нужно избегать — это стремления описать абсолютно все, все мыслимые и немыслимые нестандартные ситуации. Регламент должен описывать то, как курс проходит в нормальных, подавляюще частотных случаях. Редкие исключения описывать не надо, лучше оставлять на усмотрение преподавателя. Главное, показать «как надо», и гарантировать что-то людям, которые делают «как надо».

Ну да ладно. Группы мы поделили так: les miserables пошли к кафедральным преподам, а остальные — к контуровским, прямо по результатам егэ. Справедливо ли это? Ну такое. Понятно, что работать на дне — удовольствие небольшое. Но у нас не было другого выбора. Кто-то вести эти пары был должен, контуровцы с нетянущими студентами бы не согласились работать — а на кафедральным можно было повесить, что угодно. Ну и вот.

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

Масштабирование

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

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

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

В Контуровских филиалах обычно все было скорее хорошо, примерно как в ФИИТе — но там чаще всего шел отбор уже взрослых людей, курса как минимум с третьего, а то и вообще тридцатилетних, которые хотели сменить специальность. В ВУЗах дела обстояли похуже. И студенты там были вялые, и преподы тоже, еще и разговоры у них на кафедрах были, типа, «я не понимаю, зачем нужно делегирование, если есть наследование». А я, блядь, не понимаю, где я оказался и как вы можете чему-то учить, вам бы самим «Основы программирования» прослушать не мешало, и еще не факт, что вы бы его сдали! На экзамене результаты тоже особо не радовали, вершиной здесь был очередной будущий иностранный специалист, который попросил меня перевод экзаменационной работы, желательно на арабский. В общем, из этих поездок я сделал для себя вывод, что мы на матмехе, особенно в ФИИТе, очень priviliged в плане студентов и в целом атмосферы. Задор, инициативность, интерес ко всему… В других вузах все какие-то снулые, никакого огня в глазах.

Но кое-куда масштабирование не зашло совсем — это «вайтишная» (от «войти в айти») область.

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

И даже там поначалу неплохо — на каком-то уровне. Самоя запоминающаяся кандидатка, например, вполне себе отвечала на простые вопросы, на «для чего нужна регуляризация» можно было получить правильный ответ: «для того, чтобы бороться с переобучением»; «что такое переобучение?» — «это когда на тестовой выборке метрики, хуже чем на обучающей». Собеседуемая старательно цеплялась за поверхностный, гуманитарный уровень ответов, на уровне слов и понятий, но не формул, и мы решили копнуть глубже: «а где именно регуляризация в целевой функции?». И выяснилось, что этого кандидат не знает вообще. Она не знает, что такое целевая функция, зачем она вообще нужна, как происходит ее минимизация, почему эта минимизация связана с фактом обучения, и как целевая функция выглядит для логистической регрессии. Мы ткнули пальцем в ее поверхностные знания — и у нас локоть провалился в эту пустоту, там вообще ничего не было! The gaping pit of nothingness, filled by empty words, как я высказался на оценке кандидата.

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

Но тогда, году в 16-м, это было еще не так ужасно, у нас в городе этим занимались адекватные люди, и мы решили попробовать.

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

CVARC

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

Это был проект с очень давней историей, и базовой идеей всегда была платформа, на которой можно обучать искусственные интеллекты. Сейчас эта идея свежей не выглядит, таких проектов много и регулярно проводятся различные чемпионаты, но когда мы начинали — а еще в самом первом наборе в лабораторию был студент, который делал какую-то игру, и в результате мы получили гоняющиеся друг за другом параллелепипеды — этого всего не было, и проект лежалым не выглядел. Но из-за робототехники, у меня все время не хватало времени как следует уделить этому проекту внимание, поэтому в результате студенты, работающие над ним в ранние годы лаборатории, все время уходили в что-то свое: то универсальный графический движок, декорирующий OpenGL и DirectX, то протокол синхронизации через WebSockets (там было нечто, более всего напоминающее игру, с очень милой ламповой 2Д-графикой). Но из-за отсутствия концентрации мы никак не могли в этом направлении продвинуться — и, возможно, жаль: займись я играми с тем вниманием, которым занимался роботами, и у нас действительно могло бы получиться что-то интересное на выходе.

Потом, в связи с планированием докторской диссертации по всеобъемлющей системе управления, контекст поменялся: вместо игры должен был стать эмулятор роботов. Там можно отлаживать интеллектуальные алгоритмы управления (помехи, в том числе следующие из физики мира), можно распознавать изображения — опять же, со всевозможными артефактами освещения. Мы фантазировали вплоть до Eurobot Virtual — проведении виртуальных соревнований по правилам Евробота, где можно было бы отлаживать управляющие алгоритмы, и я даже сделал на эту тему доклад на Eurobot conference.

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

Мне эта идея казалась очень хорошей, потому что в робототехнике с алгоритмами действительно как-то не очень: ну то есть Boston Dynamics, безусловно, хорошие алгоритмы реализует, но в народ оно не идет. Евробот был, однако, не самой лучшей точкой приложения этой идеи, потому что эти соревнования выигрывались механикой, а не алгоритмами (меня тут весьма сбили с толку правила 12-го года, когда игровой элемент действительно присутствовал). Впрочем, я и сейчас полагаю, что если бы нам удалось отцепить команду электронщиков и механиков от команды алгоритмистов, сохранив совместимость через интерфейс эмулятора, мы бы могли очень хорошо смасштабироваться.

Поэтому за эту идею я взялся с новой силой. Одна из команд сделала хороший эмулятор — мне повезло найти студентов, которые хотели делать именно игру, а не физические и графические движки, они интегрировали готовые компоненты — и у них впервые заработал эмулятор с нетривиальной физикой. Студент следующего поколения смог реализовать на этой игре некие Eurobot-like правила, обвесить это системой приема решений и матчмейкинга, и провести соревнования, приуроченные ЗМШ — особым успехом они, впрочем, не пользовались. Смотрелись они не очень: какие-то циллиндры таскают туда-сюда какие-то кубики, потом, помех там не было, не реализовали, а без них это была очень тривиальная задача

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

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

https://www.youtube.com/watch?v=Jnxtyouz4Ss

Выглядело это так: на полянке с лабиринтом деревьев бродили Пуджи, которые могли друг друга хукать со смертельным исходом. Также там лежали руны, дававшие всякие бусты, и ползали по предсказуемым траекториям Слардары — они могли убить пуджа в некоторой своей окрестности, если он зазевался, и их тоже можно было хукать. На первой неделе Пудж был один, на второй их было уже двое, для двух разных игроков, а на третьей добавляли, кажется, Blink Dagger. Управляющий алгоритм

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

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

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

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

Через год мы опять сделали на том же движке проект, уже другой — стратегию a-la Heroes 3. Можно было захватывать шахты, нанимать юнитов, сражаться (только в режиме автосражения), и так далее. Это был большой вин для системы, потому что реально было очень легко это туда всунуть и ничего в ядре менять не пришлось. Но само по себе это вином, пожалуй, не было — ненаглядно. Лучше бы сделали 1:1 на СФ-ах, например, во всех деталях.

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

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

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

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

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

Лично мое отношение к этому было буквально «Gut so!». Мне и на тот момент, и с тех пор, много раз доводилось работать с людьми, которые буквально шагу не могут ступить без четкого, подробного плана действий, который я для них должен составить. Это самая бесполезная разновидность джуниора — такие отнимают гораздо больше человеко-часов, чем приносят, и в течение очень долгого времени. От этой мерзкой привычки нужно избавляться как можно скорее, и да, на первом курсе — это самое оно, потому что дальше у студентов будет, например, курсовая, на которой ожидание детального плана будет всем мешать. Умение прийти, как-то на минимальном уровне понять код, поставить эксперимент, понять что-то большее — это часть профессии, в конце концов, а наш курс как раз к этой профессии готовил. Этими соображениями мы, кстати, со студентами делились.

Но многие студенты отказывались это делать, и вот даже по лицам, как мне казалось, была видна эта отвратительная ментальность хорошей девочки из села Кукуево, которая пришла делать задачи в обмен на баллы в четко очерченных рамках, а за эти рамки — ни-ни, ей это ни к чему, ей и там, в рамках, в манежике хорошо, а тут какая-то игра, какие-то пуджи, какой-то искусственный интеллект, а можно мы обратно вернемся к понятным задачам… Омерзительно. Где смелость, где какой-то кураж, где тяга к исследованию неизведанного? Ой нет, вдруг баллов лишусь. Баллоебство — это другая проблема девочек из села Кукуево, которые буквально зубами вцепляются в любую небольшую возможность этот балл получить, они целое исследование готовы проводить на тему «а вот в другой группе я спросила несколько человек, им поставили полный балл с такой же ошибкой, а вы мне снизили!». Лучше б они эту энергию направляли в русло решения задач! Все это, на самом деле, приводит к тому, о чем много написал Талеб в своем эссе «умные, но идиоты» — поколение девочек из села Кукуево, которые идеально научились решать университетские задачи, и больше ни к чему не пригодны.

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

Мы, кстати, довольно сильно об этом поспорили с ПВЕ — он, фигурально выражаясь, верил, что человека можно научить гулять в Темном Лесу самостоятельно, если достаточно долго водить его там за ручку. Мне кажется, это так не работает, потому что таким образом можно только научить гулять по Темному Лесу за ручку, а не самостоятельно, потому что самостоятельность нигде не появляется. Но, возможно, у него и получилось — не знаю. Может быть, он сам когда-нибудь расскажет.

--

--

Witness of singularity

Data scientist, software developer, tech-philosopher, singularist, misanthrope. Resident of Berlin. https://t.me/witnessesofsingularity