скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыРеферат: Как готовить системных программистов

В нашей программе есть федеральный компонент, вузовский компонент (региональный) и по выбору. Федеральный компонент: математический анализ, 4 семестра, количество часов в неделю: 8, 4, 6, 6. Алгебра и теория чисел, три семестра, часы: 4, 4, 4. Геометрия и топология, три семестра, часы: 4, 4, 4. Дифференциальные уравнения, два семестра, по 4 часа. Функциональный анализ, один семестр, 4 часа. Когда я был студентом, было два семестра. Уравнения мат. физики: один семестр, но 6 часов. Теория вероятностей и математическая статистика: два семестра, 7 часов.

(Когда я учился, вся теория вероятностей ограничивалась изучением меры Лебега. О том, что вероятность находит применение в нашей науке, я узнал лет через 15: оказывается, отказы вычислительной техники распределены по закону Пуассона. Так можно оценить вероятность отказа, но узнал я об этом только когда столкнулся на практике. Мы сделали новую вычислительную машину, от нас потребовали расчет, я взялся за книги, и с удивлением узнал, что теория вероятностей - полезная наука. Мне было уже под сорок. Ничему такому, как предсказывать отказы, как считать их интенсивность - ничему этому нас не учили. Одни интегралы, интегралы, интегралы. Нет, из этих интегралов потом следуют и закон Пуассона, и все остальное, но мостика между мерой Лебега и еще чем-нибудь полезным нет.)

Есть вычислительный практикум, три семестра по 2 часа, и есть программирование, три семестра, 3, 2, 2 часа. А здесь должны быть общепрофессиональные дисциплины (федеральный компонент): архитектура вычислительных систем компьютерной сети, операционная система оболочки, структура алгоритма компьютерной обработки данных, базы данных и СУБД, компьютерное моделирование, компьютерная графика, теория формальных языков и трансляций, спецкурсы по выбору, спецсеминары. Но против всего этого - пустые клетки.

Далее, рассмотрим третий курс (пятый-шестой семестр). Десять часов в неделю. Как можно научить студентов? И только на 4-5 курсе начинают учить "по специальности". Но на пятом курсе уже преддипломная практика, там только спецкурсы, и то понемножку. То есть мы можем учить практически только четвертый курс. Разве так можно? Вот где проблема. Причем не могу сказать, что у меня есть решение.

Тезис третий - необходимость теории. Один мой бывший однокурсник сейчас профессор Западно-Берлинского технического университета. Я бывал у него, и он у нас побывал несколько раз. Я однажды его спросил, чему учат у них в университете. Выяснилось, что изучают и логику, и все остальное, но только формулировки теорем. Я его спросил: "Скажи честно, если я сейчас подойду к какому-нибудь вашему студенту и спрошу, что такое теорема Геделя о неполноте, он ответит?" "Нет, - говорит, - даже не вспомнит". "Тогда зачем так учить?" - "Ну, положено. А зачем вам теорема Геделя?" "Хотя бы для того, - говорю, - чтобы молодой специалист имел представление о границах применимости. Теорема Геделя говорит о том, что корректность арифметики не проверить средствами самой арифметики, и дает теоретические ограничения, что надо искать какие-то метатеории, привлекать дополнительные возможности. Если человек об этом даже не подозревает, он будет в каких-то местах напрасно тратить время. У меня был случай, когда один выпускник кафедры мат. физики, работающий у нас, должен был реализовать анализ потоков данных в программе. Он довольно быстро все реализовал. Самая мощная машина тогда была 486-я, и он на ней 4 часа тест из 20 строк гонял. Я посмотрел программу - простой перебор путей в графе. Я его спрашиваю: "Ты разве не знаешь, что число путей в графе растет экспоненциально относительно числа вершин?" - "Не знаю. Подумаешь, экспонента! Машина железная, все посчитает". Я ему долго читал лекцию про актуальную бесконечность, о том, что если в программировании видишь экспоненту, то надо искать другое решение. Это не значит, что надо сдаваться. Я часто привожу студентам такой пример. На конференции, посвященной 1000-летию алгоритма, в Ургенче (на родине Аль-Хорезми), была представлена статья Ю.В. Матиясевича "Что нам делать с экспоненциально сложными задачами?" Это мне нравится, это конструктивный подход. Не просто "Все, сдаюсь, больше ничего сделать не можем". Всегда можно найти частные случаи. Есть и другая противоположность "теоретического" восприятия задачи. Другой не менее известный ученый меня мучил, когда я сдавал кандидатский минимум: что значит теорема Геделя о неполноте? И заставлял меня на экзамене (за две недели до защиты диссертации!) признать, что из этого следует, что машина не все может. Но это не так! Нет общего подхода - найдем частные.

