До Python были провода: как менялось программирование

Каждый год 13 сентября в России отмечают День программиста. За годы существования профессия прошла путь от «настройщика проводов» до создателя всех сервисов, какими мы пользуемся ежедневно. Но как все начиналось? Кто написал первую строку кода, на каких машинах работали первые программисты и откуда взялись названия языков, которые мы учим сегодня? В честь праздника рассказываем краткую историю программирования: от аналитической машины Бэббиджа до Python и Java.

Каждый год 13 сентября в России отмечают День программиста.

256-й день года: как День программиста стали отмечать 13 сентября

День программиста — праздник относительно молодой, а его история уходит корнями в 1990-е годы. 15 июля 1996 года на страницах журнала «Компьютерра» впервые прозвучала идея учредить профессиональный праздник для людей, пишущих код. Предложил ее Дмитрий Мендрелюк — основатель и бывший владелец «Компьютерры». Изначально предлагалось отмечать «День компьютерщика» в первую пятницу сентября, но позже дату привязали именно к 256-му дню в году. Подробнее читайте тут

О том, как появилась сама идея, каким был российский ИТ-мир середины 1990-х и насколько сегодняшняя профессия программиста похожа на ту, для которой почти 30 лет назад придумывали собственный день, читайте в интервью с Дмитрием Мендрелюком.

Ада Лавлейс: первая программа, написанная для машины

Если считать программирование умением записывать алгоритмы для машин, то первым программистом в истории была женщина. Ее звали Ада Августа Лавлейс — она была дочерью поэта Джорджа Байрона. В 1843 году она перевела статью итальянского инженера Менабреа, посвященную аналитической машине Чарльза Бэббиджа, и добавила к переводу объемные комментарии — по сути, они и стали первым в мире трудом по программированию. Лавлейс разработала принципы, которые легли в основу всей будущей профессии.

В своих комментариях Лавлейс описала три первые в мире вычислительные программы. Самая известная из них — алгоритм вычисления чисел Бернулли, который уже использовал рекуррентные вложенные циклы. Это была сложная структура, предусматривавшая повторение одной и той же последовательности действий при определенных условиях. 

Именно Ада предложила термины «рабочая ячейка» и «цикл» — понятия, без которых сегодня невозможно представить ни один язык программирования. 

Портрет Ады Лавлейс художника Альфреда Шалона, адаптированный в нашем стиле 
Портрет Ады Лавлейс художника Альфреда Шалона, адаптированный в нашем стиле

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

Позже, в XX веке, ее именем назвали язык программирования Ada, разработанный для Министерства обороны США. Так дочь поэта стала символом профессии, которой в ее время еще не существовало.

ENIAC и его программистки: шесть женщин, которые настраивали провода

Первый широкомасштабный электронный цифровой компьютер ENIAC был представлен публике 14 февраля 1946 года. Эта машина весила 27 тонн, занимала 167 квадратных метров и могла выполнять 357 умножений в секунду — по тем временам фантастическая производительность. Программирование тогда выглядело совсем не так, как сегодня, ведь вместо клавиатуры и экрана были тысячи проводов, тумблеров и переключателей. Чтобы «написать» программу, нужно было физически соединить нужные блоки машины кабелями.

Мало кто знает, что программировали ENIAC не опытные инженеры-мужчины, а шесть молодых женщин, нанятых еще летом 1945 года. Однако их вклад долгие годы оставался в тени. 

О команде первых программистов ENIAC мир совершенно случайно узнал только в конце 1980-х годов. Тогда студентка Гарварда Кэти Клейман, изучая историю женщин в компьютерных науках, наткнулась на фотографии с демонстрации ENIAC. На них были подписаны только имена мужчин. Когда она спросила о женщинах у одной из сооснователей Музея компьютеров в Бостоне, та ответила, что это «refrigerator ladies» — так называли моделей, которых в 1950-х годах нанимали для рекламы холодильников и другой бытовой техники, чтобы они просто «украшали» собой кадр.

Кэти не устроил этот ответ. На снимках женщины не просто стояли, а работали с ENIAC, подключая кабели и нажимая переключатели. Она решила найти их и записать их историю. Клейман разыскала четырех из шести женщин, которые к тому времени уже были в преклонном возрасте, и взяла у них интервью. Оказалось, что для работы на ENIAC выбрали лучших математиков-вычислителей из Лаборатории баллистических исследований: Кей Антонелли, Фрэнсис Билас, Джин Дженнингс, Рут Лихтерман, Бетти Холбертон и Марлин Вескоф.

