LogoHome   >>   Block-note   >>   С++ulture
Disclaimer:  Stolen from the Web.

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

С++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

© Gazlan 2009 * gazlan@yandex.ru

Hit Counter