На это сложно ответить, потому что, как и в случае с искусственным интеллектом, как только мы это сделаем, это произойдет потому, что мы напишем программу, которая это делает. И критики скажут: «Ну, эта машина на самом деле сама не программирует! Она просто точно следует программе, которую вы ей дали!»
Ну да. Все, что мы когда-либо достигнем с компьютерами, мы сделаем, предоставив ему некоторую программу, и она выполнит ее. Если это аргумент против, то мы ничего не можем сделать. И все же, в какой-то момент, люди думали, что компьютер, играющий в шахматы, будет явно умным. Теперь они могут, и мы точно знаем, как, и мы не думаем, что это разумно. Подводные лодки до сих пор не умеют плавать.
Итак - рассмотрим несколько примеров.
На протяжении десятилетий у нас были генераторы парсеров . Вы даете им описание языка, он обрабатывается, и в результате получается код для синтаксического анализатора для этого языка. Мы точно знаем, как это делается, но разве это не компьютерное программирование?
Второй - редакторы, которые сообщают вам, что вы допустили ошибку (синтаксическая ошибка, несуществующая переменная и т. Д.). Он сам ничего не программирует, но может сказать, что вы сделали что-то не так. Это очень только на поверхности.
Языки, на которых вы можете просто щелкнуть и перетащить элементы управления пользовательским интерфейсом, и код, который фактически заставит их работать, генерируется автоматически.
JIT-компиляторы. Программное обеспечение, которое может распознавать горячие точки в текущем программном обеспечении и заменять некоторые из них высоко оптимизированным скомпилированным кодом, эффективно оптимизируя себя во время работы. Я думаю, что это пример того, что может показаться самим машинным программированием, пока вы точно не поймете, как это происходит, и тогда, как всегда, он просто делает то, что сказал ему программист.
Общая игра играет. Это интересная область исследований, в которой исследователи пишут программы, которые могут читать описания правил игр, чтобы затем программы играли друг против друга. Таким образом, вместо программы «крестики-нолики» или шахматной программы, это программы, которые читают правила игры в крестики-нолики или шахматы или какую-то новую игру, составленную на месте, и затем могут играть в них. Программа сама не программирует, но играет в шахматы без жестких правил. Было время, когда это явно считалось, что компьютер чему-то учит.
Мы сделали много маленьких шагов в общем направлении.
Но я не могу думать о каких-либо программах, которые переписывают себя на основе результатов предыдущих запусков или которые могут распознавать устаревшие или неэффективные подпрограммы в своем собственном коде. Я думаю, что однажды у нас это будет, и мы не будем считать это чем-то особенным, так как это будет просто особенность последнего компилятора ...