Сегодня хотим поговорить с вами о сравнении изучения иностранного языка с изучением нового языка программирования. Сравнивать будем английский и программирование на детище всем известной компании Microsoft — C#. Размышляет на тему наш эксперт Антон.

Немного о бэкграунде


Я овладел английским до того, как начал изучать C#. Учился как самостоятельно, так и в школе. В данный момент моего уровня хватает, чтобы смотреть сериалы без перевода и читать профессиональную литературу. Сначала я программировал на Turbo Pascal, потом на Borland Delphi, а после этого на PHP. Теперь на С#. Также пишу скрипты на PowerShell для основных задач.

Элементы языка


С чего обычно начинается изучение языка? С осмотра его атомарных единиц. В иностранном языке это буквы и звуки, в случае языка программирования — переменные.

Дальше в языке мы начинаем изучать построение слов, а из слов строим фразы. В программировании же мы учимся сначала элементарным операциям, которые затем превращаются в функции и процедуры.

Сравните сами:

Mary.
Mary is a girl.
Mary has a green dress.

Посмотрим на это с точки зрения программирования: есть переменная “Mary” типа “girl” со свойством “dress”, у которого значение “green”.

Синтаксис


Синтаксис языка программирования по своей структуре очень схож с построением фразы на английском языке. Да возьмём даже шире: законченную программу можно сравнить с рассказом, который подчиняется аналогичным правилам. Мы начинаем с описания героев произведения в рассказе и с описания классов и методов в программировании, затем переходим к развитию сюжета и основной логике соответственно, а заканчиваем выводами истории и на экран.

Попробуем рассмотреть «Три поросёнка» с такого ракурса. У нас есть класс “поросёнок” со свойствами “имя” и “домик”. Есть экземпляры класса “первый поросёнок”, “второй поросёнок” и “третий поросёнок”. Дальше необходимо свойствам “имя” и “домик” каждого поросёнка присвоить значения. Как описанное запрограммировать?

public Class Pig
{
    public string Name {get; set;}
    public string House {get; set;}
}
Pig pig1 = new Pig();
Pig pig2 = new Pig();
Pig pig3 = new Pig();
pig1.Name = “Nif-Nif”;
pig1.House = “Straw”;
pig2.Name = “Nuf-Nuf”;
pig2.House = “Wood”;
pig3.Name = “Naf-Naf”;
pig3.House = “Stone”;

Скажем это по-английски:

There are three little pigs.
The first pig’s name is Nif-Nif, the name of the second pig is Nuf-Nuf and the third one is Naf-Naf.
Nif-Nif lives in a house made of straw, Nuf-Nuf lives in a wooden house and Naf-Naf lives in a stone house.

Что в одном, что в другом случае мы обозначили три экземпляра класса “поросёнок“, а потом каждому из них присвоили значения свойств “имя” и “дом проживания“.

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

Представим, что у нас богатырь стоит перед путеводным камнем и читает, куда идти и что ему за это будет. Как это описать машинным кодом?

Switch (Dobrynya.Walk)
{
    Case “Left”:
        Dobrynya.Head = false;
        Break;
    Case “Right”:
        Horse.Life = 0;
        Break;
    Case “Forward”:
        Dobrynya.Happy = true;
        Break;
}


Здесь мы видим последствия его действий: если Добрыня пойдёт налево, то сложит голову, если направо, то потеряет коня, а если прямо, то получит счастье.
Теперь напишем это по-английски:

If Dobrynya walks to the right, his horse will die.
If Dobrynya walks to the left, he will lose his head.
If Dobrynya goes forward, he will be safe and happy.

Как видите, такое же описание блоков условий и описание изменений свойств объектов.
Зная язык программирования, вы сможете освоить грамматические правила построения фраз и на иностранном языке.

А дальше всё как в программировании: наращиваем словарный запас, заучивая новые слова. Сравните это с чтением MSDN и TechNet. Составлять изученные слова во фразы и предложения, а предложения уже состыковывать между собой. Это похоже на написание логики на языке программирования. Да и вообще, что программирование — это диалог машины с человеком или машины с машиной, что человеческий язык — это общение двух людей. И там, и там языковые элементы подчиняются законам и правилам, которые человеку с техническим складом мышления не составит труда систематизировать и применять на практике в свою пользу.

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

