Программирование без программистов и что мешает ему развиваться

Kate

Administrator
Команда форума
Едут в автомобиле механик, химик и программист.
И вдруг машина заглохла.
Механик: «Наверное, что-то с мотором».
Химик: «Да нет, это бензин плохой».
Программист: «Поднимите мне зарплату».
© Анекдот

Карантин и локдаун вынудил бизнес выйти в онлайн: доставка продуктов, развлечения, покупки, совещания, игры, общение с друзьями и даже секс — всё теперь происходит по интернету. С вакцинацией в США и Европе активизировались офлайн-бизнесы. Их потребности в разработке тоже никуда не делись. Соответственно спрос на программистов, который и так был немалым, увеличился сильно.

Если раньше с целью экономии их набирали в странах третьего мира, сейчас все — разработчики закончились и там. По данным djinni.co, соотношение между специалистами в поиске и вакансиями с ноября 2020 года выросло многократно и не в пользу рекрутеров. Бизнес визжит так, будто его режут: свободных рук и голов на рынке труда попросту нет — приходится переманивать, обязательно с повышением зарплаты (украинская Дия City как раз сделана, чтобы разработчиков закабалить) и дрожать, ожидая, что завтра кто-то даст ещё больше.

Что же делать? Обучать программированию новичков — задача долгая и нет никаких гарантий, что неофит не сбежит на +500 долларов в компанию через дорогу.

А нельзя ли хотя бы в типичных случаях обойтись без этих зажравшихся, капризных и при этом дорогостоящих сволочей? Сделать так, чтобы простые программы можно было создавать без кода или с его минимумом? И, естественно, no-code платформы получают сейчас всё большую популярность. Как они выглядят сейчас, как будут выглядеть в будущем, что мешает их развитию и почему мы не можем отказаться от услуг разработчиков? На эти вопросы я постарался ответить ниже.

Что такое no-code​

Когда роботы станут разумными, их деньги будут называться — киловатты.

Сейчас​

На самом деле no-code сейчас не более, чем конструктор. Есть компоненты, они связываются с помощью настроек. Логика работы приложения создается с помощью кода (такие платформы называются low-code) либо рисуется в виде графических схем (собственно no-code).

Тема эта не нова, вспомним хотя бы Delphi: натаскав на форму компонентов, можно создать довольно сложное предложение. Таким же примерно образом можно создать сайт, чат-бот, систему документооборота, ERP и многое другое. Конструкторы для игр выглядят несколько по-другому, но всё равно они состоят из редактора и логики. Примеры их Unity3D, Adobe Flex, Unreal Engine. Существуют и бухгалтерские системы: 1С, SAP и так далее, не вижу причины, по которой нельзя придумать такую для любого другого вида человеческой деятельности.

Вопрос: угрожает ли текущее состояние профессии программист? Ответ: нет. Более того, программисты ABAP (входной язык для SAP) считаются одними из наиболее высокооплачиваемых.

И в будущем​

Астролябия... сама меряет, было бы что мерить ©
Ильф и Петров. Двенадцать стульев

Как я указывал выше, в данный момент no-code платформы не являются угрозой для рабочих мест ІТ-специалистов. Но, допустим, со временем искусственный интеллект разовьется: сможет, например, создавать программы по текстовому описанию + рисунку от руки. Будет ли это концом высокооплачиваемой работы и рынка труда соискателя? Давайте разберёмся.

Во-первых, чем рисунок принципиально отличается от перетаскивания контролов на форму? Только тем, что для первого нужно уметь хоть как-то рисовать мышкой либо иметь стилус. Во-вторых, текстовое описание хоть и достаточно вольное, всё же не может быть слишком фривольным — оно должно описывать алгоритм работы программы.

Да, сейчас уже существуют экспериментальные средства, позволяющие конвертировать естественный язык в код, но даже на естественном языке нужно внятно описать, что будет делать программа. Вполне возможно, знания современных языков программирования отойдут в прошлое, как это уже случилось с ассемблером, но необходимость описывать алгоритмы не денется в обозримом будущем никуда. Именно возможности человека, не искусственного интеллекта, стоят на пути у прогресса — люди попросту не умеют алгоритмизировать. А как вы думали, алгоритм — это далеко не только умные задачки на олимпиадах. Вот попробуйте, попросите членов вашей семьи написать алгоритм приготовления кофе словами — без всяких языков программирования. Спорим, что с первой попытки выйдет далеко не у всех.

С другой стороны, на языке Lisp уже более полувека можно создавать DSL-и, которые практически не отличимы от естественного языка. Нужно заметить, что прогресс в инструментальных средствах отнюдь не приводит к уменьшению количества программистов — наоборот, с каждым годом задач информатизации всё больше, чем людей, умеющих их решать. А уж согласных программировать за «разумные деньги» вообще в природе уже не осталось. Да и требования только растут: в начале 90-х для работы достаточно было знания какого-то языка программирования, потом понадобились реляционные базы данных, потом программирование веб-приложений и так далее. Мобильные платформы, фронтенд, искусственный интеллект — всё, без чего немыслимо современное ІТ.

