Смекни!
smekni.com

Как готовить системных программистов (стр. 4 из 6)

Почему возникли потребности в строгой формализации? Потому что пришло понимание того, что некоторые задачи в принципе нельзя решить, потребовалась алгоритмическая формализация, и с помощью этих формальных методов удалось доказать неразрешимость нескольких проблем. Первые такие доказательства были корректно получены в 30-х годах XX века. Почему это, когда я доказал, что этого нет и быть не может, это математика, а когда я построил формальную модель и по ней сделал алгоритм, который работает - это уже не математика? Никто не сказал, что только отрицательные результаты являются математическими. В нашей стране такой консерватизм особенно силен. Когда в 1953 году появилась БЭСМ, сразу появились диссертации, например, такого содержания: "Расчет скоса железнодорожного полотна". ВАК принял решение о недопущении к защите работ, носящих чисто расчетный характер. Это было правильное решение, но вместе с водой выплеснули и ребенка. Хорошо, чистый расчет по формулам - это не наука, все признают. Но, например, как сделать систему программирования для БЭСМ? Когда БЭСМ-6 появилась, в 1966 году, 6 коллективов делали операционную систему. И победили не самые известные академики страны. Я помню все фамилии, но не хотел бы их напоминать, чтобы никого не обидеть. Это в самом деле трудная задача.

Граница между "наукой" и "не наукой" в данном случае достаточно понятная, профессионал ее знает, но достаточно трудно формализуемая, и поэтому вызывает массу проблем в нашей науке. И постоянно на Ученом Совете кто-нибудь начинает объяснять, что это "не наука". Важно создать новую модель, новый язык, новый метод, новый алгоритм, показать, что он отличается от других. Я уже много раз был оппонентом, а не только руководителем диссертации. Для новичка, для человека со стороны это, может быть, будет даже удивительно. В задачу оппонента входит не только оценить, хорошая диссертация или плохая. Главная задача - оценить соотношение этой работы с другими известными работами. Не забыл ли диссертант, что это уже сделано? Он сравнивал свою работу с другими? Не забыл ли он какой-то важный результат, который был получен другим, а у него даже не упомянут? И второе - насколько корректно проведено сравнение собственной работы с другими известными работами? В требованиях ВАК четко указаны задачи двух оппонентов: насколько полно диссертант осветил другие работы в этой области и насколько корректно сравнил свою работу с ними. Если известен результат, перекрывающий результат диссертанта, а диссертант об этом не упомянул, то задача оппонента - об этом вспомнить.

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

Например, сейчас у нас пора защиты дипломных работ. У меня защищается в этом году 19 человек. Итак, приходит студент V курса, проведший полгода где-то на практике. Показывает свою программу. Я говорю: "Хорошо, давай посмотрим, насколько научна твоя работа. Что здесь самое главное? Во-первых, насколько это новый результат? Писал ли кто-нибудь об этом раньше?". "Не знаю". "Ты делал обзор литературы?". "Нет"... Чем отличается исследователь от практика в худшем понимании этого слова? Исследователь поймет, что не надо изобретать велосипед. В наше время, когда есть Интернет, другие каналы получения информации, имеет смысл посмотреть, что сделали другие. С этого надо начинать. Далеко не всем это приходит в голову. Второе. Нашел, что такого результата нет, и ты его сам получаешь. Но есть похожие результаты. Проведи сравнительную характеристику. Меня раздражает такая ситуация: люди работали, писали дипломы, писали диссертации. Спрашиваешь: "Чем ваша технология лучше, чем остальные?" И следуют аргументы: "С одной стороны нельзя не признать, с другой стороны нельзя не согласиться..." Спрашиваю: "Ребята, вы потратили на эту работу столько сил и времени. Мы интуитивно понимаем, что это хорошо. Но разве так трудно все это четко сформулировать? У многих программ есть демо-версии, и сравнение их с вашим вариантом входит в работу". Нынешняя молодежь с трудом понимает, что просто сделать что-то, что работает, это меньше половины дела. Настоящий исследователь должен смотреть, как работают другие, скачивать демо-версии, читать инструкции - как у них запускается программа, научиться запускать, посмотреть, поработать, понять, что хорошо, что плохо, может быть, заимствовать какие-то идеи. Необходимо четко сформулировать, в чем твоя заслуга. Что ты такого сделал, чего у других нет? Сейчас этим занимаются только бедные диссертанты, и то, к сожалению, есть такая десятилетиями сложившаяся практика, что они занимаются этим в последний момент, когда уже "кирпич" пишут. Положено иметь обзор литературы по теме, они и сидят в библиотеке по 3 месяца в самом конце. И, между прочим, на моих глазах была ситуация, когда аспирант защищается по отладке, а его на Совете спрашивают: "Как это соотносится с такими-то методами отладки?" Оказалось, что он в библиотеке Академии Наук сравнивал свой метод с американскими работами, а то, что в СССР есть такие работы, и не знал...

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

