Нельзя ли сделать так, чтобы и при составлении программы использовать работу машины? Сделать так, чтобы не человек, а сама машина «обдумывала» свои действия? Или хотя бы проверяла составленную человеком программу — нет ли в ней ошибок?
Оказалось, что проверку программы машина делать может (ее называют «отладка программы»). На первом этапе пробуют, не «заблокируется» ли машина. Если мы неправильно написали какую-либо операцию, машина не сможет выполнить программу от начала до конца.
Затем проверяется порядок выполнения операций: не перепутано ли в программе сложение и деление, и т. п. Наконец, с большим вниманием проверяется полученный результат. Не потому, что если мы зададим машине сложить 3 и 2, то может получиться 1; машина производит арифметические действия с большой точностью. Но ведь может случиться, что программист по ошибке написал не 3 + 2, а 3 — 2. И тогда, разумеется, машина выдаст ответ: 3 — 2= 1.
Вот почему перед отладкой программы вычисляется либо вручную, либо на арифмометре какой-нибудь числовой пример. А затем его поручают решать машине — совпадет ли ее решение с нужным? Если нет, тогда ищут ошибку в программе.
Так, шаг за шагом, с помощью самой же машины, идет исправление ошибок, пока не получится правильная программа.
Ну, а как быть с составлением программы самой машиной? Этот вопрос решают сейчас ученые разных стран мира.
Для автоматического составления программы в машину вводится особая программа. Она называется программирующей. Используя ее, машина может самостоятельно составлять большое число различных программ.
Машинам пробуют поручать и более творческие задачи. Вот, например, какой эксперимент был проделан в Гарвардском университете (США). В машину ИБМ-704 было введено много различных программ, осмысленных и бессмысленных. И, кроме них, задача: обработать четырнадцатизначное число с помощью 63 последовательных операций.
Вычислительная машина перебирала, разумеется наугад, всевозможные программы. Первое время правильный результат получался примерно один раз из четырех сотен попыток. Перепробовав несколько сотен тысяч «попыток», машина сумела найти «самостоятельное» суждение о правильном методе решения. И затем она неуклонно следовала найденному ею методу. Если же задача менялась, то и машина, не отходя от правильного метода, несколько видоизменяла его.
В настоящее время возникло даже целое направление, называемое «Эвристическое программирование» (от греческого слова «эврика» — «открытие», «находка»). Главная задача такого программирования — найти принципы действия мозга, или, как говорят математики, алгоритмы, а затем заставить машину работать по этим «алгоритмам мозга» и даже улучшать их.