Читать книгу Код. Культура, скомпилированная в байты - - Страница 2

Введение: Код как культурный артефакт
В.1. Вопрос, который редко задают

Оглавление

Почему существует более семисот языков программирования?

Вопрос кажется странным. Машине безразлично, на чём написан код – она исполняет байт-код, последовательность нулей и единиц. Компилятор переводит любой синтаксис в одни и те же машинные инструкции. С точки зрения процессора нет никакой разницы между программой на Python и программой на Go, между Haskell и JavaScript. Результат один – электрические импульсы в кремниевых схемах.

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

Это не рациональное поведение, если языки – просто инструменты. Плотник не спорит о философских основаниях молотка. Хирург не пишет манифестов о скальпеле. Но программисты – спорят и пишут. И делают это десятилетиями.

Значит, языки программирования – не просто инструменты. Они что-то большее. Но что именно?

Каждый язык программирования – это материализованный ответ на вопрос: как должен думать человек, общаясь с машиной? И разные люди в разных обстоятельствах дают разные ответы. Кен Томпсон и Деннис Ритчи в Bell Labs начала семидесятых спрашивали: как переписать операционную систему, чтобы она стала переносимой между машинами? Гвидо ван Россум в амстердамском исследовательском центре конца восьмидесятых спрашивал: как научить людей программировать, не отпугнув их синтаксическим шумом? Джеймс Гослинг в Sun Microsystems начала девяностых спрашивал: как написать код, который переживёт смену железа?

Ответы получились непохожими. И каждый ответ нёс в себе следы вопроса – как река несёт следы истока.

Си появился в мире, где память измерялась килобайтами, а каждый такт процессора был на счету. «C is quirky, flawed, and an enormous success» («Си странен, несовершенен и чрезвычайно успешен»), – напишет позже Деннис Ритчи. В этой фразе – вся судьба языка: несовершенство, которое создатель осознавал с первого дня, и триумф, которого никто не планировал. Java появилась в мире корпоративной разработки, где код должен был работать годами без изменений, а команды программистов сменялись быстрее, чем проекты. Отсюда многословность, которую одни считают ясностью, другие – избыточностью. JavaScript появился за десять дней в мае 1995 года, потому что Netscape нужен был скриптовый язык для браузера – и нужен был срочно. Брендан Эйх вспоминал потом, что почти не спал. За эти десять дней он заложил фундамент языка, на котором сегодня работает практически весь интернет.

Десять дней. Семьсот языков. Тридцать лет споров о типизации. Что-то не сходится, если считать это просто инженерией.

Потому что это не просто инженерия. Это культура.

Посмотрим внимательнее на число семьсот. Индекс TIOBE, отслеживающий популярность языков программирования, регулярно фиксирует около ста пятидесяти языков с измеримым уровнем использования. Википедия перечисляет более семисот языков, претендующих на статус «примечательных». Исторический каталог HOPL насчитывает почти девять тысяч языков, когда-либо созданных. При этом реальную долю рынка делят между собой не более двадцати языков, а большинство кода в мире написано на пяти-шести.

Зачем люди продолжают создавать новые языки? Зачем Гвидо ван Россум в 1989 году решил, что миру нужен ещё один язык, когда уже существовали Perl и Tcl? Зачем Брендан Эйх в 1995-м не использовал Scheme или Java, которые уже были готовы? Зачем инженеры Google в 2007 году начали проектировать Go, имея в распоряжении весь арсенал существующих языков?

Ответ всегда один: существующие языки не выражали того, что хотели выразить создатели новых. Не технически – философски. Perl выражал принцип «есть много способов сделать это». Ван Россум хотел выразить противоположное: должен быть один очевидный способ. Java выражала идею корпоративной надёжности и многословной явности. Гослинг хотел, чтобы код был понятен любому инженеру, присоединившемуся к проекту через пять лет. Go выражал идею, что сложность C++ стала непереносимой, и язык должен помещаться в голове программиста целиком.

Новый язык возникает, когда кто-то чувствует: существующие языки воплощают не те ценности. Это культурный акт, не технический.

Код. Культура, скомпилированная в байты

Подняться наверх