Программное обеспечение для 21 века — то же, что нефть для 20 века. Это то, что движет наше общество вперед и открывает новые возможности. Три из четырех крупнейших компаний мира (Alphabet, Microsoft и Amazon) начали свое восхождение с написания программного обеспечения. В то время как крупнейшая компания в мире Apple создавала аппаратное обеспечение и писала программное обеспечение.

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

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

Языки программирования начали появляться спустя десятилетия после того, как Алан Тьюринг изложил свои идеи для машины Тьюринга и компьютера общего назначения в 1936 году. Создателем первого языка программирования часто приписывают Конрада Цузе. Он описал язык планкалкюль между 1942 и 1945 годами и использовал его для разработки шахматной игры, первой известной компьютерной игры. К сожалению, из-за войны и послевоенных ограничений работа Цузе зашла в тупик, а Планкалкюль не получил широкого распространения.

В 1950-х годах начали появляться другие языки программирования, в 1951 году Хайнц Рутисхаузер опубликовал описание своего языка Суперплан, вдохновленного работой Цузе. Рутисхаузер продолжил разработку АЛГОЛ 58, который получил широкое распространение в конце 50-х и начале 60-х годов. Среди других появившихся языков был язык адресного программирования, разработанный в Советском Союзе в 1955 году Катериной Ющенко. Фортран тоже появился в 1957 году, разработанный Джоном Бэкусом в IBM.

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

Первые три поколения языков программирования появились одновременно. Двум людям, которым приписывают создание языка ассемблера и ассемблеров, являются Кэтлин Бут и Дэвид Уилер. Во время работы над проектом ARC2 в Биркбеке в 1947 году Бут определил теорию и базовую реализацию языка ассемблера. Год спустя, в 1948 году, Дэвид Уилер создал первый ассемблер, работая над проектом EDSAC в Кембриджском университете. Ассемблер и ассемблеры по-прежнему используются в современных компьютерах для управления отношениями между языками программирования более высокого уровня и машинным кодом.

В 1945 году Джон фон Нейман и его коллеги предложили Архитектуру фон Неймана, основанную на их работе над EDVAC. В нем была описана архитектура компьютера с хранимой программой. По сути, это компьютер с оперативной памятью, который может хранить программу и выполнять ее. Одним из первых компьютеров с такой архитектурой был Manchester Baby, который был введен в эксплуатацию в 1948 году. Ученый-компьютерщик Том Килберн написал первый алгоритм из 17 команд в машинном коде, и Малыш выполнил его 21 июня. 1948». Это был первый раз, когда часть программного обеспечения была сохранена и запущена на компьютере.

История программного обеспечения до Тьюринга, Цузе, Бута и Килберна туманна. Однако очень немногие из идей, появившихся в посттьюринговскую эпоху, были оригинальными. Например, Аду Лавлейс часто называют первым человеком, написавшим компьютерный алгоритм. Это появилось в ее статье 1843 года «Набросок аналитической машины», посвященной аналитической машине Чарльза Бэббиджа.

И Лавлейс, и Бэббидж рассматривали машины или компьютеры с точки зрения манипулирования символами и программного обеспечения. Как и Цузе, Бэббидж обдумывал идею создания шахматной игры, которую могла бы запустить его аналитическая машина. Он также разработал версию крестиков-ноликов (крестики-нолики) и обдумывал идею создания первой в мире аркады, где публика будет платить за то, чтобы играть в его игры.

В качестве развлечения он баловался игровыми автоматами. Он пришел к выводу, что автомат может играть в любую игру на ловкость. Аналитическая машина уже обладала несколькими необходимыми свойствами — памятью, «дальновидностью» и способностью автоматически принимать альтернативные варианты действий, которую ученые-компьютерщики теперь назвали бы условным ветвлением.

Бэббидж и Лавлейс были не единственными, кто думал о том, как запрограммировать машину или аналоговый компьютер. Многие инженеры и ученые работали над идеей машин, управляемых бинарными командами, задолго до Тьюринга и Манчестерского младенца. Герману Холлериту часто приписывают создание двоичных перфокарт для питания его электромеханических счетных машин в 1880-х годах.

Однако машинное программирование с помощью перфокарт началось задолго до счетных машин Холлерита. Бэббидж рассматривал эту идею в своих различных конструкциях двигателей. Кроме того, Жаккардовые ткацкие станки, появившиеся в начале 1800-х годов, работали по тому же принципу для изготовления тканей со сложными узорами. Они пробежали длинную цепочку бинарных перфокарт, но даже работа Жозефа Мари Жаккара не была оригинальной. Идея программирования ткацких станков с помощью перфокарт или ленты восходит к началу 1700-х годов.

До 1700-х годов некоторые из единственных незначительных ссылок на программное обеспечение, которые мы можем сделать, исходили из математики и астрономии. Термин алгоритм мы получаем от имени персидского математика 8-9 веков Мухаммеда ибн Мусы аль-Хорезми, который был отцом алгебры. А астролябия — это программируемый инструмент 2000-летней давности, помогающий в навигации и хронометраже. Его можно было перепрограммировать/настроить с помощью металлических дисков, на которых хранились астрономические данные.

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

Как описано выше, этот процесс абстракции начинается в 1700-х годах с появлением ткацких станков, приводимых в движение перфолентой и картами. Затем в 1800-х годах произошли два важных события, которые доказывают ценность и масштабируемость идеи. В 1804 году жаккардовый ткацкий станок произвел революцию в текстильной промышленности. Это значительно снижает стоимость узорчатого текстиля, и к 1836 году в Великобритании работало 7000 жаккардовых ткацких станков. Позже, в 1880-х годах, Герман Холлерит использовал аналогичный принцип с электромеханическими табулирующими машинами, чтобы революционизировать обработку данных и перепись населения США. Его машины были настолько успешными, что он основал компанию, которая впоследствии стала IBM.

К концу 19 века стало ясно, что абстракция поведения машин — невероятно ценная идея. Но только после работы Алана Тьюринга в 1930-х годах был сделан последний шаг к программному обеспечению и полной абстракции. Его теоретическая работа над проблемой принятия решений привела его к определению компьютера общего назначения и многих принципов, лежащих в основе современного программного обеспечения. Этот последний шаг был выполнен теми, кто работал над компьютером с хранимой в памяти программой в 1940-х годах. Идея, разработанная фон Нейманом и его коллегами в Принстоне и впервые полностью реализованная Уильямсом и Килберном во время работы над Manchester Baby.

Началась эра программного обеспечения, поведение машин было полностью абстрагировано, и это позволило запрограммировать миллиарды машин для выполнения практически любого требуемого поведения. За последние 70 лет это принесло богатство в беспрецедентных масштабах. Мегакорпорации построили целые отрасли, основанные на миллионах компьютеров, взаимодействующих с миллиардами людей. И все это было достигнуто простой идеей, что поведение должно быть абстрагировано от машины.

Полезные ресурсы: