На чем была написана первая программа. Самый первый компьютер в мире — кто создал? Все для фронта

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

Для написания программ используются языки программирования, которые разделяют на низкоуровневые, высокоуровневые и сверхвысокоуровневые, а какой из них какой и чем отличается станет ясно чуть позже. Но забегая вперед добавлю, что каждый язык создан для определенных задач и не всегда одну и ту же задачу можно реализовать на разных языках.
Для понятности, буду приводить примеры на бытовых приборах и задачах, с которыми мы сталкиваемся каждый день.
Итак, задача - нарезать хлеб к обеду. Для человека простейшая задача - чего его там резать-то, взял и нарезал, правда?
Самый главный навык программиста, без которого ничего не получится - умение разделять задачу на последовательность действий. Чем ниже уровень языка программирования, тем более детально нужно описывать эту последовательность.

Приведу пример, как выглядела бы программа по нарезке хлеба для нашего тела

Задача "нарезать хлеба" на языке программирования высокого уровня

1.Открыть правой рукой хлебницу;
__2.Взять булку хлеба правой рукой;
__3.Положить хлеб на разделочную доску; (предположим, что доска уже лежала на столе)
__4.Открыть правой рукой верхний ящик стола;
__5.Найти блестящий нож, длиной 20 см, с черной ручкой;
__6.Взять нож в правую руку;
__7.Поднести нож к хлебу;
__8.Зафиксировать хлеб левой рукой, взявшись за левый край булки;
__9.Расположить нож строго над правым ребром булки хлеба;
__10.Повторять следующие действия 5 раз:
____10.1.Отступить влево на сантиметр;
____10.2.Повторять следующие действия, пока лезвие ножа не не коснется доски:
________10.2.1.Прижать нож к хлебу;
________10.2.2.Совершить ножом возвратно поступательное движение вперед-назад;
____10.3.Поднять нож вверх;
__11.Положить нож в ящик;
__12.Отпустить левой рукой хлеб.
Все, программа по нарезке хлеба в количестве пяти кусков готова, можно ее продолжить, описав стирание крошек со стола, укладывания нарезанных кусочков на тарелочку и т.д.

Отладка программы

Запускаем программу и смотрим, как она работает:
Ой... вместе с пятым куском и палец отрезал...
чёрт! остановить программу!
Я же не написал как именно нужно зафиксировать хлеб левой рукой, схватился как попало и большой палец торчал в сторону...
Возвращаемся к строчке "Зафиксировать хлеб левой рукой, взявшись за левый край булки;"
После нее пишем:
"Поджать большой палец левой руки влево, к ладони;"
Запускаем программу
Ой... на строчке "Положить нож в ящик;" нож упал на пол...
Проклятье! оказывается, стол стоит немного под наклоном и ящик сам закрылся...
Возвращаемся к коду и перед строчкой "Положить нож в ящик;" пишем "Открыть правой рукой верхний ящик стола;"
Заметили ошибку? Нет?!
Как мы можем открыть ящик правой рукой, если в этой руке нож? Значит, сначала нужно положить нож на стол, потом открыть ящик, снова взять нож и т.д.
И делаем мы это до тех пор, пока хлеб не будет нарезан как следует, без повреждения мебели и пальцев.
Вот, примерно так происходит отладка
С опытом начинаешь писать программы, которые работают с первого раза, допуская минимум ошибок, а проверка "открыт ли ящик", перед складыванием в него чего-то, входит в привычку.

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

в результате, программа с использованием процедур будет выглядеть так:
__ЗайтиНаКухню();
__НарезатьХлеба(5);
__ПоставитьХлебНаСтол();
__ПомытьПосуду();
и нет предела совершенству

Теперь о языке низкого уровня

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

Стоит немного рассказать что такое высокоуровневый язык и зачем нужен низкоуровневый, если проще писать на высокоуровневом?
Высокоуровневый язык был написан на низкоуровневом, в него были заложены команды, в виде процедур, подразумевающие последовательность действий, таких как "открыть ящик", "взять нож в руку" и т.д. но если по какой-то причине потребуется взять нож только двумя пальцами, потому что ручка сломана или отсутствует, например, то сделать этого не удастся, ибо команда "взять нож в руку" подразумевает использование всех пяти пальцев. Для таких ситуаций в высокоуровневых языках есть возможность делать вставки кода на низкоуровневом языке и вместо стандартной команды "взять нож в руку" пишется код на низком уровне под нож со сломанной ручкой.
Человек все эти операции делает не задумываясь, но машина так не умеет, ей нужно подробно объяснить что, как и в какой последовательности.
Сверхвысокоуровневые языки являются узкоориентированными на определенные задачи, например, для работы на кухне, они включают набор специальных команд и код на них выглядел бы примерно, как программа с использованием процедур, что описана выше.

