Можно ли “раскрутить” язык программирования? Как показывает жизнь  -  легко, хотя кроме денег нужны еще и “маркетинговые” мозги. Полезность языков определяется обычно его “конечными пользователями”  -  программистами. Си быстро завоевал популярность благодаря тому, что позволяет создавать очень эффективные программы, Паскаль любят за его строгую простоту. Но есть и другие примеры, самый свежий из них  -  Java. Можно также вспомнить Аду, которая вводилась практически в приказном порядке (к счастью, сам по себе этот язык оказался очень хорошим), а в Бейсик Гейтс вложил, наверное, уже миллиард долларов, хотя самый любимый язык президента Microsoft, по его же словам,  -  SAIL (Stanford Artificial Intelligence Language). Это старый язык, созданный в конце 60-х годов в Стэндфордской лаборатории по искусственному интеллекту для компьютеров DEC-10 и DEC-20. Он основывался на Алголе-60 и был расширен новыми типами данных  -  деревьями и ассоциативными списками. Эти данные могли храниться как неупорядоченные множества или ассоциативные “триплеты”. В языке были реализованы псевдопараллельные сопроцессы, обработка событий, прерывания, сборка “мусора” и еще много оригинальных для того времени идей.

 

Между Бейсиком и SAIL такая же пропасть, как между Коболом и Си. Почему Гейтс, воспитанный, если судить по SAIL, в самых строгих канонах программирования, выбрал Бейсик, остается загадкой. Может быть, из-за его простоты  -  видимо, уже тогда Гейтс стремился создавать продукты для массового рынка.

 

Слоган “Всегда любима, всегда с тобой” табачной фабрики Ява, постоянно мелькающий в переходах метро, говорит о предприимчивости табачных менеджеров. Не менее часто мелькает на перекрестках Сети другой слоган  -  “Пишется один раз, работает везде”, которым Sun снабдила свое детище, новый язык программирования Java. Имеется немало языков, которые уступают своим более известным “коллегам” только из-за отсутствия рекламы. Однако если и Бейсик, и Ада продвигались как средства разработки и не более того, то реализация виртуальной Java-машины сегодня преподносится чуть ли не как панацея от всех компьютерных проблем. Правда, Билл Гейтс относится к Java весьма скептически, считая, что это просто очередной новый язык. При этом, хотя фирма Sun задумывала Java для борьбы с Microsoft, Гейтс выпустил коммерческую версию Java под названием Visual J++, которая пользуется большим спросом, а Sun продолжает разрабатывать бесплатные версии этого языка, надеясь непонятно на что.

 

О плюсах и минусах Java можно спорить бесконечно. Однако надо отметить три помехи, которые определенно тормозят развитие этого оригинального языка. Это, во-первых, отсутствие стандарта. Microsoft, на этот раз быстро учуяв опасность (вспомним прокол с Netscape Navigator), разработала новую технологию J/Direct, которая окончательно лишает смысла Sun’овский слоган, ибо Java-программы, созданные с помощью J/Direct, будут работать только под Windows. При этом про переносимость Java-приложений придется забыть. Во-вторых, это несовместимость старых и новых версий Java, выпускаемых Sun, что отпугивает начинающих Java-программистов. JDK 1.12, которым я пользуюсь, отличается от версии 1.02 если и не как небо и земля, то уж как Mac от IBM PC точно. У меня скопилось уже пять или шесть книг по Java самых разных издательств, в которых описана версия JDK 1.02, но я не могу воспользоваться в работе ни одной из их! Прежде всего из-за изменения синтаксиса методов, входящих в библиотеку AWK. Например, метод insertText был заменен на insert (в котором просто скрыт старый insertText), а resize  -  на setSize (с аналогичным скрытием). Зачем? А самое главное, полностью переделан обработчик событий, что вызывает серьезные неудобства при интенсивном программировании с использованием предыдущих версий Java SDK. Компилятор, впрочем, проглатывает старый синтаксис, но при этом выдает кучу deprecation-предупреждений, а профессиональные программисты обычно воспринимают наличие предупреждений в своей программе очень болезненно. Кроме того, не факт, что в новых версиях эти предупреждения не превратятся в ошибки.

 

И уж совершенно бессовестно поступили создатели языка с оператором goto. Явно с популистскими целями они исключили из Java этот оператор, ссылаясь на классиков структурного программирования. По словам одного из отцов Java, Патрика Нотона, “goto зарезервирован только для того, чтобы удержать программистов от его использования”. При этом обычно скромно умалчивается про Java-оператор “break с меткой”, который, по сути, является завуалированным goto, позволяющим произвольно перемещаться в рамках текущих вложенных блоков.

 

Что касается литературы по Java, то несмотря на многообещающие названия своих глав, все выпущенные в России учебники практически ничем не отличаются от учебников по, скажем, PL/I двадцатилетней давности. Во вступлении рассказывается, какой это прекрасный и мощный язык, а далее вся книга посвящена описанию операторов if, for и процессу вывода на экран строки “Hello, World!”. Из книг про то, как писать программы, можно отметить, наверное, только “Искусство программирования” Кнута, но здесь возникает третья помеха. Дело в том, что Java  -  это принципиально другая парадигма программирования. При разработке Windows-приложений пришлось переходить от плоской (линейной) модели DOS-программирования к событийно-ориентированной, которая требует другого стиля мышления. Но парадигма Java, если ее использовать для сетевого программирования (а именно для этого она в первую очередь и создавалась) опять переворачивает только-только ставшие привычными стереотипы с ног на голову. Теперь программисту приходится мыслить в рамках параллельно работающих процессов и методов их синхронизации, что сильно затрудняет отладку и существенно увеличивает сложность создания приложений на Java в сравнении с программированием на других языках. Если же писать программы, которые не требуется исполнять на нескольких платформах и которые не работают с Сетью, то смысла переходить на Java вообще нет, по крайней мере в России, так как практически все наши пользователи предпочитают работать в Windows, а для этой системы и так существует немало прекрасных средств разработки.

 

Поэтому тем, кто собирается изучать Java, можно посоветовать учиться только методом “проб и находок”. Хорошая книга по JDK 1.1x, наверное, только пишется. Хотя, не исключено, что к моменту ее выхода появится версия JDK 1.2...

 

Во что же превратится Java в будущем и имеет ли смысл “ставить” на него сейчас? Для решения многих задач программирования для Internet этот язык, конечно, подходит очень хорошо. Да и при массовом распространении сетевых компьютеров (если это произойдет) без него не обойтись. Но с учетом борьбы за стандарты на виртуальные Java-машины может получиться так, что код будет переписываться много раз, а программа не будет работать нигде.       

 

Сергей  Бобровский

 

К автору можно обратиться по адресу: softart@postman.ru.

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