Программистки ENIAC. Фото: Wikimedia Commons
Программистки ENIAC. Фото: Wikimedia Commons

Они рассчитывали траектории баллистических ракет, участвовали в моделировании ядерных процессов и проектировании сверхзвуковых самолетов, работая без учебников, языков программирования и компиляторов. Их работа десятилетиями оставалась в тени — они даже не были приглашены на 50-летний юбилей ENIAC. 

Благодаря расследованию и настойчивости Клейман в 1997 году женщин-программисток ENIAC включили в Зал славы Women in Technology International (WITI), а их история наконец-то стала известна миру. 

Джин Дженнингс (слева) и Фрэнсис Билас (справа) готовят компьютер к демонстрационному дню в феврале 1946 года // Источник: spectrum.ieee.org
Джин Дженнингс (слева) и Фрэнсис Билас (справа) готовят компьютер к демонстрационному дню в феврале 1946 года // Источник: spectrum.ieee.org

Эти женщины стали первыми в мире программистами и разработали фундаментальные техники программирования, которые стали основой современного ПО. Они придумали подпрограммы — небольшие блоки кода, которые можно было использовать многократно, а также вложенность (nesting), когда одна подпрограмма вызывает другую. 

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

SSEM и EDSAC: как компьютеры научились хранить программы в памяти

Настоящий прорыв в истории программирования случился 21 июня 1948 года. В этот день в Манчестерском университете заработала Small-Scale Experimental Machine (SSEM) — первая в мире вычислительная машина, в которой программа хранилась в той же электронной памяти, что и данные. 

Эту машину ласково прозвали Baby («Младенец»). Она была создана Фредериком Уильямсом и Томом Килберном как экспериментальная модель для изучения свойств компьютерной памяти на электронно-лучевых трубках. У Baby было всего 32 слова памяти и семь инструкций, но она доказала главное: программа может храниться в памяти компьютера, а не задаваться вручную через провода и переключатели.

Принцип, который продемонстрировала Baby, назывался архитектурой фон Неймана — в честь математика Джона фон Неймана, который описал его в 1945 году. Согласно этой идее, команды программы и данные, с которыми она работает, хранятся в одной и той же памяти и обрабатываются одним процессором. Без этого принципа не было бы ни современных языков программирования, ни операционных систем, ни возможности перезаписывать программы без физической перестройки машины. Baby стала доказательством того, что эта концепция работает.

Manchester Small-Scale Experimental Machine. Фото: cubiq.ru
Manchester Small-Scale Experimental Machine. Фото: cubiq.ru

6 мая 1949 года в Кембриджском университете запустили EDSAC — первую в мире полноценную ЭВМ, реализующую концепцию хранимой программы. EDSAC был создан группой разработчиков во главе с Морисом Уилксом. EDSAC был рабочей машиной, на которой программисты могли писать и запускать свои программы без физической перенастройки.

Первой программой на EDSAC стало вычисление таблицы квадратов чисел от 0 до 99. Именно с EDSAC началась волна создания аналогичных систем по всему миру. Программисты больше не были «настройщиками проводов» — они стали теми, кто пишет код.

Грейс Хоппер и рождение компилятора: как мы заговорили с машинами на человеческом языке

В 1950-е годы программисты по-прежнему писали на машинном языке — последовательностях нулей и единиц. Это было медленно, мучительно и чревато ошибками. Все изменила Грейс Хоппер — женщина-математик и адмирал ВМС США, о которой у нас уже была отдельная статья. В 1952 году, работая над компьютером UNIVAC I, она создала первую в мире систему, которую можно назвать компилятором. Она записала часто используемые подпрограммы и научила компьютер автоматически преобразовывать спецификацию программы в машинный код.

Грейс Хоппер. Источник: habr.com
Грейс Хоппер. Источник: habr.com

Система называлась A-0 и была, по современным меркам, скорее загрузчиком или компоновщиком, чем полноценным компилятором. Программа задавалась как последовательность подпрограмм с числовыми кодами. Но это был первый шаг к тому, чтобы освободить программиста от ручного перевода алгоритмов в двоичный код. Хоппер продолжала развивать свою идею. За A-0 последовали A-1, A-2, A-3 (выпущенная как ARITH-MATIC). Интересно, что исходный код A-2 был предоставлен клиентам с предложением присылать свои улучшения обратно — это был один из ранних примеров открытого программного обеспечения.