Вы наверняка сталкивались с тем, что какие-то программы работают только под Windows, например, и их нет под Android или наоборот, хотя функции, казалось бы, обычные, и почему на телефон с Windows Phone нельзя установить Android?
Объясню на примере все той же программы для кухни: в тексте программы сказано "Найти блестящий нож, длиной 20 см, с черной ручкой в верхнем ящике стола", например, это для Windows. Однако, в андройде нет верхнего ящика стола, ножи там хранятся в настенном шкафу, т.е. процедура открытия ящика должна быть заменена на процедуру открытия шкафа, согласитесь - они разные! Но и нож там лежит длиной не 20 см, а в 25, он вовсе не блестящий и ручка у него не черная, а синяя. Поэтому, чтобы нарезать хлеба, нужно существенно переписать программу, хотя результат будет такой же. Для этого существуют кросплатформенные программы, которые могут работать под разными системами, т.е. на разных кухнях, ибо программисты предусмотрели оба варианта. Это, конечно, замечательно, но у них есть и минусы: если у вас всегда используется только кухня с ящиками в столах, то зачем вам код, который умеет работать со шкафами? А место он занимает. Это все равно что купить микроволновку, у которой в комплекте идут две дверки, одна предназначена для открывания влево, а другая вправо и еще у этой печки есть ниша, в которую можно положить ненужную дверку, но из-за этой ниши микроволновка выше на 10 мс. Вы поставите нужную дверку, а ниша будет занимать место.

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


Сюрпризы реновации. Обсуждение законопроекта

Тем не менее у тех жителей столицы, кто внимательно изучил законопроект, сразу же возникло огромное количество вопросов к нему. И самый главный из них: не нарушает ли решение о массовом сносе находящегося в собственности жилья конституционные права москвичей? Все "за" и "против" в студии "Правды.Ру" обсудили депутат Московской городской думы Елена Шувалова и член комитета кредиторов коммерческого банка "Гагаринский", активист Сергей Хабаров.

— Что же не так в этой программе реновации?

Елена Шувалова: Идет не просто дезинформация, а обман на самых разных уровнях. Это не просто какая-то программа сноса хрущевок. Если быть корректным, то речь идет о принятии закона в Государственной думе, о введении изменений в закон о статусе столицы и так далее. Про хрущевки нет ни одного слова. И если уже брать только аспект сноса, то там говорится, что под реновацию попадают дома, которые были построены в период с 1958-го по 1968 год.

Эта программа ставит нормы права города Москвы выше норм права РФ, создает некое государство в государстве и сажает на вулкан всех москвичей, которые могут в любой момент быть депортированы и экспроприированы.

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

Сергей Хабаров: В Конституции написано, что никаким образом нельзя ограничивать право граждан на судебную защиту. Но в документе о реновации прямым текстом говорится, что определенным образом это право может ограничиваться. Дело даже не только в Конституции, там также есть вопрос, вступающий в противоречие с Земельным и Жилищным кодексами.

Е. Ш.: Я бы сказала гораздо жестче: там попираются все нормы судопроизводства.

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

С. Х.: В феврале проходил девятый отчетный выборный съезд Совета муниципальных образований города Москвы, где был поднят вопрос о пятиэтажках, о второй волне сноса. На него был получен ответ от Марата Хуснуллина, который руководит строительным комплексом Москвы: "У нас сейчас нет возможности реализовать эту программу по трем причинам. Первая — это требует грандиозных ресурсов, которых у Москвы просто нет. Второе: порядка 20% от стоимости программы уходит на суды, люди против, с ними приходится как-то договариваться. Наконец, отсутствуют стартовые площадки". В феврале всего этого не было, а 10 марта внезапно был внесен данный проект закона. Разработать проект закона — это не такое простое занятие, его на коленке не напишешь, а тут люди сработали с какой-то уникальной скоростью.

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

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

— А как принадлежность к району отражена в этом законопроекте? То есть, если человек проживает на Кутузовском проспекте, а его дом попал в эту программу, где ему тогда будет предоставляться альтернативное жилье?

