Как написали первую программу без программы для написания программ?
Если коротко, то новые языки программирования и другие инструменты создаются на основе уже существующих. Полная аналогия с другими областями техники, где новые станки и материалы позволяют создавать всё более совершенные станки и материалы. Как все станки начались с палки-копалки и кремниевого рубила, так и языки программирования начались с перфокарт и нечитаемого двоичного кода.
Центральный процессор вашего компьютера понимает только программы, написанные на языке ноликов и единичек. Например, команда «прибавить константу 5 к числу, записанному в регистре AL» записывается так:
Здесь 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 и замкнуть рекурсию.
Источник статьи: http://thequestion.ru/questions/27943/kak_napisali_pervuiu_programmu_bez_dlia_5847e150
Первые программы и программисты
Британские специалисты первыми более 60 лет назад построили программируемые компьютеры, а потому именно они по праву могут называться первыми программистами.

Какими бы аргументами ни старались доказать первенство Атанасова и Берри, элементарная логика отказывает признать именно их детище предком современных компьютеров – ABC имеет к нынешним компьютерам примерно такое же отношение, как неандерталец к современному человеку. ABC есть не что иное, как параллельная ветвь эволюции, закончившая свое существование, факт в истории, и не более. Лично Джон Атанасов ни в чем дурном не замечен, он никогда прежде не претендовал на первенство, более того, как добросовестный ученый, сам признал, что математической основой вычислительного устройства ABC стали идеи, почерпнутые у отечественного математика Михаила Филипповича Кравчука (1892-1942), погибшего в ГУЛАГе. Атанасов просто перевел с русского его двухтомный труд и прислал благодарственное письмо, но к тому моменту, когда оно пришло, высокочтимый им ученый уже был на Колыме. Память о Кравчуке сейчас восстанавливается, теперь стало известно, что он автор почти 200 научных работ, но, пожалуй, самым весомым свидетельством заслуг Кравчука может служить его научная школа. В числе его учеников основоположники ракетной техники Сергей Королев и Владимир Челомей, а также конструктор авиационных двигателей Архип Люлька. Возможно, имеет право на жизнь гипотеза о существовании еще не выявленной связи между научным наследием Кравчука, работавшего на Украине, и первым советским компьютером МЭСМ, который был создан под руководством Сергея Лебедева в послевоенном Киеве, а не в главных научных центрах Москвы или Ленинграда, что было бы естественнее.
Удивительно, но вопрос относительно первой в современном смысле программы разрешается гораздо проще – кто и когда ее написал, не вызывает сомнения. Том Килбурн – автор самой первой программы, один из разработчиков машины SSEM (Small Scale Experimental Machine), которую еще называли The Baby (1948). Манчестерский «Бэби» был первым программируемым компьютером, поэтому вполне естественно, для него и была написана первая программа. Справедливости ради, следует заметить присутствие в названии слова «экспериментальный», так оно и было: SSEM использовалась как стенд для оценки возможности применения электронно-лучевых трубок в качестве памяти, а настоящим, первым полноценным программируемым компьютером оказался английский EDSAC (1949). Дэвид Уилер не только написал для EDSAC первые программы, но и был основным автором первого учебника по программированию.
Главные события компьютерной истории развернулись за океаном, но англичанам не случайно удалось на пару лет опередить американцев в создании программируемых компьютеров – именно здесь имелась необходимая база из электронных компонентов, теоретических наработок и практического опыта создания специализированного компьютера Colossus, использованного для расшифровки вражеских радиограмм. Теоретическими предпосылками англичане обязаны Алану Тьюрингу, и не следует забывать, что самая передовая на тот момент электроника создавалась для радиолокации, а радар, как известно, был изобретен в начале прошлого века в Англии, и именно англичане были пионерами в радиолокационной технике для обнаружения летящих целей.
База была, к тому же по окончании Второй мировой войны Великобритания странным образом стремилась забыть военное прошлое: по необъяснимой причине уничтожили и засекретили Colossus, закрыли различные учреждения, созданные для решения актуальных в военное время задач, следствием всего этого стала массовая миграция специалистов из оборонной сферы в университеты. Наиболее продвинутые ученые сконцентрировались в нескольких граждански центрах по разработке компьютеров, прежде всего в лабораториях при Манчестерском и Кембриджском университетах – эти две группы и стали лидерами. Кроме этого, в Национальной физической лаборатории, в Бирбекском колледже в Лондоне и еще в нескольких учебных заведениях развернулись работы по компьютерной тематике.
Компьютеры из Манчестера
В период с 1946-го по 1948 год в Манчес-терский университет пришли несколько выдающихся персонажей, в итоге здесь собралась ударная команда, включавшая основного разработчика Colossus Макса Ньюмана, его коллегу-математика Джека Гуда, а также Фредди Уильямса и Тома Килбурна – двух инженеров, ранее разрабатывавших радары, они-то и стали основными создателями SSEM. На последней фазе к ним присоединился Алан Тьюринг. Радарное прошлое Уильямса и Килбурна привело к выбору к качестве главного компонента SSEM иконоскопа?– электронно-лучевой трубки, изобретенной в 1923 году русским инженером Владимиром Зворыкиным (1888-1982). Не исключено, что раньше них идею использования трубки в качестве запоминающего устройства выдвинул Преспер Эккерт, есть мнение, что Уильямс встречался с ним в 1946 году на лекциях в США. Как бы то ни было, но в конце того же года Уильямс подал патентную заявку, где изложил принцип запоминающего устройства на ЭЛТ, поэтому иногда такие устройства называют «трубками Уильямса».
Принцип действия трубки в качестве памяти достаточно прост. Электронный луч, сканируя поверхность экрана, не только вызывает вспышки тех точек, куда подается заряд, но и оставляет их заряженными на 0,2 секунды. Это явление можно использовать как для формирования изображения, так и для хранения данных, если непрерывно регенерировать изображение, считывать состояние точек и производить в них запись. Реальная процедура сложнее, запись ведется в форме точек и тире, учитывая, что считывающий луч нарушает запись, ее необходимо восстанавливать и т.д. Все это преодолимые препятствия, но общей слабостью любых запоминающих устройств на ЭЛТ остается органически присущие им ошибки, из-за особенностей фосфорного покрытия иногда биты теряются, но реальной альтернативы им не было, и трубки применялась в качестве запоминающих устройств для ЭВМ вплоть до конца 50-х годов, когда индустрия перешла на ферритовую память. Трубки в качестве запоминающих устройств использовал и Джон фон Нейман в своем компьютере IAS (1952), они применялись в серийных машинах, например в «оборонном калькуляторе» IBM 701 и его гражданских аналогах IBM 702 и IBM 650, в первом серийном отечественном мэйнфрейме «Стрела» (1953).
На принципах, проверенных в SSEM, было построено несколько выдающихся компьютеров первого поколения. Выше представлена блок-схема этой машины, и несложно заметить, что она заметно отличается от архитектуры фон Неймана – простота объясняется решаемой целью, ведь это не прибор для расчетов, а стенд для проверки гипотезы.
Память «Бэби» состояла из 32 слов по 32 бит (матрица на экране), то есть ее емкость была равна 1 Кбайт, и предназначалась она для хранения команд, данных и результатов. Кроме ЭЛТ в логике машины использовались 300 диодов и 280 пентодов. Весогабаритные параметры этого «Бэби», как у небольшого грузовика: длина более 5 м, высота более 2 м, вес около тонны. Количество команд – 7: безусловный переход, несколько команд управления регистрами, вычитание и остановка, а формат команды близок к одноадресному.

