Русский
Русский
English
Статистика
Реклама

Rapid application development

Свой сервис отложенного постинга и почти без кода

18.12.2020 10:08:54 | Автор: admin

Если вы владеете Telegram-каналом (или несколькими), раскрученным аккаунтом в Instagram или любой другой социальной сети, то уже наверняка задавались вопросом: А как мне планировать посты заранее? Существует очень много разных сервисов, которые решают эту задачу. Но по тем или иным причинам они могут не подходить: где-то цена большая, где-то функционал беден, а где-то вообще страшно оставлять логин-пароль от своего раскрученного аккаунта. Сегодня я расскажу и покажу как на основе нашей платформы для разработки бизнес приложений с открытым кодом Orienteer сделать свой собственный сервис буквально за 60 минут! Заинтересовал? Проваливаемся под кат.



Для простоты мы сделаем отложенный постинг в Telegram, но полученные навыки помогут вам расширить функционал и на другие социальные сети, а так же адаптировать планирование и публикацию именно под себя, например, добавить возможность поста одного и того же сообщения в разные каналы, или удалять посты после какого-то времени и т.д. Если будут вопросы: обращайтесь в личку!

Шаг 1: Запускаем Orienteer



Нам понадобится docker, а еще лучше вместе с docker-compose. Можно его использовать как на локальном компьютере, так и на любом доступном хостинге, включая AWS или DigitalOcean. Если не знакомы с docker, то крайне рекомендую потратить 3-5 часов своей жизни и изучить основы. Хабр, medium или даже первоисточник вам в помощь.

Запускаем сам Orienteer, например вот так:
docker run -p 8080:8080 orienteer/orienteer

Но чтобы не потерять базу данных при обновлении контейнера и обезопасить от проникновения под стандартными паролями можно усложнить запуск следующим образом:
docker run -p 8080:8080 -v <runtime>:/app/runtime -e ORIENTDB_ADMIN_PASSWORD=<password> -e ORIENTDB_GUEST_PASSWORD=<password> orienteer/orienteer

Если же вы любите docker-compose, то вот вам шаблон для старта:

version: '2.1'services:   orienteer:      image: orienteer/orienteer:latest      container_name: my_posting_service      network_mode: 'bridge'      ports:          - "8080:8080"      volumes:          - ./runtime:/app/runtime          - ./maven-repository:/app/repository      environment:          - ORIENTDB_ADMIN_PASSWORD=<Admin Password>          - ORIENTDB_GUEST_PASSWORD=<Guest Password>          - JAVA_TOOL_OPTIONS= -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/app/runtime/heapdump.bin

Если вы всё сделали правильно, то при открытии localhost:8080 вы должны увидеть что-то вроде снимка ниже. Да, по умолчанию вы попадаете в Orienteer как пользователь `reader`, который умеет всё читать, но не изменять. Права у reader'а можно позже отнять, чтобы backend могли видеть только пользователи, вошедшие в систему.



Кликаем на правый верхний угол и входим в систему как `admin` (по умолчанию пароль тоже `admin`).



Шаг 2: Подключаем необходимые модули и зависимости



Для того чтобы превратить Orienteer в сервис по отложенному постингу нам понадобится:

  • java-telegram-bot-api простая java библиотека для работы с Telegram
  • orienteer-architect модуль для проектирования предметной области
  • orienteer-devutils модуль для удобного отлаживания скриптов

После разработки, последние 2 модуля, кстати, можно будет отключить.
Идем на страницу Schema, затем на вкладку Artifacts. Нажимаем Add. Для добавления библиотеки java-telegram-bot-api вводим все так же, как если бы подключали обычную Java библиотеку:

<dependency>   <groupId>com.github.pengrad</groupId>   <artifactId>java-telegram-bot-api</artifactId>   <version>5.0.0</version></dependency>


Должно получиться вот так:



А чтобы добавить 2 последних модуля, нажимаем вновь Add, а затем на кнопку Available Orienteer Modules. После загрузки списка выбираем нужный модуль и нажимаем Install as Trusted. После добавления всех нужных зависимостей жмем оранжевую кнопку Reload Orienteer. После перезагрузки можем двигаться дальше.



Шаг 3: Моделируем нашу предметную область


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

  • Контент (или пост) то что мы собираемся послать в нужный канал в определенное время
  • Канал то куда мы собираемся послать наш контент
  • Бот сущность, осуществляющая посылку контента


