Первые поколения компьютеров хоть и были построены на основе разных принципов, они использовали один и тот же тип софта. Это были инструкции в машинных кодах, набираемые напрямую включением и выключением тумблеров либо на перфолентах и перфокартах. Машина исполняла инструкции и выдавала результат. Никаких хитростей.
Изменения стали заметными с появлением систем с разделением времени: суперкомпьютеров, на которых могло работать сразу множество пользователей. Каждый из них имел терминал, наследие которого видно даже в современном UNIX: запустив эту систему в консольном режиме, вы увидите слово «tty» с номером. Это сокращение от «телетайп», а цифра означает номер виртуального терминала. Сейчас это всего лишь метафора, но до распространения мониторов телетайпы были самыми настоящими.
Но в разговоре о программах интереснее всего, конечно, не суперкомпьютеры, а домашние ПК. С их появлением расцвела индустрия пользовательских приложений, и именно их будущее для нас сейчас так важно.
Вот основные черты, присущие традиционным программам для ПК. Они распространяются на физических носителях, требуют установки (переноса на внутренний накопитель и нередко — встраивания в систему), исполняются локально и локально же хранят данные, передачу данных организует сам пользователь. Неважно, записывает ли он файлы на дискету, флэш-карту, компакт-диск или отправляет их по электронной почте. Важно то, что в саму программу функция передачи данных не встроена.
Иерархические файловые системы, файлы и программы, которые с ними работают, стали настолько привычными, что долгое время это решение считались единственно верным. С появлением веб-приложений мы узнали, что всё может быть иначе и намного лучше.
Веб-приложения нередко сравнивают с текстовыми терминалами из семидесятых-восьмидесятых годов, но нужно понимать, что это лишь аналогия, подмечающая некоторые общие черты — необходимость в наличии сервера и возможность работать с ним удалённо. Однако с появлением веб-сервисов мы не вернулись назад, а наоборот, объединили две прежних концепции и получили ценные новые качества.
Любое веб-приложение состоит из двух равноправных частей: кода, работающего на сервере (или на серверах), и кода, загружаемого в браузер и исполняющегося локально. В каждый современный браузер встроен интерпретатор языка JavaScript, на котором, собственно, и написана та часть приложения, которую мы видим. Информация между клиентом и сервером передаётся асинхронно, то есть по мере необходимости. Интересный момент: клиент может запрашивать у сервера не только данные, но и части программы, которые тут же и будут исполнены.
Эта непростая схема даёт массу преимуществ: софт больше не нужно устанавливать — установка происходит на лету, равно как и обновление; данные больше не нужно сохранять — сохранение теперь автоматическое; скорость и качество обмена информацией можно довести до невиданных высот (примером тому служит хотя бы многопользовательский режим в Google Docs). Есть и другие положительные эффекты: данные, например, всегда сохранны и к ним можно получить доступ с любого подключённого к интернету компьютера в любое время.
Главный же недостаток — возможная потеря контроля над данными и необходимость непрерывно использовать услуги компании-разработчика. Собственно, отсюда и слово «сервис». Оно не является синонимом веб-приложения, но одно с другим почти всегда идёт рука об руку.
Следующий важный этап развития приложений, который уже вошёл в нашу жизнь, — это программы для мобильных устройств. Может показаться, что они напоминают программы для ПК, но отличий от прошлых двух поколений софта здесь столько, что знак равенства будет неуместным.
Мобильный телефон или планшет далеко не всегда имеет стабильное соединение с интернетом и куда больше ограничен в ресурсах, чем настольный компьютер, и это стало причиной для частичного возвращения в прошлое. Как и программы для ПК, мобильные приложения требуют установки и хранят данные локально. Но те преимущества, которыми обладали веб-приложения, не потеряны.
Очень часто мобильные приложения имеют возможность отправлять данные на сервер или являются аналогами веб-клиентов. В случае с iOS синхронизация уже доступна на системном уровне — через фирменный сервис iCloud. Установка и обновление упрощены настолько, насколько это возможно, а безопасность обеспечивается благодаря курируемым магазинам приложений.