Но что же делать, если писать код очень-очень не хочется? Можно ли это, оказывается, можно, ведь существуют....

Блок-схемы, везде блок-схемы​

Если логику нельзя написать, ее нужно нарисовать, и, как правило, для этого используются блок-схемы. Согласно Википедии, это ничто иное как распространенный тип схем (графических моделей), описывающих алгоритмы или процессы, в которых отдельные шаги изображаются в виде блоков различной формы, соединенных между собой линиями, указывающими направление последовательности. Другими словами, блок-схема — это фигурки, соединенные линиями со стрелками. Внутри фигур и на стрелках может быть что-то написано. На бумаге вроде бы хорошо, но дьявол в деталях: он вселился в блок-схемы и из-за этого зловредного духа мы не используем их нигде, кроме занудных лабораторных работ в институте.

И почему они не подходят​

Давайте остановимся на недостатках блок-схем подробнее. В качестве иллюстрации будем использовать онлайн-редактор.

Отсутствие обязательной структуры​

Блок-схемы можно рисовать как угодно: хоть справа налево, хоть сверху вниз, хоть наискосок. Ни тебе связи с временной шкалой, ни с потоком распространения событий. Не зря их называют «спагетти». Разобраться в этих письменах инков практически невозможно.

image_97394297261630683879158.png


Стандарт позволяет пересечение линий без смыслового наполнения, даже располагать фигурки поверх других: блок-схемой можно нарисовать неприличное слово и она будет вполне валидной.

В качестве иллюстрации на рисунке ниже представлена блок-схема. Фигурами и соединительными линиями изображены буквы «Х» и «У». Третью букву, сообразуясь с мерой своей распущенности, предоставляется мысленно нарисовать читателю в качестве упражнения.

Много пустого места​

Давайте посмотрим, как выглядит блок-схема простейшего цикла «for» (рисунок ниже):

image_138080212131630683879191.png


При этом на языке C эта блок-схема выглядит вот так:

image_20682310791630683879165.png


Понятнее ли блок-схема? Нет! Меньше по размерам? Нет! Зачем же ее использовать?

Избыточная сложность​

Посмотрите, сколько фигур предлагается к использованию в популярном онлайн-редакторе www.lucidchart.com

image_78601938631630683879144.png


Для каждой из них существуют правила использований описанных в сотнях учебников, часть из которых еще и противоречат друг другу. Без прочтения нескольких книг всё это понять невозможно. С другой стороны, прочитав несколько книг по языку программирования, уже можно начать на нём писать. При этом, изучив только блок-схемы, создавать программы, увы, невозможно.

В результате блок-схемами программисты-профессионалы, как правило, не пользуются. Можно ли с этим что-то сделать? Да — ввести правила, ограничить свободу творчества таким образом, чтобы из-под мыши или стилуса выходили только компактные, наглядные и понятные схемы. И такие стандарты разработаны ещё в СССР, и, кстати, до сих пор, несмотря на прошедшие тридцать лет, ничего лучшего нигде не придумали, хотя и старались. Одним из таких являются Р-схемы.

Введение в Р-схемы​

Нотация Р-схем в СССР доктором физмат-наук Игорем Вячеславовичем Вельбицким в далёком 1975 году, ещё до рождения автора этой статьи, в Киевском институте кибернетики НАНУ. Да, с её помощью создавали программы для посылки ракет на злобных буржуев, из песни слов не выкинешь. Но не сложилось, СССР канул в Лету, оставив нам в наследие Р-технологию (и много чего ещё). Язык этот, во-первых, графический, во-вторых, очень простой, но это только на первый взгляд.

В нём есть:

  • точки, на них не написано ничего;
  • линии их соединяющие: горизонтальные и вертикальные. На горизонтальных можно писать, сверху и снизу.
Этого достаточно для создания программ любой сложности.

С точки зрения теории Р-схемы являются ориентированным графом, нагруженным по дугам — надписи могут быть только на них, не на вершинах. Такая запись продиктована соображениями компактности: на соединительных линиях места гораздо больше, чем внутри точек.

Самая простая программа​

Вот самая простая программа, описывающая поведение проголодавшегося человека в зависимости от наличия у него денег:

image_29365602941630683879144.png


Как видим, сверху написано условие, снизу — действие.

Программа с переходом​

Предположим, некто отправился в магазин за хлебом. Если в этом нет, не беда — зайду в следующий. Как же будет выглядеть Р-схема, описывающая этот процесс?

image_4372540981630683879164.png


Это аналог перехода на строку кода. Или в данном случае на развилку. На некоторых из стрелок нет надписей: сверху, снизу или вообще — это нормально. В данном случае это означает безусловное действие, переход по условию или безусловный переход.

