thedeemon: (Default)
[personal profile] thedeemon
В будущем программирования не будет.

Знаете, 200 лет назад была такая профессия - фонарщик: надо было ходить по вечерам зажигать уличные фонари, а утром их тушить. И сайт ХэдъХантырь.ру пестрел объявлениями "Компании Люксофтъ требуются junior и senior фонарщики, умеющие обращаться с керосином и газом, наличие своей лестницы приветствуется, карьерный рост и соцпакет гарантируется". Фонарей становилось все больше, рынок рос, спрос на фонарщиков тоже. Но потом их работа была автоматизирована, фонарщиков не стало. Хотя это не значит, что ИТ-индустрия ("иллюминацонных технологий") пропала, она просто преобразилась, с тех пор выросши на порядки.

Как работает любая программа? У нее есть некий набор событий, которые она умеет воспринимать (действия пользователя, запросы от системы или других программ, в том числе по сети) и в ответ на эти события она что-то меняет в мире (что-то становится нарисовано на экране, что-то послано по сети в ответ, что-то записано на диске). Если у нас будет язык, на котором можно формально описать:
а) входные данные и состояние системы, причем не только их формат, но и свойства и взаимосвязи,
б) результат - желаемое состояние системы, и
в) нефункциональные требования (например, приоритет скорости над потреблением памяти или наоборот),
то все остальное компьютер сможет делать сам - найти оптимальный способ трансформации состояния из исходного в нужное, т.е. сам построить алгоритм, программу - то, что сегодня делают программисты. Для этого нужно лишь иметь набор примитивных функций, для которых так же подробно описаны их входы и выходы, и подобно тому, как сегодня работает вывод типов в ряде языков, сделать вывод свойств - оценку сложности и потребления памяти и других ресурсов. Фактически, задача построения алгоритма сведется к поиску оптимального пути в графе, где вершины - состояния, дуги - функции, а веса дуг - характеристики функций, вроде потребления определенных ресурсов. Сегодня задача поиска пути из Массачусетса в Аризону через сотни тысяч дорог, дорожек и населенных пунктов решается за долю секунды. В графе с намного более типизированными вершинами это можно делать еще быстрее.

Между прочим, рабочий прототип такой системы есть уже сегодня у каждого пользователя Windows - это движок DirectShow, используемый медиаплеерами и некоторыми другими приложениями. DirectShow оперирует графами, где потоки типизированных данных перемещаются между черными ящиками, преобразующими из из одного типа в другой. Например, мы хотим вывести на экран видео из некоего файла. Берем читалку файлов (фильтр File source) и видеоокошко (фильтр Video Renderer):

и просим движок DirectShow их соединить. Окошко не знакомо с форматами файлов и способами сжатия видео, оно умеет принимать на вход данные нескольких видов несжатых картинок. Читалка файлов тоже ничего не знает про форматы и сжатие, она просто читает файлы. Что делает движок DirectShow? У него есть база фильтров, про которые известно, какие форматы они умеют принимать на вход и выдавать на выход. Фактически, это функции. Например, декодер XviD есть функция из MPEG4 в Uncompressed_Video. Нередко выходной тип данных зависит от значений, полученных на входе, например AVI Splitter на входе имеет AVI файл, а на выходе в зависимости от содержимого файла может быть MPEG4, MJPEG, Huffyuv и еще сотни форматов. Зависимые типы, ага. И вот, пользуясь этой базой, а также при необходимости инстанцируя и "примеряя" некоторые фильтры, движок ищет последовательность фильтров, которая бы имела нужный вход и нужный выход, т.е. композицию функций нужного типа. По сути это задача поиска пути в графе, где типы данных - вершины, а фильтры-функции - дуги. Найдя путь, движок вставляет нужные фильтры и соединяет их в цепочку:

Фактически, компьютер только что придумал алгоритм: что делать, чтобы вывести видео из данного файла, какие операции над данными и в какой последовательности предпринимать. В данном случае искомая функция типа File -> Uncompressed_Video получается композицией функций FLV Splitter типа File -> Video_FLV1 и ffdshow decoder типа Video_FLV1 -> Uncompressed_Video. На картинке граф другого вида: в конкретных графах DirectShow наоборот вершины - фильтры, а дуги - данные, но это представление изоморфно вышеописанному.

