Уважаемые господа! Должен сказать, во-первых, что эту статью Вирта, представленную LaptevVV, я в свое время не заметил. Так что этот мой ответ с явным запозданием. Во-вторых, спешу уверить всех, что я не страдаю манией величия и прекрасно понимаю, кто Вирт, и кто я . Однако ИМХО в поиске истины нет авторитетов, и право высказать свое несогласие у меня никто отнять не может. В третьих, заранее приношу свои извинения в том, что я не приму участия в дискуссии, если она развернется. Дело в том, что я на 2 недели ухожу в полный офлайн, а спустя 2 недели будет уже , скорее всего, поздно. И в четвертых, все те довольно резкие высказывания, которые я себе позволяю, никоим образом не относятся к каким-либо конкретным лицам. Итак... Должен сразу сказать, что я не согласен с большинством утверждений , высказанных в статье Вирта. Но остановлюсь я не на всех высказываниях, а только на некоторых. >Как профессионалы в информатике, мы обязаны поднять свои голоса против традиции, приравнявшей компьютерную >грамотность к знанию темных деталей языка программирования, используемого в индустрии. >Мои резкие замечания о преподавании ? результат полного провала попыток помочь сыну, ученику старших классов, >освоить C++. Дизайн языка чудовищен, а учебник написан отвратительно. Мой сын не мог понять, почему x = y >должно отличаться от y = x. Дейкстра жаловался мне, что важная книга по языку Java не содержала формальной >грамматики Можно продолжить цитирование, но хватит и этого. Да, конечно, язык С++ — монстр, кто же спорит. Впрочем, чего же можно хотеть от языка, который пережил 3 ревизии (введение множественного наследования, темплейтов, RTTI), к тому же сам был сделан на принципе совместимости с языком С ? На этом языке фактически отрабатывалась современная технологическая можель объектно-ориентированного программирования. Не удивительно, что не все получилось изящно и элегантно. Безусловно, Java и C# намного элегантнее, но чтобы их придумать, надо было пройти тернистый путь C++ , набить все шишки и получить бесценный опыт. Впрочем, дело не в С++. Если окинуть взором историю наиболее популярных языков программирования, то можно сделать любопытный вывод. Языкам, которые создавали практики, чаще всего была уготована долгая жизнь. Те же языки, которые делали специалисты — теоретики, равно как и комиссии, делали "правильно", в полном соответствии с теорией, чаще всего приказывали долго жить вскоре после своего появления. Хотите примеры ? Пожалуйста. Фортран. Между прочим, Formula Translation, на большее автор не претендовал, да и странно было бы претендовать в 1954 году, когда никакой теории практически не было вообще. Кто-нибудь знает Фортран ? Не Фортран-4, и не Фортран-77, и тем более не Фортран-90, а самый первый Фортран ? По нынешним представлениям — чудовище. Полное пренебрежение всеми банальными истинами. Тем не менее язык прекрасно просуществовал 60, 70 и 80-е годы, (конечно, изменяясь), да и сейчас отнюдь не мертв. А вот его конкурент — Алгол-60. Язык, сделанный исходя из лучших достижений теории того времени. И структурный подход в нем был, и goto почти не требовался, и т.п. Все в нем было хорошо (по тем временам). Прожил около 10 лет и бесславно помер. Перед смертью породил своего наследника — Алгол-68, которому была уготована еще более жалкая судьба. А вот вам PL/1. Монстр еще тот. Чудовище. Предмет для всеобщей критики. Тем не менее вполне благополучно существовал многие годы. Из 50-60-х годов перейдем в 70-е и 80-е. Помните шуточную статью про C ? Вот цитата оттуда " Создатели Cи и UNIX признают, что разыграли весь мир В заявлении, потрясшем весь компьютерный мир, Кен Томпсон, Деннис Ричи и Брайан Керниган признали, что операционная система UNIX и язык программирования Си, созданные ими -- тщательно спланированный перво- апрельский розыгрыш, "продержавшийся" более 20 лет." Шутки шутками, а созданный ими язык с чудовищным синтаксисом покорил мир и стал де-факто стандартом конца 20 века. Преподавание С — чистое наказание, я решительно против его использования в качестве языка первоначального обучения, но этот язык процветает (превратившись в С++) уже не 20 лет, а все 35, и серьезных угроз ему не видно. А вот появившаяся чуть позже Ада. Международный конкурс, отбор четырех лучших претендентов, потом двух из них, потом одного. Красивый и элегантный язык. Надежда на лучшее программистское будущее. И где же эта Ада ? Ну вот, скажете Вы, а главный контрагумент-то я пропустил. Паскаль. Язык, созданный теоретиком от программирования, самим Виртом. Он как будто вполне процветает, так ? Увы, но это чистой воды заблуждение. Процветает не Паскаль Вирта, а Паскаль Borland. Язык, в котором от Виртовского Паскаля остался только синтаксис. Первое, что сделала фирма Borland — ввела в язык элементы, в корне противоречащие основным принципам, заложенным Виртом (опереция @ — взятие адрса переменной , не находящейся в куче, бестиповый ввод/вывод (blockread-blockwrite), позиционирование в файле (в Виртовском Паскале, если помните, file вообще не обязательно связан с файлом на диске, а представляет собой структуру данных "последовательность") и т.д.). Проще говоря, взяв Паскаль Вирта за основу, создала свой язык, с которым можно реально работать. А вот за Модулу никто всерьез не взялся. Где же та Модула ? Я мог бы продолжить, вспомнить еще и о Коболе (как, кстати, обстоят дела с формальной грамматикой Кобола ? , да и о Бейсике заодно но хватит и этого. Сформулирую свой тезис. К разработке языков программирования имеется 2 подхода. Один из них — подход практиков, которые делают язык, исходя из текущего состояния дисциплины программирования и наличествующей техники. Другой подход — это подход теоретиков, которые свой язык создают, исходя из математизированных принципов о том, каким он должен быть на данном этапе развития вычислительной техники. Теоретикам хорошо. Над ними не довлеет страшное слово "compatibility". Им не приходится думать о существующих наработках, от которых никто не хочет отказываться. Да, собственно, и сами компьютеры им не очень-то нужны, идеальный язык и без них можно вполне сконструировать. С синтаксическими диаграммами, БНФ-описанием, красивый, изящный, замечательный, одним словом. Теоретически безупречный. Одна только беда — при столкновении с реальными компьютерами выясняется, что работать с этим языком невозможно. А вот практики — люди нехорошие. Теоретическим обоснованием синтаксиса пренебрегают. Язык, который они создают, оказывается чудовищным , и его все дружно ругают (и за дело). Ругать-то ругают, но почему же используют именно его, а не красивые построения теоретиков ? Причина, на мой взгляд, простая. Практики — люди, связанные с реальным компьютерным миром. Новые алгоритмы они, скорее всего, не придумывают, и вклад в теорию не вносят. Зато они хорошо знают, чем реально живет современная компьютерная ТЕХНОЛОГИЯ, а не смотрят на нее с барским пренебрежением высокой теории. Ну неужели Страуструп не мог сделать C++ поизящнее ? За каким богом там указатели и ссылки одновременно, хотя, по сути, это почти одно и то же. Мог, наверное, но ведь надо было не только теории удовлетворить, но и обеспечить совместимость с С. Пройдет 10 с лишним лет, и можно будет пойти на отказ от этой совместимости — так появятся Java и C#. А появись Java в 1985 году — иметь ей судьбу Алгола-60. Да ладно, если бы только языки программирования. А наш родной и любимый Win32 не монстр ? Со всеми его анахронизмами времен Win16, со всеми его *Ex функциями (ну неужели нельзя было все сразу как следует сделать было ? Вот позвать сюда теоретиков — они нам правильный интерфейс соорудят. Теоретически безупречный, логически корректный, идеальный, одним словом. Только кому он нужен будет ? А сам наш любимый Pentium — не монстр ? С его одним реальным и двумя защищенными режимами ? С селекторами и дескрипторами, которые то ли нужны, то ли совсем не нужны . С режимом V86 для эмуляции MS-DOS (да гнать ее в три шеи, кому она нужна ! . С командами, которые никто не использует (а ну-ка, навскидку, что делает команда AAA ?) Вот если призвать теоретиков — они нам правильный процессор сконструируют. Теоретически безупречный. Останется только найти фирму, которая возьмет на себя финансирование перевода всей нынешней индустрии на этот процессор. В Микрософт по этому поводу обращаться не стоит — денег у них не хватит, даже если Билл Гейтс отдаст свое личное состояние. >Я был разочарован не только таким положением вещей, но и тем, что серьезные специалисты по информатике >воспринимают его как совершенно нормальное. Мне еще ни разу не попадался учебник по UNIX/C++/Java, который я >мог бы освоить за неделю. Их учебники невозможно читать, они предполагают, что читатель принадлежит какой-то >секте, чьи заклинания должны оставаться тайной для публики, и читателю не следует ожидать многого в плане >надежности, связности или общей элегантности. Мое отчаяние достигло апогея, когда я пытался научить своего >сына программировать на C++ ? факультативный курс в средней школе! После полугода агонии ? как для отца, так >и для сына ? я посоветовал сыну бросить этот курс. >Преподавание в средней школе оказывается отличной проверкой не только способности к преподаванию, но и >ясности учебников. Время от времени я получаю жалобы от учителей, сообщающих о трудностях, которые они >испытывают с современными средствами и языками программирования (и нередко они просят версию старого Паскаля >для новых машин). Вот выдержка из переписки с физиком-теоретиком из России, который предпринял эксперимент по >преподаванию программирования способным ученикам старших классов лицея. Он пишет: Правильно "серьезные специалисты по информатике воспринимают его как совершенно нормальное". Потому что оно такое и есть. Вполне нормальное развитие реальной технологии. С ее колебаниями, боковыми и тупиковыми направлениями и т.д. А если говорить о конкретном, то есть о преподавании C++ — господа, да бросьте вы проблемы придумывать! Может, это и не идеальный язык, может, для его постижения требуется некоторое усилие, но неужели уж так все мрачно, что остается только ждать полугода агонии и после нее бросить этот курс ? Полно, о чем вы ? ИМХО после полугода агонии при изучении С++ не этот курс бросить надо, а серьезно подумать над тем, чтобы уйти из информатики и заняться чем-то другим . Ввиду профессиональной непригодности. Перейду теперь ко второму вопросу, который я хотел бы рассмотреть >Конечно, в такой постмодернистской академической среде профессор давно перестал быть мудрецом, углубляющимся >все дальше в свой излюбленный предмет в тиши кабинета. Современный профессор ? это менеджер большой команды >исследователей, хваткий добытчик грантов, поддерживающий тесные связи с ключевыми огранизациями-источниками >финансирования, и неутомимый автор волнующих проектных заявок и впечатляющих отчетов о достигнутых успехах. В >этом высоко конкурентном бизнесе было бы самоубийством растрачивать время на размышления о том, как лучше >рассказать о простых вещах массе начинающих. Когда речь заходит о материалах для курса, программном >обеспечении и т.п., очевидный выбор ? взять то, что лежит на полке и заведомо принято всеми остальными. Да, конечно, жесткие слова. Буду и я довольно жесток, тем более что ИМХО право имею — я сам преподаватель. Впрочем, моя полемика здесь не столько с Виртом, сколько с теми, кто у нас в России придерживается этого же мнения. Вирту хорошо говорить. Он признанный классик информатики, его работы останутся в ней навечно. Перенесемся же на нашу отечественную плоскость и посмотрим, что имеется здесь. Зададим такой вопрос — а что вообще есть научное исследование в области информатики ? То самое, за которое наши "мудрецы, углубляющимся все дальше в свой излюбленный предмет в тиши кабинета", получили свои кандидатские и докторские степени, позволившие им стать доцентами и профессорами ? Если кто-то из них может сказать, что он придумал новый алгоритм и тем самым внес вклад в науку информатику — да, тогда я умолкаю. Но из личного опыта могу сказать, что немного найдется таких. Большинство же преподавателей информатики либо свою диссертационную работу делали по математике (я не математик, поэтому для этого случая no comments), либо же тема их диссертации звучала примерно так "Разработка автоматизированной системы управления технологическим процессом первого заборостроительного завода имени четвертой пятилетки". Т.е. фактически этот преподаватель просто возглавлял группу программистов, оную АСУ и соорудивших. Предприятие поставило себе галочку в графе "внедрение вычислительной техники", а руководитель проекта сделал на этом свою диссертацию (поставил галочку в графе "остепененность" своего вуза). Вот и все. Я не говорю, что это плохо. Во времена того театра абсурда, в котором мы жили, это было нормально. Я просто хочу понять — к каким таким мудрецам этих преподавателей надо относить ? При чем здесь мудрецы ? А преподаватель этот делал свое дело как полагается. И тогда, и сейчас делает, если сил еще хватает. Тогда он блестяще знал PL/1 и тогдашнюю СУБД , благодаря чему эта самая АСУ все же работала, несмотря на явное нежелание ЕС-1030 работать без сбоев больше часа . Сейчас же он знает современные технологии, точнее, некую часть из них, и учит этому студентов. А, кстати, господа, кого мы готовим-то ? Теоретиков от информатики или программистов в нашем нынешнем мире ? Если первое — о да, тогда в основном мудрецы и требуются. А вот если все же второе — то не является ли более важным знание реальных технологий ? Мудрость — она мудрость навсегда, алгоритмы Кнута, Вирта и Дейкстры не устареют. А вот учить студентов программированию под MS-DOS 15 лет назад было можно, а сейчас нельзя. А через 15 лет, вполне возможно, и под Win API будет нельзя. А чтобы учить, извините, самому сперва научиться надо! На это время требуется. Так может, современному преподавателю информатики стоит быть не столько мудрецом в тиши кабинета, сколько специалистом в области современных информационных технологий, т.е. реально действующим лицом в реальном мире, а не кабинетным затворником ? А в реальном мире действуют реальные законы, которые изменить нам не дано, а бороться с ними — донкихотство. >Только университетские преподаватели в состоянии сломать этот порочный круг. Это сделать нельзя ни быстро, ни >легко. Но если это окажется невозможным, то что-то, видимо, глубоко неправильно с преподавателями и их >академической свободой. Они просто обязаны подняться до роли лидеров. Нет уж, спасибо. Я предпочитаю не подниматься до роли теоретического лидера, а вместо этого быть в состоянии просто отвечать на вопросы моих студентов по реальным программистским проблемам, да и не только программистским, а и другим, связанным с живым миром реальной вычислительной техники. И пока в состоянии, буду работать. А когда уже не смогу — пора на пенсию, значит. Или в теоретики переквалифицируюсь Только не надо понимать мое выступление как то, что я противник теории вообще. Бога ради, я целиком за! Но при этом все же не стоит смешивать божий дар с яичницей. Кесарю — кесарево, а слесарю — слесарево. -- With best regards, Pavel Dvorkin Posted via RSDN NNTP Server 1.9 gamma |