Еще один миф, который я для себя опроверг — это миф о смешении языков.

Так или иначе, я знаю пять языков — два разговорных и три программирования. «Знаю» в моей терминологии означает, что я могу формулировать мысли, не задумываясь о форме, а все языковые проблемы упираются не в то, как мне выразить мысль, а в то, что именно я хочу сказать. То есть я могу не знать какое-то слово в английском языке (так же, кстати, как могу не знать значения, а то и факта существования нужного мне слова в русском, хотя он для меня родной), но я не буду часами сидеть и мучительно вспоминать, как же мне выразить условную подчиненность действий в прошедшем времени, а просто буду понимать, что описание такой ситуаций требует вот такого языкового оборота.

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

Естественные языки нужны для разговоров с человеком, машинные — с машиной.

Так или иначе, все языки, которые я знаю, называются похоже. Это С++, C# и Objective C. И ни дай Б-г вам в резюме указать эти языки через дефис, потому что они все три совершенно разные.

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

Проблема была в построении SOAP-клиента для iOS. Мы в свое время для генерации классов клиента по WSDL воспользовались SudzC, но спустя некоторое время в нем обнаружилась критическая масса ошибок, а его закрытость и недоступность контактных данных автора сыграла с нами злую шутку с учетом того, что проект надо как-то завершать, а генерация и правка кода руками — совершенно не вариант. Поэтому, кстати, если у вас есть задача подключаться к SOAP-сервисам и вы хотите генерить классы по WSDL — предупреждаю вас, не пользуйтесь этим проектом, лучше обратитесь ко мне и я вам дам свои исходники, их по крайней мере можно доработать под свои нужды. Небольшой такой реверанс в пользу приложений с открытым исходным кодом.

Критическая масса ошибок потребовала исправления. Можно было воспользоваться другим генератором, но это повлекло бы за собой массу проблем, связанную с переводом на новое API приложения, поэтому было решено в кратчайшие сроки сделать собственный парсер WSDL и генератор классов, совместимый с тем, что мы получили от SudzC.

Задача была решена мной за 1,5 дня.

Конечно, было реализовано лишь ограниченное подмножество WSDL, но оно работает и есть возможность расширять проект и исправлять в нем ошибки.

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

Проект был написан на C# и генерит код на Objective C. Естественно, что сам по себе он представляет собой жуткую мешанину из кода на обоих языках.

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

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

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

Многие также слышали, что люди, знающие несколько языков, нередко вставляют во фразы foreign language phrases. Не так как я сейчас, вынужденно, чтобы избежать повтора слова, а совершенно свободно и непринужденно. Раньше мне казалось, что это такая странная форма выпендрежа, но чем глубже я погружаюсь в чужую языковую среду (и лучше ее понимаю), тем больше я убеждаюсь в том, что именно такая форма разговора для человека, владеющего множеством языков, является наиболее удобной, и что как раз наоборот — требуется волевое усилие, чтобы заставить себя говорить на одном языке.

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

Share →

Leave a Reply

Войти с помощью: 

Your email address will not be published. Required fields are marked *

PageLines