Учиться, учиться и...
АрхивЗа рубежом программистом (programmer) называют человека, занимающегося переводом алгоритма на какой-либо язык программирования. У нас же к ним зачастую относят любого, кто умеет установить операционную систему, отформатировать дискету или научить работать с Norton Commander. На самом же деле настоящий программист должен писать свои собственные или модифицировать (что, несомненно, труднее) чужие программы.
С некоторой долей условности программистов можно разделить на две группы. Первая и наиболее многочисленная занимается разработкой прикладных программ, предназначенных для решения самого широкого круга задач. От прикладных программистов требуется хорошее знание области, в которой предполагается использовать разрабатываемый программный продукт.
Ко второй относятся программисты, разрабатывающие инструментальные средства, такие как операционные системы, антивирусные программы, компиляторы, системы реального времени и т. п. Тут нужно досконально знать как принципы работы операционных систем, так и "железа", на котором эти системы работают.
Лет 10-15 назад ряды программистов пополнялись в основном выпускниками технических специальностей, как правило, самоучками. Мне известен случай, когда человек, ранее не прикасавшийся к компьютеру, на шестом десятке лет эмигрировал в США и, о чудо, стал программистом. Так неужели программист - это очень просто?
Попробуем разобраться. Автору на собственной шкуре пришлось испытать довольно-таки долгий и мучительный процесс превращения из радиоинженера в программиста, и этот опыт, а также беседы с коллегами дают право сделать некоторые обобщения. На мой взгляд, программистом может стать любой образованный человек, который умеет логически мыслить, изучать и систематизировать информацию, управлять собой (а возможно, и окружающими) и не боится признавать, что он чего-то не знает. В дополнение к этому неплохо иметь широкий кругозор, уметь ладить с сослуживцами и понимать, что множество людей значительно способнее тебя. Последнее пожелание, впрочем, можно отнести к представителю любой профессии, за исключением, пожалуй, артистов, художников и спортсменов. Все остальные навыки, начиная от знания конкретного языка, операционной системы, модного инструментария или области человеческой деятельности, для которой разрабатывается программный продукт, конечно, желательны, но не имеют большого значения.
Мифы и реальность
Не без помощи низкопробных книг и фильмов у многих людей сложился искаженный образ программиста, не имеющий ничего общего с действительностью. Якобы программист - это то ли опустившийся гений, то ли гениальный идиот, который, набрав пару команд, может развязать ядерную войну, а может тем же макаром вдруг взять и одарить человечество всеобщим счастьем. На самом же деле коммерциализация, повышенный спрос на новые разработки, сложность решаемых задач и сокращение сроков выполнения проектов привели к тому, что программирование уже давно превратилось из искусства в ремесло. И как во всяком ремесле, возникло разделение труда, набор технологических приемов, методик, стандартов и пр. Человек, который непосредственно пишет программы на одном из языков программирования (программист, в старом понимании этого слова), ныне называется кодировщиком и стоит на самой нижней ступени в системе разработки программного продукта. Системный аналитик, менеджер проекта - вот главные лица. Конечно же, остались программисты-одиночки, но это вымирающий класс, так как создать серьезный программный продукт (даже с помощью RAD-систем), заниматься его продажей, поддерживать пользователей в процессе его эксплуатации и т. п. одному человеку (даже Биллу Гейтсу или Питеру Нортону) невозможно1.
Быстро меняющийся набор инструментальных средств (операционных систем, языков программирования и средств разработки) не позволяет, выучив что-то раз и навсегда, пользоваться этим всю жизнь. Кроме того, постоянно меняющиеся задачи заставляют также постоянно изучать что-то новое. В связи с этим для программиста особую важность приобретает общая эрудиция и умение обучаться.
Бакалавр - это звучит гордо
Впрочем, вернемся к нашим баранам и поговорим о том, на кого учат студентов. Как мы выяснили, квалификации "программист" в природе не существует, зато имеются инженеры, бакалавры и магистры. Чем же они отличаются друг от друга?
С инженером вроде бы все ясно, а вот бакалавр и магистр пришли к нам совсем недавно, во время братания с европейской системой образования (кстати, тогда же намеревались избавиться от кандидатов наук и чохом объявить их докторами, но не вышло). В общем, магистр и инженер - это два одинаковых по уровню образования человека, но первый является узким специалистом и должен решать конкретные технические задачи, а магистр - специалист широкого профиля, исследователь, будущий ученый. В соответствии с этим и число магистров по сравнению с инженерами невелико (в 10-20 раз меньше). Бакалавр - также специалист широкого профиля, но уровень его подготовки несколько ниже, чем у магистра. Для обучения в магистратуре отбирают всего одного-двух человек из выпуска бакалавров по данной специальности. Несмотря на кажущуюся ущербность звания "бакалавр", именно эти специалисты составляют большинство "белых воротничков" в Европе и Америке.
Пятилетку - в четыре года
Ясно, что программы подготовки инженеров и бакалавров по направлениям, которые можно назвать программистскими, должны отличаться. Это следует как из различия в назначении самих специалистов, так и из сроков обучения.
Для бакалавров в классификаторе бывшего Госкомвуза2 с 1994 года существует одно направление за номером 552800, по которому готовят программистов: "Информатика и вычислительная техника". В отличие от них, для инженеров, как специалистов узкого профиля, в рамках этого направления существует довольно большой набор специальностей3.
Разумеется, рассмотреть все специальности не представляется возможным, поэтому поговорим лишь об одной из них, а именно специальности 220400, поскольку выпускники, овладевшие ею, наиболее полно отвечают термину "программист". В 1995 году специалистов по ней готовили в 35 высших учебных заведениях России4, одним из которых является РГАТА.
В учебном плане общеобразовательные и специальные дисциплины представлены в соотношении 50/50.5 Перечислим некоторые из специальных дисциплин: объектно-ориентированное программирование, технология программирования, системы реального времени, системы искусственного интеллекта, интерактивные графические системы, системное программирование, мобильные операционные системы, операционные системы, базы данных, архитектура вычислительных систем и сетей.
Одним из нововведений последних лет стали так называемые элективные предметы. Студентам по своему усмотрению предлагается выбрать для изучения один предмет из нескольких. Правда, таких дисциплин пока немного (до 10 процентов от общего числа), и иногда приходится выбирать "одну из одной".
Заметим, что различия в учебных планах бакалавров и инженеров невелики, и, таким образом, профильная кафедра может проводить обучение и тех и других параллельно. В этом случае старшекурсники, желающие стать инженерами, дополнительно изучают ряд специальных дисциплин и затем, после года обучения, защищают диплом. Добавим, что для того, чтобы стать магистром, бакалавру необходимо учиться два года.
Что мы имеем с гуся
Обратите внимание на объем гуманитарных дисциплин (философии, социологии, культурологии и т. п.). Люди старшего поколения хорошо помнят, сколько времени отводилось на научный коммунизм, историю партии и подобные предметы. A что сейчас? С одной стороны, те же лица, что 10-15 лет назад рассказывали сказки про коммунизм, сегодня преподают студентам буржуазную лженауку социологию, в которой совершенно отсутствует понятие классовой борьбы. С другой стороны, общественные науки, вроде бы совсем не нужные технарю, в дальнейшем приобретают для человека все большее и большее значение. Почти все студенты перед экзаменами говорят, что это все ерунда и никому не нужно. Те же самые студенты (правда, не все) лет через пять начинают менять свои взгляды на противоположные. К тому же, как ни странно, философия и связанные с ней гуманитарные дисциплины не только помогают научиться логически мыслить, но и в значительной степени расширяют кругозор.
Что же касается специальных дисциплин, их перечень весьма обширен и включает почти все, что необходимо знать программисту, занимающемуся разработкой инструментальных средств, - начиная с основ построения операционных систем и принципов создания компиляторов и до механизмов функционирования вирусов. Кстати, в качестве темы для курсовых работ по курсу "операционные системы" студенты могут получить задание, связанное с созданием вируса или антивирусной программы. Кроме того, выпускающие кафедры могут в определенной степени изменять учебный план, добавляя новые предметы.
В общем, на первый взгляд все хорошо, прекрасная маркиза, за исключеньем... Ох уж эти исключения!
Кадры решают все. И всегда
Все высшие учебные заведения работают практически по одним и тем же планам, а вот специалисты из них выходят разные. При этом не следует обольщаться ни престижностью учебного заведения, ни большим конкурсом. Эти факторы, конечно, важны, но не менее важно, в какой коллектив попадет студент и с какими преподавателями ему придется иметь дело. Любой вузовский преподаватель знает, что год на год не приходится, что бывают сильные и слабые потоки. Точно так же любой студент знает, что бывают сильные и слабые преподаватели (прошу не путать с добрячками и бяками-буками).
Существуют ли объективные параметры, по которым можно определить, стоит ли поступать a этот вуз? Да, существуют. Вот некоторые из них.
- Инструментальные средства, которые используются при обучении студентов. В случае, если используются программные продукты трех-пятилетней давности и учебные пособия, изданные во времена завершающего года последней пятилетки, с большой долей вероятности можно говорить о застое. Скорее всего, здесь давно на все махнули рукой как программисты, занимающиеся поддержкой учебного процесса, так и преподаватели, флегматично дожидающиеся очередного переизбрания на должность или ухода на пенсию.
- Результаты участия (и сам факт участия!) студентов факультета в различных программистских олимпиадах. В последнее время их проводится немало, начиная с Всемирной олимпиады по программированию6 и заканчивая городскими и районными конкурсами. Сами по себе конкурсные задания довольно далеки от тех, которые придется решать в жизни, но участие в олимпиадах явно говорит об интересе студентов и преподавателей к предмету7.
- Материальная база кафедры и института. Впрочем, наличие самой современной техники еще не гарантирует безукоризненной постановки учебного процесса.
- Степень востребованности специалистов, выпускаемых данной кафедрой. (Возможно, этот пункт следовало бы поставить на первое место, так как основная цель получения образования - высокооплачиваемая работа по специальности.)
Читатель, наверное, обратил внимание, что все эти критерии прямо или косвенно связаны с конкретными людьми, что в очередной раз подтверждает вынесенную в подзаголовок крылатую фразу лучшего специалиста по языкознанию всех времен и народов.
Что знает выпускник
Наверное, от общих рассуждений пора перейти к предметному разговору о том, что знает и умеет программист, окончивший вуз.
В дополнение к знаниям, полученным в стенах альма-матер, студенты во время производственной практики, выполнения курсовых работ и дипломного проектирования приобретают опыт самостоятельного создания программного обеспечения и решения конкретных прикладных задач. Кроме того, значительная часть выпускников умеет неплохо переводить с английского языка на русский (сказывается опыт работы с нерусифицированным программным обеспечением). Значительно хуже обстоит дело с умением логично излагать свои мысли. Большинство пояснительных записок к курсовым и дипломным работам написаны суконным языком, а доклады просто невозможно слушать.
К концу третьего курса многие студенты находят себе работу, в основном в мелких коммерческих конторах, что полезно не только с материальной точки зрения, но и в плане получения практических навыков. Дипломной работой около половины студентов является создание какого-либо продукта с использованием СУБД (складская программа, программа для расчета зарплаты, организации документооборота и т. п.). У остальных задания оказываются более экзотическими - например, системы распознавания образов, криптографической защиты, управления станком с ЧПУ, моделирование радионавигационной системы и т. п. в зависимости от пристрастия и интересов руководителя. При этом на защиту выносится готовый программный продукт, включая и документацию к нему.
Среди инструментария, который приходится изучить студенту, в первую очередь следует перечислить языки программирования. Как всегда, список открывает Паскаль, далее следуют ассемблер, Си++, Лисп, Пролог, SQL, HTML, JavaScript. Из программных продуктов в учебном процессе используются Borland Delphi, ERwin, BPwin, Autodesk 3D Studio, Access, Excel. Список СУБД невелик: InterBase и Paradox. Из операционных систем, как обычно, MS-DOS, Windows 95, иногда Unix. Единственным сетевым продуктом является Novell NetWare.8
Таким образом, выпускник обладает как вполне приличным набором практических и теоретических навыков, так и опытом самостоятельной работы. Ну, а дальше кто-то окажется на заводе, в КБ или аспирантуре, кто-то - в коммерческой организации или банке, а то и отбудет за пределы отечества и устроится там. Но об этом - в следующей статье.
|
1 Мне хорошо известно, что и Нортон, и Гейтс достигли успеха отнюдь не как программисты, а как удачливые и талантливые бизнесмены. Тем не менее, в массовом сознании их имена прочно связаны с программированием и производством программных продуктов.
2 Web-сайт Министерства общего и профессионального образования Российской Федерации (адреса вузов, государственные образовательные стандарты и множество другой полезной для абитуриентов информации) находится по адресу www.ed.gov.ru.
3 Приведем их перечень:
220100 - вычислительные машины, комплексы, системы и сети;
220200 - автоматизированные системы обработки информации и управления;
220300 - системы автоматизированного проектирования;
220400 - программное обеспечение вычислительной техники и автоматизированных систем;
220500 - конструирование и технология электронно-вычислительных средств;
220600 - организация и технология защиты информации.
4 В связи с тем, что вузы постоянно изменяют набор специальностей, в зависимости от потребности рынка, данная цифра может не соответствовать действительности.
5 В учебном плане по данной специальности для инженеров предусмотрено 7812 часов. В том числе: общих гуманитарных и социально-экономических - 1800, математических и естественнонаучных - 2000, общепрофессиональных - 1640, специальных - 2372.
6 Информация об одной из наиболее престижных олимпиад по программированию находится по адресу www.ifmo.ru/neerc.
7 Замечу, что на российском этапе двух последних чемпионатов мира по программированию команда студентов РГАТА заняла соответственно 6-е и 28-е места (следует иметь в виду, что кроме вузов в чемпионате принимали участие и сборные команды городов).
8 Говоря о знаниях и умениях студентов, о программных продуктах и дипломных работах, автор старался опираться на свой повседневный опыт. Таким образом, вся приведенная информация в полной мере относится лишь к РГАТА.