Программирование без кода и повсеместное распространение ИИ – какой будет разработка будущего
Будущее разработки — это освобождение человека от рутинных задач и многократное ускорение всех процессов. Кропотливую работу потихоньку берут на себя алгоритмы, а приложения уже сегодня можно быстро и без особого труда собирать и наделять различным функционалом в редакторах. В совместном материале с Microsoft рассказываем, как изменятся привычные инструменты разработки и каким будет следующий виток развития программирования, которое все меньше опирается на необходимость писать код.
Для самых первых компьютеров программы писали в обычных блокнотах. Затем «код» выбивали на перфокартах, которые помещали в вычислительные машины. С появлением прообразов современных ПК программы начали писать в текстовых редакторах, которые отдельно компилировались и переводились в машинный код. Однако увеличение количества и сложности задач требовало роста производительности программистов. Были придуманы интегрированные среды разработки (IDE – integrated development environment). IDE облегчают разработку кода и предназначены для того, чтобы решать все задачи, сопряженные с процессом разработки, в одном приложении.
Современные IDE обладают интерфейсом со всеми необходимыми разработчику инструментами: редактором кода, компилятором, отладчиком, автоматизацией сборки, кодогенерацией и автодополнением. Некоторые IDE даже изучают и проверяют связи между объектами и классами в структуре объектно-ориентированного программного кода. IDE можно условно разделить на среды: с поддержкой одного языка, нескольких языков программирования, для веб-разработки и приложений и среды для детей.
Не так давно появились также средства онлайн-разработки. Это дешевле, обеспечивает лучшую производительность и мобильность для разработчиков. Например, Github Codespaces: эта IDE расположена на GitHub, основана на Visual Studio Code и позволяет разрабатывать код в облаке онлайн. Это освобождает от привязки к какому-либо устройству и гарантирует сохранность данных, а также возможность отката к предыдущим версиям. В любой момент код можно сделать доступным для других пользователей. Codespaces включает в себя все необходимое для разработки конкретного репозитория, в том числе текстовый редактор с подсветкой синтаксиса и автозаполнением, терминал, инструменты отладки и команды Git. При этом есть возможность использовать Codespaces вместе с Visual Studio, чтобы расширить функциональность.
В будущем IDE могут приобрести еще одну важную функцию – возможность транскомпиляции кода. Компьютерные системы, созданные десятки лет назад и написанные на устаревших языках программирования, необходимо обновлять. Сегодня для этого приходится вручную переписывать код. Это очень долгое и дорогое занятие. Например, Австралийскому банку Содружества потребовалось пять лет и 750 миллионов долларов, чтобы перейти с COBOL, языка программирования, первая версия которого была выпущена в 1959 году, на более современный Java. В дальнейшем расходы на конвертацию legacy кода значительно снизятся, так как процесс станет проще благодаря искусственному интеллекту.
Первые системы управления базами данных представляли собой древовидную структуру, где у каждой записи мог быть только один источник («предок») на предшествующем уровне иерархии и несколько записей на следующем уровне («потомки»). Ограниченность этой модели подтолкнула исследователей к созданию сетевой модели данных, в которой любая запись могла иметь несколько отношений предок / потомок.
В 1970 году научный сотрудник IBM Эдгар Кодд придумал реляционную модель данных, которая подразумевала, что данные представляются в виде таблиц. Такая модель минимизировала дублирование данных и исключала многие ошибки в работе с ними. Это позволило создать язык программирования высокого уровня для работы непосредственно с базами данных. Так появились первые СУБД: System R от IBM и Ingres Калифорнийского университета. В обоих был реализован язык запросов, который первоначально назывался SEQUEL, Structured English Query Language (структурированный английский язык запросов). Однако потом название сократили, и в 1986 году Американский национальный институт стандартов (ANSI) выпустил первый официальный стандарт языка SQL.
В настоящее время существует множество как реляционных, так и нереляционных СУБД, которые принято обозначать как NoSQL. Отличие последних заключается в том, что они не зависят от структуры таблицы. Такие СУБД хорошо подходят для работы с неструктурированными данными и сложными типами данных.
По способу доступа современные СУБД можно разделить на клиент-серверные, файл-серверные и встраиваемые. В клиент-серверных (Microsoft SQL Server, PostgreSQL, MySQL и др.) информация и СУБД хранится на сервере, запросы обрабатываются там же, а доступ к данным имеет сам сервер. Пользователь получает только ответ на свой запрос. Файл-серверные подразумевают, что данные хранятся на сервере, а СУБД – на каждом компьютере в сети, поэтому доступ к данным имеет каждый пользователь. В этом случае приходится постоянно синхронизировать и обновлять СУБД на пользовательском компьютере. На данный момент эта технология считается устаревшей. Встраиваемые СУБД не требуют установки, являются частью какого-либо приложения и служат для хранения данных на локальном устройстве.
Перспективными технологиями, польза которых четко не определена, считаются объектно-ориентированные (предназначены для хранения структур данных, используемых в объектно-ориентированном программировании) и распределенные базы данных (распределены по нескольким компьютерам локальной сети). Поскольку объекты на порядок сложнее структур, реализовать объектно-ориентированные базы данных довольно трудно. Кроме того, их развитие сдерживается наличием обширным количеством реляционных БД, где хранятся огромные массивы информации.
Новым витком развития СУБД стали облачные технологии. Получить доступ к ним можно как с помощью специального web-приложения, так и через обычный браузер. Согласно оценке Gartner, к 2022 году 75 процентов всех баз данных будут развернуты в облаках или перенесены на облачную платформу из локальных дата-центров.
Облачные СУБД, такие как Microsoft Azure SQL, Amazon Relational Database Server или Google Cloud SQL, выгодны индустрии по нескольким причинам. Они не требуют создания локальной инфраструктуры (за это отвечает поставщик услуг), позволяя экономить пространство, ресурсы и время, которое в противном случае пришлось бы потратить на настройку и обеспечение безопасности системы. В обязательном порядке в облаке хранится резервная копия данных, чтобы в любой момент сделать оперативный бэкап. При этом клиент может арендовать инфраструктуру, но пользоваться собственной базой, или целиком положиться на решение поставщика. Преградой к использованию облачных СУБД может быть низкая скорость интернет-соединения, однако распространение новых стандартов связи, в частности 5G, скорее всего, устранит эту проблему.
Первые программы, которые писали на Ассемблере для упрощения ввода машинного кода в вычислительные машины, были довольно простыми и осуществляли лишь элементарные математические расчеты. И даже первые языки программирования высокого уровня использовались в основном для создания драйверов различных устройств и программ для работы с текстами, а также для выполнения расчетов: научных, инженерных, экономических.
К концу ХХ века компьютеры, прибавив в мощности и убавив в стоимости и размерах, стали общедоступными. Они нашли применение в самых разных сферах человеческой деятельности, что привело к появлению множества языков программирования, заточенных под решение определенных задач. Вместе с тем увеличилось количество направлений разработки ПО: бизнес-приложения, веб-разработка, мобильные приложения, компьютерные и видеоигры, системное программирование, прикладное программирование десктопных приложений для различных областей. Потребность в создании программного обеспечения сегодня существует везде.
Разработка ПО становится все более мобильной. На это влияет распространение интернета вещей, машинного обучения, виртуальной и дополненной реальности, голосового управления и управления жестами. В будущем это может привести к появлению новых языков программирования, ориентированных на эти технологии. Кроме того, появляются и новые средства для разработки: технологии low-code и no-code, визуального программирования и автоматической разработки (CASE, Webflow, MediaLabScratch, Microsoft Power Apps и другие), а также бессерверные вычисления (Serverless). Заметно растет использование облачных сервисов для разработки кода.
Благодаря нейросетям, таким как модель GPT-3 от OpenAI, в скором времени люди наверняка избавятся от необходимости вручную писать код. В дальнейшем ИИ, вполне возможно, будет целиком писать программы, используя для этого собственный язык программирования. Впрочем, создавать комплексные приложения и сервисы от начала и до конца искусственный интеллект если и научится, то очень нескоро.
Первые сайты представляли из себя обыкновенные текстовые страницы. Рождение стандарта HTML и браузеров привело к тому, что ничем не примечательные страницы стали цветными, на них появились изображения, баннеры и множество других деталей. Соответственно, если разработчикам первых сайтов было достаточно текстовых редакторов, а с появлением языков программирования, таких как Javascript, PHP, Perl и CSS, им открылись широкие возможности для разработки и наполнения интернет-страниц различными функциями.
Сегодня веб-разработка включает в себя разработку сайта, веб-дизайн, разработку клиентского, серверного ПО. Основными языками разработки являются HTML/CSS, JavaScript, PHP, Java, Python или C/C#/C++. Для веб-дизайна используют программы Adobe Illustrator, Adobe Photoshop, Sketch. При этом внешний вид и техническое наполнение сайтов меняется: к примеру, flash-анимация, которая была так популярна в нулевых, уходит в прошлое. Интернет-страницы становятся более интерактивными и тесно связанными с другими приложениями.
Как и в других областях, в последние годы ИИ стал главным трендом в веб-пространстве. Не так просто сегодня представить сайт без чат-бота в роли консультанта. В будущем чат-ботов могут заменить голосовые помощники, которые позволят осуществлять навигацию по сайту голосом. Уже сегодня ИИ умеет автоматически подбирать контент на основе пользовательских запросов, анализировать настроение пользователей по комментариям, корректировать цветовую гамму и оформление страниц. В будущем ИИ может значительно упростить разработку дизайна веб-страниц: чтобы усовершенствовать рабочий процесс, специалисты Microsoft создали Sketch2Code – систему, которая использует компьютерное зрение, чтобы переводить сделанные на бумаге дизайнерские идеи в рабочий HTML-код.
Веб-разработка становится доступнее благодаря появлению множества готовых решений: любой желающий может собрать сайт за несколько часов благодаря специальным конструкторам и облачным сервисам, где можно найти необходимый инструментарий.
В конце 1980-х годов, стремясь ускорить разработку и сделать ее проще, программисты стали пытаться модернизировать существующие языки программирования. Так на свет появились скриптовые языки. Их отличие в том, что код программы не компилируется, а интерпретируется. При компиляции создается исполняемый файл, в котором записан машинный код. В ходе выполнения программы ОС обращается только к этому файлу. При интерпретации, код строка за строкой переводится не в машинный код, а в промежуточный байт-код, понятный ОС, который она затем исполняет также по строкам. Компилируемые программы работают быстрее, так как ОС не приходится ждать, пока интерпретатор выдаст ей очередную строчку кода для реализации.
Однако у таких языков есть и свои преимущества, среди которых возможность устранения ошибок в коде в процессе работы программы, отсутствие подготовительных действий для выполнения программы и быстрота разработки за счет множества встроенных операций, модулей и инструментов. К таким языками относятся Perl, PHP, Python, Ruby, JavaScript. Python сегодня наиболее популярен из них. Его отличает мультипарадигмальность, кроссплатформенность, простота освоения, лаконичный синтаксис и функциональность. Его используют для автоматизации рутинных задач, распараллеливания процессов, создания веб-сценариев, а также для разработки приложений на основе ИИ. В частности для реализации машинного обучения.
Машинное обучение (ML) – это одно из направлений ИИ, в рамках которого разработчики создают алгоритмы, способные к самообучению. Реализация ИИ в облачных сценариях сегодня становится главным катализатором распространения ИИ. Такие возможности предоставляет Microsoft Azure. Воспользовавшись службами Azure Machine Learning, Azure Databricks и ONNX Runtime разработчики могут легко и быстро создавать, обучать и развертывать модели машинного обучения. Они позволяют оптимизировать и ускорять процессы получения выводов и обучения в ML.
Стремясь расширить возможности первых компьютеров, крупные технологические компании в 1960-1970-х годах стали создавать так называемые виртуальные машины, которые предоставляли нескольким пользователям доступ к одному компьютеру. При этом несколько программ могли исполняться одновременно. Изначально этого добивались за счет расширения оперативной памяти компьютера.
Первыми шагами на пути к виртуализации стало отделение хранилища памяти от памяти, которую использовали программы. Затем научные сотрудники компании IBM разделили компьютер на отдельные части для создания многопользовательской операционной среды. Однако такие виртуальные машины еще не симулировали полностью работу компьютера в целом.
В 1968 году IBM запустила операционную систему CP/CMS(Control Program / Cambridge Monitor System), поддерживающую виртуализацию. Программа CP создавала виртуальные машины, которые работали на CMS — однопользовательской интерактивной операционной системе. Первыми полноценными виртуальными машинами стали вышедшая в 1997 году программа Virtual PC от Apple и аналогичный продукт VMware Workstation, появившийся в 1999 году.
Виртуальная машина — это компьютерный образ, действующий как обычный компьютер. Она выполняется в отдельном окне, как и любая другая программа. Таким образом, пользователи получают на виртуальной машине те же возможности, что и в основной операционной системе компьютера. Виртуальная машина изолирована от остальной части системы, поэтому она не может повлиять на систему самого компьютера или управлять ею. Это идеальная среда для тестирования других операционных систем, включая бета-выпуски, оценки данных, зараженных вирусом, создания резервных копий операционных систем и запуска программного обеспечения и приложений на операционных системах, для которых они изначально не предназначены. Обычно виртуализацию разделяют на эмуляцию аппаратуры, полную виртуализацию, паравиртуализация и виртуализация уровня операционной системы.
Сегодня появились более простые и удобные решения для виртуализации. Например, облачные виртуальные машины Microsoft Azure Virtual Machines. В них можно перенести наиболее важные рабочие нагрузки и повысить эксплуатационную эффективность. Виртуальные машинах Azure позволяют запускать программное обеспечение SQL Server, SAP, Oracle, а также приложения для высокопроизводительных вычислений. При этом можно выбрать Windows Server или любой дистрибутив Linux. Максимально виртуальные машины могут содержать до 416 виртуальных ЦП и 12 ТБ памяти, что дает возможность выполнять до 3,7 млн операций ввода-вывода в секунду в локальном хранилище на одну виртуальную машину.
Распространение виртуальных машин может значительно изменить технологический рынок и облегчить процесс разработки, избавив создателей ПО от необходимости ориентироваться на железо. Вместе с развитием облачных технологий аренда виртуальных машин дешевеет. Они станут доступны не только компаниям, но и физическим лицам: теоретически проще будет воспользоваться облаком, нежели покупать мощный компьютер для рабочих задач или требовательных развлечений, например, компьютерных игр. Примеры такого использования облачных технологий можно видеть уже сегодня на примере сервисов Google Stadia или GeForce Now.
Кроме того, виртуальные машины предпочтительнее использовать не только с точки зрения комфорта, но с точки зрения безопасности. На устройстве могут быть запущены две или более виртуальные машины, изолированные друг от друга гипервизором — например, корпоративная, закрывающая доступ к посторонним ресурсам, и личная, которая позволяет свободно выходить в интернет и пользоваться сторонними сервисами. Важные корпоративные данные вряд ли окажутся под угрозой: злоумышленники не смогут, проникнув в одну из них, выкрасть ценные данные из другой, и наоборот.