Например, знаете, на чем основана шифрация? Сводят задачу к какой-нибудь трудноразрешимой (например, разложение числа на множители). Мои коллеги, практики, сделали систему шифрации. Популярная система, продается хорошо. Они меня попросили показать кому-нибудь из коллег - насколько их работа теоретически обоснована. Я попросил Ю.В. Матиясевича посмотреть их статьи. Он минут 10 смотрел, тут же указывает мне фразу: "Поскольку никакого другого способа вычислить, кроме как простой перебор, нет, это трудноразрешимая задача". Мне даже обидно стало, что сам не разглядел. Вдруг найдется какой-то другой метод, который для данного конкретного класса задач найдет хороший алгоритм? Тогда все это рассыплется как карточный домик. Возможно, такого метода и не найдется, но математика отличается тем, что все надо доказывать. Они не доказали, что другого метода, кроме прямого перебора, нет. Я немного в сторону ушел от основной темы, но никакого противоречия по сравнению с тем, что я начал говорить, нет.

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

Если у тебя нет теоретической подготовки, то так и будешь перебирать пути в графе, не задумываясь об экспоненциальной сложности алгоритма. На практике это означает, что алгоритм работать не будет. Теория дает определенные границы: за что браться, за что не браться, где искать, где не искать. Где с самого начала надо искать срез, подзадачу, специальный случай.

Все-таки это знание составляет малую часть нашей профессии, 5-10%. Просто есть вещи, которые надо знать. Если ты их вообще не знаешь, можешь налететь на такие грабли, что лоб себе расшибешь.

"Нам нужны не приборы в принципе, а приборы в корпусе". Давайте, все-таки, поговорим о программировании. Я много раз читал лекции в Гамбурге, и в Классическом университете, и в Техническом университете, там даже поговорить о программировании часто не с кем. Две крайности: или "коробочники", которые умеют пользоваться стандартными программами, или теоретики, которые занимаются чем-нибудь таким, что неизвестно когда на практике осуществится. А людей, занимающихся нормальным программированием, часто и не встретить.

Я приведу еще один пример. Примерно в 1975 году мы получили первую ЕС ЭВМ 1030 среди гражданских организаций СССР, об этом даже в газетах писали. Первые ЕС ЭВМ шли только на оборону. И вот ленинградский мат-мех получил за счет того, что мы делали много программ для ЕС ЭВМ, самую первую машину. Пример состоит в следующем. Машина часто ломалась, а мы сидели вечерами, ночами. Делать было нечего, все темы были обсуждены, весь чай выпит. И вот я начал одну девицу-оператора учить своему любимому языку АЛГОЛ-68. Такой сложный язык программирования, и редко какой студент мог его освоить в полном объеме. Но времени было много, девица была симпатичная, надо было о чем-то говорить. И за длительное время, несколько месяцев, я научил ее так, что не каждый студент мог с ней сравниться. Говорю ей: "Теперь тебе надо переходить работать программистом. И зарплата выше, и работа интересная. Ведь что такое работа оператора? Поставить диск, загрузить машину". И тут я с ужасом понял, что она не знает, что программировать. Она не знает, как можно итеративно вычислить квадратный корень, она не знает, как устроен транслятор. Она знает язык программирования, экзамен сдать может, а программировать не может. На меня этот эпизод произвел очень сильное впечатление.

