Курс «История информатики» Лекция

Главная страница
Контакты

    Главная страница


Курс «История информатики» Лекция



страница12/17
Дата04.11.2017
Размер2,09 Mb.


1   ...   9   10   11   12   13   14   15   16   17

Лекция 9.

Программирование

В середине прошлого (20-го) века слово “программирование” не подразумевало связи с компьютером. Можно было увидеть название книги “Программирование для ЭВМ”. Теперь по умолчанию “программирование” означает организацию процессов на компьютерах и компьютерных сетях.

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

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

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

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

Программирование исследует процесс создания и применения программ, определяет средства и методы конструирования программ, является наукой, искусством и технологией.

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

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

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


- компьютерные архитектуры (систем команд) и операционные системы;

- языки, стили и парадигмы программирования;

- методы компиляции программ и реализации систем программирования;

- системы управления базами данных и их приложения;

- теория и практика разработки программ и информационных систем;

- организация параллельных процессов и параллельное программирование;

- телекоммуникации и информационные сервисы в Интернете;

- средства и методы искусственного интеллекта;

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

Разнообразие систем команд, изобретаемых в первые три десятилетия развития компьютеров постепенно пришло к интеграции наиболее стабильных архитектур типа IBM PC и Macintosh с небольшими вариациями.

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

Радикально изменилась сама техника работы на компьютерах. Место языков заданий, интерпретирующих систем (ИС для М-20), диалоговых редакторов (Краб), мощных операционных систем (Диспак, OS IBM 360/370 и т.п.) заняли более понятные системы UNIX/Linux и визуальные “дружелюбные” интерфейсы типа Windows, история которых началась с появления микропроцессоров и изобретения персонального компьютера Apple, доступного почти как детская игрушка. Принципы и способы подготовки программ для компьютера не сильно зависят от языка программирования. Главным требованием для программиста является умение мыслить логически.


Ассемблер отличается простотой исходного языка, перевод с которого в машинный язык можно выполнить “один-в-один”. Ассемблер часто сопровождается возможностью дизассемблирования, что отличает его от большинства других языков программирования. Изучить язык ассемблера проще, чем любой язык высокого уровня. Знание ассемблера помогает понимать код программы, подготовленной на других языках. Основное – зависимость от конкретной архитектуры.

Архитектура компьютера часто определяется как множество ресурсов, доступных пользователю. Это система команд, общие регистры, слово состояния процессора и адресное пространство. Процесс перевода программы с языка ассемблера в язык машинных команд называют ассемблированием. Для реализации такого процесса требуется счетчик адресов и таблица идентификаторов.

Программист не знает абсолютных адресов ячеек памяти, занятых для хранения констант, команд и промежуточных результатов вычислений, но обычно предполагается, что последовательно написанные команды будут расположены в последовательных ячейках памяти. Кроме символических представлений команд ассемблерная программа содержит описания распределяемой памяти и директивы управления ассемблированием. Язык ассемблера оперирует такими данными как адреса и значения.

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

  • Роль данных выполняют файлы - объекты, обладающие собственным поведением и подверженные влиянию внешнего мира. Существование файлов в период обработки не всегда очевидно. Файлы могут участвовать одновременно в разных процессах.

  • Выполнение команды рассматривается как событие. Такое событие может быть как успешным, так и неудачным. Кроме того, существуют внешние события.

  • Реакция на событие программируется как обработчик события, выполняемый независимо от других обработчиков, - это отдельный процесс.

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

  • Программа процесса выглядит как объект и создается как данное, а потом может применяться равноправно с командами. Последовательное расположение команд в программе не считается основанием для их выполнения в точно том же порядке. Выполнение команды может занимать ряд интервалов времени, между которыми выполняются другие команды.

  • Процессы могут взаимодействовать при выполнении отдельных заданий.

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



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

1   ...   9   10   11   12   13   14   15   16   17

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