От безумного ассемблера до Swift: История развития языков программирования
Языки прошли длинный путь. Начиная с тех дней, когда ассемблер и машинный код были единственными средствами взаимодействия с компьютеров (которых еще нельзя было никак назвать портативными), и до эпохи, когда Swift и другие современные языки программирования предоставляют разработчикам высокоуровневые абстракции и эффективные инструменты.
История языков — хроника поиска оптимальных способов выражения логики и решения задач.
Машинный код и Ассемблер
В первое время людям был доступен только машинный код. Выглядел он соответствующе — комбинаторный набор в двоичной системе исчисления. ПК также понимают только машинный код, но современные языки владеют собственными компиляторами и интерпретаторами, которые по-своему переводят абстрактный (человеческий) код на язык машин.
На своей заре программирование было тесно связано с аппаратными характеристиками компьютеров, и программы писались на языках ассемблера, напрямую взаимодействуя с аппаратурой. Ассемблер — это уже выбор в сторону удобства программирования и скорости (хотя с современной точки зрения сомнительно), прямое следствие обычного машинного кода.
Пусть и ассемблер сегодня далеко не самый распространенный язык, он используется в тех случаях, если требуется четкий контроль над аппаратным устройством. Например, в целях экономии вычислительных мощностей. В любом случае, ассемблер — это один из самых сложных языков.
Про него даже ходят мемы.
Для комфортного программирования этого было недостаточно. Возникла весомая потребность в языке «для народа». Точнее, для специалистов из науки, которые смогли бы активно проводить исследования.
Первые высокоуровневые языки «для народа»
После изобретения транзисторов и первых доступных компьютеров IBM разработали Fotran (его же альтернатива Algol Cobol и другие). Программисты получили возможность абстрагироваться от низкоуровневых деталей и сосредоточиться на разработке читаемого и структурированного кода. Это был первый, так называемый, высокоуровневый язык. Кстати, крайне коммерчески успешный.
Уже появилась потребность в специалистах, была необходимость в быстром подъеме скиллов программистов в областях ЭВМ.
По-настоящему массовым программирование стало с появлением языка BASIC в 1964 году. Преподаватели Дартмутского Колледжа — Джон Кемени и Томас Курц — разработали его для обучения студентов основам программирования.
Одна из важных черт Basic — его широкая доступность. Многие домашние компьютеры, такие как Commodore 64, Apple II и IBM PC, предоставляли встроенные среды Basic. Это позволяло обычным людям сразу начинать программировать, не устанавливая и не настраивая дополнительные инструменты.
Тот же ABC, про который мы чуть подробнее рассказывали в другом нашем материале, созданный в конце 1970-х годов в Центре математики и информатики в Амстердаме, как раз пытался заменить устаревший Basic. ABC также был направлен на упрощение программирования и делал упор на читаемость кода. Он включал в себя некоторые инновационные идеи, такие как автоматическое выделение памяти и использование строгой типизации.
Smalltalk, разработанный в исследовательском центре Xerox PARC в конце 1960-х, стал пионером объектно-ориентированного программирования (ООП), добавив в мир программирования новый подход. Всё в Smalltalk представлено в виде объектов.
Но период подобных языков быстро сменился 70-ми. Временем, когда стали как раз появляться уже известные языки современности: C++, С, Pascal.
К современности (70-е — наше время)
Появление первого языка семейства С — непосредственно сам C. Язык программирования был разработан в Bell Labs Деннисом Ритчи в 1972 году. Его создавали в контексте разработки операционной системы Unix, и он быстро приобрел популярность благодаря своей простоте, эффективности и возможности низкоуровневого программирования.
Язык C дал программистам прямой доступ к аппаратным ресурсам компьютера, что сделало его особенно полезным для системного программирования. Кроме того, его переносимость позволила использовать код на различных платформах, что сделало его ключевым инструментом в разработке операционных систем и приложений.
Не стоит забывать и про последующий C++ со своим знаменитым ООП.
С другой стороны появляется Pascal, созданный Никлаусом Виртом в 1970 году с целью предоставить язык, который способствовал бы обучению программированию и разработке надежных и структурированных программ. Pascal внес множество инноваций, таких как блочная структура программы, строгая типизация, использование процедур и функций.
Он был призван стимулировать хорошие практики программирования и был широко использован в учебных заведениях для обучения основам алгоритмов и структур данных. Pascal также оказал влияние на развитие других языков программирования, включая Ada и Delphi.
Scheme, являясь диалектом языка программирования Lisp, отличается своей простотой и чистотой дизайна. Разработанный в MIT в 1975 году, Scheme является минималистичным языком, фокусирующимся на функциональном программировании и лямбда-исчислении. В его особенностях включены динамическая типизация, замыкания и сборка мусора.
Кстати, о сборке мусора. Появляется и наш любимый Python. Но о его истории создания — читайте в другом материале.
В конечном счете, появляются и языки разметки по типу HTML, веб-разработки по типу JavaScript и популярный Java, обеспечивающий независимость от машины, где запускается программа. Кстати, именно поэтому Java топ-1 в мобильной разработке.
На самом деле, в 2020-е годы происходит интересная ситуация. Мы ждем создание полноценных квантовых компьютеров, которым потребуются свои ассемблеры. Уже появились языки крайне высокого уровня для обработки огромных массивов данных по типу R и Matlab. А в 20-ке используемых языков можно найти совсем молодой Swift от Apple. Впрочем, обо всем этом — уже в других материалах…
Прошедшие десятилетия принесли с собой волну инноваций в мире языков программирования. Код ассемблера был буквально про самый глубокий уровень программирования и работу с железом. Basic, недоработанный ABC — «народные» языки, которые помогали учиться писать код. И, конечно, Smalltalk — первый язык, построенный вокруг ООП. Или «C», созданный в 1972 году — «мост» между низкоуровневыми и высокоуровневыми языками, обеспечивающий эффективность и гибкость.
От функциональных языков, таких как Lisp, до объектно-ориентированных, воплощенных в языках Java и C++ — все это и есть история языков программирования. Каждый этап в развитии предоставил программистам новые инструменты для решения сложных задач.
Сегодня языков много и все они лучше служат для тех или иных проектов. Поэтому выбор языка зависит чаще не от частных предпочтений, а сколько от необходимости в разработке конкретного продукта.