Е. Ш.: Для разных районов по-разному. Кто-то получает в своем же районе или в смежных. Особенно не повезло в этом плане жителям Центрального округа и территории Новой Москвы. Кроме того, там есть формулировка "в пределах района", но никто не задумывается на тему того, что уже очень давно идут разговоры об укрупнении отдельных районов Москвы. Какие районы имеются в виду? До каких размеров их будут укрупнять? Где в итоге окажется новый дом, в котором предложат квартиру москвичам?

— Когда граждане начали выяснять, какие же дома будут включены в программу реновации, то оказалось, что это вполне крепкие постройки. После этого и поднялась волна негатива. Зачем это делают городские власти? Неужели они рассчитывали, что все как-то само по себе срастется, никто не заметит и не будет проявлять никакого недовольства?

С. Х.: Нельзя отрицать такую возможность, учитывая, что сам по себе снос пятиэтажных домов на протяжении двадцать лет проходил довольно успешно. В первой программе сноса пятиэтажек дома были совсем плохие, с убитыми коммуникациями и дырявыми стенами. Во вторую волну включены дома, построенные в 50-е годы ХХ века, у них срок годности составляет 100-150 лет. Это хорошие, крепкие дома, просто несколько обшарпанные. У них стены и фундамент в отличном состоянии. Если он водой не заливается, то все, дом может стоять. Главное, что нужно в них сделать — это переложить коммуникации и вместо деревянных рам поставить пластиковые. Но, например, в Очакове эти дома сносят в большом количестве, чуть ли не кварталами. Нужно понимать, что это просто освобождается земля для нового массового строительства.

К публикации подготовила Мария Сныткова

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

Центральный процессор вашего компьютера понимает только программы, написанные на языке ноликов и единичек. Например, команда «прибавить константу 5 к числу, записанному в регистре AL» записывается так:

0000 0100 0000 0101

Здесь 0000 0100 - код операции «прибавить число к регистру AL», а 0000 0101 - двоичное представление числа 5.

На заре индустрии для ввода программы в компьютер нужно было либо перещёлкнуть сотни тумблеров на специальной панели (тумблер ВЫКЛ - нолик, тумблер ВКЛ - единичка), либо пробить дырочки в специальной перфокарте. Ошиблись в одной ячейке из тысячи - программа будет работать неправильно, будьте добры сами найти ошибку методом пристального взгляда.

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

Можно один раз хорошенько помучиться и написать на языке ноликов и единичек вспомогательную программу, которая называется ассемблер («сборщик»). Этот волшебный ассемблер принимает на вход человеко-читаемый текст и преобразует его в нолики и единички. Например, та же самая команда «прибавить константу 5 к числу, записанному в регистре AL» записывается на языке ассемблера x86 так:

Думаю, вы согласитесь, что это всё-таки более читаемо, чем 0000 0100 0000 0101. Здесь хотя бы понятно, что речь идёт о сложении (ADD) и числе 5. Теперь уже дело ассемблера преобразовать эту строчку в 0000 0100 0000 0101. На языке ассемблера сложно писать большие программы, процессоры разных производителей могут требовать разных ассемблеров, но всё равно это был большой шаг вперёд.

Дальше инженерную мысль было не остановить. Нужно один раз помучиться, чтобы написать на ассемблере компилятор языка программирования, например Фортрана. Потом ещё немного помучиться, чтобы написать на Фортране компилятор Алгола. Затем передохнуть, помучиться и написать на Алголе компилятор языка CPL. Ещё немного мучений, и можно на основе CPL написать компилятор языка C. Дальше можно уже не мучиться и в свое удовольствие писать на C компиляторы C++, Java, C# и других современных языков. Впрочем, никто не запретит использовать Java чтобы написать ассемблер x86 и замкнуть рекурсию.

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

Так, современные пользователи могут сетовать на то, видеофайл загружается на несколько минут дольше, чем должен. Еще каких-то 30-40 лет назад для того, чтобы посмотреть новый фильм, нужно было идти в кинотеатр в назначенное время. Для того чтобы послушать красивую мелодию лет 100 назад, нужно было бы пригласить к себе музыканта и отдать за это хорошие деньги. И это если говорить только о развлечениях. Трудно себе представить, сколько времени тратилось на проведение расчетов и составление документов, на коммуникацию и получение важной информации. Сегодня это все делают за нас машины благодаря одному главному процессу - программированию. Даже если взглянуть на современную стиральную машинку или мультиварку, то и она оснащена простеньким, но все же искусственным интеллектом. Такие приборы мы используем почти каждый день, но даже не задумываемся, благодаря кому это все стало возможно. Сегодня мы поговорим о людях, которые облегчили нашу жизнь в разы и открыли нам невероятный мир программного кода - программистах. Вы узнаете, кто был первый программист в истории и с чего все начиналось.

