В июльском номере журнала Computer отсутствует ярко выраженная тема, хотя формально она обозначена как "глобализация" компьютерной индустрии. К этой теме относятся две большие статьи номера, посвященные развитию компьютерного бизнеса в Китае и Индии. Начну с обзора этих статей.
Статью "Производство перетягивает высококвалифицированную работу в Китай? Исследование индустрии ноутбуков" ("Is Production Pulling Knowledge Work to China? A Study of the Notebook PC Industry) написали Джейсон Дедрик и Кеннет Крэймер (Jason Dedrick, Kenneth L. Kraemer, University of California, Irvine).
За последние 15 лет Китай прошел путь от второстепенного игрока компьютерной индустрии до крупнейшего производителя аппаратуры. Объем производства аппаратных средств в Китае вырос с 645 миллионов долларов в 1990 г. до 81 миллиарда в 2004 г. С 2000 г. объем производства компьютерной аппаратуры в Китае утроился, в то время как в других странах - сократился, например, в США сокращение производства составило 30%.
Этот процесс сопровождается созданием внутри Китая широкого и глубокого канала поставок, обеспечивающего многие комплектующие и компоненты, которые используются в компьютерной индустрии. В 2004 г. китайская компания Lenovo купила бизнес по производству персональных компьютеров у компании IBM, которая создала массовый рынок персональных компьютеров и сформировала производственный стандарт. 10 лет назад было бы невозможно даже вообразить такое развитие событий.
Перемещение производства в регионы с более дешевой рабочей силой происходит в течение десятилетий, и становление Китая лидирующим производителем компьютерной аппаратуры является всего лишь новым этапом этого процесса глобализации. Сокращение трудоемкого производства типично для таких стран, как США и даже Тайвань, двигающихся к постиндустриальной экономике. Хотя эти сдвиги являются разрушительными, они сопровождаются созданием более наукоемких производств и их включением в мировую рыночную систему. Еще в 1998 г. в одном из аналитических обзоров глобализации в компьютерной индустрии отмечалось, что американским производителям компьютеров партнерство с азиатско-тихоокеанскими поставщиками стратегически выгодно для сохранения конкурентных преимуществ как внутри страны, так и за ее пределами. Сокращение числа рабочих мест на предприятиях по производству компьютеров компенсировалось созданием новых рабочих мест в областях исследования и разработки, проектирования продуктов и IT-услуг.
Однако теперь происходит глобализация и этой деятельности. Компании привлекают к выполнению наукоемких работ партнеров из Ирландии, Израиля, Индии, а теперь и Китая. Это порождает беспокойство относительно будущих экономических перспектив США, Европы, Японии, а также стран со сравнительно недавно индустриализованной экономикой, таких как Тайвань. К настоящему времени недостаточно исследованы масштаб подобных тенденций, их движущие и сдерживающие факторы, возможные последствия для компаний и стран.
В статье исследуется процесс глобализации разработки новых продуктов в индустрии ноутбуков. Авторы изучали, как организуется наукоемкая работа, выполняемая разными территориально разобщенными компаниями. Приводятся факты, почерпнутые из интервью с представителями лидирующих компаний-производителей PC из США, Японии, Тайваня и Китая.
Прабхудев Конана (Prabhudev Konana, University of Texas at Austin) представил статью "Могут ли индийские софтверные компании конкурировать с мировыми гигантами?" ("Can Indian Software Firms Compete with the Global Giants?").
Хотя объем всей индийской индустрии IT-услуг составляет меньше четверти IBM Global Services, она оказывает существенное влияние на мировую индустрию консалтинговых услуг. Такие мировые гиганты, как IBM, Accenture, Electronic Data Systems и Deloitte быстро расширяют свое присутствие в Индии с целью получения выгоды от использования дешевой и квалифицированной рабочей силы. В то же время индийские софтверные компании закрепляются в США для создания более тесных связей с заказчиками, требуемых для успешной конкуренции в бизнесе высококачественных консалтинговых услуг. Это встречное движение рабочих мест и кадров порождает интересную динамику конкуренции по мере выравнивания структуры цены и развития соперничества компаний за лидерство в наукоемких областях.
Автор прослеживает следующие пять этапов развития IT-компаний. На первом этапе компании полагаются на очень мелкие проекты объемом меньше 100 тысяч долларов. В этих проектах решаются повседневные задачи тестирования или низкоуровневого программирования, выполняемые в основном в оффшорном режиме. С этого этапа начинали все индийские IT-компании.
На втором этапе выполняются немасштабируемые проекты среднего уровня объемом до миллиона долларов. Компании продолжают выполнять низкооплачиваемую работу, но с большим вниманием относятся к качеству и надежности. Проекты включают собственные разработки объемом менее чем 20% от общей стоимости проекта. В компаниях организуются собственные группы разработчиков и процессы разработки на основе, например, CMM.
На третьем этапе у компаний появляются возможности обеспечения широкого диапазона продуктов и служб в виде, например, вертикальных решений. У компаний создается репутация успешного выполнения проектов небольшого и среднего размера с объемом от одного до 50 миллионов долларов. Образуются небольшие подразделения, обеспечивающие качественный бизнес-консалтинг.
На четвертом этапе компании образуют собственные подразделения для обеспечения консалтинга и услуг и экспортируют эту модель в другие развивающиеся страны для экономии расходов на заработную плату. Возрастает число служащих не из Индии. Выполняются средние (объемом от 50 до 100 миллионов долларов) и крупномасштабные (от 100 миллионов до миллиарда долларов) проекты. Компании сосредотачиваются на исследованиях и разработке технологий следующего поколения.
Наконец, на пятом этапе компании выходят на мировой уровень, преодолевая возможные культурные конфликты. Они становятся в состоянии получать и успешно выполнять многомиллиардные контракты с использованием оншорной-оффшорной бизнес-модели.
Большинство индийских софтверных компаний находятся на первых трех этапах. Три крупнейшие компании (Infosys, Tata Consultancy Services и Wipro) переходят от третьего в четвертому этапу. Однако для успешного перехода и дальнейшего продвижения к пятому этапу необходимо достижение лидирующих позиций в области высоких технологий.
Чтобы стать компаниями мирового класса и расширить свои стоимостные цепочки, индийские софтверные фирмы должны способствовать развитию своего лидерства в областях высоких технологий, стимулировать инновации и поощрять усилия по сглаживания противоречий в области культуры. Лидерство в областях высоких технологий включает три частично перекрывающихся категории: лидерство в технологических инновациях, лидерство в разработке идей и лидерство процессов. В индийских IT-компаниях установился высокий стандарт разработки программного обеспечения, но теперь им необходимо завоевать доверие за счет разработки нового поколения инструментальных средств, языков, технологических концепций и стандартов.
Ранее индийским фирмам удалось успешно создать несколько прикладных пакетов на основе платформ, разработанных другими производителями. Теперь им следует обрести возможность влияния на производственные стандарты, предлагать собственные архитектуры и продвигать собственные идеи.
Крупные американские консалтинговые компании часто пытаются демонстрировать свое лидерство на основе концепций бизнеса и технологий, таких как клиент-серверный компьютинг, электронная коммерция, коллективные вычисления, grid и одноранговые вычисления. Хотя индийские софтверные компании сумели развить модель оншорной-офшорной разработки, американские компании пытаются перенять эту концепцию путем переманивания софтверных специалистов из крупных индийских компаний. Очень вероятно, что через несколько лет производительность и качество услуг американских и индийских компаний в этой области сравняются.
У американских компаний имеется долгая традиция совершенствования процесса производства. Конкурентная среда и потребность в повышении производительности вынуждают компании разрабатывать новые процессы, обеспечивающие хотя бы кратковременное конкурентное преимущество. Хотя процессы производства индийских компаний сталкиваются как с внутренними проблемами, так и с внешними ограничениями, компании должны овладевать методами развития процессов, чтобы иметь возможность конкуренции при выполнении крупных проектов.
В заключение статьи автор предостерегает, что индийские компании, оказавшиеся неспособными к быстрому продвижению от одного этапа к другому, имеют большие шансы быть поглощенными американскими конкурентами.
Авторами статьи "Компонентное представление: пример Visitor" ("Componentization: The Visitor Example") являются Бертран Мейер и Кэрин Арну (Bertrand Meyer, ETH Zurich, Karine Arnout, AXA Rosenberg). При разработке программного обеспечения лень является добродетелью: лучше воспользоваться чем-то готовым, чем сделать это заново. Паттерны, являющиеся основным достижением в области архитектур программного обеспечения, предоставляют общий словарь и каталог проектных решений, относящихся к часто встречающимся ситуациям. Но технология паттернов не поддерживает повторное использование, которое предполагает наличие компонентов - готовых к использованию модулей, которые можно немедленно интегрировать в приложение при наличии знания об абстрактном интерфейсе программы.
Авторы обнаружили, что в действительности можно расширить возможности паттернов, превратив некоторые из них в повторно используемые компоненты. Создана библиотека компонентов, накрывающих большое подмножество известных паттернов проектирования. Путем анализа процесса компонентного представления на примере важного паттерна Visitor авторы показывают, как можно воспользоваться преимуществами механизмов объектно-ориентированного языка для того, чтобы заменить работу по созданию программной системы с использованием паттернов повторным использованием готовых компонентов. Подход с повторным использованием не только проще в применении, но и является более общим, чем подход на основе паттернов, поскольку позволяет устранить ряд ограничений. Анализ производительности крупного промышленного приложения показывает масштабируемость подхода.
Со времени первых публикаций в середине 1990-х паттерны проектирования превратились в ведущий инструмент разработчиков программного обеспечения. Паттерн проектирования представляет собой архитектурное решение для ситуаций, часто встречающихся при проектировании прогораммного обеспечения. Например, паттерн Visitor относится к следующему аспекту: некоторая структура данных содержит объекты, и требуется предоставить различным программным элементам (клиентам) средство "обхода" этой структуры с "посещением" каждого объекта в точности один раз и применением к объектам структуры произвольной операции по выбору клиента. Желательно достичь этой цели без потребности модификации программных элементов, описывающих данную структуру. Паттерн Visitor обеспечивает стандартную структуру, обладающую требуемыми свойствами.
Широкое распространение каталогов паттернов (например, E. Gamma et al., Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1995, имеется издание на русском языке: Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. СпБ, Питер, 2006) позволило образовать общий словарь разработчиков программного обеспечения. Это означает, что если кто-либо при обсуждении программного обеспечения предлагает использовать в данной ситуации Bridge, то все остальные участники обсуждения сразу смогут понять, что это значит. Основанные на коллективном знании многих разработчиков, паттерны образуют общий репозиторий передовых приемов проектирования программного обеспечения.
Однако с точки зрения инженерии программного обеспечения паттерны проектирования представляют собой и шаг назад в то время, когда не применялось повторное использование кода. Повторное использование компонентов является одной из наиболее плодотворных идей современной программной инженерии, позволяя применить результаты предыдущих разработок путем ставки в приложение существующего элемента программного обеспечения - компонента. В оставшейся части приложения компонент используется исключительно через свой API (abstract program interface; авторы предпочитают применять этот термин вместо устаревшего, по их мнению, термина application program interface).
В терминологии авторов компоненты программного обеспечения не обязательно представляют собой двоичный код. Компонент - это элемент программного обеспечения, удовлетворяющий следующим свойствам: компонент может повторно использоваться другими элементами программного обеспечения - клиентами; разработчик компонента не обязан знать о том, какие клиенты будут использовать этот компонент; клиенты могут использовать компонент на основе знания только его официальной информации - API.
Паттерны не удовлетворяют этому определению: они предоставляют описание решения, а не само решение. Каждый программист должен писать для него программу заново для каждого соответствующего приложения. Паттерны являются повторно используемыми концептами, а не повторно используемым программным обеспечением. Как полагают авторы, паттерн, такой как Visitor или Bridge, - это хорошая идея, воплощенная наполовину. Но если она действительно хороша, то почему ее следует использовать только как руководство по проектированию? Следует превратить паттерн в готовый для использования компонент. Именно этот процесс авторы называют компонентным представлением (componentization) паттернов. Для определения возможности компонентного представления авторы проанализировали все паттерны из упомянутой выше книги Гаммы и др. и попытались превратить их в повторно используемые компоненты с использованием объектно-ориентированных механизмов языка Eiffel.
Следующая статья написана венгерским аспирантом (прошу обратить на это внимание российских аспирантов и их руководителей!) Золтаном Адамом Манном (Zoltan Adam Mann, Budapest University of Technology and Economics,) и называется "Три врага: вырезать, копировать и вставить" ("Three Public Enemies: Cut,Copy,and Paste").
Многим разработчикам программного обеспечения знакома ситуация, в которой после бессонной ночи, проведенной за отладкой программы, оказывается, что ошибка связаны с копированием сегментов кода, ставших несогласованными в процессе дальнейшего редактирования. Еще хуже то, что ты понимаешь, что гораздо большее число подобных ошибок осталось необнаруженными. Проблема, проистекающая из подхода к копированию кода, не является новой; многие исследователи изучали способы автоматического обнаружения скопированных сегментов кода.
Часто рекомендуемым подходом является рефакторинг скопированного кода - приведение сегментов к осмысленным абстракциям языка программирования (функции, макросу или классу) и замена вхождений сегментов на ссылки на соответствующие абстракции. Однако рефакторинг не всегда является наилучшим методом, и, очевидно, он не обеспечивает решения при других видах редактирования текста, которым присущи те же недостатки, что и копированию.
При наличии интенсивного использования операций копирования и вставки и сойственной для них тенденции к порождению несогласованности очевидна насущная потребность в переосмыслении программ редактирования. Одним из решения является замена операций вырезки, копирования и вставки операциями, которые непосредственно соответствуют семантике их использования. При использовании этих операций пользователь может определить семантические связи между копируемыми объектами, и программа редактирования может использовать эту информацию для обеспечения долговременной поддержки этих связей. Это позволит избежать несогласованности, проистекающей из использования операций вырезки, копирования и вставки.
Авторы следующей статьи - Тодд Эндел и Эйлек Ясинсак (Todd R. Andel, Alec Yasinsac, Florida State University). Статья называется "О доверии к имитационному моделированию мобильных временных сетей" ("On the Credibility of Manet Simulations").
Для мобильных временных сетей (mobile ad hoc network, manet) возможно быстрое развертывание, поскольку они не зависят от фиксированной инфраструктуры. Узлы manet могут выступать в ролях источника, пункта назначений или промежуточного маршрутизатора. Такая гибкость делает manet привлекательными для военных приложений, в ситуациях ликвидации последствий чрезвычайных ситуаций и в академических средах, т.е. в тех случаях, в которых фиксированная сетевая инфраструктура может быть недоступна.
Имитационное моделирование зарекомендовало себя как ценное инструментальное средство во многих областях, в которых неприменимы аналитические методы и невозможны эксперименты. Исследовтели обычно используют симуляцию для анализа производительности систем до их физического проектирования или для сравнения нескольких альтернатив при наличии различных условий. К сожалению, ошибки в имитационных моделях или неправильный анализ получаемых данных часто приводят к неправильным или обманчивым результатам.
Основной подход в исследовательском сообществе manet заключается в следовании процессу разработки, имитационного моделирования и публикации. Публикации в области manet обычно включают результаты имитационого моделирования производительности, и в них часто сравниваются протоколы маршрутизации. Симуляция является мощным иструментом, но она часто сопряжена с потенциальными ошибками. Авторы иследуют вопрос о состоятельности такого подхода и показывают, что в результате его применения могут систематически производится обманчивые результаты.
Хотя обсуждаемые в статье проблемы не являются уникальными для моделирования manet, авторы фокусируются на аспектах, существенных для исследовательского сообщества manet. Авторы не отрицают исследования на основе имитационного моделирования и саму симуляцию, но приводят назидательную историю для тех, кто полагается исключительно на симуляцию для обоснования технических идей.
Наконец, последняя статья июльского номера журнала Computer называется "Беспроводные сенсорные сети для ориентирования в чрезвычайных ситуациях" ("Wireless Sensor Networks for Emergency Navigation") и представлена тайваньскими специалистами Ю-Чи Ценгом, Менг-Шиуан Паном и Юен-Юнг Цаем (Yu-Chee Tseng, Meng-Shiuan Pan, Yuen-Yung Tsai, National Chiao Tung University).
Быстрый прогресс технологий беспроводных коммуникаций и встроенных микроэлектронно-механических систем сделал возможным появление беспроводных сенсорных сетей (wireless sensor networks, WSN). Обычно WSN должны быть самоконфигурируемыми и поддерживающими временную маршрутизацию. Современные исследования сосредоточены на различных особенностях WSN, включая управление энергопотреблением, маршрутизацию и передачу данных, самоорганизацию, развертывание, зону покрытия и локализацию.
Разработка WSN обычно направляется приложением, т.е. поведение сети определяется требованиями конкретного приложения. Предыдущие навигационные приложения WSN не ориентировались на особенности чрезвычайных ситуаций. В приложениях для чрезвычайных ситуаций, таких как аварийно-спасательные работы при пожарах, более существенно быстро определить безопасные пути эвакуации, чем сэкономить энергопотребление.
Авторы предлагают распределенный навигационный алгоритм для применения в чрезвычайных ситуацициях. В обычной обстановке сенсоры производят мониторинг среды. При обнаружении сенсорами аварийных событий предложенный протокол позволяет быстро разделить опасные и безопасные области, и сенсоры определяют пути эвакуации. Результаты имитационного моделирования и реализации показывают, что схема авторов обеспечивает безопасную навигацию и быстрое обнаружение путей эвакуации.