Компьютеры «виснут» и «падают». Это реалии нашей жизни. И происходит это чаще всего из-за ошибок в программах. Обычно последствия минимальны — крепкое слово и перезагрузка. Но если комплекс программ управляет сложной распределенной системой (например, движением самолетов в воздухе или медицинским оборудованием), ошибка может стоит больших денег и даже человеческих жизней. Нэнси Линч и Стивен Гарланд создают инструментарий для предотвращения подобных катастроф. Они надеются, что он поможет создавать программы, практически лишенные ошибок. Трудясь в лаборатории компьютерных наук Массачусетского технологического института (MIT), ученые создали новый алгоритмический язык и средства программирования на нем. Гарланд говорит, что все это для того, чтобы процесс создания программ стал «строже», стал похож на инженерные науки. Гражданские инженеры сначала строят модель моста и тестируют ее задолго до того, как начать строительство. Программисты, напротив, чаще всего начинают с цели и, после некоторого обсуждения, просто садятся и пишут код. Инструментарий, который разработали Линч и Гарланд, позволяет программистам моделировать, тестировать и делать выводы о программе задолго до ее написания. Этот подход уникален и сильно отличается от других подобных проектов, направленных на улучшение качества программного обеспечения и растущих в недрах компаний Microsoft, IBM и Sun Microsystems. Уникальность его в том, что он не только позволяет повысить качество продукта, но и облегчает и упрощает процесс собственно программирования. В основе подхода Линч и Гарланда к данной проблеме, как и ко многим другим, лежит абстракция. Разработку нужно начинать с высокоуровневого списка задач, которые должна решить программа. Затем следует создание все более детальных установок, которые описывают как шаги, предпринимаемые программой для достижения поставленных целей, так и методы реализации таких шагов. Например, высокоуровневая абстракция для системы избежания столкновений самолетов в воздухе должна указать, какое исправляющее действие следует предпринять, если два самолета летят слишком близко друг к другу. Более низкий уровень мог бы включать обмен сообщениями между самолетами для определения того, кто из них должен подняться выше, а кто опуститься ниже.