Разработка программного обеспечения: перспективы развития
КомпьютерПресс: Какие из современных технологий и концепций, с вашей точки зрения, оказывают сегодня наибольшее влияние на развитие ИТ-индустрии?
Александр Ложечкин: Если говорить именно об ИТ-индустрии, а не замыкаться только на области разработки программного обеспечения, то я бы выделил несколько направлений:
- динамические информационные системы и виртуализация;
- сервис-ориентированная архитектура (Service-oriented architecture, SOA), концепции «ПО как услуга» (Software as a Service) и «ПО + услуги» (Software + Services);
- визуализация информации и интерфейс пользователя.
Несмотря на то что указанные направления выходят за рамки разработки программного обеспечения, именно тенденции ИТ в целом определяют, как развивается индустрия ПО. Остановлюсь подробнее на каждом из направлений.
Александр Ложечкин,
руководитель группы экспертов,
ООО «Майкрософт Рус»
Виртуализация и динамические информационные системы совершенствуют ИТ, выравнивая баланс инвестиций в ИТ, перераспределяя средства между поддержкой имеющихся и развитием новых возможностей ИТ. Не секрет, что в настоящее время расходы на ИТ очень несбалансированны: большая часть средств, по некоторым оценкам до 70%, тратится на поддержку существующей инфраструктуры и только 30% — на развитие и создание новых ИТ-услуг для пользователей. Такое распределение не может быть оптимальным, а положение можно исправить путем уменьшения затрат на поддержку. Виртуализация — один из способов сделать это за счет выравнивания нагрузки между существущими аппаратными ресурсами, а возможности управляемого программного обеспечения позволяют снизить затраты на администрирование. Все это, а также безопасность, защита информации, управление доступом и многое другое служат компонентами динамичных информационных систем, которые позволяют информационным технологиям из источника затрат для бизнеса превратиться в ключевой компонент развития. Разработчикам программного обеспечения не стоит забывать об этом: опора на эти тенденции должна стать обязательным требованием, которое необходимо учитывать при создании информационных систем. Насколько хорошо ваше приложение управляется, каким образом администратор может получить информацию о состоянии приложения и о наличии необходимых ресурсов, насколько хорошо ваше приложение виртуализируется? Обо всем этом должны думать разработчики.
Второе направление, которое я выделил, — сервис-ориентированная архитектура и все, что с этим связано. СОА — это концепция, позволяющая взглянуть на программное обеспечение как на услугу или сервис. Это означает, что любое приложение можно представить в виде четко формализованного интерфейса (протокола), с помощью которого можно пользоваться возможностями данного приложения. Такой взгляд на существующие и вновь создаваемые приложения позволяет компоновать информационные системы из связанных между собой «кубиков». Эта идея отнюдь не нова, она существует на протяжении десятилетий развития индустрии разработки программного обеспечения, в котором четко прослеживается вектор разделения информационных систем на все более изолированные компоненты: сначала в виде функций структурного программирования, затем в виде классов и объектов объектно-ориентированного подхода и далее — в виде компонентов. Сейчас в СОА изолируются еще более крупные «куски» информационных систем — целые приложения. Все это происходит на фоне развития интернет-приложений (ориентированных как на частных пользователей, так и на организации), в которых вся инфраструктура находится на серверах поставщика и пользователь работает с приложением через интернет-браузер. Этот подход, демонстрирующий концепцию ПО как услуги, весьма близок к тендециям динамических информационных систем — это ли не благо, когда поддержка всей инфраструктуры ИТ перекладывается на поставщика услуги? Безусловно, такой подход, также оказывающий большое влияние на разработчиков ПО, имеет множество достоинств, но у него есть и ограничения, например зависимость от каналов связи (которые все еще не слишком надежны и не обеспечивают доступ к информации всегда и везде), отсутствие у потребителя полноценного контроля над происходящим и полная зависимость от поставщика и, наконец, бедность пользовательского интерфейса приложений в браузере. Многих из этих недостатков лишен сбалансированный подход «ПО + услуга» (Software + Services), в котором помимо ПО, размещенного у поставщика услуги, работает ПО, размещенное у потребителя услуги. Это гарантирует наличие постоянного канала связи (поскольку такое ПО должно и может предоставлять возможности работы без постоянного соединения), обеспечивает потребителю больший контроль за счет перемещения части логики работы приложения к нему, а также решает проблему ограниченности пользовательского интерфейса в интернет-браузере.
Теперь перейдем к третьей тенденции, на которую я бы хотел обратить особое внимание. Она пока не столь общепринята, как первые две, но, по-моему, у нее большие перспективы. Это повышение роли пользовательского интерфейса в частности и эргономики ПО в целом. Этим задачам уделялось незаслуженно мало внимания на всех этапах развития индустрии разработки ПО. Давайте сравним: при создании бытовых приборов, автомобилей или электроники дизайну и эрногомике оказывается огромное внимание и, я думаю, все могут вспомнить примеры, когда тот или иной игрок на этих традиционных рынках вырывался вперед не за счет высоких технических характеристик своей продукции, низкой цены или неординарной рекламной кампании, а благодаря удачным дизайну и эргономике. При разработке программного обеспечения этим вопросам уделяется слишком мало внимания, а ресурсы на разработку дизайна и эргономики выделяются по остаточному принципу. Но есть примеры и другого подхода, когда дизайн и эргономика выходят на одно из первых мест и в индустрии ПО, — это компьютерные игры. Вам приходилось наблюдать за тем, как дети, впервые увидевшие компьютерную игру, не читая инструкций, за очень короткое время осваивают ее пользовательский интерфейс и начинают производить весьма непростые действия, управляя огромными армиями и принимая мгновенные решения на основе множества источников информации? В то же самое время весьма квалифицированные пользователи зачастую непродуктивно тратят силы на поиск тривиальных возможностей в бизнес-приложениях, разработчики которых не удосужились создать эргономичный пользовательский интерфейс. А ведь управляют эти пользователи не виртуальными армиями, а огромными компаниями. Именно поэтому я считаю, что направление визуализации данных и пользовательского интерфейса будет в значительной мере определять развитие отрасли ИТ в ближайшие годы.
КП: Какими, на ваш взгляд, будут основные направления дальнейшего развития платформ для создания корпоративных приложений?
А.Л.: Платформы для создания корпоративных приложений будут развиваться под влиянием глобальных тенденций развития ИТ, о которых мы говорили ранее. Общая тенденция развития платформ сохраняется на протяжении всего их существования и заключается в переносе рутинных задач с разработчика прикладных решений на разработчика платформ. И, несмотря на огромный прогресс в этом направлении, наблюдаемый в существующих платформах, возможностей для развития еще очень много. Многие разработчики по собственному опыту знают, сколько времени требуется на решение основной задачи, ради которой создается ПО, и сколько времени тратится на необходимую обвязку. Характерным примером такой непродуктивной обвязки является код работы с базами данных, без которого не обходится ни одно корпоративное приложение. Все, что нужно разработчику, — это возможность сохранить информацию в базу данных и получить из нее требующиеся данные в нужный момент времени. А ради решения вспомогательной задачи приходится конструировать схему базы данных, создавать хранимые процедуры, писать код инициализации доступа к базе данных, код вызова процедур, код преобразования полученных данных и т.д. А любое изменение требований к приложению влечет за собой изменение всех перечисленных слоев приложения, что не только удлиняет процесс реализации изменений, но и приводит к большому числу ошибок. Аналогичные проблемы приходится решать при организации распределенного взаимодействия, при реализации насыщенного пользовательского интерфейса и т.д.
Платформы для создания корпоративных информационных систем должны содержать компоненты, помогающие разработчику решать перечисленные вспомогательные задачи, причем таким образом, чтобы появление новой технологии доступа к данным или нового протокола распределенного взаимодействия не заставляло переписывать компоненты приложения, решающие бизнес-задачи. Таким образом, платформа должна, с одной стороны, максимально изолировать разработчика от окружающего технологического мира, а с другой — позволять эффективно взаимодействовать с ним.
КП: Каким вы видите дальнейшее развитие технологий, методологий и инструментов разработки приложений? За счет чего в будущем будет повышаться эффективность выполнения проектов, связанных с разработкой приложений?
А.Л.: Отвечая на этот вопрос, уместно вспомнить об извечном споре о том, что такое разработка ПО — искусство или производство. Разработчикам ПО, конечно, приятнее считать себя творцами, а процесс создания ПО — творческим и, как следствие, непредсказуемым. Заказчикам же, наоборот, хотелось бы большей предсказуемости процесса создания ПО и большей прозрачности. А эти качества, как известно, свойственны производственному процессу.
Истина, полагаю, как всегда, лежит где-то посередине. Процесс создания ПО включает и творческую и производственную составляющие, а методологии и инструменты разработки ПО должны помогать творческому процессу разработки, при этом делая его более предсказуемым и технологичным. Ставшие ныне столь популярными «проворные» (agile) методологии разработки ПО являются демонстрацией такого подхода.
Но независимо от того, какие методологии разработки ПО применяются — формальные или неформальные, инструменты разработки должны им соответствовать, предоставляя разработчикам удобные инструменты для творчества, собирая при этом необходимые метрики для управления процессом разработки. Таким образом, средства разработки должны помогать устанавливать управляемые процессы разработки ПО.
Здесь не обойтись без интеграции различных инструментов в единой среде разработки, с одной стороны, и интеграции с помощью средств разработки всей команды разработки (разработчиков, тестировщиков, дизайнеров, архитекторов, руководителей) — с другой.
КП: Каковы планы Microsoft в области дальнейшего развития технологий и средств разработки приложений? Чем вы сможете порадовать программистов, аналитиков и руководителей проектов?
А.Л.: Естественно, Microsoft внимательно следит за теми тенденциями, которые существуют на рынке ИТ, а также на рынке платформ и инструментов разработки ПО. Более того, Microsoft, являясь одним из крупных игроков на этом рынке, оказывает активное влияние на происходящие процессы. Причем далеко не всегда об этом влиянии знают и помнят. Позволю себе привести пример, который во многом определил нынешнюю популярность динамических веб-сайтов и технологии AJAX. Немногие знают, что первым продуктом, построенным на тогда еще безымянной технологии AJAX, был веб-интерфейс доступа к почтовому серверу Microsoft Exchange 2000 (Outlook Web Access), который работал на основе технологии Remote Scripting, реализованной еще в Internet Explorer 3.0. Вряд ли кто-то из разработчиков этой технологии предполагал, к каким последствием это приведет через десять лет.
Что же Microsoft делает сейчас и что сможет изменить мир разработки ПО через 10 лет или даже раньше? Рассказать обо всей платформе разработки и обо всех инструментах разработки Microsoft в рамках интервью невозможно, поэтому я выделю лишь несколько ярких направлений, которые только начинают развиваться.
Прежде всего я бы хотел отметить направление технологий доступа к данным, в котором в первую очередь следует назвать технологию LINQ, детище создателя языка C# Андерса Хейлсберга. Технология LINQ основана на нескольких языковых конструкциях, которые позволяют процедурным языкам, таким как C# и Visual Basic .NET, придать элементы языков функциональных, за счет чего появляется возможность описывать запросы к любым (реляционным, объектным, XML и другим) данным в стиле SQL прямо в коде на C# или VB .NET. Удобство заключается совсем не в том, что весь код работы с данными можно увидеть в одном файле. Компилятор языка «понимает» конструкции доступа к данным, что позволяет верифицировать их, проверяя соответствие типов с остальными компонентами приложения. Но возможности функциональных языков, добавленные в C# и VB .NET, позволяют решать и множество других интересных задач, для которых традиционно применяются функциональные языки: работа с текстами, списками и т.д.
Для тех, кто привык работать с функциональными языками и не хочет идти на компромисс, Microsoft скоро предложит и полноценное промышленное решение — новый язык F#, который вышел из лабораторий Microsoft Research и скоро станет полноценным языком платформы .NET.
Однако вернемся к LINQ, для реализации которого помимо возможностей компилятора потребовались компоненты доступа к данным, позволяющие абстрагироваться от используемой базы данных или от типа доступа к данным и применять одинаковые конструкции для доступа к XML-файлам или к объектам в памяти. Такая абстракция позволила, в том числе, обеспечить и параллелизацию выполнения запросов при работе на столь распространенных ныне многопроцессорных системах.
Параллельный LINQ, или PLINQ, — это ключевой компонент целой библиотеки .NET под названием Parallel FX, упрощающей разработчикам создание адаптированных к многопроцессорным системам приложений.
Еще одной областью применения параллельных вычислений является робототехника — совершенно новое направление, на которое выходит Microsoft со своим экспериментальным продуктом Microsoft Robotics Studio, позволяющим создавать приложения для управления как промышленными, так и домашними роботами. При этом решен и вопрос тестирования: в robotics studio входят компоненты физического моделирования и визуализации, позволяющие на экране увидеть работу программы для робота.
Все это будущее, хотя и вполне реальное, а для настоящего Microsoft предлагает Visual Studio 2008, который уже появился на рынке. Данный продукт позволяет следовать тенденциям индустрии ИТ и предоставляет современную платформу для создания приложений, а также инструменты для управления жизненным циклом разработки ПО. Кстати, Visual Studio 2008 будет выпущен и на русском языке, причем по-русски будет изложена и полная документация по продукту и библиотекам .NET Framework.