РАЗМЫШЛЕНИЯ У КНИЖНОЙ ПОЛКИ

Мне кажется, “маркетинговый” этап продвижения архитектуры .NET (с использованием минимума технической детализации, но с сильнейшими эмоциями по поводу ее радужных перспектив) сейчас в основном закончился. Наступило время изучения реальных достоинств и недостатков этой платформы, причем уже не столько для того, чтобы принимать решение об ее необходимости, сколько для определения конкретных путей ее использования.

С момента появления еще два года назад первой информации о новом языке C# наиболее часто проводятся его аналогии с Java. На самом же деле такое сравнение при всей своей увлекательности представляет собой скорее чисто академический интерес. Ведь сравнивать нужно не отдельные языки, а платформы .NET и J2EE в целом. При этом те или иные особенности синтаксической реализации языка являются явно второстепенным фактором.

На современном этапе развития вычислительной техники уже вполне можно констатировать, что время платформно-независимых языков программирования в общем-то прошло *1. Первый звонок в этом смысле прозвучал более десяти лет назад: Microsoft “приватизировала” универсальный язык Бейсик, жестко привязав свой Visual Basic к Windows. Следующие признаки (и, наверное, не последние) обозначились с созданием платформ Java и .NET, в которых функциональная основа разработки приложений - библиотеки классов, объектов, подпрограмм - перенесена с уровня собственно средства разработки в слой операционной среды (называйте этот слой как угодно: виртуальной машиной, Framework и т. д.).

_____

*1. Возможно, это заявление автора слишком категорично. - Прим. ред.

Хотелось бы подчеркнуть, что сейчас сравнительный анализ языков имеет смысл проводить только в рамках одной платформы. И если мы говорим о .NET, то это в первую очередь C# и VB.NET (хотя есть и J# корпорации Microsoft, и еще более трех десятков систем от других поставщиков, в том числе Borland).

Здесь возникает естественный вопрос - а зачем вообще нужно такое обилие языков? На самом же деле следует иметь в виду, что у .NET имеется свой единый Си-подобный язык для платформы - Microsoft Intermediate Language (MSIL), на котором можно писать исходные тексты, компилировать в него и пр. Только он не включен в среду Visual Studio .NET.

Я беру на себя смелость утверждать, что реальный выбор между C# и VB.NET будет главным образом определяться пристрастием программистов к тому или иному синтаксису. Очевидно, что появление C# объясняется прежде всего необходимостью предложить наиболее простой путь перехода Си- и Java-программистов в среду .NET Framework. С точки же зрения функциональности для подавляющего числа реальных задач C# и VB.NET мало чем различаются. Да, C# имеет ряд более сильных возможностей, например, по созданию “неуправляемого кода”. Но как раз такие низкоуровневые функции рекомендуется использовать лишь в крайнем случае.

Мне кажется, что подобные преимущества C# не являются основанием для перехода VB-программистов на новый язык. Но всем нужно знать об этих возможностях, чтобы при необходимости использовать их вместе.

