О языке - взгляд программиста

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

Обратите внимание, что дети примерно к пяти годам почти в совершенстве пользуются родным языком в устной речи, не имея при этом никакого понятия о его теории: орфографии, морфологии, синтаксисе и т. д. Дошкольники учатся говорить в процессе коммуникации, на практических примерах, а не по учебникам. Представьте себе, что бы получилось, если обучение языку годовалого ребенка начиналось с разъяснения того, что является именем существительным, а что — глаголом. Дети учатся примитивному словоупотреблению, начиная с называния окружающих предметов и постепенно переходя к несложным предложениям, отображающим отношения между видимыми и уже названными предметами. Эти навыки формируются у детей удивительно быстро и, как будто, без нашего, взрослого сознательного вмешательства. Во всяком случае, наше взрослое вмешательство кажется нам лишь корректирующим, а не креативным, т. е. принудительно формирующим. Эффективность данного процесса особенно высока, если родители, бабушки и дедушки не используют в своей речи "птичий язык", т. е. сленг, обильно приправленный междометиями и словами-паразитами. Настоящие проблемы у детей возникают при изучении уже практически освоенного устного языка в школе, где требуется не только знать правила правописания, но и следовать им в письменной речи. И сложность не только в переходе от устной речи к письменной. Трудность в правильном использовании доставшегося нам от предков родного языка вообще, независимо от целей его применения и среды. Когда я слышу фразу, начинающуюся со слова "короче", то подозреваю, что краткости изложения мысли мне не стоит ждать, несмотря на декларированную претензию говорящего быть кратким. Желающие высказаться сжато (нередко обозначающие это стремление вводным словом "короче"), в действительности выражают лишь свое желание выразить суть, но не могут (по разным причинам), а потому за подобным "ключевым" словом следует весьма длительное и невразумительное словоблудие. А в чем причина? Трудно дать исчерпывающий ответ, но на некоторые вопиющие, грубые ошибки можно легко указать. Прежде всего, речь должна следовать за мыслью, а не наоборот. Если у вас это не всегда получается, то просто не спешите говорить (не тараторьте), заполняя требуемые процессом мышления паузы чем попало. Не стоит забывайть при этом, что высказанное утверждение имеет значительно более далеко идущие последствия, чем мы обычно это имеем в виду, если действительно об этом задумываемся. Недаром говорят, что слово — не воробей, вылетит — не поймаешь. Мысли материализуются, даже если вы их не записали ни в обычном письме, ни в программном коде. Помните, что "сначала было слово" и только потом все остальное — реализации и видимые представления. Программист, пишущий свою речь на искусственном языке для компьютера, должен быть точен в выражении своих мыслей. Возможные ошибки не только искажают мысль, но и прерывают само общение.

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

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

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

Программиста постоянно искушает иллюзия, что путь от мысли к окончательному и полезному результату довольно короток, стоит только придать своему творению надлежащую форму, отшлифовав ее, удалив все заусеницы и погрешности. Он уверен в этом потому, что может, стремясь к совершенству, несколько раз в день перекраивать реализации своего замысла. Нередко ему удается существенно улучшить качество своего продукта, изменив код программы всего на 1%. Однако бывает и так, что незначительные, на первый взгляд, изменения приводят к краху всей его многотрудной и многоэтажной конструкции. Ему кажется, что он творит постоянно, паря в заоблачных высях чистых идей, постепенно спускаясь к насущной цели, а не просто перерабатывает горы руды или тупо просеивает песок в надежде обнаружить золотой слиток. Кроме того, опытный программист обычно знает, что если проблема не решается легко и быстро, то, скорее всего, в этом виновата плохая основополагающая идея, а не просто его нерадивость, невнимательность и лень. Он также чувствует, что хорошая программа не может быть громоздкой и запутанной, а чрезмерная ее сложность обычно связана с недостаточной проработанностью исходного замысла. Здесь свобода абстрактного творчества и результат его материализации чрезвычайно близки. Кто еще в науке, искусстве или ремеслах может делать или хотя бы ощущать то же самое?

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


Рецензии
На это произведение написано 5 рецензий, здесь отображается последняя, остальные - в полном списке.