Прошу обратить внимание, что в этой предметной области нет специфики Telegram. Под каналом может подразумеваться аккаунт Instagram или Вконтакте. Вся специфика будет скрываться под Ботом, сущностью осущесвляющей саму посылку: а именно, в скриптах, которые мы проассоциируем с сущностью Бот.

Для моделирования предметной области рекомендую использовать модуль orienteer-architect. Идем в ODataModel по кнопке Browse, нажимаем Create, вписываем `Scheduler Data Model` в поле Name и нажимаем Save. А дальше чистое творчество! Но думаю, в конце у вас должно получиться что-то вроде данной картинки:



Рекомендую после сохранения и применения вашей предметной области (кнопки Save Data Model и Apply Changes) пройтись по созданным классам и их полям и доконфигурировать для большего комфорта такие вещи, как:

  • Поле определяющее имя документа (Document Name Property)
  • Поле определяющее ссылку на документ более высокого уровня (Parent Document Property) влияет на строчку навигации
  • Тип визуализации (Visualization) как именно отображать значения


Шаг 4: Оживляем наш сервис скриптами



Нам понадобится всего 2 скрипта.

  1. Scheduler скрипт, который по запуску каждую минуту будет искать следующую порцию сообщений на отправку, находить по ссылке конкретный скрипт по отправке сообщения и вызывать его, передавая сообщение, которое надо отправить, как аргумент
  2. SendToTelegram скрипт, который получает сообщение как аргумент и, используя Telegram API, отправляет его в нужный канал или чат


Скрипты в Orienteer (и OrientDb) это объекты класса OFunction. Соответственно, вам надо будет создать объект данного класса с нужным именем, кодом и языком, на котором последний написан. Я рекомендую указывать nashorn это Java реализация языка JavaScript.
Не буду сильно томить объяснениями: Лучше один раз увидеть код, чем 100 раз его обсудить.

Scheduler


var db = orient.getDatabase(); //Получаем базу данных OrientDBvar resultSet = db.query("select from SContent where published!=true and when < sysdate()"); //Запрашиваем все сообщения, которые еще не опубликованы, но ожидаемая дата публикации уже в прошломfor(var i in resultSet) { //Итерируемся по результатам   var content = resultSet[i]; //Очередное сообщение на отправку   var sendFunction = content.field("channel.bot.sendFunction.name"); //Через цепочку ссылок получаем имя скрипта, который ответстеннен за отправку   if(sendFunction) {      db.getMetadata().getFunctionLibrary().getFunction(sendFunction).execute(content); //Вызываем функцию по имени и передаем наше сообщение на отправку как аргумент      content.field("published", true); //Помечаем наше сообщение как отправленное      content.save(); //Сохраняем   }}

Как видно, скрипт очень простой, и в нем нет никакой специфики Telegram: все скрыто в скрипте, который мы указываем при конфигурации бота.

SendToTelegram



Помните, мы раньше подключили библиотеку java-telegram-bot-api? Теперь самое время её задействовать для посылки сообщения в Telegram!

var content = orient.getDatabase().load(content); //На случай, если в качестве аргумента пришла ссылка, а не сам объект, подгружаем объект из базыvar channel = content.field("channel"); //Получаем наш канал (или чат), куда будем отправлять сообщениеvar botDoc = channel.field("bot");//Получаем документ с конфигурацией бота. Именно с этого документа ранее мы считали "sendFunction" - скрипт по отсылке сообщенияvar botKey = "Bot"+botDoc.getIdentity(); //Генерируем уникальный ключ для сохранения в окружении TelegramBotvar app = org.orienteer.core.OrienteerWebApplication.lookupApplication(); //Находим Orienteer Web Application как Java объектvar bot = app.getMetaData(botKey); //Пытаемся получить бота по ключуif(!bot) { //Если бот не найдет - инициализируем егоbot = new com.pengrad.telegrambot.TelegramBot(botDoc.field("token")); //Создаем объект TelegramBot и передаем ему token нужный для работыapp.setMetaData(botKey, bot); //Сохраняем бота под Orienteer Web Application, чтобы следующий раз не создавать его заново}bot.execute(new com.pengrad.telegrambot.request.SendMessage(channel.field("chatId"), content.field("content"))); //Отсылаем сообщение, передавая в API само сообщение и chatId


