Чему не учат в школе
Недели три назад разместили несколько объявлений в местных компьютерных изданиях. Ищем программиста. Требования: ничего сверхъестественного. Знание Windows на уровне API, базы данных в архитектуре клиент/сервер, SQL, Delphi. Минимум на сегодняшний день.
Ни тебе локальных и распределенных сетей, ни глубокого знания и умения программировать железо (модемы, джойстики и проч.), ни владения специфическими API (MAPI, TAPI и т.п.). Я уже не говорю про основательное знание объектно-ориентированной идеологии. Все эти RTTI, исключения и проч. Набралось чуть более полусотни звонков. Большинство кандидатов только-только закончили какое-нибудь высшее учебное заведение либо еще являются студентами и, что самое печальное, девять из десяти новоиспеченных выпускников ВУЗов не обладают и половиной необходимых знаний. Оставшийся же десятый, как правило, приобрел навыки работая в какой-нибудь фирме над конкретным проектом одновременно с учебой на стационаре. Вспоминая собственный опыт такого рода "совместительства" могу сказать, что в этом случае знания были получены скорее вопреки университету, нежели благодаря нему.
Выходит, что наша хваленая система высшего образования не способна подготовить тривиального программиста. Хорошо, если человек знает к чему стремится и в процессе учебы самостоятельно будет приобретать знания, которых ему не дадут. Другое дело, если при поступлении абитуриентом двигали иные мотивы: это мол модно, на этот факультет пошли мои друзья, там будут компьютеры... Конкурс на специальности, так или иначе связанные с программированием, уже лет десять один из самых высоких (8 (!) человек на место на ФПМ БГУ в этом году). Уверен, что большинство нынче испытывающих фортуну на вступительных экзаменах мыслят о компьютере в первую очередь, как о классном игральном автомате, и только потом, как о мощном инструменте, на котором можно делать что-либо иное, кроме как гонять бедных монстров по коридорам DOOM. Отучится такой студент пять лет, а что дальше? Вопрос риторический и ответа не требует. Ответ нужен на другой вопрос. Почему у нас не могут подготовить стоящего программиста?
Некому учить
Помните лозунг: "Кадры решают все". Причина первая на мой взгляд кроется в том, что этих самых кадров у нас нет. Программирование преподают все кто угодно, но только не программисты. Паскаль по книгам незабвенных Вальвачева-Крисевича-Бородича-кто-у-них-там-еще и умение составить программку сортировки массива методом пузырька уже достаточный уровень, чтобы читать курс лекций. Собственно, кто такой программист? Человек, умеющий составить и запрограммировать простенький алгоритм, или специалист, способный разработать, написать и отладить настоящую программу, на которую найдется хотя бы один покупатель? Мне больше импонирует вторая формулировка. Она из жизни. Именно такие специалисты подразумеваются, когда работодатели ищут программистов. Недели три назад разместили несколько объявлений в местных компьютерных изданиях. Ищем программиста. Требования: ничего сверхъестественного. Знание Windows на уровне API, базы данных в архитектуре клиент/сервер, SQL, Delphi. Минимум на сегодняшний день. Недели три назад разместили несколько объявлений в местных компьютерных изданиях. Ищем программиста. Требования: ничего сверхъестественного. Знание Windows на уровне API, базы данных в архитектуре клиент/сервер, SQL, Delphi. Минимум на сегодняшний день.
В национальной хоккейной лиге, что в северной Америке, есть одно золотое правило: тренером может стать только игрок, сам бывший звездой. Иначе чему он научит своих подопечных? Здесь у нас не Америка, к тому же далеко не хоккей и, тем не менее, как может обучать преподаватель, сам в своей жизни не написавший ни одной реальной программы? Да ни как...
Неначем учить
Всадник без лошади, автомобилист без машины... Попробуйте продолжить ряд... правильно: программист без компьютера. Укомплектованность учебных заведений компьютерами (язык не поворачивается называть их персональными) ниже всякой критики. Хорошо хоть, что отправили на покой вечно жужжащие, дрожащие и гремящие ЕСки. Эту машину нашей молодости, серо-коричневый кошмар моей памяти. Впрочем, если четверка с восемью мегами ОЗУ, этакое подобие на современный компьютер, стала достаточно обычным обитателем учебных лабораторий, то о периферии можно сказать достаточно емко и коротко: ее нет. Нет сканеров, плоттеров, модемов, струйных и лазерных принтеров. И если бы не сверхнадежность матричных принтеров фирмы Epson, переживших не одну волну компьютеризации и способных печатать кажется на чем угодно и чем угодно (до сих пор храню листинги программ буквально выбитых безо всякой там красящей ленты на тетрадных листках. Смотреть надо только под определенным углом к освещению, иначе ничего не видно. Что-то типа писем молоком дедушки Ленина). Так вот, если бы не Epson - вряд ли бы увидели нынешние студенты результаты своей работы на бумаге. Недели три назад разместили несколько объявлений в местных компьютерных изданиях. Ищем программиста. Требования: ничего сверхъестественного. Знание Windows на уровне API, базы данных в архитектуре клиент/сервер, SQL, Delphi. Минимум на сегодняшний день.
Но, даже если вдруг произойдет невозможное и системе высшего образования будет придан высокий приоритет, и будут выделяться деньги, и появится в лабораториях достойная техника - это не решит всей проблемы. Студенту мало слушать лекции и выполнять практические и лабораторные работы, необходимо еще и заниматься самостоятельно (если студент конечно хочет стать классным специалистом), а чтобы заниматься самостоятельно необходимо иметь компьютер дома. Вот с этим в стране, где на официальную минимальную зарплату не купишь и коробки дискет, туго. И, пока такое положение вещей сохранится, ждать волны качественных программистов не приходится. Пусть даже ВУЗЫ будут работать в две смены.
Нечему учить
Еще одна проблема заключается в том, что науки, изучающей компьютеры у нас нет как таковой. На западе есть, у нас нет. То, что у них называется Computer Science у нас долгие годы пытались подменить прикладной математикой, кибернетикой, информатикой. В результате чего стены ВУЗов покидали хорошие математики, кибернетики и информатики но, увы, посредственные программисты. Там, где нет науки, нет строго очерченных границ, не может идти речи о методике обучения. Нужна дисциплина в рамках которой изучалось бы устройство компьютера на уровне необходимом программисту. То есть, не так глубоко, как, скажем, изучается устройство интегральных схем в курсах электроники, но и не так поверхностно, как обучают этому нынешних программистов. Нужно изучение программного обеспечения. Принципов его построения. Приемов его создания. Изучение современных технологий и систем программирования.
Вот три причины, по которым, на мой взгляд, у нас не могут подготовить программиста, которого не надо было бы доучивать и переучивать, прежде чем он смог бы написать качественную программу. Иногда можно слышать еще и такой довод: учить программированию невозможно потому, что технология меняется слишком быстро. Постойте, но то, что новые версии программ появляются чуть ли не каждые полгода, еще не значит, что само программирование эволюционирует с той же быстротой. Истоки ООП лежат в далеких шестидесятых, C++ был разработан в 1982г., SQL в семидесятых... Согласитесь, фундаментальные изменения происходят не так уж и часто, чтобы не успевать разрабатывать методики и писать учебники.
Андрей КИРЕЕВ
01.01.1999