Едут в автомобиле механик, химик и программист.
И вдруг машина заглохла.
Механик: «Наверное, что-то с мотором».
Химик: «Да нет, это бензин плохой».
Программист: «Поднимите мне зарплату».
© Анекдот
Карантин и локдаун вынудил бизнес выйти в онлайн: доставка продуктов, развлечения, покупки, совещания, игры, общение с друзьями и даже секс — всё теперь происходит по интернету. С вакцинацией в США и Европе активизировались офлайн-бизнесы. Их потребности в разработке тоже никуда не делись. Соответственно спрос на программистов, который и так был немалым, увеличился сильно.
Если раньше с целью экономии их набирали в странах третьего мира, сейчас все — разработчики закончились и там. По данным djinni.co, соотношение между специалистами в поиске и вакансиями с ноября 2020 года выросло многократно и не в пользу рекрутеров. Бизнес визжит так, будто его режут: свободных рук и голов на рынке труда попросту нет — приходится переманивать, обязательно с повышением зарплаты (украинская Дия City как раз сделана, чтобы разработчиков закабалить) и дрожать, ожидая, что завтра кто-то даст ещё больше.
Что же делать? Обучать программированию новичков — задача долгая и нет никаких гарантий, что неофит не сбежит на +500 долларов в компанию через дорогу.
А нельзя ли хотя бы в типичных случаях обойтись без этих зажравшихся, капризных и при этом дорогостоящих сволочей? Сделать так, чтобы простые программы можно было создавать без кода или с его минимумом? И, естественно, no-code платформы получают сейчас всё большую популярность. Как они выглядят сейчас, как будут выглядеть в будущем, что мешает их развитию и почему мы не можем отказаться от услуг разработчиков? На эти вопросы я постарался ответить ниже.
Тема эта не нова, вспомним хотя бы Delphi: натаскав на форму компонентов, можно создать довольно сложное предложение. Таким же примерно образом можно создать сайт, чат-бот, систему документооборота, ERP и многое другое. Конструкторы для игр выглядят несколько по-другому, но всё равно они состоят из редактора и логики. Примеры их Unity3D, Adobe Flex, Unreal Engine. Существуют и бухгалтерские системы: 1С, SAP и так далее, не вижу причины, по которой нельзя придумать такую для любого другого вида человеческой деятельности.
Вопрос: угрожает ли текущее состояние профессии программист? Ответ: нет. Более того, программисты ABAP (входной язык для SAP) считаются одними из наиболее высокооплачиваемых.
Ильф и Петров. Двенадцать стульев
Как я указывал выше, в данный момент no-code платформы не являются угрозой для рабочих мест ІТ-специалистов. Но, допустим, со временем искусственный интеллект разовьется: сможет, например, создавать программы по текстовому описанию + рисунку от руки. Будет ли это концом высокооплачиваемой работы и рынка труда соискателя? Давайте разберёмся.
Во-первых, чем рисунок принципиально отличается от перетаскивания контролов на форму? Только тем, что для первого нужно уметь хоть как-то рисовать мышкой либо иметь стилус. Во-вторых, текстовое описание хоть и достаточно вольное, всё же не может быть слишком фривольным — оно должно описывать алгоритм работы программы.
Да, сейчас уже существуют экспериментальные средства, позволяющие конвертировать естественный язык в код, но даже на естественном языке нужно внятно описать, что будет делать программа. Вполне возможно, знания современных языков программирования отойдут в прошлое, как это уже случилось с ассемблером, но необходимость описывать алгоритмы не денется в обозримом будущем никуда. Именно возможности человека, не искусственного интеллекта, стоят на пути у прогресса — люди попросту не умеют алгоритмизировать. А как вы думали, алгоритм — это далеко не только умные задачки на олимпиадах. Вот попробуйте, попросите членов вашей семьи написать алгоритм приготовления кофе словами — без всяких языков программирования. Спорим, что с первой попытки выйдет далеко не у всех.
С другой стороны, на языке Lisp уже более полувека можно создавать DSL-и, которые практически не отличимы от естественного языка. Нужно заметить, что прогресс в инструментальных средствах отнюдь не приводит к уменьшению количества программистов — наоборот, с каждым годом задач информатизации всё больше, чем людей, умеющих их решать. А уж согласных программировать за «разумные деньги» вообще в природе уже не осталось. Да и требования только растут: в начале 90-х для работы достаточно было знания какого-то языка программирования, потом понадобились реляционные базы данных, потом программирование веб-приложений и так далее. Мобильные платформы, фронтенд, искусственный интеллект — всё, без чего немыслимо современное ІТ.
Но что же делать, если писать код очень-очень не хочется? Можно ли это, оказывается, можно, ведь существуют....
Стандарт позволяет пересечение линий без смыслового наполнения, даже располагать фигурки поверх других: блок-схемой можно нарисовать неприличное слово и она будет вполне валидной.
В качестве иллюстрации на рисунке ниже представлена блок-схема. Фигурами и соединительными линиями изображены буквы «Х» и «У». Третью букву, сообразуясь с мерой своей распущенности, предоставляется мысленно нарисовать читателю в качестве упражнения.
При этом на языке C эта блок-схема выглядит вот так:
Понятнее ли блок-схема? Нет! Меньше по размерам? Нет! Зачем же ее использовать?
Для каждой из них существуют правила использований описанных в сотнях учебников, часть из которых еще и противоречат друг другу. Без прочтения нескольких книг всё это понять невозможно. С другой стороны, прочитав несколько книг по языку программирования, уже можно начать на нём писать. При этом, изучив только блок-схемы, создавать программы, увы, невозможно.
В результате блок-схемами программисты-профессионалы, как правило, не пользуются. Можно ли с этим что-то сделать? Да — ввести правила, ограничить свободу творчества таким образом, чтобы из-под мыши или стилуса выходили только компактные, наглядные и понятные схемы. И такие стандарты разработаны ещё в СССР, и, кстати, до сих пор, несмотря на прошедшие тридцать лет, ничего лучшего нигде не придумали, хотя и старались. Одним из таких являются Р-схемы.
В нём есть:
С точки зрения теории Р-схемы являются ориентированным графом, нагруженным по дугам — надписи могут быть только на них, не на вершинах. Такая запись продиктована соображениями компактности: на соединительных линиях места гораздо больше, чем внутри точек.
Как видим, сверху написано условие, снизу — действие.
Это аналог перехода на строку кода. Или в данном случае на развилку. На некоторых из стрелок нет надписей: сверху, снизу или вообще — это нормально. В данном случае это означает безусловное действие, переход по условию или безусловный переход.
Видите решётку? Она означает, что данная дуга обозначает цикл. Но в цикле может быть не только одно действие. Выглядеть это будет, как на рисунке ниже:
Сверху дуги, отмеченной циклом, пишем условие, действия, написанные на дугах под ней, повторяются.
На этом с теорией всё. Ниже я разовью идею Р-схем в различных приложениях к реальным задачам.
В качестве примера посмотрим, как будет выглядеть цикл for из примера выше.
И это всё. По крайней мере не больше, чем написать это кодом.
Посмотрим, как то же самое можно сделать с помощью Р-схем:
Как видим, схема гораздо более компактна. Вверху мы пишем тип элемента, внизу — его конкретные параметры. К примеру, если нужно выдать сообщение вверху линии, мы так и пишем «сообщение», внизу — его текст. В случае выбора вариантов пишем вверху «Select» и под этой линией варианты выбора — всё очень просто.
И это... наши любимые блок-схемы с их недостатками, которые нивелируются введением Р-схем.
Давайте посмотрим, как можно запрограммировать поведение космического корабля в скроллере: он летит по экрану сверху вниз (на самом деле, относительно экрана компьютера он неподвижен — передвигается игровой мир). Стреляет, если нажать пробел. Если столкнулся с препятствием — взрывается. При нажатии клавиш «A» или «D» перемещается по экрану влево вправо.
Собственно, всё. Те из вас, кто когда-то писал игры с помощью, скажем, Adobe Flash или Unity, знают, сколько нужно написать кода для создания вышеупомянутой логики. Спойлер для тех, кто не писал — много!
Как видите, всё настолько просто, что вызывает некоторое чувство пренебрежения, но это ведь и хорошо — такая программа может быть написана любой домохозяйкой.
Сделано пока немного, поскольку кушать хочется каждый день, плюс нерабочие активности: поработать побольше не получается. Поэтому к сотрудничеству приглашаются неравнодушные энтузиасты. Это пока не стартап — опенсорс-разработка, но я планирую участвовать и выиграть в конкурсе грантов. Сейчас как раз занимаюсь этим.
И вдруг машина заглохла.
Механик: «Наверное, что-то с мотором».
Химик: «Да нет, это бензин плохой».
Программист: «Поднимите мне зарплату».
© Анекдот
Карантин и локдаун вынудил бизнес выйти в онлайн: доставка продуктов, развлечения, покупки, совещания, игры, общение с друзьями и даже секс — всё теперь происходит по интернету. С вакцинацией в США и Европе активизировались офлайн-бизнесы. Их потребности в разработке тоже никуда не делись. Соответственно спрос на программистов, который и так был немалым, увеличился сильно.
Если раньше с целью экономии их набирали в странах третьего мира, сейчас все — разработчики закончились и там. По данным 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-х для работы достаточно было знания какого-то языка программирования, потом понадобились реляционные базы данных, потом программирование веб-приложений и так далее. Мобильные платформы, фронтенд, искусственный интеллект — всё, без чего немыслимо современное ІТ.
Но что же делать, если писать код очень-очень не хочется? Можно ли это, оказывается, можно, ведь существуют....
Блок-схемы, везде блок-схемы
Если логику нельзя написать, ее нужно нарисовать, и, как правило, для этого используются блок-схемы. Согласно Википедии, это ничто иное как распространенный тип схем (графических моделей), описывающих алгоритмы или процессы, в которых отдельные шаги изображаются в виде блоков различной формы, соединенных между собой линиями, указывающими направление последовательности. Другими словами, блок-схема — это фигурки, соединенные линиями со стрелками. Внутри фигур и на стрелках может быть что-то написано. На бумаге вроде бы хорошо, но дьявол в деталях: он вселился в блок-схемы и из-за этого зловредного духа мы не используем их нигде, кроме занудных лабораторных работ в институте.И почему они не подходят
Давайте остановимся на недостатках блок-схем подробнее. В качестве иллюстрации будем использовать онлайн-редактор.Отсутствие обязательной структуры
Блок-схемы можно рисовать как угодно: хоть справа налево, хоть сверху вниз, хоть наискосок. Ни тебе связи с временной шкалой, ни с потоком распространения событий. Не зря их называют «спагетти». Разобраться в этих письменах инков практически невозможно.Стандарт позволяет пересечение линий без смыслового наполнения, даже располагать фигурки поверх других: блок-схемой можно нарисовать неприличное слово и она будет вполне валидной.
В качестве иллюстрации на рисунке ниже представлена блок-схема. Фигурами и соединительными линиями изображены буквы «Х» и «У». Третью букву, сообразуясь с мерой своей распущенности, предоставляется мысленно нарисовать читателю в качестве упражнения.
Много пустого места
Давайте посмотрим, как выглядит блок-схема простейшего цикла «for» (рисунок ниже):При этом на языке C эта блок-схема выглядит вот так:
Понятнее ли блок-схема? Нет! Меньше по размерам? Нет! Зачем же ее использовать?
Избыточная сложность
Посмотрите, сколько фигур предлагается к использованию в популярном онлайн-редакторе www.lucidchart.comДля каждой из них существуют правила использований описанных в сотнях учебников, часть из которых еще и противоречат друг другу. Без прочтения нескольких книг всё это понять невозможно. С другой стороны, прочитав несколько книг по языку программирования, уже можно начать на нём писать. При этом, изучив только блок-схемы, создавать программы, увы, невозможно.
В результате блок-схемами программисты-профессионалы, как правило, не пользуются. Можно ли с этим что-то сделать? Да — ввести правила, ограничить свободу творчества таким образом, чтобы из-под мыши или стилуса выходили только компактные, наглядные и понятные схемы. И такие стандарты разработаны ещё в СССР, и, кстати, до сих пор, несмотря на прошедшие тридцать лет, ничего лучшего нигде не придумали, хотя и старались. Одним из таких являются Р-схемы.
Введение в Р-схемы
Нотация Р-схем в СССР доктором физмат-наук Игорем Вячеславовичем Вельбицким в далёком 1975 году, ещё до рождения автора этой статьи, в Киевском институте кибернетики НАНУ. Да, с её помощью создавали программы для посылки ракет на злобных буржуев, из песни слов не выкинешь. Но не сложилось, СССР канул в Лету, оставив нам в наследие Р-технологию (и много чего ещё). Язык этот, во-первых, графический, во-вторых, очень простой, но это только на первый взгляд.В нём есть:
- точки, на них не написано ничего;
- линии их соединяющие: горизонтальные и вертикальные. На горизонтальных можно писать, сверху и снизу.
С точки зрения теории Р-схемы являются ориентированным графом, нагруженным по дугам — надписи могут быть только на них, не на вершинах. Такая запись продиктована соображениями компактности: на соединительных линиях места гораздо больше, чем внутри точек.
Самая простая программа
Вот самая простая программа, описывающая поведение проголодавшегося человека в зависимости от наличия у него денег:Как видим, сверху написано условие, снизу — действие.
Программа с переходом
Предположим, некто отправился в магазин за хлебом. Если в этом нет, не беда — зайду в следующий. Как же будет выглядеть Р-схема, описывающая этот процесс?Это аналог перехода на строку кода. Или в данном случае на развилку. На некоторых из стрелок нет надписей: сверху, снизу или вообще — это нормально. В данном случае это означает безусловное действие, переход по условию или безусловный переход.
Программа с циклом
Можно ли в предыдущем случае обойтись без перехода к началу? Да, воспользоваться циклом.Видите решётку? Она означает, что данная дуга обозначает цикл. Но в цикле может быть не только одно действие. Выглядеть это будет, как на рисунке ниже:
Сверху дуги, отмеченной циклом, пишем условие, действия, написанные на дугах под ней, повторяются.
На этом с теорией всё. Ниже я разовью идею Р-схем в различных приложениях к реальным задачам.
Преимущества перед блок-схемами
Чем это отличается от десятков реализаций блок-схем в UML? Давайте разберёмся.Четкие правила построения и простота
Р-схемы состоят только из вертикальных и горизонтальных линий. Это делает картинку проще для восприятия.Компактность
Р-схемы нагружены только по дугам, где для надписей много места, их вполне можно использовать для программирования с небольшого экрана мобильных телефонов.В качестве примера посмотрим, как будет выглядеть цикл for из примера выше.
И это всё. По крайней мере не больше, чем написать это кодом.
Использование Р-схем для no-code платформ
Р-схемы — хорошее средство для декларативного программирования. Применимо везде, где нужно отделить собственно алгоритм от реализации технических деталей, то есть то, для чего созданы все no-code платформы. Давайте посмотрим, как эту технологию можно применить для no-code.Чат-боты
Платформ для их создания буквально сотни. Как правило, они представляют собой дизайнер блок-схем + настройки. Ниже скриншот из сервиса Landbot. На нём видно, что даже маленький чат, созданный для тестирования, не помещается на экране:Посмотрим, как то же самое можно сделать с помощью Р-схем:
Как видим, схема гораздо более компактна. Вверху мы пишем тип элемента, внизу — его конкретные параметры. К примеру, если нужно выдать сообщение вверху линии, мы так и пишем «сообщение», внизу — его текст. В случае выбора вариантов пишем вверху «Select» и под этой линией варианты выбора — всё очень просто.
Игровые платформы
Можно ли создать игру без кода, хотя бы простенькую? Да! Например, платформа flowlab. Это штука, предназначенная для создания 2D-платформеров. В ней и в других похожих у каждого игрового объекта существуют следующие характеристики:- Тип объекта: пол, стена, робот, куст, персонаж и так далее.
- Физические характеристики: координаты, скорость, масса.
- Поведение, которое зависит от физических характеристик конкретного объекта в данный момент времени и игрового сценария.
И это... наши любимые блок-схемы с их недостатками, которые нивелируются введением Р-схем.
Давайте посмотрим, как можно запрограммировать поведение космического корабля в скроллере: он летит по экрану сверху вниз (на самом деле, относительно экрана компьютера он неподвижен — передвигается игровой мир). Стреляет, если нажать пробел. Если столкнулся с препятствием — взрывается. При нажатии клавиш «A» или «D» перемещается по экрану влево вправо.
Собственно, всё. Те из вас, кто когда-то писал игры с помощью, скажем, Adobe Flash или Unity, знают, сколько нужно написать кода для создания вышеупомянутой логики. Спойлер для тех, кто не писал — много!
Программы для роботов
Будущее уже стало реальностью, роботы уже проникли в нашу жизнь, в промышленности они появились задолго до рождения автора. К примеру, в программе AutoCAD можно создать эскиз детали, затем передать его на станок с ЧПУ, и она будет создана без участия человека. Но давайте разберём пример более близкий к простому смертному. Предположим, у нас есть кофеварка и она варит кофе к определенному времени по будням, по праздникам в другое время, а если в календаре день отмечен как отпускной — не варит его вообще. Посмотрим, как эта программа будет выглядеть на языке Р.Как видите, всё настолько просто, что вызывает некоторое чувство пренебрежения, но это ведь и хорошо — такая программа может быть написана любой домохозяйкой.
И что же дальше?
Автор в свободное от работы время разрабатывает конструктор, позволяющий использовать язык Р для разнообразных приложений. Язык разработки Type Script 2 + React.Сделано пока немного, поскольку кушать хочется каждый день, плюс нерабочие активности: поработать побольше не получается. Поэтому к сотрудничеству приглашаются неравнодушные энтузиасты. Это пока не стартап — опенсорс-разработка, но я планирую участвовать и выиграть в конкурсе грантов. Сейчас как раз занимаюсь этим.
DOU
DOU – Найбільша спільнота розробників України. Все про IT: цікаві статті, інтервʼю, розслідування, дослідження ринку, свіжі новини та події. Спілкування на форумі з айтівцями на найгарячіші теми та технічні матеріали від експертів. Вакансії, рейтинг IT-компаній, відгуки співробітників, аналітика...
dou.ua