Но как же нам вызывать скрипт Scheduler каждую минуту? Для этого в Orienteer (и OrientDB) используются объекты класса OSchedule. Создаем объект данного класса, указываем произвольное имя, выбираем наш скрипт Scheduler в поле Function, а затем указываем следующее значние в поле Rule: `0 * * * * ?`. Данная запись означает вызов скрипта в нулевую секунду каждой минуты, каждого часа и т.д.

Шаг 5: Тестируем наше творение



А теперь самое интересное! Приступаем к тестам.

Создаем бота



Нам надо создать самого бота в Telegram, а затем сконфигурировать объект бота с его конфигурацией в Orienteer.
Как создать бота в Telegram и получить token для него можно почитать здесь. Если коротко:

  1. Связываемся с BotFather
  2. Посылаем команду /newbot
  3. Указываем отображаемое имя для бота
  4. Указываем имя пользователя для бота

Как результат мы получаем token. Рекомендую добавить созданного бота к себе в список контактов, так как нам надо будет добавить его в нужные каналы и группы.

Далее идем в наш Orienteer и создаем документ класса SBot, который мы смоделировали прежде в шаге 3. Указываем имя, ссылку на наш скрипт SendToTelegram и непосредственно token, который мы получили из общения с BotFather прежде.



Создаем канал



Я предполагаю, что в Telegram у вас уже создан канал или чат. Если нет, то уверен, что вы с легкостью справитесь с этим. Для того чтобы правильно сконфигурировать канал в Orienteer, нам понадобится так называемый chatId. Проще всего это сделать с помощью бота GetIDs Bot. Если вы настраиваете своего бота для канала, то просто перешлите ему любое сообщение из канала. А если для группы, то добавьте данного бота в группу и первым сообщением он вам выдаст ChatId, затем его можно из группы удалить.




Если вы всё сделали правильно, то у вас есть ChatId, и всё, что осталось сделать, это пойти в Orienteer, создать объект из нашей предметной области SChannel, указать имя и данный ChatId. Ну и не забываем добавить Telegram бота в канал или чат, а так же указать ссылку на бота в Orienteer, который мы уже сконфигурировали.

Создаем сообщения


А теперь момент истины: создаём сообщения и тестируем их появление в канале или группе. Для сообщений мы уже создали класс SContent. В объекте этого класса указываем название (не публикуется в Telegram), ссылку на желаемый канал или чат, время публикации, ну и, собстенно, само сообщение.



Если все сделали правильно, то в обозначенное время сообщение будет послано.



Ура! Нашим сервисом можно пользоваться!

На этом на сегодня всё!
Если вам нравятся наши статьи, то дайте, пожалуйста, нам знать об этом плюсом или комментарием.

P.S. Если что-то не получилось по данной инструкции или же хотите воспользоваться уже сконфигуренным Orienteer'ом, то пишите нам: либо здесь, либо в Telegram.
P.P.S. Нам в проект Orienteer нужны люди! Даже если вы только учитесь и еще толком не погрузились в Java или JavaScript, но хотели бы поучавствовать то ничего страшного пишите! А мы научим!
Подробнее..

Low-code с точки зрения разработчиков есть ли плюсы для инженеров?

13.04.2021 16:13:10 | Автор: admin

В прошлой статье о low-code в enterprise-решениях я обращался к бизнесу. Однако на Хабре бльшая часть пользователей инженеры (Кэп!), и в комментариях к статье я увидел резонное количество типичных возражений по LCDP (low-code development platforms). И пока те, кто не знает про Эффект Даннинга Крююгера, уже ищут кнопку dislike, давайте разберем наиболее частые заблуждения и мысли.

В этой статье я хочу разобрать наиболее частые заблуждения.

  1. Low-code это использование готовых продуктов.

  2. Под low-code понимают развитые code-first платформы. Кто-то из коллег приводил в пример даже WordPress.

  3. В low-code отсутствует нормальный DevOps (code review, versioning, deploy, etc.), нормальное переиспользование кода и прочие абстракции.

  4. Разработчикам лучше писать код с готовой ценностью, а не разрабатывать конструкторы.

  5. Low-code можно не понимать, это какой-то артефакт. Мы продолжим кодить как обычно. Впрочем, некоторые разработчики и про DevOps до сих пор не всё понимают и думают, что это должность. Так что с low-code ситуация не уникальна.

Кратко о состоянии отрасли

Потребность в разработке растёт. Дефицит специалистов в отрасли сейчас легко отследить на примере роста окладов: он опережает рост производительности труда в IT-сфере.

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

