В плену у башни

В плену у башни

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

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

Книги по программированию плодятся с не менее устрашающей стремительностью. Их авторы традиционно пытаются убедить себя и читателя в безусловном превосходстве того, к чему они привыкли, над тем, к чему они не горят желанием привыкать. В каждой книге — примеры решения одних и тех же типовых задач, плюс указания на возможность включения кода, написанного на любых других языках (предполагая, что программирование на них есть пережиток первобытности или болезненное извращение). Различия — в стиле рекламы. Одни демонстрируют разительную гибкость языка, делают упор на компактность программ; другие выкатывают на публику богатство настроек и возможности адаптации; кто-то подчеркивает минимальность выразительных средств, языковую однородность и единообразие; где-то полезен обыкновенный эпатаж, банальное стремление выделиться. При этом, разумеется, каждый клянется в приверженности стандартам и божится, что ему проще решить любую задачу на своем языке, нежели приспосабливаться к другим.

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

Робкий вопрос: а нельзя ли все-таки обойтись одним универсальным языком, хотя бы в качестве языка междупрограммного общения? Ответ: нельзя. По тем же причинам, по которым невозможно утверждение единого международного языка. Есть группы людей с весьма различными интересами, и многообразие языков — одно из орудий конкурентной борьбы. Пока люди разделены на нации и классы, пока они не доросли до разумности и живут по животным законам, — они будут говорить на разных языках. В частности, профессиональный жаргон охраняет привилегии и выращивает снобизм некоторого сообщества — и он же может погубить это сообщество в изменившейся социальной среде. Дайте программистам возможность вырваться из вавилонского плена — большинство останется сидеть в своей норе, и это их единственная универсалия.

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

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

Точно так же, в информатике создают по поводу и без повода специализированные языки, а не сбалансированные среды. Отсюда конфликты совместимости, войны форматов, фанатизм адептов и мучения пользователей. На заре компьютерной жизни были попытки создания зачатков экосистем — например, язык C создаваться под оперативные системы семейства Unix и развивался вместе с командными оболочками; во многом это способствовало живучести идеологии Unix и ее повсеместному распространению. Последующая стихийная эволюция преуспела в нагромождении нелепостей — но до сих пор язык C служит внутренней интегративной силой, без которой семейство Unix потеряло бы свою определенность.

Что же, компьютерное многоязычие — лишь признак недоразвитости, и нет в нем никакой реальной нужды? Не совсем. Человеческие интересы тоже вполне реальны — а язык отражает строение человеческой деятельности, для этого он, собственно, и нужен. Будет мир устроен иначе — будет другой язык. Да, основное определение разума — универсальность, способность связать в деятельности любые стороны мира. Поэтому языковая универсализация по мере очеловечивания дикой человечьей природы — неизбежна. Однако проявиться единое может только в многообразных частностях, каждая из которых представляет лишь одну из его сторон. А значит, будут сосуществовать разные языки программирования, и будут рождаться новые. Другое дело, что нелишне бы ввести все это в разумные рамки, понемногу избавляться от стихийности, от животного приспособленчества и животной конкуренции. Как? Ну, хотя бы для начала задуматься над этим, а не над очередной порцией сугубо прикладных фокусов. Конечно, куда проще снискать популярность (или деньги) полезными изобретениями в сфере повседневного быта. Это бездонная нива для интеллекта. Но разум начинается как раз за границами повседневности. По крайней мере, пока.

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


[Компьютеры] [Наука] [Унизм]