Pull to refresh

«Настоящий» Low-Code: деградация программирования, или назад в будущее?

Reading time5 min
Views20K

Intro

Невозможно ошибиться, если на вопрос о самых сложных программах - упомянуть прошивки FADEC и автопилот Бурана. Что между ними общего? Это ultra-reliable код, исполняемый в RTOS-условиях - то есть буквально апогей программирования с выверенным каждым тактом и несколькими уровнями отказоустойчивости программ. Тем удивительнее, что все программы такого уровня разрабатываются только по Low-Code методикам - и началось это задолго до текущего хайпа.

Вот он - хайп последних лет :) Источник: https://www.protocol.com/enterprise/low-code-no-code-tools
Вот он - хайп последних лет :) Источник: https://www.protocol.com/enterprise/low-code-no-code-tools

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

Retro

Давайте сразу уточним терминологию: "программировать" (programming) - это буквально декомпозировать и структурировать задачу в набор и последовательность конкретных действий. А "кодировать" (coding) - это превращать последовательности действий непосредственно в код.

На первый взгляд это может показаться пустяком, да и в русскоязычном сегменте "кодинг" вообще считается чуть ли не оскорблением, однако как раз здесь и скрыта фундаментальная разница. Источник: https://medium.com/@edwardbailey952/coding-vs-programming-for-beginners-what-is-the-distinction-64435e790207
На первый взгляд это может показаться пустяком, да и в русскоязычном сегменте "кодинг" вообще считается чуть ли не оскорблением, однако как раз здесь и скрыта фундаментальная разница. Источник: https://medium.com/@edwardbailey952/coding-vs-programming-for-beginners-what-is-the-distinction-64435e790207

Очевидно, практически не существует исключительно программирования или чистого кодинга, но суть обсуждаемой темы - именно в их процентном соотношении в различных задачах. На заре программирования, когда не существовало "библиотек" на каждый случай жизни и различного высокоуровнего инструментария (а также, что немаловажно, миллионов типовых задач а-ля "три в ряд") - основная работа программистов сводилась к глубокому анализу задач и хардкорной математике. И только после детального листинга формул начинался довольно рутинный низкоуровневый кодинг.

Однако, [с приходом интернета, мобильных приложений и цифровизации] за последние 10-15 лет всё диаметрально перевернулось - индустрия стала генерировать тысячи довольно идентичных проектов без необходимости тяжёлой математики, а соответствующее развитие высокоуровневых языков окончательно сместило акцент требуемых от SW-разработчиков навыков с программирования на кодинг. Здесь можно было бы резонно возразить, что даже ширпотребную современную программу сложно представить без навороченного фильтра, сортировки и/или FFT - но именно они в первую очередь и представлены в виде готовых кусков кода, а математически придуманы десятилетия назад.

И вот тут мы подошли к самой сути различий современных программирования и кодинга.

Разница постановки задач

Давайте для ясности картины возьмём две довольно типовые задачи с явным доминированием одного аспекта над другим.

Кодинг:
"Надо сделать онлайн банкинг с вот таким облачным бэкэндом, таком интерфейсом и с такими кнопками вызывающими такие опции. Нужен быстрый MVP и будем допиливать релизы."

Программирование:
"Есть вот такой реактивный двигатель с сотнями взаимосвязанных нелинейных переменных. По нажатию кнопки он должен автоматически поддерживать заданную скорость при любых допустимых условиях эксплуатации." (К слову - это и есть упомянутая выше прошивка FADEC).

Утрируя, современный кодинг - это когда в требуемой среде/языке реализуется конкретный функционал с любым доступным инструментарием и любым количеством костылей с возможностью последующей доработки. А чистое программирование... Ну вы поняли :)

Так и что же такое Low-Code программирование?

Задачи программирования становятся всё сложнее и требуют минимальной вероятности ошибки, а задачи кодирования таких программ становятся всё более стандартизованными. В итоге, уже как пару десятилетий назад были разработаны такие среды программирования, как SimuLink, VisSim и т.п. Именно они стали пионерами "Low-Code" философии задолго до появления устоявшегося термина.

Типовая хардкорная программа в Low-Code среде SimuLink Источник: https://stackoverflow.com/questions/21039550/overwriting-specific-variables-in-simulink
Типовая хардкорная программа в Low-Code среде SimuLink Источник: https://stackoverflow.com/questions/21039550/overwriting-specific-variables-in-simulink

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

  • Очевидно, такой подход полностью избавляет от ошибок на уровне синтаксиса и механической работоспособности кода.

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

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

Но, конечно, есть и минусы:

  • Финальный скомпилированный листинг практически нечитаем человеком при необходимости. (Эта проблема известна давно, но особенно получила развитие в свете AI и нейросетей - нам далеко не всегда понятно как вообще работает этот сумбурный код).

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

  • Опять же, такие среды программирования совершенно не способствуют изучению современных методик кодирования.

Кодинг на высоком уровне абстракций

С другой стороны, к однозначным и крайне важным плюсам подхода собственноручного высокоуровневого кодирования (особенно на языках типа JS, Py, и тп) можно отнести следующее:

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

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

Гипер-раздутая индустрия с приоритетом ручного кодинга имеет и свои негативные нюансы:

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

  • Огромное количество легаси, и весь функционал добавляется преимущественно "сверху". Низкая возможность фундаментальной переработки продукта.

Пара слов о рынке труда

Уровень зарплат - это безусловно отдельная огромная тема. Но если максимально кратко, то, как говорится в народе, "рыночек порешал": до недавнего времени даже ведущие инженеры-программисты в СНГ получали отсилы как джуны в типовом SW-кодинге - при чудовищной разнице в требуемом уровне квалификации совсем не в пользу последних.
С другой стороны, недавно выяснилось, что 60% рядовых IT-сотрудников США в лучшем случае не мешают работать остальным. (Об этом: помпезно на русском, грустно на английском, и немного сухих фактов от хабровчан).

Итого

В современном мире - программирование, очевидно, не является завершенной деятельностью без кодирования, но и кодирование является лишь малой частью огромного айсберга программирования.

На мой взгляд, развитие LowCode подходов для более широкого круга проектов позволит значительно оздоровить и перебалансировать рынок SoftWare-разработки (хотя и не без потерь), что, в конечном счёте, однозначно хорошо в средне-дальней перспективе.

Tags:
Hubs:
Total votes 21: ↑10 and ↓110
Comments36

Articles