Шрифт:
Интервал:
Закладка:
Возникает вопрос: пуста ли машина, ждет ли она самой первой команды? А есть ли в ней транслятор? Или операционная система?
В зависимости от ответов на эти вопросы я буду выдавать машине совершенно разные команды.
Если в машине ничего нет, я начну вводить команды с помощью тумблеров на внешней панели.
Если в машине есть ассемблер, а я хочу начать программировать, мне надо вводить команды на языке ассемблера.
Если в машине находится транслятор, я должен вводить операторы языка высокого уровня.
Если есть операционная система, мне необходимо знать, как этой операционной системе давать приказы, поскольку всей работой с машиной управляет именно она и мне нужно иметь дело именно с ней.
Никаких внешних признаков того, что там есть, не существует; поэтому если никто не подскажет мне, то мне придется применить метод проб и ошибок. Я попробую один из вариантов, который должен работать, если в машине находится то-то и то-то, потом посмотрю, работает ли этот вариант, и т. д.
В памяти вычислительной машины могут находиться или отсутствовать такие системы программ:
1) операционная система;
2) система управления базой данных;
3) система связи;
4) система управления дисплеями;
5) ассемблер (транслятор);
6) транслятор с ЯВУ;
7) прикладные программы.
Когда человек садится и пишет программу либо вводит ее через терминал, присоединенный к вычислительной машине, он может связываться либо непосредственно с аппаратурой (линия С на рис. 5.38), либо с целой цепочкой программ, написанных специально для программистов или пользователей. Человек на линии А ведет диалог с шестью программами и аппаратурой. Человек на линии В ведет диалог с одной программой и аппаратурой.
Рис. 5.38. Взаимодействие с программой для вычислительной машины. Рис. 5.39. Возможности ведения диалога с вычислительной машиной и программным обеспечением.Очевидно, что по мере добавления различных программ и установления связи с ними мы получаем огромное число разных возможностей для ведения диалога. На рис. 5.39 изображены только некоторые способы связи программиста или пользователя с аппаратурой!
Если я нахожусь в точке A, я пишу на языке машины.
В точке В я использую язык ассемблера.
В точке С я использую язык транслятора.
В точке D я использую приказы операционной системы.
В точке Е я использую язык базы данных.
В точке F я использую язык системы связи.
Человек, программирующий на уровне E, не обязан ничего знать об уровнях, расположенных ближе к машине. Он может сколь угодно долго работать, не обращаясь к более глубоким уровням. Он имеет дело с абстрактной машиной, которая состоит из аппаратуры и определенных слоев программного обеспечения.
Все эти люди заняты программированием. Все они пишут команды, которые должны выполняться машиной. Команды проходят через транслятор или даже через целую серию трансляторов, а в результате получается группа машинных команд, которые потом исполняются аппаратурой.
Буквы со штрихами (E', F' и т. д.) обозначают не программистов, а пользователей. Обратите внимание на то, что их первое вхождение в вычислительную систему (аппаратура плюс программное обеспечение) осуществляется через прикладные программы. Пользователь вводит данные для прикладных программ, а результатом при этом будет не программа на машинном языке, а ответ ему либо несколько ответов.
Такое разнообразие способов ведения диалога с машиной вместе с ее программным обеспечением может вносить большую путаницу, поскольку все эти способы сильно отличаются друг от друга. Число способов, которыми можно взаимодействовать с вычислительными системами, поистине неограниченно. На нашем рис. 5.39 мы ограничились только одним прикладным уровнем, в то время как их могло бы быть и больше, в этом случае сообщения переходили бы с одного прикладного уровня на другой. Но и с одним показанным на рисунке уровнем число комбинаций доходит до 720 способов ведения диалога с аппаратурой и программным обеспечением с помощью терминалов. Это разнообразие вариантов является и благом и проклятием для вычислительных машин.
Точка / является хотя и необычной, но не такой уж редкой ситуацией. Используются сразу все слои программного обеспечения. Такой случай возникает, когда мне приходится из одного города вести диалог через диалоговый транслятор с вычислительной машиной, находящейся в другом городе. Вариант К (без использования уровня ЯВУ) встречается очень часто.
Управление написанием программИз-за чрезвычайной гибкости запоминаемых программ программирование стало очень трудным делом; одна и та же задача может быть запрограммирована сотней разных способов, ответ будет один и тот же. Все варианты будут работать, все дают одинаковые ответы! Может ли один быть лучше другого? Может, причем по-разному. Один быстрее выполняется. Другой требует меньше памяти. Мой вариант, возможно, был запрограммирован быстрее, чем ваш. То, что ваше решение «работает быстрее», компенсируется тем, что вы дольше писали вашу программу.
Число различных последовательностей команд почти беспредельно, ведь в своей работе программист связывает воедино множество шагов, которые он предпринимает, чтобы решить задачу. Кто может сказать что-нибудь о правильности или хотя бы о работоспособности программы до тех пор, пока она не будет опробована? До тех пор, пока программа не будет выполнена на вычислительной машине?
Очень трудно управлять чьей-нибудь работой и быть уверенным, что у него все в порядке, если число вариантов, которые тот может предложить, практически неограниченно.
Управление процессом написания крайне затруднено. Делают программное обеспечение трудным такие его свойства, как абстрактность и неосязаемость, необозримость и изменчивость.
Для помощи при управлении этим процессом предлагается использовать множество новых прекрасных методов.
Структурное программирование не только помогает процессу проектирования, но также делает окончательный вид программ более наглядным. Для отслеживания каждой команды (строки программы) в разрабатываемой программе создаются специальные программы, называемые автоматическими библиотекарями. Эти программы тоже сделали практическое программирование более наглядным. Они сделали программирование из частного дела общим достоянием.
Различия уровня квалификации программистовИзучение программирования «в малом», т. е. небольших программ, показывает просто фантастическое различие в производительности и конечных результатах работы среди программистов. Различие в производительности, выраженной в строках программы в единицу времени, достигает 25 раз. Это означает, что некоторые люди пишут в день в 25 раз больше строк программ, чем другие. Размеры получающихся программ также отличаются, коэффициент доходит до 20; программы одних программистов могут быть в 20 раз больше программ других. Эффективность программ изменяется в диапазоне от 1 до 10; одни программы работают в 10 раз быстрее, чем другие, выполняющие ту же работу.
Однако совершенно не обязательно будет так, что программист, пишущий в 25 раз быстрее другого, будет хорошим программистом. Строки программы — это обманчивое, несовершенное средство измерения качества. Но это все, что у нас есть. Более или менее подробно мы будем изучать эту меру в гл.6. Здесь мы хотели только указать, что среди программистов имеются значительные различия.
Из всего сказанного и из приведенных цифровых данных надо сделать вывод, что необходимо проводить тщательный отбор сотрудников, набирать и выбирать хороших программистов, поручать людям работу, соответствующую их наклонностям.
- Введение в Perl - Маслов Владимир Викторович - Базы данных
- Базы данных: конспект лекций - Коллектив Авторов - Базы данных