Машина Manchester Mark 1, или Manchester Automatic Digital Machine (MADM), в июне 1949 года без сбоев проработала 9 часов, выполняя программу поиска наибольшего обнаруживаемого числа в последовательности простых чисел Мерсенна. Несмотря на очевидные ограничения, этот компьютер стал поводом для многочисленных спекуляций о возможностях электронного мозга и всякого рода аналогичных заблуждений. С практической же точки зрения существенно то, что MADM стала прототипом для Ferranti Mark 1 (1951). Этот компьютер иногда называют первым коммерческим универсальным, что спорно, поскольку Мочли и Эккерт, перейдя в Remington Rand, в том же году выпустили UNIVAC 1, который стал по-настоящему серийным изделием и был выпущен в количестве 40 экземпляров. Влияние Manchester Mark 1 обнаруживается и в компьютерах IBM 701 и 702, эта корпорация в массовом количестве производила электромеханические табуляторы на перфокартах и с небольшим опозданием включилась в гонку за создание мэйнфреймов первого поколения.
Уильямс и Килбурн совместно разработали еще один компьютер – Meg, в составе которого появился процессор для выполнения операций над числами в формате с плавающей запятой. После него Уильямс потерял интерес к компьютерам и занялся разработкой автоматических трансмиссий для автомобилей, одна из их версий была установлена в его собственной машине. Килбурн продолжил начатое дело, и под его руководством были построены еще две экспериментальные модели – Muse и MU5, ставшие прототипами для серийных Ferranti Atlas и ICL 2900.
Кембридж и EDSAC
Часто первым компьютером с хранимой программой называют EDSAC (Electronic Delay Storage Automatic Calculator – «автоматический электронный калькулятор с памятью на линиях задержки»). Это утверждение не лишено смысла, но с уточнением – это хронологически первый компьютер, построенный по схеме фон Неймана. Он был построен на три месяца раньше, чем EDVAC, с которого фон Нейман «списал» схему, получившую его имя. В 1945 году он вместе с Германом Гольдшейном, невзирая на других авторов, выпустил документ First Draft of a Report on the EDVAC, в котором описал принцип действия компьютера с памятью, способной хранить программы и данные. Поступок, прямо скажем, сомнительного свойства, но свое действие он возымел: экземпляры документа попали в несколько лабораторий в разных странах, и их использовали непосредственно как руководство для создания компьютеров. В отличие от большинства своих «сводных братьев» EDVAC отличался добросовестностью конструкции, он мог работать по 20 часов в сутки и прожил вплоть до 1961 года, претерпел ряд модернизаций, был доукомплектован магнитным барабаном и процессором вещественной арифметики.
И все же EDVAC был вторым, а первым в мае 1949 года заработал EDSAC, и с него пошла волна создания аналогичных систем, начавшаяся с австралийского компьютера CSIRAC (ноябрь 1949 года). Тем временем Джон фон Нейман продолжил популяризацию своих и чужих идей, работая в Институте перспективных исследований (Institute for Advanced Study, IAS), где под его руководством вышла книга «Предварительные исследования по логическому проектированию электронных счетных инструментов». Описанная в ней архитектура получила название IAS – так было положено начало Open Source. Для создания компьютеров хватало общераспространенных тогда радиодеталей, поэтому для многих университетов и лабораторий открывалась возможность собирать их собственными силами. По архитектуре IAS было построено почти два десятка машин: JOHNNIAC (корпорация Rand), ILLIAC I (Университет штата Иллинойс), MANIAC I (Национальная лаборатория в Лос-Аламосе). Строили такие машины в Швеции (BESK, Стокгольмский университет) и в Израиле (WEIZAC, Институт Вейцмана). В ряд IAS-подобных машин попадает и отечественная БЭСМ.


