Сегодня никого не удивляет онлайн редактирование общего документа, файла или базы данных. Но под капотом сервисов параллельной работы с данными находится большая история. И эта история еще далека от завершения.  До облачной синхронизации и онлайн-редакторов сотрудники дружно перекидывали другу друг по электронной почте документ с правками. Впрочем, в некоторых компаниях такая практика жива до сих пор. Тем временем функции редактирования в реальном времени уже исполнилось полвека.  Основы программного обеспечения для групповой работы были заложены в системе NLS (oN-Line System), разработанной в 1960-х годах. Под катом расскажем, как от первых экспериментов в области цифровых коммуникаций разработчики перешли к инструментам и сервисам для совместного онлайн-кодинга. В 1968 году изобретатель Дуглас Энгельбарт вместе с коллегами впервые продемонстрировал возможности работы с документами в рамках рабочей среды NLS.  Одну из наиболее революционных фич системы NLS — «Журнал» — создал компьютерный инженер Дэвид Эванс. «Журнал» представлял собой простую гипертекстовую программу для групповой работы. Можно сказать, что она являлась своего рода предшественником всех современных программ для совместного редактирования документов. Члены команды NLS использовали «Журнал» подобно wiki для обсуждения, дебатов и уточнения концепций. Программа позволяла сохранять документы, став своего рода базой знаний и хранилищем первых архивов электронной почты. Независимо от проекта NLS разработчик Мюррей Турофф создал первую цифровую систему для групповой работы над разрешением кризисных ситуаций. На ее основе в 1974-1978 гг. он разработал систему группового взаимодействия и электронного обмена информацией EIES (The Electronic Information Exchange System). Система позволяла проводить конференции, общаться в реальном времени и асинхронно, создавать опросы.  EIES задумывалась как небольшой эксперимент в области цифровых коммуникаций, но стала для сотен пользователей ценным инструментом на десятилетия. Люди адаптировали ее инновационные функции под различные цели — например, для совместного творчества. Так в проекте «EIES Soap Opera» пользователи писали серию развлекательных историй.  Интерес к совместному редактированию в реальном времени привел к появлению проектов Instant Update от ON Technology в 1991 году. Затем появились Multi-Editoro и SubEthaEdit в 2003-2005 гг. Еще один подобный проект — Writely — в 2006 году купил Google и создал на его основе знаменитый онлайн-редактор документов.    Для совместной работы нужно решить сложнейший вопрос: как решать конфликты правок при одномоментном редактировании? В 1989 году ученые в области информатики Кларенс Эллис и Саймон Гиббс разработали технологию Operational Transformations (OT).    Основная цель OT — обеспечить правильное применение и синхронизацию всех изменений, внесенных разными пользователями, чтобы все видели одну и ту же обновленную версию документа. C этой целью OT использует набор алгоритмов и методов для преобразования операций каждого пользователя с учетом изменений, внесенных другими пользователями.    Представьте, что вы и другой пользователь работаете над общим текстовым документом. Вы добавляете предложение в начале документа, а другой пользователь добавляет предложение в конце. ОТ анализирует изменения, внесенные вами обоими, и преобразует их таким образом, чтобы они могли сосуществовать без конфликтов. По сути, первая попавшая на сервер правка записывается как обычно, а следующая сравнивается с логом событий для определения целей пользователя, и записывается, не нарушая согласованности документа.   Первоначально OT создали для обеспечения согласованности и контроля параллелизма при совместном редактировании простых текстовых документов. Сегодня технология используется повсеместно — от Офиса CloudMTS (совместная онлайн-работа с документами на базе ПО МойОфис) до многопользовательских игр.   У OT есть особенность — алгоритм полагается на активное соединение с сервером. Иной подход использовали разработчики Conflict-Free Replicated data types (CRDT). Задача CRDT — уменьшить сложность и повысить надежность алгоритмов. Эта технология позволяет редактировать файлы в реальном времени без (по большей части) центрального сервера. CRDT поддерживает синхронизацию распределенных данных даже при наличии сетевых задержек и разрывов связи. Технология позволяет каждому узлу распределенной системы независимо вносить обновления, не опасаясь конфликтов и несогласованности.   Рядовым разработчикам параллельное редактирование стало более доступно после выхода библиотек с открытым исходным кодом: TogetherJS и Collaboration Engine. Эти библиотеки позволяют быстро добавлять функции совместного редактирования в любое веб-приложение с помощью нескольких строк кода.    Еще один известный пример: Convergence.io — бесплатное решение с открытыми исходниками для добавления функций параллельной работы в приложение. Со временем разработчики перекинули мостик от рядового редактирования текста к удаленному парному программированию. Процесс получил особый импульс в годы пандемии.     Поскольку база кода это не просто биты текста, большинство совместных редакторов кода обеспечивают одновременный доступ к различным файлам.    Некоторые инструменты также предлагают возможность совместного использования терминала или отладчика. Такие продвинутые функции есть у Visual Studio Live Share (VSLS) и Code with me (для IDE Jetbrains).    VSLS, как и другие подобные инструменты, позволяет совместно редактировать и отлаживать код без необходимости клонировать репозитории или настраивать среды. Соавторы могут просматривать базы данных без открытия портов для интернета. Они могут вместе работать в терминале, выполняя любые команды, вывод которых будет виден всем участникам.   Для написания кода можно использовать и другие бесплатные программы совместной работы.   CodeInterview.io и EXLskills — специализированные сервисы для проведения собеседований по программированию.  CodeStream — простой инструмент с открытым исходным кодом. Это расширение для VS Code и JetBrains, которое сохраняет все взаимодействия между участниками. Git.Live — поддерживает VS Code, Android Studio, IntelliJ Idea, GitHub, GitLab. Из интересных особенностей: при появлении конфликтов в коде отправляет уведомления пользователям. Кроме того, прямо из редактора можно совершать голосовые или видеозвонки. При этом разработчикам не обязательно использовать одни и те же IDE — GitLive поддерживает одновременное написание кода, например, в VS Code и в любой из IDE JetBrains. Этот список неполный. Если вы знаете или используете другие инструменты — поделитесь в комментариях. Еще один способ оптимизировать совместную работу — использовать возможности облака. Собственный онлайн-редактор текста можно масштабировать и интегрировать с другими сервисами — для подобных задач отлично подойдет облачный сервер. Многие компании закупают аппаратное обеспечение под MVP, тесты и проверку гипотез. Но на виртуальных машинах можно многократно повысить скорость тестирования кроссплатформенных приложений и получить экономию на капитальных затратах.  Вместо инвестиций в физические серверы, лицензии и обслуживание команды могут использовать облачные сервисы, работающие по модели Pay-As-You-Go. Это означает, что они платят только за те ресурсы, которые используют. Кроме того, программное обеспечение для управления проектами можно развернуть в облаке. Облачная IDE (например, code-server) поможет собрать и протестировать проект без нагрузки на рабочий компьютер. Облако позволяет бесшовно пересаживаться на любое неподготовленное устройство, и продолжать работать на том месте, на котором остановились.  Технический писатель, ИТ-редактор блога CloudMTS