Ту же схему можно применить и для построения произвольных программ, просто типы должны более детально описывать данные и состояния, а библиотека фильтров-функций должна быть достаточно хорошей. Скорее всего, примитивных функций нужно не так уж много, базового набора из Кнута/Кормена/Окасаки/whatever должно хватить для большинства задач. Понятно, что в большинстве случаев подходящих путей в таком графе будет очень много (proof irrelevance). В DirectShow в случае множественности возможных путей выбор происходит на основе приоритетов фильтров, заданных при их добавлении в базу. Это плохое решение, регулярно приводящее к проблемам. Но если для каждой функции будет автоматически выведена информация о ее характеристиках (сложность, требования к ресурсам, зависимости...), то можно будет задавать разные требования к программе и будут выбираться разные пути в графе.

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

Date: 2011-04-21 07:44 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Ага, тоже годный пример.

Date: 2011-04-20 12:05 pm (UTC)
From: [identity profile] geekyfox.livejournal.com
Т.е. работа разработчика ПО сведется к составлению правильной спецификации

в идеальном мире - да

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

Date: 2011-04-20 12:11 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Сейчас чтобы вставить фитюлечку мы правим код и надеемся, что ничего не сломали (и проверяем это тестами, когда они есть). В будущем мы будем просто править спецификацию и компилировать ее. Если где-то требования будут противоречивы, она не скомпилируется.

(no subject)

From: [identity profile] geekyfox.livejournal.com - Date: 2011-04-20 12:29 pm (UTC) - Expand

(no subject)

From: [personal profile] wizzard - Date: 2011-04-20 01:02 pm (UTC) - Expand

(no subject)

From: [identity profile] geekyfox.livejournal.com - Date: 2011-04-20 01:14 pm (UTC) - Expand

(no subject)

From: [personal profile] wizzard - Date: 2011-04-20 01:21 pm (UTC) - Expand

(no subject)

From: [identity profile] geekyfox.livejournal.com - Date: 2011-04-20 01:48 pm (UTC) - Expand

(no subject)

From: [personal profile] wizzard - Date: 2011-04-20 01:51 pm (UTC) - Expand

(no subject)

From: [identity profile] geekyfox.livejournal.com - Date: 2011-04-20 08:03 pm (UTC) - Expand

(no subject)

From: [personal profile] wizzard - Date: 2011-04-20 09:19 pm (UTC) - Expand

(no subject)

From: [identity profile] geekyfox.livejournal.com - Date: 2011-04-20 09:23 pm (UTC) - Expand

(no subject)

From: [personal profile] wizzard - Date: 2011-04-20 01:22 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_winnie/ - Date: 2011-04-20 07:37 pm (UTC) - Expand

(no subject)