Проект EDSAC не был бы так успешен, если бы в нем не принял участие Дэвид Уилер, человек, которого можно вполне заслуженно назвать первым профессиональным программистом. Свою знаменитую книгу (1951), первый в истории учебник по программированию «Подготовка программ для электронного цифрового компьютера» (The Preparation of Programs for an Electronic Digital Computer), он написал в соавторстве с Морисом Уилксом и Стэнли Джилом. Уилер всю жизнь, за исключением нескольких лет преподавания в Университете штата Иллинойс и Калифорнийском университете в Беркли, проработал в Кембриджском университете. Начал он с того, что заменил двоичную запись команд символической и назвал эту форму «инициалами команд» (initial orders), его язык был прообразом будущих языков ассемблера, где инициалы обозначали коды команд, идентификаторы служили символическими адресами, и имелась процедура трансляции. И еще одно очень, казалось бы, простое изобретение – Wheeler Jump, то есть прыжок Уилера, представляющий собой вызов подпрограммы, существующей в виде отдельной функции с параметрами или без.
Уилеру принадлежит несколько популярных афоризмов, самый известный из них: «Любая проблема в компьютерной науке может быть решена путем перехода на следующий уровень абстракции. Однако при этом создаются новые проблемы». В то время когда Уилер писал эти слова, в основном имелась в виду косвенная адресация, сегодня их вполне можно отнести и к виртуализации.
Наследники Дифференциальной и Аналитической машины Бэббиджа
Третий известный британский проект – Automatic Computing Engine (ACE), которым поначалу руководил Тьюринг. Использование в названии слова Engine – дань памяти дифференциальной и аналитической машинам Чарьза Бэббиджа. Теоретической предпосылкой к проекту, осуществлявшемуся в математическом отделении Национальной физической лаборатории была работа Тьюринга Proposed Electronic Calculator (1936). Свой проект он предложил к обсуждению в начале 1946 года, а первая фаза проекта проходила в обстановке повышенной секретности, сохранившейся со времен Colossus, поэтому она в основном носила теоретический характер. Более того, до работы на ACE не допустили Томми Фоулера, основного разработчика Colossus, который имел опыт создания электронно-механического устройства большой сложности. Поэтому группе Тьюринга не хватило практической экспертизы, и решили ограничиться усеченной (пилотной) версией Pilot ACE. Этот компьютер заработал в мае 1950 года. Непосредственными преемниками Pilot ACE стали компактный компьютер G-15 от Bendix Corporation, его иногда называют первым ПК, и серия из 30 компьютеров DEUCE (Digital Electronic Universal Computing Engine) компании English Electric. Ни та, ни другая больше компьютерами не занимались.
Первые программисты Страны Советов
Порой кажется, что утверждение «история не имеет сослагательного наклонения» придумали для оправдания. По крайней мере, если бы тем, кто создавал первые образцы вычислительной техники и программ, дали возможность нормально работать, страна, возможно, бы не оказалась в нынешнем положении.