В 1954 году Хоппер и ее команда создали FLOW-MATIC (изначально назывался B-0 — «Бизнес-язык версия 0»). Это был первый язык для обработки данных, в котором команды записывались не математическими символами, а предложениями на английском языке. Вместо того, чтобы запоминать коды операций, программисты могли писать что-то вроде «COMPARE A AND B» или «ADD C TO D». Это напрямую привело к созданию COBOL в 1959 году — языка для бизнес-задач, на котором до сих пор работают банки, страховые компании и системы бронирования. 

Хоппер также популяризировала слово «баг» — после того, как в 1947 году в реле компьютера Mark II нашли мотылька, который вызвал сбой.

От FORTRAN до Python: как рождались языки программирования

За полвека программисты придумали сотни языков — по разным оценкам, около 8,5 тыс. Одни умерли, другие стали легендами, и почти у каждого названия есть своя история. 

Параллельно тому, как Грейс Хоппер и ее команда в Remington Rand разрабатывали первый язык с командами на английском для бизнес-задач, в IBM шла собственная разработка. В 1954 году там стартовал проект по созданию FORTRAN (аббревиатура от FORmula TRANslator — «переводчик формул»), и в апреле 1957 года появился их первый компилятор. Так, в одно и то же время, два коллектива независимо друг от друга создавали языки высокого уровня, но для совершенно разных целей: FORTRAN — для научных и инженерных расчетов, FLOW-MATIC — для обработки коммерческих данных.

Вслед за FORTRAN, уже в 1958 году, появился LISP. Его создатель, Джон Маккарти, разрабатывал язык для работы с символьными выражениями и назвал его от LISt Processor («обработчик списков»). LISP стал языком выбора для исследователей искусственного интеллекта и до сих пор используется в этой области. А через год, в 1959 году, на основе FLOW-MATIC Хоппер был создан COBOL (от COmmon Business-Oriented Language) — язык для бизнес-задач, на котором до сих пор работают банки, страховые компании и системы бронирования.

Джон Маккарти. Фото: techinsider.ru
Джон Маккарти. Фото: techinsider.ru

Дальнейшее развитие языков пошло по пути упрощения и обучения. В 1964 году профессора Дартмутского колледжа Джон Кемени и Томас Куртс создали BASIC (Beginner’s All-purpose Symbolic Instruction Code — «универсальный символический код для начинающих»). Его целью было обучить программированию студентов, не изучавших математику. В 1970 году швейцарский ученый Никлаус Вирт представил язык Pascal, названный в честь французского математика Блеза Паскаля. Вирт хотел подчеркнуть связь с историей вычислений и создать простой язык для обучения структурному программированию.

В 1980 году Министерство обороны США утвердило язык Ada, названный в честь Ады Лавлейс. Язык разрабатывался для встраиваемых систем и приложений, где важна надежность. А в 1990-е годы наступила эра языков, названия которых рождались из повседневности. В 1991 году голландский программист Гвидо ван Россум назвал свой язык Python в честь британского комедийного шоу Monty Python’s Flying Circus, а не в честь змеи. А в 1995 году Джеймс Гослинг и его команда из Sun Microsystems переименовали свой язык из Oak (в честь дуба за окном) в Java — вдохновившись кофе, который они пили.

Заключение

256-й день года, День программиста, напоминает: за каждым байтом, каждой строкой кода стоит человек. От Ады Лавлейс до шести девушек с ENIAC, настраивавших провода вручную. От SSEM и EDSAC, доказавших, что программа может храниться в памяти, до Грейс Хоппер, придумавшей компилятор и научившей компьютеры понимать человеческий язык.

Каждый язык программирования — это философия, история и характер его создателя. FORTRAN был рожден для науки, COBOL — для бизнеса, LISP — для искусственного интеллекта, Pascal — для обучения, Java — для интернета, Python — для простоты и удовольствия. И все они выросли из одной идеи: человек и машина могут понимать друг друга.

13 сентября — день тех, кто делает это возможным. С праздником, программисты!

Читайте также:

Что будем искать? Например,ChatGPT

Мы в социальных сетях