История программирования — это не только учебник по технологиям, но и увлекательное путешествие по миру идей, открытий и инноваций, которые формировали современные языки. Многие языки программирования, некогда лидеры или новаторы, сегодня считаются устаревшими или даже «мертвыми». Однако, несмотря на утрату актуальности, они продолжают жить в нашей повседневной практике через концепты и идеи, которые они подарили миру. Разобраться в том, почему некоторые из них вымерли, а другие навсегда изменили ИТ-индустрию — важная задача для всех, кто интересуется развитием программирования и хочет понять, что стоит за современным кодом. Начать стоит с одного из четырёх «материнских» языков – COBOL.
Созданный в 1960 году для бизнес-приложений, COBOL стал восприниматься как устаревшая технология и даже сюжет для шуток, однако он до сих пор активно используется в критически важных корпоративных системах, особенно в банках и правительственных учреждениях. Его главная инновация — введение структурированных данных и записи, которые позволили работать с вложенной и иерархической информацией. Эта идея предвосхитила современные структуры данных и объекты. Упадок COBOL объясняется не столько техническими ограничениями, сколько тем, что после его появления академическая среда и разработчики мало обращали внимание на этот язык. Сложность языка и устаревшие компиляторы сделали COBOL непопулярным для новых проектов, но наследие его живёт в продолжении бизнес-среды.
ALGOL — ещё один «материнский» язык, чаще остающийся в тени более известных собратьев. Хотя сегодня он практически не используется, влияние ALGOL невероятно глубоко. Именно этот язык заложил основы структурного программирования, лексического областного видения переменных, встроенных функций и формальных спецификаций языков, включая использование Backus-Naur Form (BNF) для описания синтаксиса. Практически все современные языки унаследовали от ALGOL основные принципы и синтаксис. ALGOL же исчез не из-за технических дефектов, а потому что был исследовательским, а не коммерческим проектом.
Отсутствие стандартного ввода-вывода делало его сложным для применения на практике, а развитие многочисленных ответвлений похоронило оригинал. Язык APL известен своей уникальной концепцией обработки массивов и необычайно лаконичным, хоть и «экзотическим» синтаксисом. Созданный в начале 60-х, он стал революционным для научных вычислений, позволив работать с массивами целиком, использовать матричные операции и свёртки без реализации классических циклов. Благодаря этому APL положил основу для современных математических и научных библиотек — таких как NumPy в Python и Matlab. Однако, его специализированный набор символов и сложность ввода привели к сокращению количества пользователей.
Последующие языки, например J, пытались упростить использование APL, заменяя символы на ASCII, но на это потребовалось слишком много времени, и парадигма так и не получила широкого распространения в современных приложениях. BASIC заслужил место в сердцах миллионов новичков благодаря своей простоте и доступности. Несмотря на то, что в научном плане он сравнительно прост, BASIC сыграл важную социальную роль, предоставив возможность программировать тем, кто раньше не мог себе это позволить — школьникам, любителям и владельцам первых персональных компьютеров. Появление интерпретаторов в реальном времени сделало процесс обучения дружелюбным и наглядным. Со временем, когда на рынок вышли более мощные машины, BASIC потерял позиции, уступив место языкам с более строгой типизацией и структурированность, таким как Паскаль и C.
Впрочем, благодаря Visual Basic, BASIC получил вторую жизнь в сфере автоматизации офисных приложений, но и там постепенно сменяется современными решениями. PL/I — язык, предпринявший амбициозную попытку создать универсальный инструмент и для науки, и для бизнеса. Это привело к обилию возможностей и усложнённости синтаксиса, что в итоге и стало одной из причин его упадка. Несмотря на критику от создателей ALGOL, PL/I первым принёс такие важные концепции, как структурированные типы данных, указатели и перегрузка функций. Многие из идей PL/I позже трансформировались в компоненты широко распространённого языка C.
Тем не менее слишком сложная модель, а также монополия IBM на компиляторы ограничили адаптацию языка за пределами крупных компаний. Революционные идеи объектно-ориентированного программирования зародились в SIMULA 67 — расширении ALGOL для моделирования объектов и событий. SIMULA заложил фундамент концепций классов, наследования, виртуальных методов и инкапсуляции, которые знаем сегодня. Многие языки, особенно C++ и Smalltalk, восприняли идеи SIMULA и адаптировали их. Правда, производительность SIMULA была низкой, что ограничило его применение вне исследовательских целей и крупных машин.
На практике язык уступил место более оптимизированным и удобным объектно-ориентированным системам на базе C++ и Java. Паскаль, созданный Никлаусом Виртом, стал языком для обучения и прототипирования, вобравшим в себя множество концепций ALGOL и упростившим их использование. Несмотря на недостаток новых идей, Паскаль обеспечил развитие шагового уточнения — методологии для тщательной и поэтапной разработки программ. Вместе с его наследниками — Modula и Oberon — Паскаль повлиял на появление модульных систем и формальных методов проверки программ. Хотя язык и уступил популярность C и C++, Паскаль дал мощный толчок образовательной среде и программной инженерии.
Язык CLU с 1975 года представил абстрактные типы данных и обошёл по уровню инноваций многие современные аналоги. В CLU появились итераторы, универсальные типы (generics), а также механизмы обработки исключений с проверкой на этапе компиляции. Несмотря на значимость, язык остался в исследовательской области, а ключевые идеи были взяты на вооружение другими системами. Барбара Лисков, создатель CLU, продолжила работу в области параллелизма и распределённых вычислений с Argus, который получил менее заметное распространение. ML — язык, созданный для поддержки формальных доказательств, сыграл важнейшую роль в развитии статически типизированных функциональных языков.
Тип инференс, впервые реализованный в ML, позволил программистам писать типы без явного указания, что значительно упростило программирование. Многие современные языки, включая F# и OCaml, вдохновляются наследием ML. Тем не менее, ML оставался языком преимущественно исследовательским, уступив место более чистым функциональным языкам, таким как Haskell. Smalltalk олицетворяет истинное объектно-ориентированное программирование, где «всё — объект». Созданный в 1970-х под руководством Алана Кэя, Smalltalk популяризировал многие ключевые концепции ООП и оказал огромное влияние на дизайнеров последующих языков, включая Java и Ruby.
Несмотря на превосходные идеи, Smalltalk столкнулся с проблемами производительности и совместимости, что вместе с появлением Java лишило его позиции лидера. Smalltalk продемонстрировал, как важно не только создавать новые концепции, но и адаптировать их к реалиям индустрии. Перечисленные языки — лишь вершина айсберга в истории программирования. Многие системы, включая BPCL, Ada, Eiffel и другие, сыграли свою роль в развитии софта. Они повлияли на современные методологии, парадигмы и инструменты, хотя сами давно вышли из употребления.