Мяч затаился в стриженой траве.
Секунда паузы на поле и в эфире…
Они играют (гады) по системе «дубль—вэ», —
А нам плевать — у нас «четыре—два—четыре».
Владимир Высоцкий. Песня правого инсайда
Преподавание программирования — дело почти безнадежное,
а его изучение — непосильный труд.
Чарлз Уэзерелл. Этюды для программистов
По завершении десятилетнего периода (подсознание предательски подсказывает «срока») преподавания в различных вузах дисциплин, связанных с компьютерными науками, хочется зафиксировать некоторые мысли.
Конечно, в глубине души каждый автор надеется на то, что уж его-то мысли точно будут кому-то полезны, но фактически я не ставлю перед этим текстом никаких целей. Хочется помечтать — действительность слишком печальна, чтобы ее критиковать или пытаться улучшить.
Не совсем понятно, зачем студенту компьютерных наук поступать в вуз. Сегодня можно пройти интернет-курсы лучших университетов, составить себе программу, решать задачи в онлайн-системах, принимать участие в конференциях и opensource-инициативах, участвовать в реальных проектах и постепенно развиваться. Можно просто немного поднатаскаться и поступить на стажировку в хорошую компанию, где есть учебный центр.
Вуз, если он хочет сохраниться, может обеспечить мотивацию для поступления студента. Это может быть место в комфортабельном общежитии рядом с учебным корпусом (даже если студент живет в том же городе), хорошее бесплатное питание (именно трехразовое питание, а не деньги на еду), стипендия, выделенное постоянное рабочее место, хорошие преподаватели, качественное профессиональное общение, возможность поездить по миру.
Естественно, в такое хорошее место будет конкурс, и те, кто имитируют обучение, могут отчисляться.
Студенту полезно самому установить операционную систему и обустроить свое рабочее место.
Рабочий день студента может быть построен так: с утра небольшая (около часа) разминка в группах — логические задачи без компьютера, наподобие тех, что предлагаются на собеседованиях, или вроде простых задач из сборника Арнольда — чтобы проснуться и разогнать мозг. Ее проводит преподаватель в форме игры (кто быстрее), но не слишком серьезной или амбициозной. Можно следить за развитием каждого студента — есть ли у него прогресс в решении задач. Со временем студент может освобождаться от разминки или привлекаться к ней в качестве инструктора для студентов младших курсов.
Потом можно решать (индивидуально или в парах) небольшие алгоритмические задачи на сайте, аналогичном acm.timus.ru. Может быть поставлена ясная и достижимая цель: сдать 100–200 задач за год или семестр. Преподаватель следит за прогрессом каждый день, на первые задачи будет уходить несколько дней; можно достичь скорости в несколько простых задач в день. Речь не идет о воспитании олимпийских чемпионов по программированию, цель в том, чтобы набить руку в написании простых программ, пробудить профессиональный интерес.
Последняя активность в течение дня — два часа занятий английским языком вечером. За первый год необходимо достичь свободного чтения документации и понимания устной речи (лекций), улучшить навыки письма и делового общения.
Всё. Никаких других форм занятий в течение первого семестра или даже года может не быть. Можно проводить простые лекции (максимум одна лекция в неделю) по мере необходимости для группы (никаких «потоков»): начала языка программирования (С++) и стандартной библиотеки, как пользоваться средой программирования, основные команды операционной системы.
В компьютерном классе может соблюдаться рабочая тишина, рядом может быть отдельная комната с чаем для обсуждений и дискуссий — вроде открытого рабочего пространства.
После года подобного обучения будет понятно, соответствует ли выбор профессии программиста структуре личности — проявились ли начала алгоритмического и аналитического мышления, видны ли аккуратность при оформлении программ, внимательность к деталям, достаточное терпение и усидчивость, стремление досконально разобраться в логической конструкции, получается ли творчески решать задачи, есть ли удовлетворение от этого труда.
После окончания первого этапа студент может принимать участие в курсах: языков программирования, баз данных, проектирования, операционных систем, управления проектом, машинного обучения, компиляторов, алгоритмов, теории вероятностей и т. д. Все курсы выбираются по желанию и могут предполагать достаточно серьезную вовлеченность — годовую либо в форме интенсива — когда курс излагается быстро за месяц-два, с работой каждый день преимущественно по нему. Можно чередовать обе формы: некоторые курсы требуют большого времени, чтобы разместиться в голове, некоторые — интенсива.
Летняя практика может быть реализована в виде участия в мероприятиях наподобие Google Summer of Code. Если студент сам заранее не может подобрать себе место для участия, в этом ему могут помочь преподаватели. Цель этой деятельности — погружение в профессиональную среду и обретение самостоятельности.
В компьютерном классе полезно развесить большие цветные портреты корифеев — авторов языков программирования, операционных систем, алгоритмов: фон Неймана, Тьюринга, Кнута, Ричи, Томсона, Страуструпа, Столлмана, Уолла, Гослинга, Торвальдса, Мацумото. Великие смотрят со стен прямо на сидящих за компьютерами студентов — это меняет атмосферу в классе.
Что касается преподавателей, то, как ни удивительно, всегда находятся люди, готовые пожертвовать собственной интересной карьерой ради роста и успехов других людей, люди, которые могут пробудить интерес к своему предмету, знают его и сами постоянно практикуются. Достаточно лишь предоставить положительные стимулы, наладить (незверскую) конкуренцию и обратную связь.
Идеально, если бы преподаватели такого вуза объединялись не в привычные кафедры, а в команды, которые ведут разработку реальных проектов, начинают стартапы, дают профессиональные консультации, пишут книги и выступают на конференциях.
Вуз мог бы взять на себя функции информационного, тренингового и консалтингового центра: проводить конференции, хакатоны, демонстрации, ярмарки вакансий, облегчая жизнь компаниям и профессиональным сообществам.
Вуз может не обладать огромным зданием, а вместо этого может быть айсбергового типа, с большой незримой частью: вдали от соблазнов студенты трудятся и творчески растут в реальных классах, а сотрудники и преподаватели перемещаются по миру и живут в самых разных уголках планеты.
Можно не забывать и о материальной стороне дела. В помещениях может быть светло и тепло, воздух может быть в достаточной мере влажен, насыщен кислородом и очищен от выхлопных газов. Дизайн помещений может не напоминать о военкомате. Еда в столовой может быть съедобной и доступной (как по цене или льготе, так и по количеству в любое время дня). В корпусе может быть безопасно, но без паранойи: никаких пропусков на внос и вынос ноутбуков.
На этом впечатлительный читатель может закончить чтение. Далее я напишу то, о чем не принято, ведь мы всегда выше этого. В учебном корпусе должны быть оборудованы туалеты в достаточном количестве. Идеально наличие душевых кабин для студентов и сотрудников, приезжающих на велосипедах. В туалетах не должно быть ниагарских водопадов, а должны быть сиденья на унитазах и туалетная бумага.
P. S. Я сознательно не пишу про маразм/бюрократию/зарплаты. Возможно, я ошибаюсь, но, судя по «Фейсбуку», происходит прямо—таки исход преподавателей молодого—среднего возраста.
«Компьютерным наукам» (если этим словом называть программирование и администрирование компьютеров) вообще не место в вузе. Это уровень ПТУ или техникумов.
«… Манилов долго стоял на крыльце, провожая глазами удалявшуюся бричку, и когда она уже совершенно стала не видна, он все еще стоял, куря трубку. Наконец вошел он в комнату, сел на стуле и предался размышлению, душевно радуясь, что доставил гостю своему небольшое удовольствие. Потом мысли его перенеслись незаметно к другим предметам и наконец занеслись бог знает куда. Он думал о благополучии дружеской жизни, о том, как бы хорошо было жить с другом на берегу какой-нибудь реки, потом чрез эту реку начал строиться у него мост, потом огромнейший дом с таким высоким бельведером, что можно оттуда видеть даже Москву и там пить вечером чай на открытом воздухе и рассуждать о каких-нибудь приятных предметах. Потом, что они вместе с Чичиковым приехали в какое-то общество в хороших каретах, где обворожают всех приятностию обращения, и что будто бы государь, узнавши о такой их дружбе, пожаловал их генералами, и далее, наконец, бог знает что такое, чего уже он и сам никак не мог разобрать …»
Н.В. Гоголь давно и точно описал такой тип «преподавателей с десятилетним стажем».
Уровень ПТУ или техникума — это то, о чём пишет автор, но это не то, что требуется от реальных специалистов «компьютерных наук». После того, как программы стали играть в шахматы сильнее чемпионов мира — ясно, что компьютер в ближайшей перспективе изменит всю «реальную жизнь». Но вторжение компьютера в человеческие дела требует от компьютерщиков такого уровня общей и научной культуры, который, если судить по данному тексту, несовместим с профилирующей структурой личности. Следовательно, программировать должны не программисты, а специалисты по реальным делам и проблемам; задача же программистов-профессионалов — обеспечить им эту возможность, что предполагает гораздо более высокий уровень овладения компьютерными науками, нежели тот, который автор, по-видимому, полагает целевым.
Стандартный офисный программист решает задачи типа разместить 10 кнопок на форму и вывести отчет из БД. Это как раз и есть уровень ПТУ. И нечего этим засорять университеты — для поступающего в вуз такие умения должны уже подразумеваться.