Итак, важно умение сформулировать задачу, умение посмотреть на нее со стороны "что есть в мире", умение четко объяснить, что у тебя нового.

Я в очередной раз отвлекся, но все-таки закончу. Итак, приходит студент или студентка из мелкой фирмы с программой. Никакого анализа не сделано, сравнительных характеристик не сделано, никаких моделей не построено, ничему новому он не научился, то есть просто сидел и работал на зарплату. Что теперь делать? Я уверяю, что это не может быть дипломной работой. Дипломная работа обязательно должна нести элемент научного творчества.

А со студентами обычно происходит следующее. Преддипломная практика, слава Богу, на первом семестре пятого курса. И когда человек нормально практику прошел, чему-то научился и пришел с результатом, у него еще есть время на то, чтобы превратить эту работу в дипломную. Бывают смехотворные случаи. Два студента сделали транслятор с Java. Никаких ссылок - будто бы в безвоздушном пространстве. "Сколько вы знаете трансляторов с Java?" "Один или два". Поискали в Интернете - оказалось 20-30. "Дайте сравнительные характеристики". Выяснилось, что проигрывают в 500 раз одному из трансляторов. Говорю: "Ребята, я читал про унтер-офицерскую вдову, которая сама себя высекла, но не думал, что это может быть среди студентов мат-меха". Посмотрели программу - это оптимизирующий транслятор с языка С. Java - это интерпретатор по определению, поэтому их и сравнивать по эффективности нельзя, это задачи с совершенно разными целями. Умение грамотно сформулировать здесь было необходимо. Хорошо, что я успел увидеть эту дипломную работу, иначе над нами бы еще долго смеялись.

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

Итак, тезис такой. Мы готовим специалистов в области software engineering, это своя предметная область, со своими законами, своими порядками, своими ограничениями, и, самое главное, со своими задачами. В то же время мы готовим университетских людей, которые должны быть способны, я на этом жестко настаиваю, не только написать программу и придумать эффективный алгоритм, но и сравнить, обосновать, понять теоретически возможные границы применимости. Это обязательно входит в университетское образование.

Но кто сказал, что только такие люди нужны? Мы переходим к следующему вопросу. Вот передо мной лежит проект программы. "Федеральная целевая программа электронной России на 2002 - 2010 годы". Мне очень понравилась фраза: "В настоящее время наблюдается определенное перепроизводство "массовых" специалистов с высшим образованием, в частности, в области создания программного обеспечения и технической поддержки информационно-вычислительных и коммуникационных систем, которые часто вынуждены выполнять функции, не требующие широкой теоретической подготовки, которые могут и должны замещаться специалистами со средним образованием". Еще год назад в связи с конференцией по Наукограду я изучал материалы про аналогичные зоны в Индии, в Ирландии. В Индии готовится в год 5000 master of science (аналог нашего высшего образования) и 27000 бакалавров. Мы пытались прикинуть, сколько у нас готовится. Получилось несколько тысяч программистов с высшим образованием очень разного профиля. У нас и железнодорожный институт, и институт водного транспорта готовит программистов, но все равно получается всего несколько тысяч. А бакалавров нет вообще. У меня, как видите, вся стена увешана досками с именами наших сотрудников, которые готовят команды на международные олимпиады по программированию. Пять лет подряд в десятке из 2500 команд, два года подряд чемпионы. Это приятно. Но только за 5 лет ни один из них не стал профессиональным программистом. Они математики. Сейчас Андрей Лопатин перешел на нашу кафедру и переучивается. Нельзя сказать, что у него все так бравурно идет, он тратит силы, время, и надеюсь, что из него мы сделаем профессионала. Это первый такой пример за 5 лет. Я и раньше пытался сказать, что мы слишком сильно сконцентрировались на результатах олимпиад. Действительно, важно побеждать на олимпиадах, важно иметь исследователей. У меня на предприятии есть несколько человек, таких, что если хотя бы один из них уйдет, мое предприятие лопнет. Есть люди, на которых держится предприятие, потому что они придумывают новые идеи, они все цементируют. У меня на предприятии больше 200 человек, а таких, без которых все остановится, 2-3, может быть, 5, если молодых прибавить. Если уйдут другие - можно найти им замену. Но именно остальные 200 человек выполняют основной объем работы. Бакалавриат у нас как-то не прижился, но нужно найти какие-то упрощенные формы.