Расходы на разработку увеличиваются, и одновременно возникает конфликт интересов: бизнесу нужно меняться быстрее, а разработчики хотят интересных задач. Но бльшая часть изменений у бизнеса неинтересная.

На подобные вызовы IT-отрасль всегда отвечала повышением уровня абстракции и упрощением разработки. Эпоху ассемблера сменила эпоха C++, затем наступила эпоха высокоуровневых языков с полным отсутствием управления памятью и ресурсами и далее количество фреймворков и библиотек только увеличивалось.

Нет никаких предпосылок к изменению этого тренда. Давайте порассуждаем, сможет ли low-code продолжить его.

Low-code это не философия?

В Рунете каждая статья о low-code заканчивается комментариями о несовершенстве конкретного продукта (продуктов). Отдельно о продуктах поговорим чуть ниже, а для начала предлагаю подумать о концепции low-code в целом.

Философия code-first

Разработчики поставляют заказчику конечную ценность. Вёрстка элементов, новые поля в сущностях, логика расчёта и потоки интеграции всё это реализуется через программный код. Да, у него бывают какие-то настройки, которые иногда позволяют вносить изменения без привлечения разработчиков. Но на большую часть change requests всё-таки отвечают разработчики.

При этом у разработчиков неизбежно возникают два желания.

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

  2. Если нас и просят об операционных изменениях, пусть делают это более конкретно. На коммуникацию должно уходить меньше времени. И хотелось бы, чтобы разбираться в собственном коде, который, возможно, полгода никто не трогал, было проще.

В code-first реализовать эти желания не получается.

Философия low-code

Представьте, что вы поставляете клиенту не непосредственно конечную ценность, а конструктор для реализации этой ценности. Нет, конечно, первичный функционал в вашем конструкторе придётся реализовать вам для целей отладки. Но при этом вы сможете создавать такие вызовы, функции и компоненты, которые...

  • Являются самодокументируемыми в подавляющем большинстве случаев.

  • В каждом компоненте есть настройки, которые делают его переиспользуемым.

Здесь важно отметить, что в code-first платформах тоже много настроек, и они даже разнесены по компонентам. Однако на практике их применение не позволяет снять с разработчика большую часть операционной работы.

  • Из этого и других компонентов можно собирать принципиально новую ценность для бизнеса. Технически это всё те же интерфейсы, компоненты бизнес-процессов и интеграции, но для бизнеса это принципиально разный функционал.

  • Если требуется какая-то очень эксклюзивная логика (один из компонентов отсутствует) и эта логика явно не будет переиспользуемой, вы сможете вставить нужный компонент, написав небольшой кусочек кода. В отличие от code-first систем, здесь не нужно писать весь модуль или микросервис вы вставите код в нужный фрагмент без сервисной обвязки (сахара). Часто такой код легко читается не только разработчиком, но и опытным менеджером или бизнес-аналитиком и состоит из 220 строк.

Сталкиваясь с новым требованием, вы или собираете новый функционал в уже созданном конструкторе, или дописываете в нём активити и компоненты, если они отсутствуют.

Если посмотреть на low-code разработку глазами code-first разработчика, то меняется в первую очередь уровень абстракции компонентов. Кроме привычных сервисов, библиотек, конструкторов, есть ещё один, более высокий уровень абстракции абстракция бизнес-логики.

Это справедливо и при использовании готовых LCDP, и при разработке в парадигме low-code.

Low-code путают с развитыми code-first платформами

В дискуссиях я раз за разом сталкиваюсь с тем, что под low-code понимаются просто очень гибкие системы. Например, Битрикс потому что в нём же есть бизнес-процессы и моделирование таблиц или WordPress.

LCDP это такая платформа, в которой всё сделано на базе конструктора, ведь если это не так, рано или поздно поддержание такой платформы перейдёт в code-first.

Я бы обозначил следующие критерии LCDP.

  1. Ядро системы содержит только элементы конструктора и всё, что к нему относится, т. е. вам не придётся применять code-first подход для реализации того, для чего предназначена LCDP.

  2. В графическом редакторе можно вставить код там, где он нужен. А в некоторых платформах можно и слегка переопределить код текущего компонента.

