arkashashev
Дата: 21.04.2018 12:14:47
Очевидно, что индустрия разработки ПО сейчас находится в абсолютном застое. Судите сами. Давайте для начала посмотрим в целом на IT и смежные научные и технические области. Небывалых высот достигли компьютерная графика, механизмы обработки данных - видео, аудио, основанные на последних достижениях, достигнутых на пересечении математики, методов обработки сигналов, статистики, алгоритмов искусственного интеллекта, а так же физики и инженерии, новейших методов производства высокопроизводительных микросхем и устройств. Системы машинного обучения уже успешно применяются в задачах распознавания, классификации и принятия решений, компьютеры обыгрывают людей в шахматы и го... Достижения прикладных областей можно перечислять бесконечно.
И на фоне всего этого индустрия разработки ПО, являющаяся одним из локомотивов всего этого удивительного прогресса, как будто застыла в своем развитии, остановилась на уровне середины прошлого века и с тех пор топчется на месте. Как же так, спросит неподумавши читатель, ведь идет же развитие - появляются новые языки и технологии, куча разнообразных библиотек и фреймворков на все случаи жизни - и сетевые, и для обработки данных, и для высокопроизводительных вычислений - выбирай какой хочешь.
Но давайте посмотрим непредвзято. Одних только языков программирования, более-менее использующихся на практике - несколько десятком. Понятно, что количество библиотек и фреймворков здесь растет в геометрической прогрессии, причем многие из них делают одно и то же. Все, кому не лень, пишет новый фреймворк. А если он понастойчивее - то и новый язык изобретает. При этом никакого прогресса на самом деле не происходит, а просто перекладывают кирпичики с места на место, надеясь построить дворец и разваленных туалетов. У вас в языке блоки выделялись скобочками, а в нашем новом супер-пупер языке - будут отступами. У вас функция объявлялась ключевым словом func, а у нас будет fn - чем не прогресс? При этом все идеи, которые используются, были изобретены в прошлом веке, а теперь все это таскается из языка в язык в разных пропорциях - сюда напихаем побольше фукнциональщины, сюда напихаем параллельщины, тут ООП приправим. А в результате что? А в результате получаем еще один такой же язык, где все программирование сводится к набиванию буковок и муторном объяснении компьютеру, что и в какой последовательности ему нужно делать в текстовом виде. Весь прогресс - это разработка продвинутых блокнотов со всякими умными автодополнениями, рефакторингами, сборщиками проектов и прочими свистелками, что лишь маскирует тот факт, что на самом деле программа - это просто портянка текста, написанного на очередном хайповом текстовом языке программирования с использованием очередного модного фреймворка, предназначенного для того же, для чего стопицот других уже давно существовавших менее менее модных фреймворков. О котором через год, скорее всего, никто не вспомнит, потому что появится новый модный фреймворк. И вот эта вот имитация бурной деятельности, а по факту - барахтание на одном месте называется прогрессом???
На самом же деле сама концепция языка программирования как текстового глубоко формализованного описания набора инструкций для компьютера безнадежно устарела уже полвека назад. Системы программирования будущего должны быть основаны на декларативном подходе, когда человек объясняет компьютеру что именно он должен сделать, какую задачу решить. А думать, как ее решить - это уже задача компьютера, а не человека. Декларативном, разумеется, не в том смысле, как это понимается сейчас - человек не должен писать компьютеру тонны текста в узких рамках формальных грамматик. Человек должен объяснять задачу способоми, удобными ему, а не компьютеру. В некоторых случаях, например при описании структуры предметной области, это могут быть блок-схемы и диаграммы вроде UML. В других - это может быть текст на естественном языке, поясняющий схемы и диаграммы, или даже самостоятельно их описывающий. При этом, компьютер, если ему что-то непонятно из-за неоднозначностей естесвтенного языка, должен сам требовать необходимые пояснения. Таким образом, разработка программной системы должна вестись в режиме диалога с компьютером на человекоудобном языке. И результате такая интеллектуальная система программирования должна генерировать готовую программную систему, решающую поставленную задачу.
Если еще совсем недавно создание такой системы программирования казалось чем-то невозможным и невообразимым, то сейчас для этого есть все необходимые средства. Есть очень неплохие подходы к распознаванию естественного языка, что подтверждается постоянно улучшающимся качеством машинного перевода и голосовых помощников. Есть подходы к созданию интеллектуальных систем различного назначения. Робкие попытки к созданию такой системы, поиск подходов, уже наблюдается - например, недавняя новость о создании генератора кода GUI по скриншотам. Да чего там искусственный интеллект, тот же fUML, которому скоро уже второй десяток лет исполнится намного ближе к системе будучего, чем все новые фреймворки и языки последнего десятилетия вместе взятые. Но это, конечно, только начало, здесь нужно еще очень много совместной работы и ученых специалистов в облсти обработке естественного языка, искусственного интеллекта и практикующих инженеров и программистов. Несколько энтузиастов - совершенно недостаточно, чтобы решить задачу такого масштаба и вытащить наконец индустрию разработки ПО из застоя, в котором она оказалась. Однако, подавляющее большинство ее представителей предпочитают почему-то только еще глубже втаскивать свою область в это болото, бесконечно сочиняя устарвевшие "текстовые" языки программирования и переизобретая библиотеки с фреймворками, предназначенные для решения задач, которые уже были успешно решены десятилетия назад.
Очевидно, что с эту ситуацию нужно как-то менять, иначе, вслед за IT сферой застой, замедление развития, охватит сначал смежные области, а потом начнет распространяться и дальше. Ведь задачи, с которыми сталкивается человечество, становятся все более сложными, а значит должны совершенствоваться и методы их решения. Чего, как мы только что видели, не происходит.