Прошло 25 лет, вроде бы многое изменилось. Но посмотрите, мы с Вами здесь сидим, каждые 10 минут дверь открывается. Каждый третий приходит с вопросом: "Андрей Николаевич, я хочу у Вас работать. Я слышал, что у Вас много людей занимается интересной работой". "Отлично, что ты знаешь?" "Я умею программировать на Паскале". "А что ты знаешь-то?". "Ну как, я же научусь". "Посмотри на список спецкурсов кафедры. Что из этого ты знаешь?". "Ничего". "И как ты будешь работать? Я тебя определю в группу "Телефония". Ты знаешь, что как устроено? Что ты там будешь программировать? Ты умеешь писать a:=b, a:=b+c, но ведь это не программирование. Надо знать, что программировать".

Результатом таких разговоров может быть одно из двух. Кто-то всю жизнь меня после этого ненавидит за то, что он хотел заниматься интересным делом, а злобный Терехов на него ушат холодной воды вылил, а бывают такие упрямцы, которые говорят: "Ничего, я научусь". Хорошо, первые три месяца стажировка, и если выяснится, что человек работать не может, ему просто вежливо скажут: "Извини, друг, нам надо двигаться дальше". Это не значит, что человек пропадет, может быть, он в другую группу попадет. Бывает, что люди с третьей попытки свое место находят. Бывает так, что человек научится в процессе работы, но это скорее исключение, чем правило. Правда, это обходится большими усилиями, чем у студента в процессе учебы, но зато закрепление совсем другое, и мотивация другая.

Итак, третий тезис был примерно такой. Между собой взаимосвязаны практика, границы между теорией и практикой, границы применимости теории, некоторые личные знания. Студент учил теорию, учил, куда не надо ходить, но я не хочу, чтобы это превращалось в основу науки. Я считаю, что все-таки основа науки в том, как надо делать. Я объясняю своим студентам, что системный программист - это сфера обслуживания. Мы не делаем конечных продуктов. Например, человек производит расчеты. У него есть какой-то результат. При этом он пользуется трансляторами, операционными системами, вычислительными машинами, которые придумали другие люди. И системщики - как раз те люди, которые делают трансляторы, инструментальные средства, разрабатывают методологии по их использованию. А потом уже прикладные программисты этими средствами и методологиями пользуются и получают конечный результат. Очень часто, кстати, люди видят только конечный результат, особенно когда идет речь о делении денег, и совсем не видят той дороги, тех трудностей, которые были потрачены, чтобы этот результат получить. Системное программирование - это довольно старое название. По-русски мы хорошо знаем, что такое системное программирование. Но были проблемы, как перевести это словосочетание на английский язык. Есть наука computer science, она более теоретическая. А есть наука software engineering. Вот я заведующий кафедрой software engineering. Еngineering - это разработка программного обеспечения. И мне кажется, что это довольно четко сейчас определилось.

Теперь следующий тезис, следующая проблема. Вот защищается мой аспирант у нас на Совете. Я сам член Ученого Совета. И каждый раз попадается какой-нибудь, мягко сказать, недоброжелатель, который, поскольку на Ученом Совете может выступать кто угодно, говорит: "Вы знаете, я не понимаю, почему это математика. Нет теорем, нет доказательств сходимости, почему эта диссертация защищается на математическом факультете?" В реальной действительности самый лучший ответ - сказать: "Вы ничего не понимаете в этой области". Времена, когда математика была только в теоремах, кончились, как минимум, 100 лет назад, а, может быть, и больше. В середине XIX века Ч. Бэббидж придумал вычислительную машину, в которой были все основные элементы (процессор, память, программа, хранящаяся в памяти). Дочь Байрона, Ада Августа леди Лавлейс, пятистраничный доклад на итальянском языке этого Ч. Бэббиджа преобразовала в 100-страничный английский текст, где впервые ввела слова "Переадресация", "Процедура", "Цикл" - это что, не математика? Это было сделано больше 150 лет назад. Была разработана новая модель.

Проблема решается просто, если говорить серьезно и без злобы. Просто мне уже надоело 20 лет объяснять одно и то же. Есть специальность - "Математическое обеспечение вычислительных машин, сетей и систем". Это не мат. анализ, не мат. физика. Есть критерии, предъявляемые к кандидатской диссертации. Новые результаты с практическим внедрением, языки программирования, их реализация, операционные системы, и, самое главное, модели. Математика начинается тогда, когда мы можем что-то формализовать, когда мы можем сформулировать задачу настолько точно, что можно построить алгоритм.

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

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

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

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

Страницы: 1, 2, 3


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.