Застой в индустрии разработки ПО

arkashashev
Дата: 21.04.2018 12:14:47
Очевидно, что индустрия разработки ПО сейчас находится в абсолютном застое. Судите сами. Давайте для начала посмотрим в целом на IT и смежные научные и технические области. Небывалых высот достигли компьютерная графика, механизмы обработки данных - видео, аудио, основанные на последних достижениях, достигнутых на пересечении математики, методов обработки сигналов, статистики, алгоритмов искусственного интеллекта, а так же физики и инженерии, новейших методов производства высокопроизводительных микросхем и устройств. Системы машинного обучения уже успешно применяются в задачах распознавания, классификации и принятия решений, компьютеры обыгрывают людей в шахматы и го... Достижения прикладных областей можно перечислять бесконечно.

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

Но давайте посмотрим непредвзято. Одних только языков программирования, более-менее использующихся на практике - несколько десятком. Понятно, что количество библиотек и фреймворков здесь растет в геометрической прогрессии, причем многие из них делают одно и то же. Все, кому не лень, пишет новый фреймворк. А если он понастойчивее - то и новый язык изобретает. При этом никакого прогресса на самом деле не происходит, а просто перекладывают кирпичики с места на место, надеясь построить дворец и разваленных туалетов. У вас в языке блоки выделялись скобочками, а в нашем новом супер-пупер языке - будут отступами. У вас функция объявлялась ключевым словом func, а у нас будет fn - чем не прогресс? При этом все идеи, которые используются, были изобретены в прошлом веке, а теперь все это таскается из языка в язык в разных пропорциях - сюда напихаем побольше фукнциональщины, сюда напихаем параллельщины, тут ООП приправим. А в результате что? А в результате получаем еще один такой же язык, где все программирование сводится к набиванию буковок и муторном объяснении компьютеру, что и в какой последовательности ему нужно делать в текстовом виде. Весь прогресс - это разработка продвинутых блокнотов со всякими умными автодополнениями, рефакторингами, сборщиками проектов и прочими свистелками, что лишь маскирует тот факт, что на самом деле программа - это просто портянка текста, написанного на очередном хайповом текстовом языке программирования с использованием очередного модного фреймворка, предназначенного для того же, для чего стопицот других уже давно существовавших менее менее модных фреймворков. О котором через год, скорее всего, никто не вспомнит, потому что появится новый модный фреймворк. И вот эта вот имитация бурной деятельности, а по факту - барахтание на одном месте называется прогрессом???

На самом же деле сама концепция языка программирования как текстового глубоко формализованного описания набора инструкций для компьютера безнадежно устарела уже полвека назад. Системы программирования будущего должны быть основаны на декларативном подходе, когда человек объясняет компьютеру что именно он должен сделать, какую задачу решить. А думать, как ее решить - это уже задача компьютера, а не человека. Декларативном, разумеется, не в том смысле, как это понимается сейчас - человек не должен писать компьютеру тонны текста в узких рамках формальных грамматик. Человек должен объяснять задачу способоми, удобными ему, а не компьютеру. В некоторых случаях, например при описании структуры предметной области, это могут быть блок-схемы и диаграммы вроде UML. В других - это может быть текст на естественном языке, поясняющий схемы и диаграммы, или даже самостоятельно их описывающий. При этом, компьютер, если ему что-то непонятно из-за неоднозначностей естесвтенного языка, должен сам требовать необходимые пояснения. Таким образом, разработка программной системы должна вестись в режиме диалога с компьютером на человекоудобном языке. И результате такая интеллектуальная система программирования должна генерировать готовую программную систему, решающую поставленную задачу.

Если еще совсем недавно создание такой системы программирования казалось чем-то невозможным и невообразимым, то сейчас для этого есть все необходимые средства. Есть очень неплохие подходы к распознаванию естественного языка, что подтверждается постоянно улучшающимся качеством машинного перевода и голосовых помощников. Есть подходы к созданию интеллектуальных систем различного назначения. Робкие попытки к созданию такой системы, поиск подходов, уже наблюдается - например, недавняя новость о создании генератора кода GUI по скриншотам. Да чего там искусственный интеллект, тот же fUML, которому скоро уже второй десяток лет исполнится намного ближе к системе будучего, чем все новые фреймворки и языки последнего десятилетия вместе взятые. Но это, конечно, только начало, здесь нужно еще очень много совместной работы и ученых специалистов в облсти обработке естественного языка, искусственного интеллекта и практикующих инженеров и программистов. Несколько энтузиастов - совершенно недостаточно, чтобы решить задачу такого масштаба и вытащить наконец индустрию разработки ПО из застоя, в котором она оказалась. Однако, подавляющее большинство ее представителей предпочитают почему-то только еще глубже втаскивать свою область в это болото, бесконечно сочиняя устарвевшие "текстовые" языки программирования и переизобретая библиотеки с фреймворками, предназначенные для решения задач, которые уже были успешно решены десятилетия назад.

