От ассемблера до Java: краткая история программирования
Просто и понятно про то, как люди искали с компьютером общий язык

Первый компьютер появился больше 70 лет назад, и с тех пор успели разработать сотни языков программирования. «Мел» и 1С разобрались в истории программирования и рассказывают её простым языком для тех, кому слова «интерпретатор», «полиморфизм» и «инкапсуляция» ни о чем не говорят.
Что было до появления первых языков программирования
В 1945 году в Америке построили первый компьютер — ЭНИАК (Electronic Numerical Integrator And Computer). Он состоял из 17 тысяч ламп, весил 27 тонн и стоил 480 000 долларов. Сравните: новый iPhone X за 1000 долларов помещается в кармане и почти в 25 тысяч раз мощнее.
В те времена ещё не было языков программирования, и ЭНИАК управлялся через систему команд, записанных в машинном коде — то есть в виде последовательности единиц и нолей. Писать программы на машинном коде было долго и сложно. Представьте, что в супермаркете на полке с ценниками нет названий товаров — только номер штрихкода и цена. Чтобы узнать цену, например, на икру, нужно посмотреть номер на банке и сопоставить с ценниками. Из-за ошибки в одну цифру можно взять чёрную икру по цене белого хлеба (а на кассе обнаружить, что сумма в чеке в сто раз больше). Так и одна ошибка в цифре машинного кода приводила к неправильному результату вычисления всей программы.

Ошибки в работе компьютера программисты называют «багами». В переводе с английского bug означает «насекомое» или «жучок». Это слово употребляли и раньше — например, радиоинженеры называли так технические неполадки в оборудовании, которые было трудно обнаружить. Но первый в истории компьютерный баг, по легенде, действительно был насекомым! В 1947 в Гарварде программист Грейс Хоппер искала причину ошибки в работе суперкомпьютера Mark II и обнаружила моль, которая залетела внутрь компьютера и заклинила систему. С помощью скотча она вклеила моль в рабочий журнал и озаглавила запись как «Первый фактический случай обнаружения бага».
Ассемблер — переводчик с человеческого на машинный
Как упростить управление компьютером задумались в Кембриджском университете, когда профессор Морис Уилкс начал работу над созданием электронно-вычислительной машины ЭДСАК. Позже именно для неё была разработана первая компьютерная игра — «Крестики-нолики». Но главная заслуга Уилкса, конечно, не в этом. А в том, что в 1949 году он создал программу, которая позволяла писать команды в удобной для человека форме и сама переводила их в машинный код.
Программу Уилкс называл собирающей системой или «ассемблером», от английского глагола «assemble» — собирать. Вместо двоичного кода в языке ассемблера использовались буквы, цифры или сокращения, которые отражали суть команды. Например, команда «Mov Ax, 6» на языке ассемблера означала «передвинь в ячейку памяти „Ах“ число 6». Согласитесь, запоминать такие команды гораздо проще, чем длинные ряды нолей и единиц.
И всё же у языка ассемблера были серьёзные недостатки. Коды по-прежнему должны были точно соответствовать системе команд компьютера, и для каждой конкретной вычислительной машины был нужен свой язык ассемблера. Такие языки называют машинно-зависимыми или языками низкого уровня.
Первые машинно-независимые языки
Первый язык высокого уровня появился в 1957 году в Америке. Он назывался Фортран (FORmula TRANslator) и позволял писать программы, не думая об архитектуре конкретного компьютера. Код стал «переносимым» — одна и та же программа теперь запускалась на разных устройствах.
Это стало возможным благодаря специальным программам — компиляторам. Они превращали текст на Фортране в машинный код и сами устанавливали соответствия между ним и системой команд компьютера.

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