Наличие двух разных языков от одного поставщика можно объяснить потребностью в поддержке разных синтаксисов, ориентированных на различные, но очень и очень большие сообщества программистов. Но чем объяснить различие в их функциональности? Доводы Microsoft по этому поводу (мол, C# делался “с чистого листа”, в то время как VB.NET отягощен наследием десятилетней истории) выглядят, мягко говоря, неубедительными. Ведь корпорация фактически пошла на полное нарушение совместимости с предыдущими версиями VB, причем в весьма резких формах, чего легко можно было бы избежать. Обратите внимание, что VB.NET - это не продолжение семейства VB, а принципиально новая линия, основанная на синтаксисе Бейсика. Это не VB 7.0, а VB.NET 1.0!

Лично я совершенно убежден (можно привести доказательные рассуждения на этот счет), что различия в функциональности C# и VB.NET вызваны не технологическими, а исключительно маркетинговыми соображениями. Корпорации Microsoft (а не пользователям ее инструментов) по вполне понятным причинам выгодно сохранять такую ситуацию, реализуя известный принцип “разделяй и властвуй”. Причем искусственность этих различий выглядит порой слишком откровенно.

Действительно, почему бы, подвергая VB коренной реконструкции, не включить в него ту же работу с указателями или хотя бы с беззнаковым целочисленным типом данных? И почему для одной и той же операции описания пространств имен в каждом языке создаются новые операторы с разными названиями (Using и Imports)? Не говоря уже о таких “мелочах”, что в одной системе подобные ссылки прописываются автоматически, а в другой это нужно делать руками (таких примеров можно привести немало).

Книжная полка

1. Арчер Том. Основы C#. Пер. с англ. М.: Русская Редакция, 2001. - 448 с.

2. Эпплман Дан. Переход на VB.NET: стратегии, концепции, код. Пер. с англ. Спб.: Питер, 2002. - 464 с.

При изучении литературы по программированию для платформы .NET книги нужно рассматривать не столько как пособие по конкретному языку, сколько как методические материалы по разработке .NET-приложений на примере того или иного инструмента. Даже бегло посмотрев содержание двух упомянутых выше книг, можно убедиться, что их тематика пересекается как минимум на 50 процентов. И вместе с тем - это разные издания. Конечно, значительная их часть посвящена специфическим вопросам использования C# и VB.NET. Но самое главное в другом: каждый автор при рассмотрении вроде бы совершенно идентичных тем демонстрирует собственный подход к их изучению. Именно поэтому, не имея никакого опыта работы с Си, я нашел в книге Тома Арчера много полезной информации, например, по программированию многопоточности применительно к VB.NET (обратите внимание: эта глава под названием “Программирования многопоточногости” почему-то отнесена к части “Особые возможности C#”, хотя речь тут идет об общих для всего .NET вопросах). И могу не сомневаться, что любой C#-программист найдет много интересного из этой области и в работе Дана Эпплмана.

Но что полезного в литературе по VB.NET есть для Си-разработчиков? Отвечая на этот вопрос, нужно сказать, что разные книги могут не только с различной детализацией раскрывать одни и те же темы (или рассказывать об одних и пропускать другие). Они вообще могут подходить к описанию проблемы с качественно различных методологических позиций. И приведенные в данном обзоре работы это очень хорошо иллюстрируют.

Книга Арчера написана в типичном стиле руководства пользователя. Вы решили изучить C# и не хотите отвлекаться на посторонние темы: вас не интересует, что в нем сделано хорошо, что - не очень, какие проблемы могут возникать при переходе с C++ и т. д. В результате - предмет изучен, зачет сдан.

Книга Эпплмана - критический анализ, дающий ответ на вопросы: что такое .NET? какие реальные преимущества он дает разработчикам? какие подводные камни вас ожидают на этом пути? Я уже более 10 лет слежу за деятельностью этого очень авторитетного эксперта. Он известный разработчик, основатель собственной софтверной компании и автор целого ряда книг, среди которых бестселлер “Win API для VB” (см. PC Week/RE, № 23/2002, с. 23).

Разумеется, “Переход на VB.NET” ориентирован в первую очередь на VB-программистов. Но я считаю, что эта работа дает лучший систематический анализ архитектуры .NET из всего виденного мной за последние два года. Поэтому настойчиво рекомендую прочитать ее всем, кто интересуется новыми информационными технологиями, независимо от того, планируете ли вы в будущем работать с .NET или даже не желаете слышать слово “Майкрософт”. Вы, например, найдете в ней замечательный раздел “.NET - реальность или маркетинг?”, в котором говорится не только о конкретном .NET, а о современных ИТ вообще; более того, тема “технологии и маркетинг” проходит красной нитью через всю книгу.

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

Вот лишь одна из цитат на этот счет:

“.NET захлестнул тот же поток маркетинговых статей, недостоверных и обрывочных сведений, вольных интерпретаций и неразберихи, от которой пострадали многие инициативы Microsoft. Не думаю, что вы получите сколь-нибудь вразумительный ответ от сотрудников Microsoft - их ответы слишком сильно зависят от должности и от того, какую презентацию PowerPoint им показали последней”.

В завершение обзора хотелось бы сказать: читайте книги хорошие и разные. Однако если вы хотите реально разбираться в современных технологиях, то имейте в виду совет Эпплмана: “Все сказанное мною (или другим автором, а тем более - коммерческой компанией) следует воспринимать скептически и оценивать в контексте конкретной ситуации”. Добавлю от себя - с учетом собственного опыта и стоящих перед вами задач.

Версия для печати