Бонус читателям


На нашем сайте можно учить английский бесплатно, но с ограничениями. Для неограниченного доступа есть абонемент, дарим на него скидку 500 рублей по этой ссылке (скидка доступна после регистрации).

Комментарии (17)


  1. Garbus
    30.10.2017 17:14

    Ну и сравнение однако. Знать язык или уметь написать гениальный роман, это две большие разницы. Думаю именно синтаксис и мелкие особенности, очень малая доля из умения написания программы, выполняющей заданные функции.


    1. slpe Автор
      30.10.2017 17:24

      Речь скорее об общих принципах, роман так, конечно, не напишешь.


    1. Serge78rus
      30.10.2017 18:38

      Ваше сравнение программы с гениальным романом тоже не идеально. Скорее уж тогда надо сравнивать с неким утилитарным чтивом. Доля творчества в программировании, безусловно, есть, но все-таки — это индустрия, поставленная на поток.


      1. Garbus
        30.10.2017 20:27

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


        1. KvanTTT
          31.10.2017 00:18

          У романа нет некоего параметра по которому его можно легко назвать идеальным, а у программы есть.

          Неверено. Помимо сокрости, объема памяти есть еще архитектура проекта и стиль, в котором присутстсвует субъективность. Причем для кого-то может лучше и понятней один вариант, для других — другой. Дело вкуса.


          1. Garbus
            31.10.2017 04:36

            Ну большая часть оценок идет всё же со стороны потребителя, который обычно и не догадываеться, сколько черновиков исчиркал автор или как красиво сделан код. А уж уповать на объективность массы потребителей, весьма спорный вариант.


        1. Serge78rus
          31.10.2017 10:16

          Я не сравниваю настолько прямолинейно.
          Я это понимаю, и с основной Вашей мыслью согласен, у меня не было бы возражений, если бы Вы к слову «роман» не добавили бы прилагательное «гениальный». Нельзя сравнивать шедевр и утилитарную рутину, коей является программирование.
          У романа нет некоего параметра по которому его можно легко назвать идеальным, а у программы есть.
          Давайте заменим слово «идеальный» на что нибудь более приземленное, например, «хороший», тогда и у того, и у того появятся критерии соответствия. Хороший роман — это который читают. Хорошая программа — это которая без нареканий выполняет свои функции.
          Скорость это, объем памяти или еще что-то, но большая часть программ к ним и близко не приближается. Понятно что все зависит от затрат на доведение до идеала, но там где новичок наделает костылей и ошибок, опытный программист сделает быстрее и лучше. Соответственно и писатель может очень по разному писать в зависимости от опыта и прилагаемых усилий.
          И опять Вы сравниваете рутинную работу, где про идеал никто речи не ведет, т.к. на выходе нужна чисто утилитарная вещь, и творчество, которое действительно может быть попыткой достижения идеала.


  1. KvanTTT
    31.10.2017 00:32

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


    Однако идея рассматривать текст как код мне нравится. Есть текстовые форматы (Markdown), которые хорошо сочетаются с системами контроля версия (Git), и для которых уже существуют утилиты, проверяющие орфографию и форматирование. Git предоставляет удобное версионирование, возможность создания веток, пулл-риквесты и ревью только уже для текстов, а не для исходных кодов.


  1. lgorSL
    31.10.2017 01:22

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


    1. KvanTTT
      31.10.2017 02:26

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

      Так при просмотре фильма тоже не обязательно знать все слова — некоторые можно пропускать без потери смысла. А если смотришь дома, то можно поставить на паузу и посмотреть в словаре.


  1. pwl
    31.10.2017 03:52

    Размышляет на тему наш эксперт Антон.

    Эксперту Антону можно посоветовать поискать размышления других людей на эту тему. Скажем, Ноама Хомского:
    https://habrahabr.ru/post/177701/


  1. AlexZaharow
    31.10.2017 13:31

    Сам заголовок уже как-то не очень:

    есть ли общее в изучении иностранного языка и языка программирования

    Ваша статья совершенно слаба потому что вы рассмотрели именно простые популярные языки программирования. Если взять для рассмотрения ещё какой-то язык, не такой структурированный как C#, а, например, LISP или LATEX, то увидите, что они уже не так хорошо согласуются с вашей логикой, хотя и имеют свою. Однако вся их схожесть состоит в том, что все языки программирования изобретены именно человеком, поэтому и понятны вам, как человеку. И вы рассказываете о том, что вы это узнали? Лично я давно знал, что я человек, а значит могу приложить усилия и понять другого человека.
    P.S.
    Истории «про поросят» рассказывают маркетологи на каждой конференции. Ничего нового.


  1. VezhLos
    31.10.2017 14:55

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


  1. muhaa
    31.10.2017 18:42

    Изучение языка программирования происходит примерно так:
    1. Изучить как в этом языке программирования реализованы уже знакомые концепции (от 30 мин. до нескольких часов)
    2. Понять как работают концепции, пока не знакомые или реализованные незнакомым способом (пару дней).
    3. Ознакомиться с каким-то минимальным набором библиотек и фреймворков для решения первой задачи (несколько дней).
    4. Начать что-то писать. На каждом шагу наступать на раскиданные там и сям для новичков грабли. Справившись с граблями останавливаться и искать как здесь принято решать те или иные стандартные задачи (неделя-другая).
    5. Освоившись начать работу над проектом. С этого момента новый язык уже не проблема, основная проблема — незнакомые фреймворки. Новый язык несколько замедляет работу, когда хочется сделать все изящно. Общий навык написания красивого кода нарабатывается постепенно годами.
    Вообще ничего общего с иностранными языками.


    1. slpe Автор
      31.10.2017 21:35

      1. Изучить, как в языке строятся простейшие предложения и конструкции, минимальный набор грамматических правил (простое настоящее время, принцип спряжения правильных глаголов).
      2. Понять, как использовать прошедшее и будущее времена, как спрягаются неправильные глаголы.
      3. Ознакомиться с 100-200 самых часто используемых слов, которые могут пригодиться в разговоре на повседневные темы.
      4. Начать говорить простыми фразами о себе, выучить основные фразы для общения. Пока знакомишься с новыми фразами, смотришь в словарь и учишь новые слова и конструкции.
      5. Освоив базовые знания о языке, расширять словарный запас, пополнять знания о грамматике и говорить. Много-много говорить. Постепенно нарабатывая словарный запас и повышая уровень до fluent, на что уйдет несколько лет, чтобы говорить красиво и правильно.

      Разница только во времени освоения, впрочем, если заниматься только изучением языка с утра до вечера, приведенные сроки можно отнести и к иностранному языку.


      1. muhaa
        01.11.2017 00:11

        Точно так же можно привести аналогию с обучением катания на лыжах, вождению автомобиля и вообще с чем угодно.
        У языков программирования нет ничего общего с языками общения. Язык программирования — это не язык выражения мыслей. Это прямое перечисление последовательности действий для компьютера. В знании языка программирования самое важное — осознавать что происходит с данными при выполнении команд. Дальше, нужно нарабатывать воображение для того, чтобы уметь упорядоченно оперировать этими данными таким образом, чтобы достичь требуемой цели.
        Никто не объясняет компьютеру что мы от него хотим. Наоборот, программа — это построенный программистом механизм, который работает сам по себе и приводит к требуемому результату.
        Смотреть на язык программирования как на «язык общения с компьютером», типа «я-ж пишу что делать, какая мне разница как он это сделает» — фатальная ошибка гуманитария, которая лишает надежды на настоящее освоение программирования.
        И наоборот — попытка разобраться в языке общения, как можно разобраться в языке программирования — это распространенная ошибка человека с математическим складом ума бессмысленная трата сил. Так можно получить знания лингвиста, но так и не изучить язык. Там надо просто очень много читать, слушать, говорить, пока мозг не настроится на этот гиганский объем на уровне подсознания.


        1. AlexZaharow
          01.11.2017 08:07

          Мне очень понравился ваш ответ! Позвольте немного обобщить его — чтобы ХОРОШО научиться и иностранному языку и языку программирования нужно МНОГО практиковаться и в том и в другом. Но это есть общее в изучении вообще всего. ))) Да, аналогии позволяют иногда находить ответ быстрее, но их нужно уметь не только «проводить», но и доказывать.