Сегодня на этом языке так много математических библиотек, что среди ученых даже ходит присказка: «у любой математической задачи уже есть решение на Фортране». Он был настолько успешен, что в Европе создали ALGOL (ALGOrythmic Language) — свой язык программирования высокого уровня, чтобы избежать монополии.
Структурное программирование и язык Си
Программы с каждым годом становились сложнее, а значит росло количество ошибок и время отладки — их обнаружения и исправления. Потребовалось организовывать код программ так, чтобы избежать лишних ошибок и упростить их поиск. Так в начале 70-х появилось структурное программирование.
Идея структурного программирования — в создании программы из последовательных блоков. Программист работает над блоками по очереди и не переходит дальше, пока не убедится, что всё работает, как задумано. Для создания блоков используют три базовых конструкции: последовательность, ветвление и цикл.
Последовательность выполняется автоматически из стоящих друг за другом инструкций: «сначала выполни умножение и деление, потом — сложение и вычитание». Ветвление помогает работать с условиями: «если дискриминант больше нуля, тогда ищи решения, а если меньше, тогда напиши, что решений нет». Цикл помогает многократно повторять действия, пока выполняется условие: «пока корзинка не полная, сорви ягоду с куста и положи в корзинку».
Во времена структурного программирования появился язык Си. Его придумал американец Деннис Ритчи и в 1999 году получил Национальную медаль США за достижения в области технологий и инноваций. Язык был основан на старом языке Би, поэтому его назвали Си — по следующей букве английского алфавита. Си был универсальным и очень быстрым, поэтому сразу широко распространился и стал прародителем для современных языков: C++, C#, Objective C, Java.

Объектно-ориентированное программирование и язык Java
Программы становились всё сложнее, и над одним проектом могли работать десятки человек. Нужно было найти универсальный путь, который бы объединял код, написанный разными программистами. Эту проблему решило объектно-ориентированное программирование (ООП), построенное вокруг абстракции данных. Это значит, что базовым элементом программы становится абстрактный «объект». Объектом может быть что угодно — радуга, квадратное уравнение, «Чёрный квадрат» Малевича. У каждого объекта есть набор характеристик. Например, у радуги это длина дуги, насыщенность, количество видимых цветов. Объекты с одинаковым набором характеристик объединяются в классы. Если взять класс «дом» и задать параметры — длину, высоту, количество этажей, можно получить конкретный дом, в котором вы живёте, — объект. При этом принцип работы один, и не важно, с какими именно данными вы работаете. Работать с объектами класса можно, не вникая в структуру: чтобы снести дом, нам необязательно знать, сколько в нем этажей и комнат.
Первым распространённым объектно-ориентированным языком стал Smalltalk. Его в 1970-х годах разработала группа учёных корпорации Xerox под руководством Алана Кэя. Этого американского учёного называют одним из отцов-основателей ООП — за работу над ним он получил премию Тьюринга. Позже, взяв за основу язык Си, датчанин Бьёрн Страуструп придумал С++. Сейчас этот язык используют для создания высоконагруженных систем (в которых нагрузки начинаются от 10 тысяч пользователей в секунду).

