Как любой нормальный родитель, автор языка программирования Java влюблен в свое создание и считает, что мир был бы совершеннее, будь он построен на принципах Pure Java.
После посещения Северной столицы, состоявшегося осенью прошлого года, Джеймс Гослинг наконец встретился и с московским сообществом Java-разработчиков. Говорят, владельцы собак становятся похожими на своих питомцев; с годами Гослинг тоже стал удивительно похож на символ созданного им языка, человечка Дюка. А еще он напоминает Санта-Клауса, который снял свой традиционный костюм и остался в майке и джинсах.
Язык Java разменял второе десятилетие. Анализируя пройденный путь, что вы считаете самым важным его качеством?
Можно сказать, что в Java нет ничего особенного. Ну еще один язык программирования, язык как язык. Однако принципиальное отличие этого языка от всех остальных заключается в его способности «склеивать» воедино различные предметы и строить из них распределенные системы на общей концептуальной базе. Мне до сих пор кажется удивительным то, что, строя сложные системы, можно не знать устройство отдельных компонентов. К примеру, разработчик вполне может отвлечься о того, как работает конкретное устройство, скажем, сотовый телефон или банкомат. То же самое относится к программным системам. Java открывает возможность для создания многоуровневых систем, где каждый уровень разрабатывается автономно, но вместе они прекрасным образом компонуются в единую систему. Одновременно из этого следует, что разработка может быть распределена между разными профессиональными коллективами и даже между неформальными сообществами заинтересованных специалистов — успехи Open Source тому свидетельство.
Необыкновенно интересно наблюдать за тем, как из составляющих собирается система. В этом отношении весьма показателен процесс разработки игр с мощной графикой. Буквально на глазах замки, стреляющие устройства и другие элементы игр, созданные различными программистами, складываются в один сюжетный ряд. Основная роль Java состоит в том, что язык стал тем недостающим клеем, который позволяет связывать независимые компоненты в систему, вместе с ним стартовала идеология слабосвязанных архитектур. В этом основная причина успеха.
Однако, согласитесь, мир не стоит на месте, за 11 лет появились новые языки. Это дает основание ряду аналитиков утверждать, что популярность Java падает. Как, по вашему мнению, чувствует себя язык в окружении новых соседей?
Самый важный критерий популярности — количество разработчиков, использующих тот или иной инструмент. Так вот, число пишущих на Java программистов постоянно растет; делайте выводы. Но нельзя отрицать и того, что активно разрабатываются языки для специальных приложений. Прежде всего стоит назвать язык Perl, это великолепное средство для работы с текстами, но, если вы не работаете с текстами, использовать его нет смысла.
А что вы скажите относительно языка Ruby, созданного Юкихиро Мацумото? Этот язык — ровесник Java, но получил признание позже…
Действительно, Ruby пребывал в тени до тех пор, пока пару лет назад Дэвид Хэнссон не предложил собственную методику создания Web-приложений Ruby on Rails, или, как ее еще называют, RoR или просто Rails. Она эффективнее Java применительно к некоторым приложениям, но Ruby и Java не являются конкурентами, а взаимно дополняют друг друга. Обычно Ruby используют в качестве языка для описания взаимосвязи вещей, но приложения на Ruby не могут сравниваться по скорости выполнения с Java-приложениями, а если вы выйдете за пределы Web-приложений, то Rails вам ни чем не поможет. В последнее время мы можем наблюдать частичную специализацию языков по приложениям. Наряду с системами, написанными полностью на Java, существуют подходы, когда для внешнего интерфейса используют тот же Rails, или Python, или PHP, а ядро пишут все же на Java. Жизнь показывает, что все эти инструменты хорошо совмещаются друг с другом. Надо заметить, что гетерогенность имеет тот недостаток, что каждый из инструментов не используется в полную мощь; это относится и к Java.
А как вы относитесь к тем сенсационным заявлениям, утверждающим, будто новое средство обеспечивает многократный рост производительности? Скажем, основатель компании ActiveGrid Питер Яред (кстати, бывший сотрудник Sun Microsystems) утверждает, что, используя его методику, можно сократить размер кода по сравнению с Java на два порядка?
Инженерия — это всегда компромисс, что-то одно получается за счет отказа от чего-то другого. Предложения ActiveGrid вполне соответствуют требованиям того, что сегодня принято называть стандартными «гридами», а точнее — кластерами, собираемыми из сверхтонких серверов или серверов-лезвий. Наша компания активно работает в этом сегменте рынка. Обычно совокупность используемого на таких системах программного обеспечения называют LAMP (от операционной системы Linux, Web-сервера Apache, СУБД MySQL и языка программирования PHP). Средства визуальной разработки от ActiveGrid расширяют возможности LAMP; в них уменьшение числа строк кода не является чем-то действительно неожиданным, со времен языков ассемблера хорошо известно, что одной макрокомандой можно заменить любое количество команд, но, естественно, любое макрорасширение имеет достаточно узкую функциональность.
Нередко появляются сообщения о небезопасности Java. Совсем недавно все новостные агентства напугали владельцев смартфонов; они предупреждали о потенциальной опасности заражения вирусами. Способны ли повредить программные системы, написанные на Java, и правдоподобны ли такие сообщения?
С полной ответственностью заявляю: нет. Был всего лишь один случай преднамеренного экспериментального заражения одним польским экспертом своего собственного телефона. По понятным причинам и благодаря своей уникальности этот случай получил большую прессу, но, по сути, это буря в стакане воды. Возможность преднамеренного и уникального заражения крылась не в языке и не в виртуальной машине, как таковых, а в их реализации компанией Nokia. В действительности Java-вирусов для смартфонов нет и быть не может, хотя конкретная реализация может страдать какими-то дефектами или уязвимостями. Это очевидно и не вызывает возражения. В целом мир смартфонов остается безопасным.
Джеймс, мне хотелось бы отойти от Java и обратиться к вам, как человеку, обладающему широким кругозором, и попросить вас оценить происходящее вокруг сервис-ориентированных архитектур (service-oriented architecture, SOA). На эту тему не говорит только ленивый, но прозрачной связи между реально существующей современной сервис-ориентированной экономикой и, казалось бы, вовремя подоспевшей идеей SOA пока не просматривается. Шума больше, чем результатов, мне кажется. А вам?
Честно говоря, мир SOA и меня озадачивает, причем не столько с технологической точки зрения, сколько с социальной. Строго говоря, сервисные подходы к построению распределенных систем известны более даже 30 лет. Скорее, можно говорить о том, что мы наблюдаем быстрый рост сложности информационных систем, поддерживающих бизнес. Сегодня системы достигают такого размера, что дальнейшее поддержание их управляемости и возможностей масштабирования требует перехода на сервисные архитектуры. Скажем так: сервис-ориентированное мышление позволяет удержать в сознании специалистов целостность всей создаваемой ими системы.
С тем, что вы говорите, трудно не согласиться. Но все же есть принципиально новые вещи — я имею в виду XML и слабосвязанные архитектуры. Ни 30, ни 20 лет назад таких явлений не было, но именно они позволяют строить современные распределенные системы, они позволяют уйти от монолитных систем…
Биология, физика и другие дисциплины свидетельствуют о том, что сложные системы могут быть построены только на принципах слабой связанности между компонентами. Вопрос в том, каким образом должны уславливаться «контракты» между взаимодействующими модулями. Язык XML может быть использован для этой цели, но он не является единственно обязательным, есть и другие средства. Была и остается технология CORBA, она служит для создания по существу сервисных архитектур, но те, кто с ней работал, использовали другую терминологию. Технология CORBA была и есть, в целом ряде случаев она более эффективна, чем XML; другое дело, что она менее универсальна, чем XML, но мы знаем, какой ценой дается универсальность.
И тем не менее роль XML для создания слабосвязанных архитектур нельзя недооценивать. Качественное отличие современного видения слабой связанности от того представления, которое было прежде, заключается в передаче метаданных вместе с данными. Системный компонент не должен знать всего об источнике данных, посредством метаданных источник описывает себя и свои данные. Простейший пример — интерфейс USB; его универсальность в том, что подключаемое устройство представляет себя.
Язык XML хорош для передачи синтаксиса метаданных, но он ничем не может помочь в отношении передачи семантики метаданных. Он полезен при решении проблем, которые обычно называют «эволюцией схемы», когда при сохранении общности системы меняются состав и структура данных. Скажем, если в данных появляется новое поле записи, то XML позволяет осуществить подобную модернизацию без проблем.
Мы невольно подошли к острейшему вопросу современного компьютерного мира — что является данными, а что информацией. В монолитных системах осуществляется простой обмен данными, их синтаксис и семантика предопределены. В слабосвязанных системах компоненты обмениваются не только данными, но и метаданными, описывающими эти данные. Пару месяцев назад я беседовал с Биллом Инмоном, которого называют отцом хранилищ данных. Он дал простое определение: информация — это данные плюс метаданные. Ваш взгляд на эту проблему?
Действительно, информация — это то, что мы узнаем из данных. Но проблема установления взаимопонимания между компонентами слабосвязанных систем намного сложнее. Да, для этой цели можно использовать XML, но, повторяю, этот язык не несет в себе семантики. В мире Java есть альтернативный механизм для вызова удаленных процедур, называемый RMI (remote method invocation). Он объединяет данные и программы в один поток в сети; это уникальное свойство Java, ни один другой язык не обладает аналогичными способностями. Суть в том, что принимающая сторона может получить данные и форматы этих данных, но если она не в состоянии понять эти форматы, то может сообщить об этом передатчику, и тогда тот вышлет приемнику нужное программное обеспечение. Таким образом, работа ведется на уровне семантики. Это средство чрезвычайно эффективно и отлично работает, очень многие большие Web-сайты его используют. Но RMI работает только в чистой среде Java, поскольку поведение компонентов представляется как Java-код, язык обеспечивает обмен кодами по сети, а значит, мы можем передавать «понимание» данных по сети. К сожалению, людей больше заботит гетерогенность систем, поэтому RMI имеет ограниченное использование. В условиях разнородности среды желательно договориться хотя бы на уровне синтаксиса сообщений, поэтому для представления информации используют XML. Значение, или семантику, можно выразить только активными средствами, например средствами исполняемого кода. В этом отношении у Java нет не только конкурентов, но даже альтернативы. Думаю, люди еще это осознают, придет время.
Созданный вами, Джеймс, язык стал одним из важнейших средств для создания корпоративных систем. Но как вы думаете, удалось ли вам решить задачу, поставленную тогда, когда язык именовался Oak, а коллектив разработчиков — «Зеленой командой»? Задача была, казалось бы, банальной, требовалось создать универсальные пульты для управления разнообразными устройствами…
Технической проблемы в избавлении от бесчисленных пультов, которыми загромождены наши дома, нет. Но в индустрии невозможно прийти к общим договоренностям о согласовании решений, в том числе не только о стандартах управления, но и более простых вещах, например об устройствах питания: посчитайте, сколько у вас в доме зарядных устройств. Должны произойти процессы унификации, которые мы можем наблюдать в других сферах, от звукозаписи до автомобильной отрасли. Однако попробуйте представить себе продуктивное взаимодействие производителей оборудования для цифрового телевидения и сотовых телефонов!
То есть та первичная задача так и не решена по независящим от вас причинам?
В известной мере да. Я люблю переоборудовать мой дом, устанавливая новые стереосистемы или другие элементы домашней автоматизации, и всегда прихожу в ужас от разномастности этого зоопарка.
Джеймс, скажите по-человечески, вы не устали быть «иконой» Java?
Честно говоря, нет, хотя мне нравится быть инженером, я очень люблю что-то изобретать. Но пропагандистская деятельность в какой-то мере спасла меня. Непосредственно после создания Java я серьезно заболел и долгое время, несколько лет, не мог печатать1. Вы понимаете, что значит это для программиста. Публичные выступления меня выручили, но и это было не просто, мне приходилось осваивать методы контроля движением рук, чтобы выглядеть естественно на сцене.
В своем выступлении вы выдвинули тезис о полезности обучения Java начиная со школы. С этим утверждением трудно не согласиться, но в образовании, во всяком случае у нас в России, очень сильны традиции Pascal, что вполне согласовано с методической точки зрения на преподавание программирования. С прагматической же позиции разумнее учить работе на Java, но, на мой взгляд, этому мешает неподготовленность преподавателей и отсутствие литературы, которая была бы адекватна возможностям школьников. В чем вы видите выход из положения?
Мы как компания не занимаемся вопросами образования, тем более школьников, но я мог бы дать одну рекомендацию вашим учителям. Стоит проявить собственную инициативу и подключиться к международному проекту Java Gently, его ведет Джудит Бишоп, учитель из Южной Африки, написавшая одноименную книгу. Книга переведена на немецкий, итальянский и испанский (а может быть, и на другие языки). Есть возможность войти в это сообщество — нужно просто перевести ее на русский язык. Несколько изданий выдержал один учебник Дэвида Барнса и Микаэла Келлинга Objects First with Java, это тоже прекрасная книга для освоения школьниками современного программирования.
А что бы вы посоветовали студентам?
Я считаю первостепенно важным для специалиста не быть привязанным к какой-то конкретной технологии. Мир информационных технологий меняется чрезвычайно быстро, и надо быть готовым к постоянному обучению новому. Знаний, полученных в университете, хватает на год-два, не более, а затем постоянно требуется самообразование. Проблема в том, что хочется познать больше, чем на то хватает физической возможности, и приходится сознательно ограничивать свой диапазон познания.
И неформальный вопрос. На фото и в жизни вы появляетесь только в майках. Вы когда-либо надеваете что-то иное?
Я могу надеть и рубашку — если об этом попросит моя жена.