Приведу излюбленные нами примеры.

  • ETL / ESB Talend low-code механизмы для построения интеграций.

  • Mendix, Pega, Appian, OutSystems, Caspio как платформы для создания приложений разного класса.

  • Reify, Builder.io, Bildr для фронта.

  • Из новичков 2021 года Corteza (полностью open-source, Go + Vue.js), Amazon Honeycode.

  • Для игроманов давно ли вы смотрели на Unity и продукты на его основе? Видели ли Construct?

  • Российские ELMA BPM, Creatio (разработка Террасофт) и Comindware, универсальная CUBA Platform, Jmix.

  • Продукты особо крупных вендоров Microsoft Power Apps, Oracle APEX, Salesforce Platform, IBM BAS, SAP BTP.

  • Частично open-source Builder.io (фронт), Bonita, Joget.

Есть и пограничные случаи. Например, Pimcore, которая в части фронта, workflow, моделирования инфомоделей с калькулируемыми полями является по своей сути low-code (с некоторыми оговорками, но это не тема данной статьи). Если же пытаться делать что-то за рамками этого, вы свалитесь в традиционное поддержание монолита.

Или тот же Битрикс. В нём удобно моделировать данные и строить бизнес-процессы, в которые при желании упаковывается PHP-код в low-code стиле (т. е. без длинных инициализаций). Однако огромный объём коробочного функционала, созданного не в LCDP-стиле, и отсутствие развитых инструментов low-code в других частях приводят к традиционному code-first.

Короче, если вы слышите, что мы пробовали low-code платформу и у нас ничего не получилось, советую разобраться в деталях. Может быть:

  • это была не LCDP;

  • это была действительно плохая LCDP (такого сколько угодно);

  • команда пыталась писать в LCDP больше кода, чем нужно. Вместо переиспользуемости один кастомный компонент, куда вставляется огромная портянка кода, мы встречали такое!

Low-code не содержит традиционных средств контроля, привычных разработчику (code review, deploy)

Это миф. Вы найдёте эти компоненты в подавляющем большинстве платформ. Многие (Mendix, Pega) имеют собственные CI с элементами low-code.

Хотя, безусловно, проводить ревью не всегда просто. Если с кодом компонентов всё понятно там всё так же, как и в традиционном code-first, то по поводу того, что можно сделать в конструкторе

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

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

Разработчикам лучше писать код с готовой ценностью, а не разрабатывать конструкторы

Разработчики обычно брезгливо относятся к самой идее того, что могут что-то накликать мышкой. Между тем подавляющее большинство задач разработчика не rocket science, а рутина. Та самая, которой заниматься неинтересно и от которой хочется побыстрее избавиться.

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

Как ситуация поменяется в рамках LCDP? Скучные задачи никуда не денутся и будут возникать с той же частотой, но, вместо того чтобы тратить на них уйму часов, вы сможете закрывать их в разы быстрее или вообще передавать не разработчику. Зачем писать ещё одну интеграцию между системами, когда вы быстрее сделаете её через ETL-решения? Зачем забивать спринт созданием нового экрана, если это может накликать дизайнер?

Чем быстрее вы закрываете скучные задачи, тем больше времени у вас освобождается на более интересные. Более того, вы статистически чаще будете получать интересные задачи, потому что перерыв на рутину сократится в разы.

А что с реально талантливыми разработчиками, теми, кто любую самую сложную задачу делает изящно и быстро?

Сдав задачу в виде кода и получив через полгода change request, они сталкиваются со следующим:

  • надо вспомнить, как тут что написано;

  • надо бы отрефакторить код быстро устаревает.

Но очень редкая команда подписывается под рефакторинг. И редкий бизнес-пользователь поймёт, почему минорную правку ему оценили в несколько дней.

Что в итоге? Мы хотели писать интересный код, но через какое-то время ничего интересного не пишем. Нам остаются операционка и угрызения совести за то, что тут всё уже не очень красиво.

Если же вы мыслите в плоскости LCDP, дело не ограничивается только более быстрым решением рутинных задач. Рефакторинг происходит не на уровне конечных ценностей, а на более высоком уровне абстракции на уровне реализации компонента конструктора. Как следствие, вам приходится больше думать и больше проектировать. Меньше областей остаются без вашего надзора, сделать плохо поддерживаемую задачу в LCDP намного сложнее ввиду того, что как минимум плохой нейминг или плохую логику могут обнаружить даже не разработчики. Сам подход заставляет вас больше мыслить абстракциями.

