A компьютерная программа представляет собой набор инструкций, которые могут выполняться на компьютере для выполнения конкретной задачи.
Компьютерная программа обычно пишется программистом на языке программирования. Из программы в ее удобочитаемой форме исходного кода, компилятор или ассемблер может получить машинный код - форму, состоящую из инструкции, которые компьютер может выполнять напрямую. В качестве альтернативы, компьютерная программа может выполняться с помощью интерпретатора .
. Набор компьютерных программ, библиотеки и связанные с ним данные упоминаются как программное обеспечение. Компьютерные программы могут быть разделены на функциональные категории, например, прикладное программное обеспечение и системное программное обеспечение. Базовый метод, используемый для некоторых вычислений или манипуляций, известен как алгоритм.
Алгоритмы взлома кода существовали веками. В IX веке арабский математик Аль-Кинди описал криптографический алгоритм для расшифровки зашифрованного кода в «Рукописи о расшифровке криптографических сообщений». Он дал первое описание криптоанализа с помощью частотного анализа, самого раннего алгоритма взлома кода.
Ранние программируемые машины предшествовали изобретение цифрового компьютера. Еще в 9 веке программируемый музыкальный секвенсор был изобретен персидскими братьями Бану Муса, которые описали автоматизированный механический флейтовый проигрыватель в Книга изобретательных устройств. В 1206 году арабский инженер Аль-Джазари изобрел программируемую драм-машину, где можно было заставить музыкальные механические автоматы воспроизводить различные ритмы и образцы ударных. В 1801 году Жозеф-Мари Жаккар изобрел ткацкий станок, который ткал узор, следуя серии перфорированных карт. Шаблоны можно было соткать и повторить, располагая карточки.
В 1837 году Чарльз Бэббидж был вдохновлен ткацким станком Жаккарда на попытку построить аналитическую машину. Названия составных частей счетного устройства заимствованы из текстильной промышленности. В текстильной промышленности пряжу привозили из магазина на помол. Устройство должно было иметь «хранилище» - память для хранения 1000 чисел по 40 десятичных цифр в каждом. Затем числа из "магазина" были бы переданы в "мельницу" (аналог ЦП современной машины) для обработки. «Поток» - это выполнение запрограммированных инструкций устройством. Он был запрограммирован с использованием двух наборов перфорированных карт - один для управления операцией, а другой для входных переменных. Однако после того, как британское правительство вложило более 17 000 фунтов стерлингов, тысячи зубчатых колес и шестерен так и не смогли полностью работать вместе.
В течение девятимесячного периода в 1842–1843 годах Ада Лавлейс перевел мемуары итальянского математика Луиджи Менабреа. Мемуары посвящены аналитической машине. Перевод содержал примечание G, в котором полностью детализировался метод вычисления чисел Бернулли с использованием аналитической машины. Эта заметка признана некоторыми историками первой в мире письменной компьютерной программой.
В 1936 году Алан Тьюринг представил Универсальную машину Тьюринга - теоретическое устройство, которое может моделировать каждое вычисление, которое может быть выполнено на вычислительной машине , завершенной по Тьюрингу. Это конечный автомат с бесконечно длинной лентой чтения / записи. Машина может перемещать ленту вперед и назад, изменяя ее содержимое, выполняя алгоритм . Машина запускается в начальном состоянии, выполняет последовательность шагов и останавливается, когда попадает в состояние остановки. Некоторые считают, что эта машина является источником компьютера с хранимой программой - использованного Джоном фон Нейманом (1946) для «Электронного вычислительного прибора», который теперь имеет Архитектура фон Неймана имя.
Компьютер Z3, изобретенный Конрадом Цузе (1941) в Германия, был цифровой и программируемый компьютер. Цифровой компьютер использует электричество в качестве вычислительного компонента. Z3 содержал 2400 реле для создания цепей . В этих схемах был двоичный,, плавающий, компьютер с девятью инструкциями. Программирование Z3 осуществлялось с помощью специально разработанной клавиатуры и перфоленты.
. Электронный числовой интегратор и компьютер (осень 1945 г.) был полным компьютером общего назначения, который использовали 17 468 электронных ламп для создания схем. По сути, это была серия Паскалинов, соединенных между собой. Его 40 единиц весили 30 тонн, занимали 1800 квадратных футов (167 м) и потребляли 650 долларов в час (в валюте 1940-х годов ) в электроэнергии в простое. В нем было 20 аккумуляторов base-10 . Программирование ENIAC заняло до двух месяцев. Три функциональные таблицы были на колесах, и их нужно было свернуть на фиксированные функциональные панели. Таблицы функций были подключены к функциональным панелям с помощью тяжелых черных кабелей. Каждая функциональная таблица имела 728 вращающихся ручек. Программирование ENIAC также включало установку некоторых из 3000 переключателей. Отладка программы заняла неделю. Программистами ENIAC были женщины, известные под общим названием «девушки ENIAC», в том числе Джин Дженнингс Бартик, Бетти Холбертон, Марлин Вескоф, Кэтлин МакНалти, Рут Тейтельбаум и Фрэнсис Спенс. ENIAC включал параллельные операции. Различные наборы аккумуляторов могут одновременно работать по разным алгоритмам. Он использовал машины с перфокартами для ввода и вывода и управлялся с помощью тактового сигнала. Он работал в течение восьми лет, рассчитывая параметры водородной бомбы, прогнозируя погодные условия и составляя таблицы стрельбы для прицеливания артиллерийских орудий.
Manchester Baby (июнь 1948 г.) был компьютером с хранимой программой. Программирование перешло от перемещения кабелей и регуляторов настройки; вместо этого компьютерная программа хранилась в памяти в виде чисел. Для хранения каждой инструкции было доступно только три бита памяти, поэтому она была ограничена восемью инструкциями. Для программирования было доступно 32 переключателя.
Компьютеры, произведенные до 1970-х годов, имели переключатели на передней панели для программирования. Компьютерная программа была написана на бумаге для справки. Инструкция представляла собой конфигурацию настроек включения / выключения. После настройки конфигурации была нажата кнопка выполнения. Затем этот процесс был повторен. Компьютерные программы также вводились вручную с помощью бумажной ленты или перфокарт. После загрузки носителя начальный адрес был установлен с помощью переключателей и нажата кнопка выполнения.
В 1961 году Burroughs B5000 был построен специально для программирования на АЛГОЛЕ. 60 язык. В аппаратном обеспечении использовались схемы для облегчения фазы компиляции.
В 1964 году IBM System / 360 представляла собой линию из шести компьютеров, каждый из которых имел одну и ту же команду . установить архитектуру. Модель 30 была самой маленькой и дешевой. Заказчики могли обновить и сохранить то же самое прикладное программное обеспечение. В каждой модели System / 360 было мультипрограммирование. При поддержке операционной системы в памяти может одновременно находиться несколько программ. Когда один ожидал ввода / вывода, другой мог вычислить. Каждая модель также могла эмулировать другие компьютеры. Заказчики могли перейти на System / 360 и сохранить свое прикладное программное обеспечение IBM 7094 или IBM 1401.
Компьютерное программирование - это процесс написания или редактирования исходного кода. Редактирование исходного кода включает в себя тестирование, анализ, уточнение, а иногда и координацию с другими программистами совместно разработанной программы. Человека, практикующего этот навык, называют компьютерным программистом, разработчиком программного обеспечения, а иногда и программистом.
Иногда длительный процесс компьютерного программирования обычно называют разработкой программного обеспечения. Термин разработка программного обеспечения становится популярным, поскольку процесс рассматривается как дисциплина инженерия.
Компьютерные программы могут быть классифицированы по языку программирования парадигме, используемой для их создания. Две из основных парадигм - это императивный и декларативный.
Императивные языки программирования определяют последовательный алгоритм с использованием объявлений, выражений и операторов:
var x: integer;
2 + 2
дает 4x: = 2 + 2; если x = 4, то do_something ();
Одной из критических замечаний в адрес императивных языков является побочный эффект оператора присваивания для класса переменных, называемых нелокальными переменными.
Декларативные языки программирования описывают, какие вычисления должны выполняться, а не как их вычислять. Декларативные программы опускают поток управления и считаются наборами инструкций. Две широкие категории декларативных языков: функциональные языки и логические языки. Принцип функциональных языков (например, Haskell ) заключается в том, чтобы не допускать побочных эффектов, что упрощает рассуждение о программах, подобных математическим функциям. Принцип логических языков (например, Prolog ) состоит в том, чтобы определить проблему, которую нужно решить, - цель - и оставить подробное решение самой системе Prolog. Цель определяется путем предоставления списка подцелей. Затем каждая подцель определяется путем дальнейшего предоставления списка ее подцелей и т. Д. Если по пути подцелей не удается найти решение, то эта подцель откатывается назад, и систематически предпринимаются попытки другого пути.
Компьютерная программа в форме удобочитаемого языка компьютерного программирования называется исходным кодом. Исходный код может быть преобразован в исполняемый образ с помощью компилятора или ассемблера, или выполнен немедленно с помощью интерпретатор.
Компиляторы используются для перевода исходного кода с языка программирования либо в объектный код, либо в машинный код. Объектный код требует дальнейшей обработки, чтобы стать машинным кодом, а машинный код состоит из собственных инструкций центрального процессора , готовых к выполнению. Скомпилированные компьютерные программы обычно называются исполняемыми файлами, двоичными образами или просто двоичными файлами - ссылка на двоичный формат файла, используемый для хранения исполняемого кода.
Некоторые скомпилированные и собранные объектные программы необходимо объединить как модули с помощью утилиты компоновщика, чтобы создать исполняемую программу.
Интерпретаторы используются для построчного выполнения исходного кода на языке программирования. Интерпретатор декодирует каждый оператор и выполняет его поведение. Одним из преимуществ интерпретаторов является то, что их можно легко расширить до интерактивного сеанса . Программисту предоставляется подсказка, и отдельные строки кода вводятся и выполняются немедленно.
Главный недостаток интерпретаторов - компьютерные программы работают медленнее, чем при компиляции. Интерпретация кода выполняется медленнее, потому что интерпретатор должен декодировать каждый оператор, а затем выполнить его. Однако разработка программного обеспечения может быть быстрее с использованием интерпретатора, поскольку тестирование выполняется немедленно, когда этап компиляции опускается. Еще один недостаток интерпретаторов - наличие интерпретатора на исполняющем компьютере. Напротив, скомпилированные компьютерные программы не нуждаются в компиляторе во время выполнения.
Своевременные компиляторы предварительно компилируют компьютерные программы непосредственно перед выполнением. Например, виртуальная машина Java Hotspot содержит Just In Time Compiler, который выборочно компилирует байт-код Java в машинный код, но только код, который прогнозирует Hotspot, вероятно, будет использоваться много раз.
Скомпилированные или интерпретируемые программы могут выполняться в пакетном процессе без вмешательства человека.
Языки сценариев часто используются для создания пакетных процессов. Одним из распространенных языков сценариев является оболочка Unix, а среда его выполнения называется интерфейсом командной строки.
. Никакие свойства языка программирования не требуют его монопольной компиляции или эксклюзивной интерпретации. Категоризация обычно отражает самый популярный метод языкового исполнения. Например, Java считается интерпретируемым языком, а C - скомпилированным языком, несмотря на существование компиляторов Java и интерпретаторов C.
Как правило, компьютерные программы сохранялись в энергонезависимой памяти до тех пор, пока не будет запрошено либо прямо или косвенно выполняться пользователем компьютера. По такому запросу программа загружается в оперативную память компьютерной программой, называемой операционной системой, где к ней может обращаться непосредственно центральный процессор. Затем центральный процессор выполняет («запускает») программу, инструкция за инструкцией, до завершения. Выполняемая программа называется процессом. Прекращение происходит либо в результате нормального самовыключения, вмешательства пользователя, либо в результате ошибки - программной или аппаратной ошибки.
Многие операционные системы поддерживают многозадачность, что позволяет нескольким компьютерным программам работать одновременно на одном компьютере. Операционные системы могут запускать несколько программ через планирование процессов - программный механизм для переключения CPU между процессами, чтобы пользователи могли взаимодействовать с каждым программа во время ее работы. В рамках аппаратного обеспечения современные многопроцессорные компьютеры или компьютеры с многоядерными процессорами могут запускать несколько программ.
Компьютерная программа, выполняемая , обычно рассматривается как другая из данных, с которыми работает программа. Однако в некоторых случаях это различие стирается, когда компьютерная программа модифицирует себя. Модифицированная компьютерная программа впоследствии выполняется как часть той же программы. Самомодифицирующийся код возможен для программ, написанных на машинном коде, языке ассемблера, Lisp, C, COBOL, PL / 1 и Prolog.
Компьютерные программы могут классифицироваться по функциональным направлениям. Основными функциональными категориями являются прикладное программное обеспечение и системное программное обеспечение. Системное программное обеспечение включает в себя операционную систему, которая объединяет компьютерное оборудование с прикладным программным обеспечением. Цель операционной системы - предоставить среду, в которой прикладное программное обеспечение выполняется удобным и эффективным образом. Помимо операционной системы, системное программное обеспечение включает встроенные программы, загрузочные программы и микропрограммы. Прикладное программное обеспечение, разработанное для конечных пользователей, имеет пользовательский интерфейс. Прикладное программное обеспечение, не предназначенное для конечного пользователя, включает промежуточное ПО, которое связывает одно приложение с другим. Прикладное программное обеспечение также включает служебные программы. Различие между системным программным обеспечением и прикладным программным обеспечением является предметом обсуждения.
Существует много типов прикладного программного обеспечения:
Служебные программы - это прикладные программы, предназначенные для помощи системным администраторам и программистам.
операционная система - это низкоуровневое программное обеспечение, которое поддерживает основные функции компьютера, такие как планирование задач и управление периферийными устройствами.
В 1950-х годах программист, который одновременно был оператором, писал программу и запускал ее. После завершения выполнения программы выходные данные могли быть напечатаны или перфорированы на бумажной ленте или карточках для последующей обработки. Чаще всего программа не работала. Затем программист посмотрел на индикаторы консоли и возился с переключателями консоли. Если повезло меньше, была сделана распечатка памяти для дальнейшего изучения. В 1960-е годы программисты сократили потери времени, автоматизируя работу оператора. Программа, называемая операционной системой, всегда хранилась в компьютере.
Первоначально операционные системы были запрограммированы на сборке ; однако современные операционные системы обычно записываются в C.
A компьютер с хранимой программой требует начальной компьютерной программы, хранящейся в его постоянной памяти до загрузки. Процесс загрузки заключается в идентификации и инициализации всех аспектов системы, от регистров процессора до контроллеров устройств и содержимого памяти. После процесса инициализации эта начальная компьютерная программа загружает операционную систему и устанавливает программный счетчик для начала нормальной работы.
Независимо от главного компьютера, аппаратное устройство может иметь встроенную прошивку для управления его работой. Прошивка используется, когда компьютерная программа редко или никогда не меняется, или когда программа не должна быть потеряна при выключении питания.
Программы с микрокодом управляют некоторыми центральные процессоры и другое оборудование. Этот код перемещает данные между регистрами ,, шинами, арифметико-логическими блоками и другими функциональными блоками в ЦП. В отличие от обычных программ, микрокод обычно не пишется и даже не виден конечным пользователям системы, он обычно предоставляется производителем и считается внутренним для устройства.