Разочарование месяца

В IT индустрии наблюдается интересная цикличность. Средства и платформы разработки меняются раз в семь-восемь лет. Не так давно пришла Java. Приход сопровождался криками о том, что скоро весь код в мире будет на ней переписан (следы этой уверенности любой желающий может пронаблюдать в JNI). Теперь пришел .NET и C#. Нет никаких сомнений в том, что эта платформа завоюет большую долю рынка, но в чем причины ее появления?

Прошли очередные семь лет. Предыдущая замечательная платформа не оправдала возложенных на нее надежд. Вывод очень простой – нам нужна новая платформа. Почему новая будет лучше? Технически, таких причин нет или почти нет. Ничего принципиально нового платформа .NET не привнесла. Тем не менее, масса людей во всем мире бросилась изучать C#, выпускаются книги, проводятся семинары, т.е. сбор денег идет полным ходом. Ровно то же самое происходило в начале эпохи Java. Экономически такие смены работают хорошо, обеспечивая перекачку денег из «реальной» экономики в IT сферу. Нет никаких сомнений в том, что пройдет еще несколько лет, появится очередная платформа.

Проблема в том, что огромные затраты денег, сил, времени, умственных ресурсов разработчиков тратятся практически впустую. Развитие технологий разработки в массовом масштабе топчется на месте десятилетиями. По сравнению с Java объем инноваций в .NET минимален, несмотря на огромный опыт, которым могли пользоваться авторы C# и .NET.

C#– позор для своих разработчиков. Фактически, это переработка Java, улучшения в которую вносились с помощью «синтаксического сахара» (ценой дальнейшего усложнения языка), с реверансами в сторону C++ и VB. Для решения каждой синтаксической проблемы добавлялось синтаксическое же решение (foreach, event, delegate). Язык раздувался. Добавлено огромное количество возможностей, дабы придать языку свойства «one size fits all»: неуправляемый код, указатели, структуры. Язык прекрасно поддерживает застарелые комплексы программистов: «не забудь написать override, не забудь написать virtual, не забудь написать new». Методы у нас теперь по умолчанию не виртуальные (да здравствует объектно-ориентированная технология!), зато теперь у нас есть out-параметры, списки параметров переменной длины, многомерные массивы, перегрузка операций и (surprise!) препроцессор. На место anonymous inner пришли делегаты, которые синтаксически, возможно, приятнее, но еще дальше от полных замыканий (full closure). Чтобы помочь убогой типизации справляться с делегатами, сделаем event.

По уровню непригодности для обучения объектной технологии язык способен успешно конкурировать с C++. Количество акцидентных аспектов языков вполне сравнимо. Изучение языка требует запоминания огромного количества подробностей, щедро приправленных количеством ключевых слов и нелогичностью их исползования (чего стоит синтаксис переопределения метода с помощью new). Использование C# обрекает на бесконечное принятие несущественных, отвлекающих решений: virtual или нет, класс или структура, property или метод, а не написать ли sealed, всем привет от уровней защиты. Внимание разработчика неизбежно тратится на такие вещи, пока он не выделит для себя «разумное подмножество языка», стиль программирования. Очень мало шансов, что такой стиль будет совпадать у многих разработчиков, что появится общепринятый способ использования. За все время господства C++ этого так и не произошло.

Проблемы использования языков типа C# и C++ в обучении порождают замкнутый круг: массовые разработки принимают (и требуют) морально устаревших средств, новые морально устаревшие средства, применяемые к обучению, обеспечивают новую генерацию соответствующих разработчиков. Уровень развития инстинкта «пойдем туда, куда идет толпа» в IT сообществе поражает.

Есть, конечно, и положительные вещи в языке: автоматический boxing/unboxing примитивных типов, массивы (наконец-то!) стали поддерживать интерфейс коллекций. Но на фоне заявленной грандиозности и привнесенной сложности выглядит это все несколько жалко.

Среда разработки на фоне сред Smalltalk (которые существовали так давно, что даже страшно становится) и новых сред для Java (Idea, Eclipse) выглядит убогим текстовым редактором. К счастью, хоть это поддается исправлению силами третьих фирм. Остается только ждать и надеяться.

Когда-то Sun пыталась лицензировать Smalltalk у ParcPlace/Digitalk. Бестолковый менеджмент полез в бутылку и запросил слишком дорого. Поэтому мы получили Java. Через несколько лет Sun засудил Microsoft за неправильное использование платформы. Теперь у нас есть .NET. Как вы думаете, что будет дальше? :)


Hosted by uCoz