From: [identity profile] geekyfox.livejournal.com - Date: 2011-04-20 08:00 pm (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2011-04-20 06:02 pm (UTC) - Expand

(no subject)

From: [identity profile] geekyfox.livejournal.com - Date: 2011-04-20 06:39 pm (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2011-04-21 04:25 am (UTC) - Expand

(no subject)

From: [identity profile] geekyfox.livejournal.com - Date: 2011-04-21 05:07 am (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2011-04-21 05:58 am (UTC) - Expand

(no subject)

From: [personal profile] wizzard - Date: 2011-04-20 12:51 pm (UTC) - Expand

(no subject)

From: [identity profile] grundik.livejournal.com - Date: 2011-04-20 02:08 pm (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2011-04-20 06:03 pm (UTC) - Expand

(no subject)

From: [personal profile] alll - Date: 2011-04-20 09:45 pm (UTC) - Expand

(no subject)

From: [identity profile] ilya-portnov.livejournal.com - Date: 2011-04-21 06:35 am (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2011-04-21 07:24 am (UTC) - Expand

Date: 2011-04-20 12:15 pm (UTC)
From: [identity profile] macrop.livejournal.com
http://video.yandex.ru/users/alexey-v-zubkov/collection/3/

он что-то похожее хотел.. о будушем...

Date: 2011-04-20 12:21 pm (UTC)
From: [identity profile] macrop.livejournal.com
тут даже отрезок нужный
http://video.yandex.ru/users/ya-events/view/126/

Date: 2011-04-20 12:22 pm (UTC)
From: [identity profile] mr-aleph.livejournal.com
инженеры и архитекторы как в древней греции были, так и сейчас не сидят без работы.

Date: 2011-04-20 05:45 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Многое в их работе уже автоматизировано (недавно еще всякий сопромат вручную считали), будет еще больше.

Date: 2011-04-20 12:28 pm (UTC)
wizzard: (Default)
From: [personal profile] wizzard
Ага. Мы работаем над этим.

Date: 2011-04-20 12:44 pm (UTC)
From: [identity profile] volodymir-k.livejournal.com
1. Предположим, что у нас (и компилятора) пока нету алгоритма сортировки. Задам спеку, что мол вот есть входные данные, хочу отсортированные. Как машина придумает алгоритм сортировки?


2. Этой идее лет 30, очередное обострение она получила в начале 90-х, т.н.языки спецификаций.
http://en.wikipedia.org/wiki/Specification_language
http://en.wikipedia.org/wiki/Specification_and_Design_Language
http://en.wikipedia.org/wiki/Category:Specification_languages
Но как обычно, русскоязычные не подозревают, что до них жили люди, даже ещё умнее их.

Во что упёрлись в прошлый раз?
Что мир, сцуко, реально сложный, и просто так его описать пупок развязывается.
Что точный язык для описаний, сцуко, реально сложный и люди не могут на нём писать.
Что перевод описания в алгоритм чаще всего неэффективен или неоднозначен, или непонятно как делать.
Что довольно трудно проверить, что перевод "what I mean, not what I say" -- то, что юзер хотел сказать.

Гораздо дешевле и проще выявить, что люди хотят от компьютеров (по областям), написать все покрывающие эти нужды готовые программы и говорить "поставьте xyz.rpm и не парьтесь". Этих xyz.rpm надо написать несколько меньше 6 млрд.

Date: 2011-04-20 12:57 pm (UTC)
wizzard: (Default)
From: [personal profile] wizzard
Инженерия требований жила, живет и здравствует.

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

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

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

Рекомендую поговорить с Мэтью Вестом и Ианом Александром про это.

Date: 2011-04-20 06:06 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Это были плохие, негодные языки спецификаций. Будет лучше.

Date: 2011-04-20 06:09 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Про сортировку вопрос правильный. У меня ответа пока нет.

Date: 2011-04-20 08:44 pm (UTC)
From: [identity profile] thesz.livejournal.com
>1. Предположим, что у нас (и компилятора) пока нету алгоритма сортировки. Задам спеку, что мол вот есть входные данные, хочу отсортированные. Как машина придумает алгоритм сортировки?

Количество движений после спецификации минимально.

Целая статья про разработку спецификации сортировки и её реализации.

Там Эпиграм, но всё же.

Date: 2011-04-20 12:49 pm (UTC)
From: [identity profile] crimcat.livejournal.com
Думаю, что где-то глубоко внутри, за ширмой, фонарщики таки останутся.

Date: 2011-04-20 12:57 pm (UTC)
From: [identity profile] volodymir-k.livejournal.com
Не, фонарщики зададут компилятору спеку на самого себя и он сам себя раскрутит. Придумает, как именно надо придумывать алгоритмы.

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2011-04-20 05:48 pm (UTC) - Expand

Date: 2011-04-20 01:03 pm (UTC)
From: [identity profile] fas-tm.livejournal.com
А кто будет делать "черные ящики" ?
Мир меняется. Создавать/править эти "software atom's" под реалии мира и задачи надо будет как и прежде.
Ты описал правильные вещи, но это не более чем еще один уровень абстракции. А он как известно, не отменяет того что работает внутри.

Date: 2011-04-20 05:53 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Если они будут достаточно атомными, то много их не потребуется. Как в таблице Менделеева - сотня элементов дает все сколько-нибудь устойчивые вещества.

(no subject)

From: [identity profile] thinker8086.livejournal.com - Date: 2012-06-19 01:07 pm (UTC) - Expand

Date: 2011-04-20 01:12 pm (UTC)
From: [identity profile] justy-tylor.livejournal.com
Поведение DirectShow - обычная система типов, гораздо более простая, чем в C++ или Haskell. Когда слева YUV, а справа хочется RGB, то подбор implicit конвертера не сложен.

Далее вопрос в онтологических dependent types и принципиальной описуемости семантики/прагматики данных.

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

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

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

Date: 2011-04-20 05:58 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
>Поведение DirectShow - обычная система типов, гораздо более простая, чем в C++ или Haskell. Когда слева YUV, а справа хочется RGB, то подбор implicit конвертера не сложен.

Там уже сейчас цепочки автоматически строятся из N элементов, не из одного преобразования.

Про остальное согласен, что пока все сложно, неочевидно и непонятно. Когда действия проще спецификаций это знак того, что язык спецификаций слишком плохой и/или не задействован автоматический вывод типов/цепочек/доказательств.

Date: 2011-04-20 03:04 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Первый раз я эту песню услышал в 1975-м году. "Скоро будет."

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

Врачи, адвокаты, учителя, программисты...

Date: 2011-04-20 05:51 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Сегодня с выводимыми(?) классами типов хаскеля и зависимыми типами агды мы уже намного ближе к цели, чем в 75-м. Осталось еще немного, лет 150. :)

Date: 2011-04-20 07:08 pm (UTC)
From: [identity profile] b00ter.livejournal.com
Один мой знакомый сказал про UML "Люди лишком быстро осознали, что если рисовать неправильные схемки -- будут получатся неправильные программы".

Date: 2011-04-21 05:24 am (UTC)
From: [identity profile] kurilka.livejournal.com
Программистский трансгуманизм прям...

Date: 2011-04-21 09:29 am (UTC)
From: [identity profile] usovalx.livejournal.com
Вот эти самые товарищи, которые будут формализовать спецификации и будут программистами. Потому как перевести типичное "хочу чтобы всё было за$%^сь, а вот тут ещё хочу зелёную рюшечку" в спецификацию это весьма непростая задача. Ну а если ещё учесть "сложность, требования к ресурсам, зависимости", то от нынешней ситуация будет отличаться не настолько уж и сильно.

И, кстати, хороший вопрос будет ли достаточно формализованное описание требований проще чем влоб наваять то что нужно.

Date: 2011-04-21 09:45 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Именно так.

Date: 2011-04-21 11:33 am (UTC)
From: [identity profile] zamotivator.livejournal.com
Что читать, чтобы научиться программировать сейчас, более-менее понятно.
А что нужно читать, чтобы программировать в этом будущем? Какая портфель знаний нужен?
(я прочитал все комментарии)
Edited Date: 2011-04-21 11:33 am (UTC)

Date: 2011-04-21 11:38 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Эти книги еще не написаны. :)

(no subject)

From: [identity profile] zamotivator.livejournal.com - Date: 2011-04-21 11:44 am (UTC) - Expand

(no subject)

From: [identity profile] thedeemon.livejournal.com - Date: 2011-04-21 12:04 pm (UTC) - Expand

Date: 2011-04-21 07:22 pm (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/
Бизнес/игро-логика занимает всегда одинакого места, на Java она написана или на Python-Ruby-Perl-J. Какая-то лапша "если выстрелили огненным заклинанием" "если это молочный продукт". Всякие .each, лямдды, sort хорошо сокращают код, но он доходит уже до какого-то предела, что языковые возможности уже больше не сокращают спецификацию про огненные заклинания и про молоко.

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

Такую спецификацию уже больше ничем не сократишь. А алгоритмы в таком коде уже все есть готовые в библиотеке (отсортировать, сгруппировать, выбрать максимум, ...).

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

Сможет ли такой автовывод алгоритма придумать алгоритм Ахо-Корасик или суффиксное дерево просто исходя из спецификации "нужно быстро находить строки"?

Date: 2011-04-22 04:41 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Да, спецификация необязательно будет короче кода. С нынешними языками она даже часто длиннее. Но есть надежда, что как сейчас напридумывали много хороших абстракций, сокращающих код, так придумают и хороших абстракций для сокращения описания типов/спеков.

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

(no subject)

From: [identity profile] permea-kra.livejournal.com - Date: 2011-04-30 07:45 am (UTC) - Expand

Profile

thedeemon: (Default)
Dmitry Popov

December 2025

S M T W T F S
 12 3456
789101112 13
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 28th, 2026 10:54 pm
Powered by Dreamwidth Studios