Когда-то настоящее было будущим. Для меня «Сейчас» началось в день моего одиннадцатого дня рождения в 1983 году. В тот день я получил 8-разрядный японский компьютер Sharp MZ-700 с памятью 64 Кб, малоизвестный домашний компьютер, даже когда он был новым. Это означало, что для него было доступно очень мало игр или другого программного обеспечения. Если ты хотел что-то сделать, ты должен был сделать это сам.

Вот где появился язык программирования BASIC. Sharp включил вариант S-BASIC на кассете. Я знал, что если мне удастся научиться этому, я смогу сам программировать игры.

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

«Готово», — сказал он. И готов я был!

Но мир встретил Бейсик за много лет до этого. Язык программирования был создан Джоном Г. Кемени и Томасом Э. Курцем в Дартмутском колледже в 1964 году. У них было несколько принципов проектирования, один из которых заключался в том, что код должен выглядеть как можно более английским. Они также постулировали, что в строке должно быть только одно выражение. Можно сказать, что их философия была сродни поговорке «как можно проще, но не проще». В отличие от интерпретируемых версий, которые позже будут доминировать в домашних компьютерах, BASIC Курца и Кемени скомпилирован в двоичный формат. Таким образом, программы BASIC работали более или менее наравне с другими языками.

Поначалу создатели не предполагали, что BASIC будет использоваться где-либо, кроме как в компьютерной системе General Electric Дартмутского колледжа, поэтому они не утруждали себя стандартизацией языка через официальную организацию по стандартизации. Но после того, как они освободили BASIC, он распространился на другие университеты с такими системами, как PDP-11, системы Data General, компьютеры Hewlett-Packard и т. д.

Но по мере распространения BASIC начали появляться мелкие несоответствия. Результатом стали диалекты. Для некоторых это было катастрофой. В 1975 году легендарный пионер компьютерных наук Эдсгер В. Дейкстра прокомментировал: «Практически невозможно научить хорошему программированию студентов, ранее знакомых с BASIC: как потенциальные программисты они психически изуродованы без надежды на восстановление».

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

Это потому, что шутка Дейкстры, по иронии судьбы, идеально соответствовала величайшей компьютерной революции в истории. В середине 1970-х на рынке неожиданно появились домашние компьютеры. Первые процессоры Intel нашли свое применение в таких продуктах, как Altair 8800. Вскоре последовали и другие микропроцессоры от Zilog, Motorola и Mostek, которые нашли свое применение в таких продуктах, как Apple II, Commodore Pet и других.

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

Язык комфортно прожил свои первые 10 лет на компьютерах Big Iron и позволил неопытным академическим пользователям использовать компьютеры в качестве инструментов. Но именно домашние компьютеры сделали BASIC инструментом для масс: миллионов новых пользователей компьютеров из всех слоев общества.

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

Почему я думаю, что ПЗУ так важны?

Мой компьютер был чистым листом, когда он загружался. Я должен был выбрать использование BASIC. Но первое, что владельцы домашних компьютеров от Commodore, Amstrad, Sinclair и Apple сразу приветствовали при включении своего компьютера, было дружественное «Ready» Бейсика. С тех пор Бейсик стал компьютерным языком программирования, операционной системой, пользовательским интерфейсом, редактором и оболочкой в ​​одном. Бейсик был для всех практических целей личностью компьютера.

Конечно, многие владельцы домашних компьютеров, вероятно, никогда не использовали BASIC в качестве языка программирования, кроме обязательных вариантов «hello world». Но все использовали элементарные функции BASIC для загрузки и запуска игр, образовательных программ, программ для рисования и многого другого.

И даже эти пользователи, вероятно, использовали Бейсик, не подозревая об этом, потому что:

  • BASIC был вашим калькулятором:
    ПЕЧАТЬ 5/2
  • BASIC может стать вашей пишущей машинкой
    PRINT /P «Дорогой Джон».
  • BASIC найдет для вас время
    PRINT TI$
  • BASIC позволяет сочинять музыку
    МУЗЫКА "+A3+#F1+B3A+#F1A+D3A"

В 1983 году BASIC был единственным компьютером с пользовательским интерфейсом, который когда-либо использовали владельцы домашних компьютеров. Винды тогда не было. BASIC был окном. Для большинства пользователей он останется таким на долгие годы; Mac был дорогим нишевым продуктом, когда дебютировал в 1984 году, а до Windows 3.x оставалось семь лет. В результате, если эти пользователи захотят изучить программирование, Бейсик будет буквально у них под рукой.

