Продолжение темы, поднятой статьей Страуструпа об обучении программистов. Я хочу рассказать об одной вещи, которую никто не упоминает в разговорах о подготовке программистов в ВУЗах. Которую, однако, я считаю очень важной и с которой мне в свое время очень повезло. Это – свобода в экспериментировании во время учебы.
Вот чем хороша учеба, так это тем, что можно пробовать разные вещи, совершать ошибки и бросать что-то недоделанным, когда к этому теряется интерес. Это время такое – хочется попробовать все. Да и преподаватели относятся к студентам именно как к студентам, прекрасно понимая, что много от них ждать не приходится.
Вот мы в свое время и пробовали. На первом курсе, когда машинное время (практически неограниченное) у нас выделялось на Robotron 1715, мы с друзьями писали на Turbo Pascal 3 простенькие игрушки (вроде Sokoban).
Потом нас пересадили на IBM PC и доступ к машинам сильно сократился, но все равно удавалось экспериментировать. Так, когда в качестве очередной лабораторной работы было озвучено задание “Работа с текстовыми файлами на языке Паскаль”, то мне захотелось сделать текстовый редактор по типу редактора Turbo Pascal 5.0. И написал, пусть сильно урезанный по возможностям, но работающий. И забросил его сразу же, поскольку больше он мне не был интересен.
А когда на втором курсе нам начали читать ассемблер x86, то вместо обычных лабораторных работ мы взялись написать растровый графический редактор. На ассемблере. Конечно, не написали. Но получили опыт, совершенно несравнимый с тем, который нас ждал, если бы мы пошли обычным путем – через простенькие задачки, вроде “написать процедуру сравнения двух строк на языке ассемблера”.
Потом были и другие эксперименты, которые развивались по одной и той же схеме – интересная идея, быстрое воплощение 80-90% от задуманного, затем резкая потеря интереса и, если повезет, то пропихивание проекта как курсового, или получение с его помощью автомата на зачете или даже экзамене. Но не смотря на то, что весь написанный код с удовольствием отправлялся в корзину, опыт-то оставался. Собственный опыт. Поскольку все приходилось познавать самостоятельно, а такие знания гораздо ценнее.
Подобная свобода творчества была невозможна без особой атмосферы здоровой соревновательности и обмена знаниями между студентами (и даже преподавателями). Кто-то научился программировать знакогенератор на IBM PC – нужно его расспросить и сделать что-то покруче, например, текстовые окошки с тенями. Сделали! Тут же у тебя расспрашивают, как тебе это удалось. А потом тот, кто тебя расспрашивал, показывает тебе графический курсор мыши в текстовом режиме – точь-в-точь такой, как в Norton Utilites. А ты в “отместку” делаешь библиотеку для реализации менюшек и диалогов с кнопочками и редакторами, как у тех самых утилит. А кто-то тебе показывает библиотеку Zinc Interface, а другой говорит, что Turbo Vision гораздо круче… :)
Конечно же, ничего этого не было бы без доброжелательного отношения к нашим “поискам” со стороны преподавателей. Контроля за их работой, наверное, было меньше в те времена. Поскольку за удачно решенную “на спор” с преподавателем задачу он мог зачесть все лабораторные работы за семестр, даже не требуя никаких формальных отчетов от тебя. Или мог поставить “отлично” автоматом на экзамене за то, что именно ты координировал работу всех остальных студентов при коллективной разработке общего большого задания. (Сейчас до меня доходят слухи, что работа преподавателей в родном универе жутко забюрократизированна – должны быть строгие учебные планы на каждую лекцию и лабораторную, все лабораторные должны быть запротоколированы, никаких “автоматов” на экзаменов и пр.)
Что оставалось после этого в сухом остатке? Хорошо развитые базовые навыки в написании программ. У нас уже формировался стиль (умение именовать сущности в программе именно тогда у меня сформировалось), накапливался опыт комментирования и документирования, отладки и, в какой-то степени, проектирования. Конечно, настоящими программистами нас ВУЗ не сделал. Но потом, как говорят, придя на производство, лично мне было просто – учиться программировать не нужно было. Сейчас же, беря молодого сотрудника на работу, первое время приходится тратить именно на обучение программированию.
Не могу сказать, что тогда было хорошее и актуальное преподавание профильных предметов. До очень многих вещей мы доходили сами, на своих ошибках. Но вот атмосфера и свобода, которая царила во время учебы – вот это было главным.
Почему я делаю акцент на свободе экспериментирования во время учебы? Потому, что насколько я могу судить, у студентов-программистов ее уже нет:
- строже стала учеба (по слухам, сейчас в Белоруссии зарплата учителей напрямую зависит от количества заданных на семестр лабораторных, поэтому каждый преподаватель старается дать по 10-15 лабораторных по своему предмету – это очень много);
- возрос спрос на программистов и студенты сейчас начинают работать уже на 2-3 курсах (а раз пошел работать, то все – лопату в руки и копай отсюда и до обеда).
В результате нет возможности безнаказанно совершать детские ошибки, нет той свободы поиска… Что не есть хорошо. Вряд ли бы я программировал бы так, как сейчас, если бы в конце первого курса у меня не было возможности написать простенький текстовый редактор в качестве лабораторной работы.