среда, 30 марта 2011 г.

Остановите конвейер! Я сойду!


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

Суть в том, что меня не устраивает современная парадигма программирования. В корне. Практически, без учета конкретных языков и технологий. С++, MFC, ATL, C#, WxWidgets, QT - все это и многое другое за скобками. Программирование решения бизнес-задач не удовлетворяет критериям стоимости. Оно слишком дорого. Время, ресурсы, в конечном счете – деньги… Решение задачи  слишком дорого. От формулирования идеи и формирования архитектуры решения до конкретного воплощения проходит слишком много времени.
Сколько стоит написать "Hello, World" на стандартном "промышленном" языке? Минуты 3, если поторопиться. И это без учета загрузки тяжелых и объемных сред разработки. Неоправданные потери времени.

Несколько лучше, если брать "языки сверхвысокого уровня". На Bash или Python  время измеряется в секундах. Однако, мне сложно представить полноценное бизнес-приложение на Bash. Тем более, с использованием GUI. Да, C# и подобные среды упрощают создание интерфейсов, упрощают кодирование типичных операций. Но только операций. Даже с простейшими алгоритмами дело обстоит гораздо хуже. Несомненно, что поиск в строке по регулярному выражению гораздо проще и быстрее написать на C# или Perl, ту же задачу на ассемблере. Но принципиальные отличия не так и велики. И даже наличие множества библиотек и компонентов для выполнения типичных действий не улучшает картину. Все равно, большинство упрощений стоит на уровне действий, операций, максимум  тривиальных алгоритмов. К тому же, не стоит списывать со счетов время на поиск и освоение требуемых библиотек. Серебряных пуль по-прежнему не существует.

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

Я не агитирую за голосовой ввод. Дело не в этом. Это лишь очередной инструмент вроде эргономической клавиатуры. На мой взгляд, узким местом является сам текст. Текст вообще. Текстовое представление информации это архаичный формат выражения мыслей. Сравните разговор лицом к лицу, разговор по телефону, и обмен мгновенными текстовыми сообщениями. Плотность информации скачет на порядок при каждом переходе. Скорость передачи одного и того же массива данных катастрофически падает при каждом отсеве составляющей общения. Да, можно текстом передать все (или практически все) оттенки эмоций, но сколько нужно текста для достоверного описания одной улыбки?

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

Возвращаюсь к программированию. Меня все чаще посещает мысль, хорошо выраженная братьями Стругацкими в рассказе "Испытание СКИБР":
"Нельзя тратить по два года на каждую систему. У нас с Сермусом есть кое-какие идеи. Программирование программирования".
У меня нет идей. Что это будет  "программирование программирования", новые интерфейсы "человек-машина", новые революционные языки программирования Я не знаю. Но нынешние затраты на разработку программных продуктов, на мой взгляд, превышают все допустимые границы.

Я не против хорошего кода. Это искусство. Меня восхищают программы с demo-сцены, где в 64Кб уложен код и данные для воспроизведения десятиминутного объемного ролика с музыкальным сопровождением. Это чистое искусство. И пускай оно им и остается. Я прекрасно понимаю сложность задач управления оборудованием и базовых модулей операционной системы. Это если и не искусство, то наука. На крайний случай  серьезная работа обеспечения. Она имеет место и должна существовать. Но писать руками код для построения интерфейса пользователя, выполнения выборок из БД и формирования отчета  это нонсенс. Или, по крайней мере, должно быть нонсенсом.

Шаги в этом направлении есть. Google AppInventor предлагает собирать программы как паззлы, соединяя фрагменты, прикрепляя (в прямом смысле) обработчики событий и определяя в ручную лишь необходимые параметры. Но и это лишь некий Proof Of Concept. Слишком малы фрагменты паззла. Скорость разработки не возрастает, а, скорее, падает из-за большого количества лишних движений мышкой.

Нужна другая парадигма. Эта уже заканчивается.

Комментариев нет:

Отправить комментарий