Чтение онлайн

на главную - закладки

Жанры

Я нашел смысл жизни: Автореферат мировоззрения с эпизодами автобиографии
Шрифт:

В настоящее время преобладает составление программ. Основные причины:

– архитектура компьютера до сих пор ориентирована на выполнение программ;

– программа всегда выдает результат намного быстрее, чем любой логический интерпретатор;

– программистов намного больше, чем инженеров знаний, так как для представления знаний требуется более высокий уровень, чем для составления программ;

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

Тем

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

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

Вопрос: чем Бог отличается от программиста?

Ответ: Бог надеется, что он никогда не станет программистом.

Профессиональный опыт

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

На пятом курсе у нас появился новый предмет – программирование для ЭВМ (если бы это было на первом, как теперь, я провел бы пять лет с гораздо большей пользой). Машина была «Урал-2», ламповая, занимала огромный зал, а чтобы ввести в нее программу, надо было замкнутую фотоленту установить на сложное устройство, напоминавшее стиральную машину. Система команд была примитивная, например, для модификации адреса данных внутри цикла приходилось изменять адрес ячейки памяти непосредственно в команде – программа изменяла себя по мере выполнения (какая свобода для творчества!).

Тем не менее, принципы работы компьютера не изменились с тех пор и, соответственно, программирование, несмотря на все современные парадигмы, требует от человека тех же качеств, что и в те далекие годы. Суперпрограммист 60—70-х был бы суперпрограммистом и сегодня.

Программировать я стал сразу. На зачетах писал программы за всех друзей и других желающих. Мне это нравилось и получалось легко. Чисто случайно я попал по распределению в вычислительный центр вместо аспирантуры и фактически почти двадцати пять лет программировал. Это моя профессия.

В 1970 году мне пришлось программировать для ЭВМ «Минск-22» в машинных кодах, и я до сих пор помню систему команд «Минск-22». Например, программа вычисления факториала целого числа N! = N * (N-1) * … * 3 * 2 * 1 выглядит приблизительно следующим образом (аргумент N передается в ячейке 0040, результат N! возвращается в ячейке 0041):

7000) – 10 00 7005 0041 переслать 1 в ячейку 0041 (Здесь будет N!)

7001) – 32 00 0040 0041 умножить 0041 на N (Далее в 0040 будет N–1)

7002) – 22 00 7005 0040 вычесть 1 из 0040 (Получить в 0040 N–1)

7003) – 34 00 7001 0000 если после вычитания не ноль, то повторить с 7001

7004) – 30 00 0017 0000 возврат

в вызывающую программу

7005) – 00 00 0000 0001 константа – целая 1.

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

Я старался брать машинное время ночью – во-первых, нет конкуренции за время (женщины-программистки, а их было почему-то очень много, предпочитали работать днем), во-вторых, можно работать до результата. Работа мне нравилась, шеф меня ценил.

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

Потом был долгий период ЕС ЭВМ и алгоритмических языков – «Фортран», «ПЛ/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

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

Поделиться:
Популярные книги

Мужчина моей судьбы

Ардова Алиса
2. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.03
рейтинг книги
Мужчина моей судьбы

Страж Кодекса. Книга V

Романов Илья Николаевич
5. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга V

Неудержимый. Книга V

Боярский Андрей
5. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга V

Камень

Минин Станислав
1. Камень
Фантастика:
боевая фантастика
6.80
рейтинг книги
Камень

Имя нам Легион. Том 5

Дорничев Дмитрий
5. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 5

Мама из другого мира. Делу - время, забавам - час

Рыжая Ехидна
2. Королевский приют имени графа Тадеуса Оберона
Фантастика:
фэнтези
8.83
рейтинг книги
Мама из другого мира. Делу - время, забавам - час

Безумный Макс. Ротмистр Империи

Ланцов Михаил Алексеевич
2. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
4.67
рейтинг книги
Безумный Макс. Ротмистр Империи

Хроники сыска (сборник)

Свечин Николай
3. Сыщик Его Величества
Детективы:
исторические детективы
8.85
рейтинг книги
Хроники сыска (сборник)

Сыночек в награду. Подари мне любовь

Лесневская Вероника
1. Суровые отцы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сыночек в награду. Подари мне любовь

Вперед в прошлое 2

Ратманов Денис
2. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 2

(Не) Замена

Лав Натали
3. Холодовы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
(Не) Замена

Подаренная чёрному дракону

Лунёва Мария
Любовные романы:
любовно-фантастические романы
7.07
рейтинг книги
Подаренная чёрному дракону

Я тебя не отпущу

Коваленко Марья Сергеевна
4. Оголенные чувства
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Я тебя не отпущу

Страж Кодекса. Книга IX

Романов Илья Николаевич
9. КО: Страж Кодекса
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Страж Кодекса. Книга IX