свидетельствует о трудностях определения проекций, соответствующих всем
выделенным уровням, и оптимального распределения функций между уровнями.
Как же убедиться в том, что выбранная проекция позволяет повысить
производительность труда тех, кто общается с системой на данном уровне?
Далее, проекция прикладного программиста никогда целиком не
определяется применяемым языком программирования, будь то ПЛ/1, Кобол или
какой-либо иной язык. Помимо средств операционной системы, предоставляемых
непосредственно компилятором, обычно приходится учитывать также командные
языки, утилиты и редакторы. Эти элементы программного обеспечения должны
включаться в проекцию программиста для того, чтобы он имел весь набор средств,
которые могут потребоваться для разработки и выполнения программ, реализующих
решения задач проблемной области. Таким образом, каждому уровню может
соответствовать множество проекций, и необходимо обеспечить определенную
согласованность «представлений» о системе для независимых элементов,
использующих один и тот же уровень, Но может быть, еще лучше попытаться
добиться единства представлений, запретив употребление на каждом уровне
неоднородных синтаксиса и семантики или допустив различные языковые формы с
тем условием, чтобы в каждый данный момент времени применялась только одна из
них, гарантирующая максимальную эффективность работы с соответствующим
набором функций?
Эти рассуждения можно продолжить, рассмотрев вопрос о том, можно ли
пользоваться разными проекциями на различных этапах составления прикладной
программы. Например, не исключается случай, когда программа пишется на языке
высокого уровня, а в процессе ее отладки приходится спускаться на более низкие
уровни и работать с дампами содержимого памяти. Хорошо ли это? Или. может
быть, следует пользоваться только языком высокого уровня?
Разнообразие проблемных областей и задач, решаемых пользователями,
создает дополнительный круг вопросов, связанных с различными проекциями
вычислительных систем. Как соотносятся между собой программирование и
управление выполнением? Необходимо ли, как и ранее, разделение функций
программистов и операторов или существуют обстоятельства, когда их обязанности
желательно объединить? Как это влияет на структуру самой системы и языки
программирования?
Иерархия, изображенная на рис. 1.1,— это типичная иерархия любой
вычислительной системы, предназначенной для решения прикладных задач. Однако
известны и другие структуры, которые тем не менее пересекаются с рассмотренной.
На рис. 1.2 показана структура управления и обслуживания, определяющая
множество проекций различных работников вычислительного центра. Например,
инженеру, ответственному за функционирование аппаратуры приходится иметь
дело с программами диагностики, входящими в состав операционной системы, и
поэтому соответствующая проекция включает некоторую совокупность средств
операционной системы и аппаратуры.
Аналогично оператор, которому вменяется в обязанности следить за