Лирическое отступление. Многие тимлиды конкретно для себя решают эту задачу так: реализацией занимаются другие члены команды, а они думают. Ни к чему хорошему это не приводит. Такие тимлиды часто начинают скучать по коду, а команда в целом становится более хрупкой. Антихрупкость таких людей обеспечивается за счёт хрупкости других членов команды, которые выступают в качестве машинисток. Этому пороку могут быть подвержены и традиционные, и low-code разработчики.

Low-code можно не понимать, это какой-то артефакт. Лучше продолжим кодить как обычно

Можно не думать о будущем разработки, если допустить, что:

  • количество задач для разработчиков будет расти не медленнее, чем количество самих разработчиков и субститутов разработки (с учётом повышающейся производительности труда);

  • бизнес сможет оплачивать растущие аппетиты разработки и не разорится при этом (т. е. ROI в IT всегда будет положительным);

  • другие типы инвестиций не будут конкурировать с инвестициями в IT.

Давайте проведём мысленный эксперимент и прикинем, насколько всё это вероятно в реальной жизни.

Количество задач для разработчиков будет расти не медленнее, чем количество самих разработчиков и субститутов разработки

Сейчас дефицит разработчиков в мире около 10%. Я не могу предсказать будущее, но могу представить, какие условия нужны, чтобы этот дефицит оставался всегда.

Первое: производительность разработчиков не должна повышаться настолько, чтобы она могла компенсировать разницу в дефиците (т. е. на 10% относительно нынешней производительности).

Второе: количество разработчиков не должно расти быстрее, чем количество задач. Дополнительное условие количество субститутов разработки не должно снижать этот дефицит.

А это противоречит фундаментальному закону спроса и предложения, ведь спрос всегда балансируется предложением до равновесного значения.

Что мы видим сейчас?

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

  • В отчётах инвестиционных банков рынок no-code решений (которые являются прямыми субститутами разработки) уже сейчас выглядит примерно так. И если вы посмотрите на этот список, то увидите, что количество продуктов растёт. Наберите в поисковике название любой компании low-code/no-code и вы поймёте, что почти все от российского Сбера до американской Apple думают о том, как существенно повысить производительность труда в разработке.

  • В конце концов, дисбаланс на рынке труда легко прослеживается на соотношении стоимости управленцев (на которых лежит бльшая ответственность и на которых завязаны мультипликаторы) и мидлов (на которых ответственности существенно меньше). Разрыв по доходам в 34 раза, и это не случайность.

При 20 миллионах разработчиков в мире одна только Индия поставляет на рынок по миллиону разработчиков ежегодно (с ежегодным увеличением этого количества), т. е. существует некоторая вероятность, что в будущем дефицит разработчиков может не сохраниться. Есть и более радикальные суждения: у Германа Грефа, например, или у футуролога Герда Леонгарда.

Бизнес сможет оплачивать растущие аппетиты разработки и не разорится при этом

Чем дороже разработка, тем больше разрыв между технологическими компаниями и всеми остальными. Те, остальные, вынуждены встраиваться в экосистемы гигантов. А экосистемы гигантов имеют очень высокую производительность труда (в силу объёмов). Это само по себе заставляет компании уходить в чужие экосистемы.

Было время, когда затраты на IT были несущественными. Но программное обеспечение становится всё более сложным и разнообразным, и стоимость ИТ-инфраструктуры является значимым фактором для стартапов и одной из основных статей бюджета. Чем дороже IT, тем больше субститутов для инвестиций.

Другие типы инвестиций не будут конкурировать с инвестициями в IT

Почему в IT сейчас много денег? Организации видят в цифровизации хорошо окупаемые инвестиции. Волна цифровизации пройдёт (все компании будут в какой-то степени диджитализированы, а прочие уйдут с рынка), нужно будет сопровождать и поддерживать применённые решения. При всё растущей стоимости IT не встанет ли вопрос о поиске иных источников заработка?

Не станет ли на каком-то этапе стоимость IT столь значимой, что будет автоматически отсекать большую часть новых ныне рентабельных проектов?

В заключение

Я рекомендую разработчикам посмотреть в сторону low-code и как минимум выполнить несколько задач на любой из таких платформ для расширения собственных границ.

Мы должны понимать область применимости, видеть срез текущих возможностей и изучать что-то новое, ведь на то мы и инженеры, чтобы смотреть на новые технологии глазами практиков. Возможно, вы не найдёте ни одной LCDP, которая решила бы ваши задачи, но как минимум исследовать этот тренд для развития инженерной эрудиции сегодня может быть полезно.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru