Зверек Харьковский
С++ulture [опубликована в КТ № 22]
http://www.rsdn.ru/Forum/Info/FAQ.philosophy.culture.aspx
Такой вещи, как идеальный текст, не существует.
Как не существует идеального отчаяния.
Харуки Мураками, "Слушай песню ветра"
Что такое хороший язык программирования и каким он должен быть? Всякое люди
говорят – тут тебе и дуракоустойчивость (прошу прощение, "защита от новичка"),
и Тьюринг-полнота, и формализуемость, и еще 1024 критерия. Ерунда. Все
нижеследующее просьба рассматривать как эссе в вольном стиле, а не научную
статью. Бывают языки красивые, бывают строгие, бывают такие, которым легко
обучиться, бывают такие, на которых легко писать. Их не используют.
Бывают такие, в которых черт ногу сломит – и на них пишет полмира (сноска:
Программистского мира, естественно, раз уж мы о языках программирования), но
никто не любит. Бывают языки сложные и неочевидные: чтобы писать на них
хорошие программы, нужно учиться несколько лет и прочесть кучу книг. В них
влюбляются, им посвящают стихи, о них спорят до хрипоты, визга и метания в
собеседника банановой кожуры.
***
Я – программист. Я знаю пять языков – и верен одному. Я прочел два десятка
книг только об этом языке – а хотел бы две сотни. Я могу математически
доказать правильность своей программы – и скрещиваю пальцы на удачу, когда
запускаю ее на компиляцию. Я могу переписать одну строку восемью разными
способами – но работает только девятый. Я безнадежен.
***
Один мой коллега (и все профессоры в моем институте) верят, что главное – это
научиться программированию. Мол, человек, умеющий программировать вообще, за
пару недель освоит новый язык и будет писать на нем великолепные программы.
Поэтому в университетских курсах огромное количество сухой (сноска: Ну, черт с
ней, полусухой) теории, а языки преподаются на уровне пресловутого "Хелло
Ворлд". Но это все равно, что научить стихосложению вообще – а потом студент
за пару недель осваивает финский или хинди и выдает первоклассные стихи,
входит в историю поэзии и энциклопедический словарь. Вроде абсурд получился.
Каждый язык программирования – из тех, в которые влюбляются – порождает свою
культуру. Совершенно так же, как человеческий язык. У него есть свой букварь
(сноска: Кафедра Программного обеспечения, курс "Язык С++", 48 часов (с)
расписание 2-го курса). Но это – только самое-самое начало. Есть лексика – и
даже нецензурная (сноска: Скажите любому опытному С++-программисту магическое
слово goto. Только с безопасного расстояния) (как и в естественном языке,
иногда она бывает к месту). Есть синтаксис. Это все вещи понятные,
относительно легко изучаемые и относительно легко формализуемые. Именно
поэтому можно автоматизировать проверку синтаксической и лексической
правильности как программы, так и данной статьи.
Но и это все – лишь начало. Ни "Война и мир", ни "безбашенная" проза Харуки
Мураками, ни "Linux" – не являются математически стройными системами. Их
нельзя назвать написанными "правильно" или "неправильно". Более того, и то, и
другое, и третье можно было написать несчетным (сноска: В математическом, а не
поэтическом значении этого слова) количеством различных способов – но написаны
(и ценны) они именно такими.
Нельзя "научить" писать эпиграммы, сказки или статьи, которые нравятся
редакторам "Компьютерры". Каждое такое произведение – это результат
творческого переосмысления опыта предыдущих поколений + немножко вдохновения +
владение языком + собственный стиль. Нельзя научить писать программы на C++ –
это результат [см. выше].
***
У этого языка есть свои идиомы – краткие, но очень емкие конструкции. Есть
традиции – и возможность плевать на них. Есть свобода выбора стиля. Есть
возможность различными словами написать одну и ту же фразу. Есть классика – и
есть классики: Бьярн Страуструп, Джефф Элджер, Герб Саттер, Николай Джосаттис.
На этом языке можно сказать двусмысленность – и не получить линейкой по рукам
от компилятора (сноска: ...а трое суток искать, почему программа вылетает,
когда i=17). Здесь есть место творчеству – здесь есть место спорам – здесь
есть место 48-часовым марафонам по отладке программ. Есть тонкости, доступные
только снобам. Здесь нет только одного – места, где можно было бы остановиться
и сказать: все, ничего нового для меня в этом мире не осталось.
***
Поймите меня правильно – пользователю, в общем-то, плевать, на каком языке
написана программа и насколько освоился в этом языке ее автор. В отличие от
написания текстов, в программировании конечный продукт очень слабо связан со
стилем и культурой автора текста (сноска: Естественно, связан сильно, но
совершенно неочевидно для конечного потребителя). Тем не менее, программа,
которой "еще жить и жить" от версии к версии, просто обязана быть красивой – а
не то в следующей версии никто уже не поймет, куда там дописывать новый кусок
и почему старый до сих пор работает и "черт побери, кто вообще это писал?!" Но
я вам другое скажу – программа, написанная с любовью и вдохновением, все же
немножко другая. Не такая, как вышедшая из-под клавиатуры человека, любимая
фраза которого "Надо сидеть и педалить код".
***
Поймите меня правильно еще раз. С++, будучи изначально и по определению
промышленным языком, является крайне неудачным выбором для промышленного
производства. Там нужен язык другой – пригодный для производства штампованных
программ штампованными программистами. Язык, который подразумевает только один
вариант выражения мысли. Язык, на котором десять разных программистов по
одному и тому же заданию напишут практически идентичный код (сноска: Кстати,
это уже шаг в сторону автоматической генерации программ или "Цель деятельности
всех программистов – чтобы их деятельность стала ненужна"). Язык, в котором
шаг влево, а равно и шаг вправо просто нельзя выразить средствами языка. Язык,
который никто и никогда не будет любить.
***
Я – программист. Мой любимый язык – С++. Это отвратительный язык. Я могу
сказать на нем любую глупость. Мне не помогут и двести книг. Девятый вариант
строчки тоже не сработал. Я безнадежен.
22.10.2007 10:53
|