Первые шаги к программе

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

Многим из нас приходилось слышать о таком известном английском писателе, как Джорж Гордон Байрон. Его дочь, Ада Августа Лавлейс (Байрон), и есть первый программист в мире. Любовь к математике девушке привила мать еще с самого детства. С ней занимались лучшие ученые в округе, где жила юная особа. Так, ее первым учителем стал выдающийся Август де Морган, что считался выдающимся математиком и логиком. Именно эти две составляющие и закладывают основу программирования. Они и помогли девушке в ее последующих научных трудах.

Первый программист в мире - Ада Августа Байрон

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

Знакомство с аналитической машиной

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

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

Первый программист и его будни

В возрасте девятнадцати лет Ада Августа выходит замуж. Ее избранником становится лорд Кинг, впоследствии - граф Лавлейс. На тот момент лорду было 29 лет, и семейная жизнь Ады протекала счастливо и размеренно. Муж девушки поддерживал все ее научные начинания и даже восхищался складом ее ума. Супруги довольно часто посещали светские приемы, однако молодой особе было интересно совсем другое. Даже несмотря на замужество, ее общение с Чарльзом Бэббиджем стало ее теснее и сердечнее. Девушка напоминала Бэббиджу его погибшую дочь, тем более Ада являлась почти ее ровесницей. "Отца компьютера" также восхищали способности девушки, они часто обменивались интересными идеями и показывали друг другу свои вычисления. Со временем они стали не только коллегами, но и хорошими друзьями. Ада не выносила поверхностного общества и глупых людей. Она была требовательна к себе и окружающим. При математическом складе ума ее привлекали вещи, не свойственные женщинам. Девушка стала настоящим гением своего времени и посвятила свою жизнь науке.

Ада Августа не останавливается в своих научных расчетах

Со временем первый программист вынуждена была немного отойти от науки. Причиной тому послужило рождение трех детей, и Аде все свое время приходилось проводить с семьей. Но ее любовь к математике была настолько сильна, что она была не готова пожертвовать наукой ради тихой семейной жизни с мужем и детьми. Когда девушка понимает, что больше не может существовать без математики, то просит Бэббиджа найти ей хорошего учителя, чтобы продолжать занятия. Именно в этот момент она уверена в своих силах, как никогда ранее, и готова далеко зайти в своих разработках. Бэббидж отвечает юной ученой письмом, в котором указывает, что в нынешнее время он не может найти ей достойного учителя, но продолжает поиски. Также он отметил, что ее знания в математической сфере просто блестящи, и что он вовсе сомневается, нужен ли ей учитель.

Изучение машин Бэббиджа

Немного позже Ада Августа начинает детально изучать вычислительные машины, сконструированные Бэббиджем. Она просит изобретателя выслать ей подробные сведения, расчеты и чертежи устройства. Девушка всерьез считает, что сотрудничество с изобретателем может стать более чем продуктивным.

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

Первые программы

Свои первые программы для девушка составляла для вычисления чисел Бернулли. Подробнее всего Ада Августа растолковала в своих трудах решение системы двух линейных уравнений. Тогда впервые появилось такое понятие, как рабочие переменные и их последовательная смена в программе. Девушка смогла применить который до сих пор является неотъемлемой частью даже самой сложной современной программы. Вторая программа, описанная в комментариях к статье Манибера, была составлена Адой Августой для вычисления тригонометрических функций и включала в себя работу цикла. Реккурентные вложенные циклы были основой третьей ее программы.

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

Последние годы жизни ученой

Ада умирает в возрасте 36 лет. В таком же возрасте умер ее отец от кровопускания. Отец и дочь скончались из-за одной болезни - рак. Даже несмотря на то, что Ада Августа пыталась лечиться, последние годы ее жизни были мучительными. Каждые новые расчеты были все более утомительными для женщины, но она не прекращала заниматься наукой до самой смерти. В честь Ады названы один из уникальных языков программирования "АДА", два маленьких города в Америке и колледж.

Удивительно, что первым программистом мира является именно женщина. Но эта молодая особа подарила миру свои разработки, которые стали основой для современного программирования.