Мой друг без знания программирования задал мне этот вопрос, и я нашел его интересным.
Я думаю, что это невозможно, потому что это потребовало бы действительно продвинутого искусственного интеллекта, способного анализировать текст проблемы, думать о решении и программировать его. Просто думать о том, что машина может программировать простой калькулятор, кажется мне довольно продвинутым.
Но, возможно, я ошибаюсь, и я хотел бы знать, что вы об этом думаете, и если вам известны какие-либо статьи / исследования по этому вопросу, или если они уже существуют, или если существует возможность выбора спецификации и получения машина для самопрограммирования на эту "спец?"
Ответы:
Джоэл на самом деле ответил на это несколько лет назад . Фактическое значение «научить машину программировать самостоятельно» - «научить машину брать спецификацию и создавать программу, соответствующую этой спецификации». И с учетом этого:
Единственный способ обойти это - создать настоящий разумный компьютер, обладающий достаточной интуицией, чтобы автоматически заполнять пробелы, которые вы и я выполняем автоматически все время при создании программного обеспечения ... в этом случае вы в конечном итоге компьютер, который программирует себя так же, как и человек-разработчик. ;)
источник
Конечно, мы делаем это все на время (для очень ограниченных подмножеств проблем). Довольно просто представить себе, что нужно сделать еще один или два шага и привязать что-то вроде Siri к входу этих генераторов кода (или что-то вроде Wolfram Alpha), который, в свою очередь, пишет код и решает вашу проблему. Я ожидал бы, что что-то уже существует где-то, чтобы сделать самые основные вещи.
Проблема написания сложного программного обеспечения для бизнеса заключается не в том, чтобы создать программу для написания кода, а в том, чтобы написать программу, отвечающую требованиям.
источник
Я думаю, что ответ @Mason Wheeler содержит ключевую идею. Это выглядит так:
Энтропия Шеннона Tic-Tac-Toe действительно мала. Поэтому мы называем крестики-нолики «решенной» или «детерминированной» игрой. Это не очень интересно, когда ты заканчиваешь начальную школу. Шашки имеют более высокую энтропию, если учесть энтропию всех возможных игр, в которые вы можете играть. Но шашки тоже "решенная" или "детерминистическая" игра. Если вы двигаетесь первым, вы должны только выиграть или сыграть вничью. В шахматах энтропия намного выше, но с 2006 года ни один человек не побил лучших компьютерных игроков. Таким образом, компьютеры освоили шахматы так, как не могут люди. Big Blue проанализировали Википедию, а затем сыграли в «Опасность» с игроками-людьми и добросовестно победили их.
Что дальше? Что такое энтропия романа или сонеты Шекпира?
Точно так же, в области программирования, вероятно, появится растущий набор компетенций. Пролог решил ряд компьютерных проблем, где вы создали проблему, и компьютер решил ответ. Кто-то, вероятно, найдет классы простых задач программирования, которые сможет решить компьютер и т. Д. Затем кто-то воспользуется этим, чтобы произвести «настройку по требованию» в некотором проблемном пространстве. И так далее.
Я думаю, что вопрос в том , как долго ИИ справляется с заданным количеством энтропии ... и сколько вычислительных ресурсов требуется? Я думаю, что это невообразимо, что компьютер не может справиться с энтропией, которой владеет лучший человеческий мозг - в мозгах нет ничего волшебного - но вопрос в том, сколько ядер вам нужно, и сколько столетий потребуется, чтобы туда добраться?
Но ... сможет ли компьютер когда-нибудь выполнять мою работу? Немыслимо!
источник
На это сложно ответить, потому что, как и в случае с искусственным интеллектом, как только мы это сделаем, это произойдет потому, что мы напишем программу, которая это делает. И критики скажут: «Ну, эта машина на самом деле сама не программирует! Она просто точно следует программе, которую вы ей дали!»
Ну да. Все, что мы когда-либо достигнем с компьютерами, мы сделаем, предоставив ему некоторую программу, и она выполнит ее. Если это аргумент против, то мы ничего не можем сделать. И все же, в какой-то момент, люди думали, что компьютер, играющий в шахматы, будет явно умным. Теперь они могут, и мы точно знаем, как, и мы не думаем, что это разумно. Подводные лодки до сих пор не умеют плавать.
Итак - рассмотрим несколько примеров.
На протяжении десятилетий у нас были генераторы парсеров . Вы даете им описание языка, он обрабатывается, и в результате получается код для синтаксического анализатора для этого языка. Мы точно знаем, как это делается, но разве это не компьютерное программирование?
Второй - редакторы, которые сообщают вам, что вы допустили ошибку (синтаксическая ошибка, несуществующая переменная и т. Д.). Он сам ничего не программирует, но может сказать, что вы сделали что-то не так. Это очень только на поверхности.
Языки, на которых вы можете просто щелкнуть и перетащить элементы управления пользовательским интерфейсом, и код, который фактически заставит их работать, генерируется автоматически.
JIT-компиляторы. Программное обеспечение, которое может распознавать горячие точки в текущем программном обеспечении и заменять некоторые из них высоко оптимизированным скомпилированным кодом, эффективно оптимизируя себя во время работы. Я думаю, что это пример того, что может показаться самим машинным программированием, пока вы точно не поймете, как это происходит, и тогда, как всегда, он просто делает то, что сказал ему программист.
Общая игра играет. Это интересная область исследований, в которой исследователи пишут программы, которые могут читать описания правил игр, чтобы затем программы играли друг против друга. Таким образом, вместо программы «крестики-нолики» или шахматной программы, это программы, которые читают правила игры в крестики-нолики или шахматы или какую-то новую игру, составленную на месте, и затем могут играть в них. Программа сама не программирует, но играет в шахматы без жестких правил. Было время, когда это явно считалось, что компьютер чему-то учит.
Мы сделали много маленьких шагов в общем направлении.
Но я не могу думать о каких-либо программах, которые переписывают себя на основе результатов предыдущих запусков или которые могут распознавать устаревшие или неэффективные подпрограммы в своем собственном коде. Я думаю, что однажды у нас это будет, и мы не будем считать это чем-то особенным, так как это будет просто особенность последнего компилятора ...
источник
Не в настоящее время и не в обозримом будущем, потому что для создания программы вам нужна вся сложность человеческого мозга. И даже тогда эти мозги должны быть хорошо обучены, чтобы делать это должным образом, и даже тогда не все из них способны выполнить эту задачу, хотя можно утверждать, что со временем вы сможете обучить любого программировать.
Я понял из того, как вы сформулировали свой вопрос, что вы не говорите о простых эмулируемых задачах.
Вы запросили статьи, и эта статья в « Научных блогах» по развитию интеллекта отвечает на этот вопрос многими способами.
источник