Программа с циклом​

Можно ли в предыдущем случае обойтись без перехода к началу? Да, воспользоваться циклом.

image_10872532521630683879112.png


Видите решётку? Она означает, что данная дуга обозначает цикл. Но в цикле может быть не только одно действие. Выглядеть это будет, как на рисунке ниже:

image_404312365121630683879174.png


Сверху дуги, отмеченной циклом, пишем условие, действия, написанные на дугах под ней, повторяются.

На этом с теорией всё. Ниже я разовью идею Р-схем в различных приложениях к реальным задачам.

Преимущества перед блок-схемами​

Чем это отличается от десятков реализаций блок-схем в UML? Давайте разберёмся.

Четкие правила построения и простота​

Р-схемы состоят только из вертикальных и горизонтальных линий. Это делает картинку проще для восприятия.

Компактность​

Р-схемы нагружены только по дугам, где для надписей много места, их вполне можно использовать для программирования с небольшого экрана мобильных телефонов.

В качестве примера посмотрим, как будет выглядеть цикл for из примера выше.

image_644534921111630683879173.png


И это всё. По крайней мере не больше, чем написать это кодом.

Использование Р-схем для no-code платформ​

Р-схемы — хорошее средство для декларативного программирования. Применимо везде, где нужно отделить собственно алгоритм от реализации технических деталей, то есть то, для чего созданы все no-code платформы. Давайте посмотрим, как эту технологию можно применить для no-code.

Чат-боты​

Платформ для их создания буквально сотни. Как правило, они представляют собой дизайнер блок-схем + настройки. Ниже скриншот из сервиса Landbot. На нём видно, что даже маленький чат, созданный для тестирования, не помещается на экране:

image_971507088141630683879224.png


Посмотрим, как то же самое можно сделать с помощью Р-схем:

image_20812054071630683879159.png


Как видим, схема гораздо более компактна. Вверху мы пишем тип элемента, внизу — его конкретные параметры. К примеру, если нужно выдать сообщение вверху линии, мы так и пишем «сообщение», внизу — его текст. В случае выбора вариантов пишем вверху «Select» и под этой линией варианты выбора — всё очень просто.

Игровые платформы​

Можно ли создать игру без кода, хотя бы простенькую? Да! Например, платформа flowlab. Это штука, предназначенная для создания 2D-платформеров. В ней и в других похожих у каждого игрового объекта существуют следующие характеристики:

  • Тип объекта: пол, стена, робот, куст, персонаж и так далее.
  • Физические характеристики: координаты, скорость, масса.
  • Поведение, которое зависит от физических характеристик конкретного объекта в данный момент времени и игрового сценария.
Инструментарий для создания игр, таким образом, состоит из двух редакторов: графического, для спрайтов и редактора блок-схем. С помощью последнего создается поведение персонажей. Однако в существующих системах реализация блок-схем крайне несовершенна и...

И это... наши любимые блок-схемы с их недостатками, которые нивелируются введением Р-схем.

Давайте посмотрим, как можно запрограммировать поведение космического корабля в скроллере: он летит по экрану сверху вниз (на самом деле, относительно экрана компьютера он неподвижен — передвигается игровой мир). Стреляет, если нажать пробел. Если столкнулся с препятствием — взрывается. При нажатии клавиш «A» или «D» перемещается по экрану влево вправо.

image_97779911851630683879158.png


Собственно, всё. Те из вас, кто когда-то писал игры с помощью, скажем, Adobe Flash или Unity, знают, сколько нужно написать кода для создания вышеупомянутой логики. Спойлер для тех, кто не писал — много!

Программы для роботов​

Будущее уже стало реальностью, роботы уже проникли в нашу жизнь, в промышленности они появились задолго до рождения автора. К примеру, в программе AutoCAD можно создать эскиз детали, затем передать его на станок с ЧПУ, и она будет создана без участия человека. Но давайте разберём пример более близкий к простому смертному. Предположим, у нас есть кофеварка и она варит кофе к определенному времени по будням, по праздникам в другое время, а если в календаре день отмечен как отпускной — не варит его вообще. Посмотрим, как эта программа будет выглядеть на языке Р.

image_585263232101630683879167.png


Как видите, всё настолько просто, что вызывает некоторое чувство пренебрежения, но это ведь и хорошо — такая программа может быть написана любой домохозяйкой.

И что же дальше?​

Автор в свободное от работы время разрабатывает конструктор, позволяющий использовать язык Р для разнообразных приложений. Язык разработки Type Script 2 + React.
Сделано пока немного, поскольку кушать хочется каждый день, плюс нерабочие активности: поработать побольше не получается. Поэтому к сотрудничеству приглашаются неравнодушные энтузиасты. Это пока не стартап — опенсорс-разработка, но я планирую участвовать и выиграть в конкурсе грантов. Сейчас как раз занимаюсь этим.

 
Сверху