Можно подумать, что отцы Бейсика гордились тем влиянием, которое оказал их маленький язык. Но Курцу и Кемени никогда особо не нравились встроенные Бейсики. Они использовали довольно уничижительный термин «Street BASIC» для описания вариантов, которые отличались от оригинала. Отклонения часто состояли из дополнительных команд, созданных специально для компьютерных систем и оборудования конкретного поставщика, то есть таких вещей, как графика и управление периферийными устройствами. Если компьютер поддерживал графические спрайты, BASIC, вероятно, содержал специальные команды для управления ими. Если бы у него был многоканальный звук, вы могли бы использовать и его с помощью пользовательских команд BASIC. Короткие однострочные примеры BASIC, приведенные выше, были взяты из Sharps S-BASIC. Как видите, в Бейсике даже были специальные команды для использования плоттера/принтера.

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

Но, на мой взгляд, кембрийский взрыв вариантов BASIC был чем-то, чем они должны были гордиться. К 1987 году 15% американских домов имели домашние компьютеры, а это означало, что до 36 миллионов человек имели доступ к Street BASIC. Если мы экстраполируем эти цифры, оценив аналогичные цифры для Японии и Западной Европы, общемировой показатель может быть вдвое больше. Это было действительно революционным достижением по сравнению с несколькими тысячами, которые ранее имели доступ к нему на мэйнфреймах в университетах и ​​крупных корпорациях.

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

Основы улицы…

… не было компиляторов и компоновщиков, которые создавали оптимизированные бинарные исполняемые файлы. Вместо этого BASIC был интерпретирован

… не имел представления о модулях и библиотеках. Это означало, что программа Street BASIC должна была быть автономной.

… не поддерживает именованные функции. Вместо этого в программе были номера строк, к которым можно было перейти с помощью команды GOTO (вероятно, одна из главных претензий Дейкстры).

… не поддерживал использование отдельного текстового редактора для программирования. В дополнение к любой другой роли, которую выполнял Бейсик, он также был собственным редактором.

…не было понятия области действия или неизменности, т. е. переменные всегда были глобальными, и их значения всегда можно было изменить

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

Таким образом, преимуществом ограниченных возможностей Street BASIC было то, что…

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

…опущение значимых функций и подпрограмм означало, что вы должны были думать о своей программе как о рецепте с пошаговыми инструкциями. Это не только удобный формат для большинства людей; таковы алгоритмы человеческого разума. Только представьте, как ребенок описал бы свой день: «Мы пошли в детский сад, а потом случилось то, случилось то, и кто-то сказал то, а кто-то сделал то». Это описательно и линейно, как в старой школе BASIC.

…отсутствие внешних редакторов опять-таки означало, что существует прямая связь между компьютером, его пользователем и создаваемым программным обеспечением; использование номеров строк, сделанное с помощью грубого редактора строк, понятное и инстинктивно простое в использовании

… глобальная область видимости переменных на самом деле была следствием отсутствия функций; просто не было необходимости в защищенных или локальных переменных, что облегчало понимание переменных для новых практиков BASIC.

Однако самое важное отличие BASIC 80-х от других языков заключалось в том, что в первом отсутствовала концепция модулей и библиотек. Но это тоже было важным ограничением, фактически снижавшим входной барьер; как упоминалось выше, производители компьютеров должны были создать команды верхнего уровня, среди прочего, для управления аппаратным обеспечением, которое было уникальным для компьютера. Эта тесная связь между аппаратным и программным обеспечением снова свела к минимуму разницу между BASIC и компьютером, на котором он работал. Бейсик и компьютер, на котором он работал, казались одним и тем же.

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

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

Причина №1.

IBM PC, а позже и его клоны, полностью захватили рынок домашних компьютеров. На ПК очень мало было ПЗУ. Вместо этого MS-DOS обычно загружалась с дискет или жесткого диска, и вдруг сама операционная система стала лицом компьютера. Не ОСНОВНОЙ.

Так что с самого начала вы были на одну ступень ниже уровня BASIC. Если вы хотели использовать его, вам нужно было явно запустить его после того, как вы запустили DOS. BASIC был в этом смысле таким же, как и любое другое приложение. В приложении BASIC вы вводили и запускали свои программы BASIC, как вы делали это на домашних компьютерах предыдущего поколения. Но, по иронии судьбы, в мире, где DOS была лицом компьютера, не было прямого способа запустить сохраненные программы BASIC из командной строки MS-DOS. Вы должны были сначала загрузить среду BASIC и запустить их оттуда.

В общем, BASIC на этих машинах казался чем-то запоздалым.

Причина №2.

Если раньше Street BASIC вызывал несовместимость между компьютерными системами, то ПК с более новой ОС могли вызывать несовместимость внутри системы.

