C++ulture

Главная страница

Языки программирования
Операционные системы
ЖЗЛ
Статьи
C++ulture
"Художества"
Компьютерный юмор
Опросы
Программы

Гостевая книга
Rambler's Top100

Зверёк Харьковский


Такой вещи, как идеальный текст, не существует.
Как не существует идеального отчаяния.
Харуки Мураками "Слушай песню ветра"


Что такое хороший язык программирования и каким он должен быть? Всякое люди говорят: тут тебе и дуракоустойчивость (прошу прощения, "защита от новичка"), и Тьюринг-полнота, и формализуемость, и еще 1024 критерия. Ерунда! Все нижеследующее прошу рассматривать как эссе в вольном стиле, а не научную статью.


Бывают языки красивые, бывают строгие, бывают такие, которым легко обучиться, и такие на которых легко писать. Их не используют.

Бывают такие, в которых черт ногу сломит, - и на них пишет полмира1, но никто не любит.

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


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


Один мой коллега (и все профессора в институте) верит, что главное - это научиться программированию. Мол, человек, умеющий программировать вообще, за пару недель освоит новый язык и будет писать на нем великолепные программы. Поэтому в университетских курсах - огромное количество сухой2 теории, а языки преподаются на уровне пресловутого "Хелло, Ворлд". Но это все равно, что научить стихосложению вообще - а потом студент за пару недель осваивает финский или хинди и выдает первоклассные стихи, входит в историю поэзии и энциклопедический словарь. Абсурд!

Каждый язык программирования – из тех, в которые влюбляются, - порождает свою культуру. Совершенно так же, как человеческий язык. У него есть свой букварь3. Но это - только самое-самое начало. Есть лексика – и даже нецензурная4 (как и в естественном языке, иногда она бывает к месту). Есть синтаксис. Это всё вещи понятные, относительно легко изучаемые и относительно легко формализуемые. Именно поэтому можно автоматизировать проверку синтаксической и лексической правильности как программы, так и данной статьи.

Но и это всё - лишь начало. Ни "Война и мир", ни "безбашенная" проза Харуки Мураками, ни Linux не являются математически стройными системами. Их нельзя назвать написанными "правильно" или "неправильно". Более того и то, и другое, и третье можно было написать несчетным5 количеством способов - но написаны (и ценны) они именно такими.

Нельзя "научить" писать эпиграммы, сказки или статьи, которые нравятся редакторам "Компьютерры". Каждое произведение - это результат творческого переосмысления опыта предыдущих поколений + немножко вдохновения + владение языком + собственный стиль Нельзя научить писать программы на C++ - это результат (см. выше).


У C++ есть свои идиомы - краткие, но очень емкие конструкции. Есть традиции – и возможность плевать на них. Есть свобода выбора стиля. Есть возможность разными словами написать одну и ту же фразу. Есть классика и есть классики: Бьярн Страуструп, Джефф Элджер, Герб Саттер, Николай Джосаттис. На этом языке можно сказать двусмысленность – и не получить линейкой по рукам от компилятора6. Здесь есть место творчеству, здесь есть место спорам, здесь есть место 48-часовым марафонам по отладке программ. Есть тонкости, доступные только снобам. Здесь нет только одного – места, где можно было бы остановиться и сказать: всё, ничего нового для меня в этом мире не осталось.


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


Поймите меня правильно еще раз. C++, будучи изначально и по определению промышленным языком, является крайне неудачным выбором для промышленного производства. Там нужен язык другой – пригодный для производства штампованных программ штампованными программистами. Язык, который подразумевает только один вариант выражения мысли. Язык, на котором десять разных программистов по одному и тому же заданию напишут практически идентичный код8. Язык, в котором шаг влево, а равно и шаг вправо просто нельзя выразить средствами языка.

Язык, который никто и никогда не будет любить.


Я - программист. Мой любимый язык – C++. Это отвратительный язык. Я могу сказать на нем любую глупость. Мне не помогут и двести книг. Девятый вариант строчки тоже не сработал. Я безнадежен.



1 Программистского мира, естественно, раз уж мы о языках программирования.
2 Ну ладно – полусухой.
3 Кафедра программного обеспечения, курс "Язык C++", 48 часов. © расписание 2-го курса.
4 Скажите любому опытному программисту на C++ магическое слово goto. Только с безопасного расстояния.
5 В математическом, а не поэтическом значении этого слова.
6 ...а потом трое суток искать почему программа вылетает, когда i=17.
7 Разумеется, связан сильно, но совсем неочевидно для конечного потребителя.
8 Кстати, это уже шаг в сторону автоматической генерации программ или " Цель деятельности всех программистов – чтобы их деятельность стала не нужна".

Назад


Статья размещена с любезного разрешения редакции журнала "Компьютерра" и лично самого автора.

Хостинг от uCoz