Здравствуйте, Ka3a4oK, Вы писали:
KK>Конкретный вопросм для адептов .NET — какие задачи решает .NET ? Вот чего не было в Мире раньше, что .NET — это революция и счастье народам мира ? Какие теперь можно писать невиданные программы, о которых раньше человечество могло только мечтать ?
Я не адепт .NET, более того, я даже не специалист в .NET. Но все же позволю себе высказать, так сказать, взгляд со стороны.
Имхо, .NET является симметричным ответом Майкрософта Сану с его Java. А вот почему Майкрософт посчитала Java угрозой и почему решила выпустить .NET? Для того, чтобы не отстать от поезда "управляемых" языков. Более того, для того, чтобы стать локомотивом этого поезда. Но зачем? Что такого в этих управляемых языках и средах?
Имхо, происходит это из-за того, что скорость разработки оказывается важнее скорости работы результирующего кода. А чтобы повысить скорость разработки, нужно по максимуму освободить разработчика от ошибок, поиск и устранение которых на неуправляемых языках (читай C и C++) занимает много времени -- ошибки с памятью, неверными, повисшими и забытыми указателями. C++ программист может потратить день, два, три на то, чтобы хотя бы найти место, в котором приложение ломается. В той же Java это место сразу же указывается stack trace-ом. Возьмем тот же сборщик мусора. В C++ нужно потратить массу времени на этапе проектирования для того, чтобы определить политику передачи прав владения указателем между модулями. Чтобы указатель, созданный в одном модуле был гарантировано удален один и только один раз, причем именно тогда, когда он больше не нужен. При наличии сборки мусора такого вопроса даже не возникает.
Еще одна сторона медали в требуемом уровне знаний/умений для программирования на языках типа C++. Язык сам по себе трудный для изучения, но необходимость тчательно и скурпулезно отслеживать работу с памятью делает программирование на C++ еще сложнее. Для того, чтобы с начала изучения C++ человек дошел до уровня граммотного специалиста требуется много времени. Возможно, слишком много в современных условиях. Поэтому снятие с программиста большой части забот при использовании управляемого языка делает обучение этого программиста более быстрым делом. А это позволяет более просто задействовать в проекте большее количество разработчиков с не очень высоким уровнем подготовки.
И еще одна сторона. Актуальная в большей степени в Java. Это единый SDK для всех платформ. При программировании на C++ с переходом с одной платформы на другую приходится адаптироваться к новому API. Создание эффективных прослоек для C++, вероятно, слишком дорогая задача. По крайней мере Sun для Java сумел выпустить такой SDK. И Microsoft для .NET это сделал. А в итоге все это играет на сокращение времени разработки.
Я специально не затрагивал тему межъязыкового взаимодейтсвия на .NET (когда компонент на C# без проблем общается с компонентом на VB или Python). Время покажет, окажется ли это широко востребованным или нет.
Так же я не затронул другие стороны, про которые даже не догадываюсь.
Что же касается того, что мы увидим. Думаю, что сейчас есть задачи, которые в настоящее время не могут быть разрешены за приемлимое время из-за несовершенства средств и технологий разработки. Что это за задачи -- я не знаю. Но когда на компьютерах программировали только на ассемблере, то никто не предполагал, что на компьютерах будут экспертные системы, системы распознавания образов, системы электронного документооборота, системы верстки, системы управления и жизнеобеспечения и т.д. и т.п.
Так же, мне кажется произойдет таки фрагментация в области программирования. Многие задачи (скрываемые за емким термином "корпоративные системы") неизбежно станут вотчиной управляемых языков. Собственно Java сейчас в этом сегменте и процветает. Так же будут и другие области, в которых управляемые языки не смогут использоваться в чистом виде (а их урезанные варианты будут неотличимы от неуправляемых языков, как в случае с J2ME). Например, игровые платформы, встраиваемые системы, системы реального времени и т.д.
Более того, разные области будут требовать знаний в разных областях. Например, C# программисту, разрабатывающему банковские приложения нужно будет знать, к примеру, SQL, XML, XPath, SOAP, ... В тоже время C++ программисту в области систем реального времени в телекоммуникациях -- CORBA, GSM-страндарты, различные специфические отраслевые протоколы. И со временем переход разработчика из одного направления в другое (скажем с C++ в C# или Java) будет все сложнее и сложнее. Поскольку нужно будет сменить не только язык, но и предметную область.
Поэтому .NET и Java может означать не столько появление новых, ранее невиданных приложений (хотя я вот не знаю, был ли такой класс приложений как Web Application Server до появления Java), сколько еще большее фрагментирование понятия "программирование". Как со строительством (зданий, мостов, тунеллей) или машиностроения (тяжелого или легкого).
... << RSDN@Home 1.1.4 beta 3 rev. 185>>