От макетной до малой счетной машины
МЭСМ, как и британская SSEM, задумывалась как макет, поэтому изначально называлась Модельная Электронная Счетная Машина. Но в отличие от SSEM макет оказался вполне работоспособным, и написанные для него первые в отечественной истории программы почти с самого начала имели прикладное значение. Машина была собрана под руководством Лебедева в специально созданной для этой цели лаборатории, располагавшейся в двухэтажном здании (некоторое время там была психиатрическая лечебница) на территории Свято-Пантелеймоновского монастыря. Сегодня вряд ли можно с достаточной достоверностью сказать, почему именно в Киеве была построена первая советская ЭВМ и почему до 1956 года, до того как их возглавил Виктор Глушков, работы в этом направлении прекратились и были переданы в Москву. Однако есть информация к размышлению. Вот выдержка из газетного варианта доклада, сделанного А.Г. Марчуком, директором Института систем информатики СО РАН имени А.П. Ершова, «Роль М.А. Лаврентьева в становлении отечественной техники»: «Возможно, к окончательному решению заняться разработкой цифровой ЭВМ С.А. Лебедева подтолкнул М.А. Лаврентьев. Такое мнение высказывали Глушков, Крейн (запрограммировавший совместно с С.А. Авраменко первую задачу для МЭСМ) и О.А. Богомолец. Последний в 1946-1948 годах несколько раз бывал в Швейцарии и, будучи заядлым радиолюбителем, собирал проспекты и журналы с сообщениями о цифровых вычислительных устройствах. Приехав в Киев летом 1948 года, он показал журналы Лаврентьеву, а тот – Лебедеву. Интрига заключается в том, что Швейцария после войны арендовала третий вариант компьютера известного немецкого пионера вычислительной техники Конрада Цузе. Это наводит на мысль, что передаваемые С.А. Лебедеву материалы могли содержать не только рекламную информацию об английских и американских компьютерах, но и более содержательную, о немецкой Z-4. Слабым подтверждением этой гипотезы является то, что, по утверждению А.Н. Томилина, ближайший ученик Лебедева, академик В.А. Мельников, в восьмидесятые годы активно интересовался творчеством Цузе».
Может сложиться впечатление, что создание машины – это чуть ли не личная инициатива Лаврентьева, Лебедева и Богомольца, и если бы это случилось не в СССР, то можно было бы этому поверить, но на Украине и в условиях послевоенной разрухи? Что здесь не так и чего стоит упоминание визитов Олега Богомольца, сына Александра Богомольца, президента Академии наук Украины до 1946 года, в Швейцарию? Нетрудно догадаться, кто и зачем в те времена ездил в Швейцарию. И какие журналы и проспекты можно было купить в послевоенные годы, да и вообще, о какой рекламе компьютеров можно говорить? Есть документ «Протокол №1 заседания закрытого ученого совета Института электротехники и теплоэнергетики АН УССР от 8 января 1951». На этом заседании, представляя МЭСМ, Лебедев сказал: «Я имею данные по 18 машинам, разработанным американцами, эти данные носят характер рекламы, без каких-либо сведений о том, как машины устроены. В вопросе постройки счетных машин мы должны догонять заграницу, и должны это сделать быстро. По данным заграничной литературы, проектирование и постройка машины ведется 5-10 лет, мы хотим осуществить постройку машины за 2 года».
Начав в октябре 1948-го с нуля, коллективу Лебедева удалось через три года, 6 ноября 1950 года, осуществить пробный запуск машины. На МЭСМ работали программы вычисления суммы нечетного ряда факториала числа и возведения в степень. Пуск МЭСМ в эксплуатацию был осуществлен 25 декабря того же года. На этот раз на машине решались реальные задачи вычисления функций распределения вероятностей. Дата запуска МЭСМ регламентировалась специальным постановлением правительства, все работы осуществлялись в обстановке строгой секретности. 12 января 1952 года началось выполнение заказов по расчетам. Осенью 1952-го на МЭСМ были выполнены расчеты генераторов Куйбышевской ГЭС.
Первые программы для МЭСМ были написаны С.Г. Крейном и С.А. Авраменко, ни тот, ни другой впоследствии не связали свою профессиональную деятельность с программированием. Крейн стал профессором Воронежского государственного университета, заместителем директора по научной работе НИИ математики при этом университете, и вместе с коллегами М.А. Красносельским и В.И. Соболевым создал воронежскую школу функционального анализа. О дальнейшей судьбе Авраменко известно меньше, есть лишь воспоминания о том, что он был начальником Математического сектора в КБ-11 (Арзамас-16, ныне Саров).
Лев Дашевский и Екатерина Шкабара, основные помощники Лебедева, в своей книге «Как это начиналось» вспоминают: «Первая пробная задача была выбрана из области баллистики с весьма существенными упрощениями (не учитывалось сопротивление воздуха). Программа была составлена работавшими с нами математиками С.Г. Крейном и С.А. Авраменко. При этом контрольный расчет был выполнен ими непосредственно в двоичной системе, что обеспечило возможность проверки машины по циклам и по тактам, наблюдая по сигнализации пульта управления за правильностью выполнения программы». Вскоре после этого на МЭСМ решали задачи из области термоядерных процессов, космических полетов, ракетной техники и др.
Родом с Калужской заставы
В начале 1947 года произошло событие, имевшее серьезные последствия. Академик Аксель Берг, в ту пору директор Центрального научно-исследовательского института радиолокации (ЦНИИ-108), свел вместе Исаака Брука и своего сотрудника Башира Рамеева, которых объединял общий интерес к созданию собственного аналога машины ENIAC Мочли и Эккерта. По одним легендам, Рамеев узнал о компьютере, слушая радио BBC, по другим – Брук, будучи артиллерийским академиком, знал о том, что американцы построили машину для расчета таблиц для стрельб, но, как бы то ни было, Рамеев перешел из ЦНИИ-108 в ЭНИН (Лабораторию электросистем Энергетического института АН СССР), руководимую Бруком. Лаборатория находилась в двух расположенных друг напротив друга жилых домах по Большой Калужской, позже переименованной в Ленинский проспект. За несколько месяцев Брук и Рамеев разработали проект цифровой электронной вычислительной машины без хранимой в памяти программы и в декабре 1948 года послали заявку на изобретение «Автоматическая цифровая машина» и получили авторское свидетельство. Постановление президиума АН СССР о разработке М-1 было принято в апреле 1950 года, а уже в январе 1952 года (менее чем через месяц после сдачи МЭСМ) началась ее практическая эксплуатация.
Летом 1952 года началась комплексная отладка машины, включавшая в себя выполнение арифметических и логических операций по программе, в автоматическом режиме. Разработчик устройства ввода/вывода Александр Залкинд написал самые первые программы для М-1. Одной из них было решение уравнения параболы, задача примечательна тем, что в процессе ее решения получались одинаковые значения для оси Y как для положительного, так и для отрицательного значений X. Сравнивая симметричные значения результатов, можно было определить правильность работы машины. Второй программой было решение уравнения у=1/х. По воспоминаниям Залкинда, одним из первых больших ученых, проявивших интерес к М-1, был академик Сергей Соболев, руководивший математическим обеспечением атомного проекта. Для решения одной из задач требовалось провести обращение матриц большой размерности, что и было выполнено на М-1, собранной почти из тысячи электронных ламп-пентодов. Сотрудничеству Соболева с создателями следующей модели М-2 помешал эпизод, случившийся на выборах в действительные члены АН СССР по Отделению физико-математических наук (как тут не вспомнить параллельность судеб). На одно место претендовали Лебедев и Брук, решающим стал голос Соболева, отданный им за первого из двух кандидатов. После этого Брук отказался предоставить МГУ, где работал Соболев, машину М-2, созданную в ЭНИН. Тогда Соболев принял решение разработать ЭВМ силами сотрудников университета, в конечном итоге это привело к тому, что Николай Брусенцов создал машину «Сетунь» с трехзначной логикой.
Выходцы из ЭНИН стали основателями нескольких известных предприятий. Рамеев перешел под начало Юрия Базилевского в Специальное конструкторское бюро № 245 при московском заводе САМ для участия в разработке ЭВМ «Стрела», а через несколько лет на базе СКБ-245 был создан НИИ электронных машин (НИЭМ). Группа в составе Николая Матюхина, Александра Залкинда и еще нескольких сотрудников перешла в НИИ-101 (НИИ автоматической аппаратуры Минрадиопрома), чтобы разрабатывать системы управления ПВО.
Первое поколение, первые шаги
Забытые компьютеры первого поколения были намного ближе к современности, чем это можно предположить.
Colossus, победивший Lorenz
В первой половине XX века было выпущено невероятное множество типов самых разнообразных механических шифраторов. Их производили в СССР, Японии, США, Великобритании и в ряде других стран.
Источник статьи: http://www.osp.ru/os/2010/01/13000691

