Читать «Я нашел смысл жизни: Автореферат мировоззрения с эпизодами автобиографии» онлайн - страница 139

Владимир Александрович Цай

Мне сильно повезло с первым шефом – Александром Михайловичем Гуляевым. Он был суперпрограммистом. Чтобы ввести в профессию, он заставил меня отладить написанный им довольно большой комплекс программ для шахтной вентиляции. После этого я стал одновременно модульным, структурным и, возможно уже тогда, объектно и сервисно ориентированным. Модные парадигмы создаются не программистами, а так называемыми менеджерами. Эти менеджеры никогда ничего не пишут сами и не могут написать в силу отсутствия соответствующих способностей, но полезную функцию (что-то подсмотреть и своевременно прокричать) выполняют. К сожалению, Гуляев никогда не стремился к признанию, рано ушел в себя и умер где-то на станции космических лучей. Другого суперпрограммиста, моего старшего, как он любил говорить, приятеля Володю Медведева, который мог написать эффективную программу для чего угодно, вообще убили при дурацких обстоятельствах. Хорошие программисты не часто добиваются в жизни того, чего могли бы, и чего принято добиваться, и чего всегда добиваются менеджеры.

Потом был долгий период ЕС ЭВМ и алгоритмических языков – «Фортран», «ПЛ/1» и др. На одном из алгоритмических языков программа вычисления факториала могла бы выглядеть так:

fact:= 1; n1:= n;

do while (n1>0); fact:= fact * n1; n1:= n1 – 1; end;

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

Отражая объектно-ориентированную структуру окружающего мира, алгоритмическое программирование (через модульное, структурное и др.) эволюционировало в объектно-ориентированное, в котором объект, тем не менее, представляется совокупностью алгоритмов.

Другой подход в программировании связан с разработками в области искусственного интеллекта. Теоретической базой искусственного интеллекта является логика, а в практическом программировании используются языки функционального и логического программирования.

Например, функцию вычисления факториала можно определить в виде функции следующим образом:

fact (N) = N * fact (N–1); fact (0) = 1

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

На языке логического программирования «Пролог» программа вычисления факториала выглядит следующим образом:

fact (0, 1).

fact (N, F) если N1= N–1, fact (N1, N2), F=N*N2.

Этот язык менее естественен для записи функций, но значительно удобнее для представления знаний в виде: если …, то …. Эта форма стала основой технологии программирования так называемых экспертных систем. Программировать экспертные системы просто, но найти эксперта со знаниями и извлечь знания из него в этой форме невозможно.

Я подсел (иначе не скажешь) на «Пролог» и даже основную свою систему написал на «Турбопрологе» (выдающийся продукт компании «Борланд»), а после заката «Пролога» бросил программировать вообще. Оптимисты, которые никогда не бывают правы, но всегда выигрывают, предрекали, что «Пролог» будет играть роль «Фортрана» в 2000 году. Увы. Разумеется, «Пролог» имеет недостатки, например, cut (встроенный предикат «Пролога» для обрезания перебора), который убивает логическую сущность, но без которого невозможно писать эффективные программы. Думаю, что дело не столько в недостатках Пролога, сколько в неготовности человека. Несколько раз я читал лекции по программированию на «Прологе» – в лучшем случае только один студент из группы был в состоянии преодолеть алгоритмическое мышление.