В 1995 году на основе все того же Си создали язык Java. Он обходит многие сложности С++ и гораздо понятнее. Например, в С++ нужно внимательно следить за заполнением памяти программы. Если вы обрабатываете много данных, а затем перестаете их использовать и удаляете все ссылки на них — данные остаются в памяти программы и лежат мёртвым грузом. В Java очисткой такой памяти занимается «автоматический сборщик мусора». Но главной особенностью языка стал способ запуска программ.
Программы на Java превращаются программой-компилятором в специальный байт-код. Его можно запускать на любом устройстве, на котором установлена JVM (Java Virtual Machine) — виртуальная машина Java. Раньше один и тот же текст программы нужно было пропускать через компилятор несколько раз для каждой системы. В Java код компилируется только один раз и работает везде — за его связь с компьютерами отвечает JVM.
Такой подход был революционным с точки зрения переносимости кода. Программы стали кроссплатформенными — это значит, что можно написать один код для компьютера, холодильника, кофемашины и робота из лего, и все они поймут его, если у них есть JVM.
Сейчас Java — это главный язык Android-приложений и для работы с большими объемами данных (big data). Конечно, на Java история программирования не заканчивается. Но большинство новых языков проектируется под узкий класс задач, поэтому их сложно сравнивать между собой. Например, язык Swift был разработан компанией Apple специально для создания приложений под iOS и Mac, а язык Julia — для сохранения высокой производительности при работе с большим объемом вычислений.
Узнать больше об объектно-ориентированном программировании, истории языка Java и о том, как писать на нём программы, можно на специальном курсе «Клуба программистов» от компании 1С. Опытные преподаватели научат школьников 7-8 классов работать с графическими объектами и помогут создать свою первую анимацию на Java. В конце каждый сможет написать собственную компьютерную игру. Полный курс рассчитан на два года (по два занятия в неделю), а первый вводный модуль длится полгода.
Автор текста: Сергей Щербина
Популярные комментарии
Виктория ИльинаЧто, на мой вгляд, произошло с современными детьми? Сегодня мы гораздо лучше умеем выявлять особенности развития детей. То, что раньше оставалось незамеченным или объяснялось словами «ленится», «невоспитанный», «не хочет учиться», сейчас может получить профессиональную оценку и поддержку. Поэтому создаётся ощущение, что таких детей стало резко больше. Необходимо также признать, что современная информационная среда серьёзно изменилась. Ребёнок сегодня живёт в потоке информации, который невозможно сравнить с тем, что было 20–30 лет назад. Одновременно выросли требования к скорости освоения знаний, объёму информации и самостоятельности школьника. При этом школа далеко не всегда успевает адаптироваться к новым условиямю Однако, на мой взгляд, главная причина проблемы лежит глубже. Изменилось отношение общества к школе и образованию. Для многих детей и родителей знания перестали быть безусловной ценностью, а школьные требования стали восприниматься скорее как формальность или препятствие. Одновременно снизился уровень дисциплины, родительского контроля и готовности ребёнка выполнять сложную, не всегда интересную работу. Нельзя сбрасывать со счетов и цифровую среду: компьютерные игры, гаджеты, социальные сети дают ребёнку быстрые эмоции и мгновенную обратную связь, тогда как учеба требует терпения, концентрации и усилий. В результате школе приходится конкурировать не только с внешними развлечениями, но и с изменившейся культурой детства.
Почему раньше дети спокойно сидели на уроках, а сейчас у половины класса либо СДВГ, либо РАС — и они всем мешают?
Александр КомнатныйЯ ни разу не комментировал статьи, но эту прокоментирую. Я ученик, учусь в 9 классе сельской школы. Наш класс, нельзя посчитать порядочным. Но, я скажу на основе личного опыта — дисциплина в классе будет, только когда дети будут боятся. ЛИБО, вы будете прям очень интересно вести предмет. А это редкость. Короче, если вы действительно хотите дисциплины — вам нужен обычный страх. Вы не должны говорить: «Всё, остаётесь у меня ещё на один урок», а потом не оставлять ещё на один урок. Ведь тогда, дети поймут — ничего вы им не сделаете. А вы должны делать. О вас должны ходить страшные легенды, и половина из них должна быть правдой. Тогда, у вас на уроках будет дисциплина. НО, важно — вы не должны ругать за неправильные ответы. Это точно. Ведь, есл вы будете орать из-за неправильного ответа, дети на ваших уроках вообще слова не скажут, а это тоже плохо. Нет, ругать вы должны только за дисциплину. А ещё — не бойтесь заваливать учеников двойками, а может даже колами.
Ученики срывают уроки и не слушают учителя. Как вернуть дисциплину за 4 шага
ОльгаЧто значит стукачество? Я считаю так: если тебя никак это не касается, то об этом рассказать должны участники. Макисмум, что должен сделать ребенок — рассказать об этом родителям, чтобы взрослые люди уже решали надо ли доводить ситуацию до сведения школьной администрации. А если ребенка избили, унизили или регулярно оскорбляют, то он имеет полное право и даже должен рассказать об этом взрослым: учителю и родителям. Потому что дети сами не разберутся — это все миф, что они могут и должны разобраться сами. Может именно это учительница и имела в виду, когда говорила, что дети должны ей все рассказывать? А родители сделали из мухи слона?
Учительница поощряет стукачество в классе. Стоит ли запрещать ребенку доносить на других?