Очевидно, что с эту ситуацию нужно как-то менять, иначе, вслед за IT сферой застой, замедление развития, охватит сначал смежные области, а потом начнет распространяться и дальше. Ведь задачи, с которыми сталкивается человечество, становятся все более сложными, а значит должны совершенствоваться и методы их решения. Чего, как мы только что видели, не происходит.
Dima T
Дата: 21.04.2018 12:26:44
ИМХО пламенная речь человека, который не в теме. ИИ - тупой. Немного освоили задачи распознавания образов и назвали это ИИ. ИМХО слишком громко назвали.
Освоили это еще лет 20 назад в OCR (распознование текста), за 20 лет немного допилили, т.е. тут тоже застой.
mayton
Дата: 21.04.2018 13:14:04
Подать на вход ТЗ и на выходе получить готовое приложение?
Dimitry Sibiryakov
Дата: 21.04.2018 13:21:59
arkashashev
задачи, с которыми сталкивается человечество, становятся все более сложными

Нет, не становятся. Окружающая среда стабильна и нет предпосылок для её усложнения. Соответственно, простые решения всё так же работают наиболее эффективно.
kolobok0
Дата: 21.04.2018 13:31:40
arkashashev,

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

Увы и ах... Пока между человеком и программой пропасть от слова СОВСЕМ пропасть. Человек может ДОДУМЫВАТЬ. Программа максимум может ЭМУЛИРОВАТЬ это... всё остальное от лукавого. Программа работает чётко как ей сказано иначе это уже хаос в отдельно взятом проце(С).

Как тут уже прозвучало, говоря об ИИ необходимо помнить о периоде его обучения! Распознавание речи, поиск граф. объектов - это всё выхлоп после тонны времени и других затрат. Само оно никак от слова СОВСЕМ...

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

удачи вам
(круглый)
WebSharper
Дата: 21.04.2018 13:36:49
автор
При этом, компьютер, если ему что-то непонятно из-за неоднозначностей естесвтенного языка, должен сам требовать необходимые пояснения. Таким образом, разработка программной системы должна вестись в режиме диалога с компьютером на человекоудобном языке. И результате такая интеллектуальная система программирования должна генерировать готовую программную систему, решающую поставленную задачу.


Даже когда человек объясняет что-то человеку, чтобы однозначно понять друг друга прибегают к формальным языкам типа математики.

Естественный язык отстоен, так как предназначен для звуковой коммуниации изначально.

Он не будет использоваться в программировании, может как начальный этап (типа как мы макрос в ворде записываем, но если хотим сделать точно, нам надо русками код отредактировать). Или просто программирование нафиг уйдет из этих областей. Будем просто говорить какой отчет нжен и оно будет строить (типа как PowerBI умеет отрабатывать запросы на встроенном языке) в 10% случаев это будет давать не то, что надо, но все будут забивать рази экономии.

Текстовое представление будет оставаться, так как накоплено много тулов, но все больше и больше будет редактирования AST (см, например, https://isomorf.io - можно выбрать синтаксис по вкусу). И мы будем выбирать представление себе по вкусу - хочешь текст, а хочешь диаграмку.
arkashashev
Дата: 21.04.2018 13:37:04
Dima T
ИИ - тупой. Немного освоили задачи распознавания образов и назвали это ИИ. ИМХО слишком громко назвали.

Распознавание образов - это еще не весь ИИ. Есть еще, как я уже говорил, задачи понимания естественного языка, в решении которые так же есть определенный прогресс, и которые в данном случае могут пригодиться. Да и под образами здесь понимается гораздо более широкий спектр понятий - допустим системы автоматизированной постановки диагнозов - тоже в некотором смысле распознаватели образов. А нужно ли большее? Многие задачи, с которыми сталкиваются программисты - это типовые задачи, на которые умный ИИ и не нужен - та же система построения GUI по картинке подтверждает. Если собрать все современные достижения в этой области, то, на мой взгляд, систему интеллектуальную систему программирования вполне можно создать. Только никому это почему-то не интересно.
mayton
Подать на вход ТЗ и на выходе получить готовое приложение?

Да, в идеальном случае система должна работать именно так.
Dimitry Sibiryakov
Нет, не становятся. Окружающая среда стабильна и нет предпосылок для её усложнения. Соответственно, простые решения всё так же работают наиболее эффективно.

Только вот окружающая среда давно уже играет в жизни человека очень второстепенную роль. Человек сам создает для себя окружающую среду, которая все усложняется. Чтобы в этом убедиться, достаточно выйти на улицу и посмотреть по сторонам. Если, конечно, вы не в глухой деревне без электричества живете.
mayton
Дата: 21.04.2018 13:39:30
Я предлагаю учредить особый трибунал и судить всех кто пытается создавать ИИ.
mayton
Дата: 21.04.2018 13:44:15
arkashashev
mayton
Подать на вход ТЗ и на выходе получить готовое приложение?

Да, в идеальном случае система должна работать именно так.

А если двум экземплярам ИИ подать на вход одинаковое ТЗ - то они создатут
разные решения?
kolobok0
Дата: 21.04.2018 14:26:10
mayton
..А если двум экземплярам....разные решения?


На самом деле очень и очень хороший вопрос!!!!

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


кхм..однако...
(круглый)