Язык мой — …
АрхивЧто такое хороший язык программирования и каким он должен быть?
Что такое хороший язык программирования и каким он должен быть? Казалось бы, с момента появления теории формальных языков ответ на этот вопрос стал делом вкуса и личных пристрастий каждого — современные универсальные языки программирования удовлетворяют большинству требований, выдвигаемых со стороны формальной теории. Однако языкотворчество факт появления такой науки не остановил, а, скорее, преумножил. В чем дело? Давайте попробуем разобраться.
Предлагаю следующий способ найти истину (а заодно и конструктивное решение относительно выбора языка программирования в качестве любимого): ответить на эссе в вольном стиле (о культуре, культурности и культуристах) Зверька Харьковского, опубликованное в «КТ» #546.
Я — математик (все же с маленькой буквы «м»). От языка я хочу лишь выразительности и понимания его семантики окружающими. Поэтому мне нравятся языки, умышленно ограничивающие фантазию программиста единообразием по принципу «одна мысль — одна конструкция языка». Я готов согласиться с тем, что «единообразие» вполне синонимично «однообразности». Но творчество, ограничиваемое таким образом, сродни семиотике, с той лишь разницей, что структурной единицей семиотической рефлексии здесь является идиома того самого многогранного и двусмысленного языка.
Емкость конструкций — не менее эфемерное преимущество «сложных» формальных языков. В одних случаях она приводит к упрощению смысла, а в других — совсем наоборот. Быстро понять общий смысл и структуру написанного — очевидное преимущество языка, с помощью которого была выполнена запись. Назовем это эффективностью этимологизирования. Опыт подсказывает, что емкость конструкций языка находится с эффективностью этимологизирования в обратно пропорциональной зависимости. Недаром в профессиональной среде существует мнение, что чем толще книга по математике, тем быстрее она читается.
Теперь о главном, то есть о творчестве. Я сторонник творчества на уровне идей. Идея абстрактна. В принципе она даже не требует заранее определенного описательного языка для того, чтобы существовать1. Тем не менее, между языком как сложной лингвистической (или металингвистической) системой и идеей существует очевидная взаимосвязь: идея тем понятнее окружающим, чем более прост (с сохранением необходимой выразительности) язык, на котором она записана. Творчество имеет своей целью произведение (продукт творчества), но само по себе является процессом. Понимание творчества как процесса с необходимостью приводит к созданию единого творческого пространства — метафоры предметного (проблемного) общения. Целостность, ортогональность и единообразие языка творческого процесса (а в случае с программированием — языка программирования) позволяют легко общаться в терминах этого языка и, как следствие, быстро обмениваться идеями. Вновь апеллируя к программированию, такими идеями могут быть решения, касающиеся архитектуры программы, создание вспомогательных инструментов проектирования, автоматизация рутинной работы, выработка устойчивых библиотек и технологий разработки программ (здесь главное слово — «устойчивых»).
Красивые и надежные программы — всегда результат успешной совместной работы многих людей. Очень разных людей. Язык в контексте их творчества — не более чем соединительный узел, позволяющий сделать их работу по-настоящему совместной. Утилитарно? Может быть, но ведь «utility» — вещь, приносящая пользу. Язык, приносящий пользу человечеству, не может быть элитарен по определению. Все остальное относительно языка — снобизм и эстетство, выраженные в отделении «промышленных» языков программирования от «академических». Общая цель, но различные предназначения — звучит как-то странно.
И, наконец, о культуре. Некоторые считают, что писать программы на С++ — удовольствие сродни поэсису (поэтизированию экспромтом), объясняя это тем, что их любимый язык позволяет реализовать вдохновение, делающее программы «немножко другими». Я бы назвал это вдохновением первоназывания. Именно первоназывание позволяет человеку ощутить себя настоящим создателем нового, творцом. Язык программирования в этом смысле — источник артефактов вдохновения такого рода, некая среда формального поэсиса. К сожалению, с этой точки зрения любой искусственный язык мертв, поскольку акт первоназывания может считаться успешным только в контексте живого языка с живыми людьми в качестве естественных носителей (здесь главное слово — «естественных»). Тем более что грамматики естественных языков значительно (аж на два пункта, по классификации Хомского) привлекательнее для поэсиса, нежели любые распознаваемые автоматами, пусть даже такие двусмысленные и утонченные, как С++. Ведь только их средствами можно сыграть ноктюрн на флейте водосточных труб. Настоящая культура, культура для не-машин, рождается именно здесь.
P.S. Все вышесказанное — лишь попытка разработчика программ «средней руки» (тем не менее, писавшего код на «тех самых пяти языках») оправдать собственный выбор средства реализации проектов. Но индивидуально воспринимаемый «уровень средней руки» — не более чем граница компетентности, понятие почти универсальное. В этом смысле все написанное мною относится и к «сильным» разработчикам, почему-то упорно продолжающим считать себя программистами.