Вы наверняка слышали, что развитие компьютеров вступило или вот-вот вступит в «эру пост-ПК»: немало слов посвящено тому, как настольный компьютер перестанет быть главным в доме и уступит место множеству устройств, отбирающих у него те или иные функции. Есть даже мысль, что эти устройства относятся к новому, пятому по счёту поколению компьютеров. В статье «На пороге пятого поколения вычислительной техники: какие изменения ждут завтрашние ПК» Олег Парамонов обращается к истории компьютеров:
«Любой учебник информатики начинается с перечисления поколений вычислительной техники. ЭВМ первого поколения были основаны на электронных лампах. Их сменили вычислительные машины второго поколения, сделанные из транзисторов. Интегральные микросхемы позволили построить компьютеры третьего, а микропроцессоры — четвёртого поколения. Мы стоим на пороге пятого поколения и не замечаем этого — отвыкли».
Если же поделить на поколения не компьютеры, а программы для них, то картина будет несколько иной, и отличия нового поколения станут куда очевиднее.
От программ-динозавров к программам-млекопитающим
Первые поколения компьютеров хоть и были построены на основе разных принципов, они использовали один и тот же тип софта. Это были инструкции в машинных кодах, набираемые напрямую включением и выключением тумблеров либо на перфолентах и перфокартах. Машина исполняла инструкции и выдавала результат. Никаких хитростей.
Harvard Mark I, изображение из ВикипедииИзменения стали заметными с появлением систем с разделением времени: суперкомпьютеров, на которых могло работать сразу множество пользователей. Каждый из них имел терминал, наследие которого видно даже в современном UNIX: запустив эту систему в консольном режиме, вы увидите слово «tty» с номером. Это сокращение от «телетайп», а цифра означает номер виртуального терминала. Сейчас это всего лишь метафора, но до распространения мониторов телетайпы были самыми настоящими.
Но в разговоре о программах интереснее всего, конечно, не суперкомпьютеры, а домашние ПК. С их появлением расцвела индустрия пользовательских приложений, и именно их будущее для нас сейчас так важно.
Вот основные черты, присущие традиционным программам для ПК. Они распространяются на физических носителях, требуют установки (переноса на внутренний накопитель и нередко — встраивания в систему), исполняются локально и локально же хранят данные, передачу данных организует сам пользователь. Неважно, записывает ли он файлы на дискету, флэш-карту, компакт-диск или отправляет их по электронной почте. Важно то, что в саму программу функция передачи данных не встроена.
Софт в браузере
Иерархические файловые системы, файлы и программы, которые с ними работают, стали настолько привычными, что долгое время это решение считались единственно верным. С появлением веб-приложений мы узнали, что всё может быть иначе и намного лучше.
Редактор Writely, лёгший в основу Google DocsВеб-приложения нередко сравнивают с текстовыми терминалами из семидесятых-восьмидесятых годов, но нужно понимать, что это лишь аналогия, подмечающая некоторые общие черты — необходимость в наличии сервера и возможность работать с ним удалённо. Однако с появлением веб-сервисов мы не вернулись назад, а наоборот, объединили две прежних концепции и получили ценные новые качества.
Любое веб-приложение состоит из двух равноправных частей: кода, работающего на сервере (или на серверах), и кода, загружаемого в браузер и исполняющегося локально. В каждый современный браузер встроен интерпретатор языка JavaScript, на котором, собственно, и написана та часть приложения, которую мы видим. Информация между клиентом и сервером передаётся асинхронно, то есть по мере необходимости. Интересный момент: клиент может запрашивать у сервера не только данные, но и части программы, которые тут же и будут исполнены.
Эта непростая схема даёт массу преимуществ: софт больше не нужно устанавливать — установка происходит на лету, равно как и обновление; данные больше не нужно сохранять — сохранение теперь автоматическое; скорость и качество обмена информацией можно довести до невиданных высот (примером тому служит хотя бы многопользовательский режим в Google Docs). Есть и другие положительные эффекты: данные, например, всегда сохранны и к ним можно получить доступ с любого подключённого к интернету компьютера в любое время.
Главный же недостаток — возможная потеря контроля над данными и необходимость непрерывно использовать услуги компании-разработчика. Собственно, отсюда и слово «сервис». Оно не является синонимом веб-приложения, но одно с другим почти всегда идёт рука об руку.
Мобильная революция
Следующий важный этап развития приложений, который уже вошёл в нашу жизнь, — это программы для мобильных устройств. Может показаться, что они напоминают программы для ПК, но отличий от прошлых двух поколений софта здесь столько, что знак равенства будет неуместным.
Мобильный телефон или планшет далеко не всегда имеет стабильное соединение с интернетом и куда больше ограничен в ресурсах, чем настольный компьютер, и это стало причиной для частичного возвращения в прошлое. Как и программы для ПК, мобильные приложения требуют установки и хранят данные локально. Но те преимущества, которыми обладали веб-приложения, не потеряны.
Очень часто мобильные приложения имеют возможность отправлять данные на сервер или являются аналогами веб-клиентов. В случае с iOS синхронизация уже доступна на системном уровне — через фирменный сервис iCloud. Установка и обновление упрощены настолько, насколько это возможно, а безопасность обеспечивается благодаря курируемым магазинам приложений.
Но главное, что добавилось с приходом мобильных устройств, — это «выход в реальный мир»: доступ к камере, GPS и прочим датчикам и, конечно, возможность иметь устройство с собой постоянно. Это открыло дорогу множеству приложений, которые раньше просто не были возможными.
Что дальше?
Несложно пронаблюдать, что каждый из этапов развития происходил с появлением какой-то принципиально новой технологии. Персональные компьютеры и программы для них последовали за появлением и удешевлением микропроцессоров. Веб-приложения появились сразу после того, как быстрый интернет стал нормой. Мобильные приложения появились вместе с доступным мобильным интернетом и смартфонами. И каждый раз открывались новые возможности.
Дальше нас тоже наверняка ждут изменения. Какими они могут быть? Вот несколько предположений, которые можно сделать, исходя из тех изменений, что заметны уже сейчас.
Хранение всего в облаке. Сохранность данных и незаметная синхронизация между устройствами потихоньку становится нормой. iCloud, Google Drive, SkyDrive, Dropbox — эти и другие сервисы будут приспосабливаться для сохранения всё более разнообразной информации. В какой-то момент каждое новое приложение будет уметь синхронизировать всё, что мы в нём оставляем.
Поддержка социального графа и «многопользовательские режимы». Google Docs не последняя программа, в которой над одним документом смогут работать сразу несколько пользователей. Поддержка связей из социальных сетей здесь играет немаловажную роль: многие мобильные приложения уже сейчас просят пользователей подключить аккаунты соцсетей — эта функциональность будет всё более и более востребованной. В новых версиях операционных систем подключение соцсетей происходит уже на системном уровне.
Тотальная кроссплатформенность. Уже сейчас есть множество способов запустить программу, написанную для одной операционной системы, в другой. И речь не только о виртуализации, но и о более красивых и эффективных решениях. С помощью Wine программы для Windows запускаются в Linux и OS X, и скоро появится версия для Android. BlueStacks, наоборот, позволяет запускать приложения для Android в OS X и Windows. Разработчикам же известно бесчисленное количество способов написать один код и сделать из него версии для разных ОС: Java, Flash, Mono и Unity — это лишь несколько наиболее популярных.
Стирание границы между приложением и веб-приложением. Этот процесс идёт одновременно с обеих сторон. В HTML5 немало внимания уделено возможностям работы с датчиками и локальными данными — это позволит уравнять в возможностях веб-приложения с «родными» приложениями. Но некоторые операционные системы и сами делают шаги в ту же сторону — примерами могут служить webOS, новый интерфейс Windows 8 и нововведения в линуксовском Gnome. Но когда поддержки со стороны ОС нет, разработчики всё равно находят способы сделать обычное приложение из вебового — PhoneGap для iOS, Titanium и многие другие средства помогают в этом. Вот ещё занятный пример: фреймворк Cappuccino позволяет, наоборот, разрабатывать приложения для веба способами, максимально приближенными к традиционным.
Миграция функций вместе с данными. Мы нередко сталкиваемся с ситуацией, когда присланный документ нечем не только редактировать, но даже открыть и посмотреть. Мысль передавать по мере необходимости части приложений приходила программистам в голову уже давно, и первопроходцами здесь были создатели Java. Примеры, встречающиеся в реальной жизни, пока что совсем скромные: на ум приходит разве что та самая возможность на лету подгружать код JavaScript в веб-приложениях.
Контекстозависимость. Чем дальше, тем больше технологии встраиваются в повседневную жизнь. С приходом ПК компьютеры перебрались из машинных залов в дома пользователей, КПК и смартфоны обитают уже в карманах. Став нашими спутниками, компьютеры научатся быть и более полезными помощниками. И способность учитывать контекст ситуации окажется здесь как нельзя более полезной. Современный смартфон может напомнить зайти за хлебом, когда мы проходим мимо магазина, но будущие применения контекстов многочисленны и разнообразны (подробнее — в статье «Контекстозависимость: зачем машине понимать мир людей»).
Этот список не полон, и полным он по определению быть не может. Софт — это область, которая меняется постоянно и очень динамично. Точно так же, как в середине двухтысячных буквально из ниоткуда появились веб-приложения, в будущем нас может ждать столь же спонтанное появление какой-нибудь новой и модной парадигмы, которая сделает любые сегодняшние ожидания устаревшими.