Поскольку BASIC для MS-DOS запускался с диска, вы могли получить и использовать любую версию BASIC, которая вам нравилась. Turbo Basic от Borland может заинтересовать вас больше, чем предложения Microsoft. Вы можете назвать это свободой выбора, которую ценит большинство из нас. Но недостатком было то, что если вы давали свою программу другу, вы не могли быть уверены, что BASIC вашего друга такой же, как у вас.

И даже если вы не решили использовать не поставляемые в комплекте BASIC, а использовали исключительно версию, поставляемую с MS-DOS, у вас все равно могут быть проблемы. До MS-DOS 5.0 GW-BASIC был связан с операционной системой. Это было более или менее похоже на вдохновленные Дартмутом те, которые вы нашли на домашних компьютерах. Но если у вас была установлена ​​MS-DOS 5.0 или новее, GW-BASIC был заменен на QBasic.

QBasic был попыткой создать современный Бейсик. В зависимости от вашей точки зрения, это действительно было улучшение. С точки зрения использования это было совсем другое. Вы редактировали свои программы BASIC в специальном редакторе, и когда вы их запускали, редактор полностью заменялся новым экраном. На этом экране вы можете взаимодействовать с вашими программами. Когда вы закончили, интерактивный экран закрылся, и вы снова оказались в редакторе. Тесная связь между программированием и использованием исчезла.

Что касается языка, QBasic избавился от номеров строк (если только вы не настаивали на их использовании). Вместо этого он получил метки и подпрограммы с именованными параметрами. Вы также можете различать локальные и глобальные переменные. В какой-то степени вы даже можете явно вводить переменные. Он больше походил на грядущие бейсики, чем на старые, которые он заменил. Но даже несмотря на то, что они представляли собой созревание языка, это также было началом превращения BASIC из языка, где вы шаг за шагом описывали свой алгоритм линейным способом, в нелинейный.

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

Что касается совместимости, программы GW-BASIC в большинстве случаев будут нормально работать в QBasic при условии, что программы будут сохранены в виде файлов ASCII. Но так как это не было опцией по умолчанию, было несколько программ. Обратный путь был более или менее невозможен. Учитывая улучшения и модернизацию QBasic, программы, написанные для него, не могли работать на GW-BASIC.

Но даже если стек программного обеспечения у вас и вашего друга был идентичным, проблемы все равно могут возникнуть. Учитывая модульность ПК, нельзя было даже быть уверенным, что поддерживаемые графические режимы между ними идентичны. Это была решаемая проблема, но все же неприятность.

Причина №3.

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

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

Теперь мы также получили мир, в котором среда была настолько многофункциональной, что больше невозможно было иметь отдельную команду для каждой функции компьютера. Библиотеки и модули стали необходимы, и нотация изменилась на что-то вроде Module.Class.Sub(). Благодаря модульности экосистема стала настолько большой, что почти никто больше не мог иметь полного представления о ней.

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

Чтобы было понятно, именно современными языками программирования — антибейсиками — я зарабатываю себе на жизнь. У меня не было бы этого по-другому. Но BASIC был моей отправной точкой. Через несколько лет я перешел на Pascal, Delphi (Object Pascal), Java, JavaScript, затем Perl. В последние годы я в основном работал с Python и несколькими другими языками, в зависимости от того, какую проблему я пытаюсь решить. В последнее время я балуюсь с Go. Без Бейсика я бы, наверное, ничего из этого не сделал.

Вот почему я не согласен с несколько снисходительным мнением Дейкстры о том, что невозможно научить хорошим приемам программирования тех, кто первым изучил Бейсик. Большинство программистов моего возраста, которых я знаю, прошли тот же путь в профессиональном программировании.

Если я сегодня о чем-то и сожалею, так это о том, что у нас больше нет легкой точки входа в профессию, которую я люблю.

Мы что-то потеряли с исчезновением ПЗУ.

ПОСТСКРИПТ

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

Он был сделан с использованием PC-BASIC, во многом не являющегося ROM-клоном GW-BASIC. По иронии судьбы, он написан на Python, языке, который часто называют БЕЙСИКОМ для современной эпохи (а он — мультипарадигмальный язык с модулями, классами, процедурами, функциональным программированием и начальной поддержкой асинхронного выполнения — просто нет).

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

Но PC-BASIC выводит это на совершенно новый уровень, имея возможность быть несовместимым сам с собой (!). Если вы запускаете программу в Windows, она работает как положено, даже при использовании графических режимов. Но если вы попытаетесь установить его на Mac на базе ARM, это просто не сработает. Альтернативой является установка его как модуля в Python и запуск из командной строки. Но тогда графические режимы работать не будут. Таким образом, вы не можете ожидать, что все будет работать одинаково везде.

При этом мне нравится PC-BASIC. Хотя бы из-за ностальгии. Вот, пожалуй, и все, что я здесь написал.