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

Поделюсь своим миксом паттернов в области изучения английского языка, программирования, философии. То есть рассматриваю изучение английского языка, как изучение строго типизированого языка программирования.

В строго типизированном языке программирования строковая переменная объявляется как:

string s = "abc"
тип имя = значение 

В английском языке переменная обьявляется как:

имя тип значение
John is a driver

Имя переменной - Джон, тип переменной - IS (тип БЫТЬ), значение - Водитель. То есть в английском языке когда надо присвоить какому-то обьекту какое-то координатно- материальное свойство, используется тип БЫТЬ (англ BE).

Когда надо присвоить обьекту свойство движения, используется тип ДЕЛАТЬ (англ DO)

имя тип значение
John does exercises

Имя - Джон, тип - ДЕЛАТЬ (англ DO), значение - зарядка. То есть сообщается что объект Джон находится в движении, которое имеет смысл зарядки.

Когда надо присвоить объекту свойство владения, используется тип ИМЕТЬ (англ HAVE).

имя тип значение
John has a car

Имя - Джон, тип ИМЕТЬ (англ HAVE), значение - машина. Сообщается что Джон имеет машину.

Вообще любой объект описывается тремя типами значений. И это явно выражено в английском языке. Слова BE, DO, HAVE, использование которых русским людям не особо понятно, это типы значений БЫТЬ, ДЕЛАТЬ, ИМЕТЬ. Здесь для понимания включается паттерн из философии:

  • Объект может БЫТЬ: где-то(по координатам в пространстве или времени); каким-то(материальные свойства: цвет, форма, температура, твердость; роль)

  • Объект может ДЕЛАТЬ что-то(действие, движение).

  • Объект может ИМЕТЬ что-то.

Например есть следующий текст: "Джон водитель. У него есть машина. Он ездит на работу каждое утро. Джон живет в деревне. Джон был в отпуске давно"

"Джон водитель" это утверждение описывающее роль объекта, то есть это утверждение типа БЫТЬ(BE). Переводим на английский. Работаем по схеме ИМЯ ТИП ЗНАЧЕНИЕ. JOHN IS a DRIVER.

"У него есть машина" это утверждение описывающее владение объектом, то есть типа ИМЕТЬ(HAVE). Переводим на английский. Работаем по схеме ИМЯ ТИП ЗНАЧЕНИЕ. JOHN HAS a CAR.

С объявлением переменных разобрались. Теперь рассмотрим объявление функции возвращающей результат. В языке людей функция возвращающая результат это вопрос. Задавая вопрос мы хотим получить ответ, то есть какое-то значение. И как написано в заголовке статьи, английский это строго типизированный язык, и обьявляя функцию, необходимо указать тип возвращаемого значения.

string function(){}; 
тип тело_функции
Is John a driver?

Здесь англоязычный человек задавая вопрос со слова IS, сразу типизирует ожидаемый ответ по типу БЫТЬ. То есть он спрашивает о материально-координатных свойствах объекта Джон.

Does John go to the gym?

Здесь спрашивающий типизирует мозг собеседника на выдачу ответа типа ДЕЛАТЬ(DO). То есть каким Действием занимается.

Думаю доказал типизацию английского языка. Идем далее. Язык JavaScript при обьявлении переменной не требует указывать тип.

let s = 'abc';

В русском тоже переменные не типизируются.

Иван водитель
имя значение
Иван идет
имя значение

Я хобби программист и пишу код мало. Но выработал такое правило именования переменных: переменная типа String должна начинаться на "s"; переменная типа integer на "i"; boolean на "b" и т.д. Например

string sTemp = "abc";
int iTemp = 1;
bool bTemp = true;

Это сразу в коде позволяет увидеть с каким типом данных работает переменная. А для массива использую приставку "arr", для двумерного "arr2"

string[] arr_sTemp = {"a", "b", "c"};

string[,] arr2_sTemp = {{"a", "b"},{"c", "d"}}

То есть с помощью приставки к имени переменной, я типизирую ее для себя для своего восприятия типа переменной. Такая типизация переменных по приставкам и окончаниям есть в русском языке. Окончание "ый" это тип БЫТЬ (краснЫЙ). Окончание "ть" это тип ДЕЛАТЬ (бежаТЬ). Различные предлоги типизируют координаты в пространстве. "НАстольный тенис" в русском, гораздо информативнее чем просто "table tennis". То есть русский язык типизируется приставками и окончаниями переменной. Английский типизируется отдельными словами и их всего 3 (be, do, have). Поэтому английский проще и это язык международного общения.

Ну и напоследок функция типа boolean возвращает ответ типа "ИСТИНА/ЛОЖЬ" или "ДА/НЕТ". Функцию типа boolean можно маркировать приставкой "boo"

boolean booTemp = true;

В русском языке логическая функция или вопрос подразумевающий ответ "ДА/НЕТ", тоже маркируется приставкой "boo".

bool booDeshPyt(sdrink temp)
{
 		if (temp == "whiskey")
		{
 			return boodu;
		}
 return neboodu;
 }
 

:)

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


  1. KGeist
    31.01.2022 14:24
    +16

    Имхо, сравнение с ЯП притянуто за уши. Разобраны довольно рандомные кейсы, и на их основе строятся какие-то далекоидущие выводы. Не понял, каким образом глагол это "тип". Тут как будто бы скорее говорится о фиксированном порядке слов и использовании "вспомогательных" глаголов в английском. Но в русском тоже есть вспомогательные глаголы ("я буду делать"), да и в английском они используются не везде и не всегда (вместо "John does exercises" можно сказать "John exercises", правда смысл будет немного другой). Отсутствие в русском языке глагола-связки "быть" в настоящем времени это скорее просто "shorthand syntax" или "syntax sugar", ведь вы можете сказать "Джон является водителем" или даже "Джон есть водитель" и вас поймут. Syntax sugar присутствует и в строго типизированных языках. Что касается фиксированности порядка слов, то это ошибка считать, что в русском языке порядок рандомный и никак не "типизируется"/"формализуется" в отличие от английского. Порядок слов в предложении имеет вполне конкретную функцию, сравните два предложения: "мальчик вошёл в комнату" и "в комнату вошёл мальчик". В первом случае мальчик известен, во втором случае -- это какой-то неизвестный нам мальчик.

    В целом, я не понял, что имел в виду автор.


    1. kryvichh
      31.01.2022 15:39

      В первом случае мальчик известен, во втором случае -- это какой-то неизвестный нам мальчик.

      В восточнославянских языках мы так компенсируем отсутствие определённого и неопределённого артикля. Без этого понадобился бы более широкий контекст для определения о ком конкретно речь: не предложение, а группа предложений или абзац. Либо добавление местоимения "этот", "тот", "какой-то".


      1. Radisto
        31.01.2022 15:48

        маркировка темы и ремы, один блогер неплохо рассказывал это на примере русского и английского яыков


      1. KGeist
        31.01.2022 18:41
        +1

        Фраза "компенсируем отсутствие определённого и неопределённого артикля" подразумевает какое-то превосходство системы артиклей над другими системами, но это не так -- тема/рема это базовая вещь, которая присутствует во всех языках, но выражается по-разному. Где-то это артикли, где-то это постпозитивные частицы, где-то это порядок слов.


    1. Pavel_nobranch Автор
      31.01.2022 18:27

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

      IS she a teacher? вопрос с ожидаемым ответом типа БЫТЬ(кто, какой, где)

      STRING GetName(){}; метод возвращающий значение типа стринг.

      HAS she a car? вопрос запрашивающий ответ типа ИМЕТЬ

      INT GetNumber(){}; метод возвращающий значение типа интегер


  1. panzerfaust
    31.01.2022 14:31
    +5

    Английский это строго типизированный язык

    Это как посмотреть. Английский язык - хороший пример языка аналитического. То есть смыслы и грамматические отношения передаются через контекст. К примеру, само по себе слово "google" значит мало. А в контексте оно может быть по частям речи: существительным, приглатаельным, глаголом. По смыслу: названием компании, обозначением большого числа или синонимом "to search".

    То есть "тип" обозначится только во время выполнения (разговора) - это признак динамической или утиной типизации.

    А тот факт, что одно слово у нас может играть роль любой части речи - есть признак слабой типизации.


    1. KGeist
      31.01.2022 14:41

      Хороший контрпример это https://en.wikipedia.org/wiki/Buffalo_buffalo_Buffalo_buffalo_buffalo_buffalo_Buffalo_buffalo

      Это грамматически допустимая фраза, где каждое слово выступает в разной роли - существительное, прилагательное, глагол. В русском языке такое невозможно (чтобы одно и то же слово повторялось 8 раз и меняло своё значение в зависимости от позиции в предложении).


      1. StjarnornasFred
        31.01.2022 15:16
        +4

        Косил косой-косой косой косой-косой косой Косой.


        1. KGeist
          31.01.2022 18:31
          +1

          Хороший контрконтрпример. Мне не стоило писать так категорично - "невозможно" :) Но в русском это скорее исключение, чем правило. А вот в английском, как автор выше написал -- это естественно и нормально, когда, казалось бы, одно и то же слово выступает в разных ипостасях, в зависимости от грамматического контекста (например, "warm" может быть и глаголом, и прилагательным; "anger" может быть и существительным, и глаголом, и т.д.). Вот тут непонятно, это тогда слабая типизация или сильная? В любом случае сравнение с типизацией в ЯП выглядит довольно притянуто.


      1. dolovar
        31.01.2022 15:28
        +4

        Девятка:
        — С косой-косой косой (прическа) косой-косой Косой (имя) косой-косой косой (инструментом) косо косил на косом покосе (и далее по тексту)…


  1. amarao
    31.01.2022 14:52
    +2

    А где тут типы-то? Порядок следования ключевых слов в языке программирования определяется грамматикой, а не системой типов.


  1. light_and_ray
    31.01.2022 17:15
    +1

    Если "быть" - это тип, то, получается

    John does exercises
    Andy does exercises

    John и Andy равны? А в английском это могут быть два разных человека

    И еще пример

    John is a driver and John does exercises

    Получается переопределение переменной John?

    И не понятно интуитивно, почему "иметь", "быть", "есть", "делать" и т.п. - это типы


    1. Pavel_nobranch Автор
      31.01.2022 18:41

      Получается переопределение переменной John?

      Точнее определение свойств объекта Джон. Любой обьект в нашей реальности определяется следующими свойствами:

      • координаты в пространстве тип БЫТЬ

      • координаты во времени тип БЫТЬ

      • материальные свойства тип БЫТЬ

      • состояние движения тип ДЕЛАТЬ

      • отношение к другим объектам тип ИМЕТЬ


      1. M_AJ
        31.01.2022 20:09

        материальные свойства тип БЫТЬ
        состояние движения тип ДЕЛАТЬ

        Или быть делающим, например I see her looking at me (буквально «Я вижу ее смотрящей на меня» или быть сделанным (испытавшим на себе действие) A book was written — Книга была написана. Как видите, в естественном языке все несколько сложнее и сам признак, может быть выражен действием.


  1. M_AJ
    31.01.2022 19:19

    Знания в разных областях позволяют переносить наблюдаемые зависимости в одной области знаний в другую область и понять ее. 

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


  1. kost
    31.01.2022 20:32
    +1

    Но выработал такое правило именования переменных: переменная типа String должна начинаться на «s»; переменная типа integer на «i»; boolean на «b» и т.д.


    Вы изобрели венгерскую нотацию: en.wikipedia.org/wiki/Hungarian_notation


  1. AndyPike
    01.02.2022 01:03

    Личные изыскания - это хорошо, конечно. Можно предложить всё что угодно.

    Есть определённые практики (по крайней мере в компаниях, в которых я работал):
    1) Все boolean (simple state) в основном начинаются с is, редко has. Are или have не используются. "The" и "a/an" тоже, минифицируется.
    2) Все действия начинаются с глагола. Не важно, "handleMenuOpen" или "openMenu". Мне второе лаконичнее, смысл одинаков.
    3) Все сущности начинаются с существительного, типа "MenuSet".

    Типы не надо смотреть - они в любом современном IDE и так видны.
    (VS Code, WebStorm)

    4) Будьте готовы к тому, что когда вы придёте в компанию с 100+ разработчиков, вам придётся подстраиваться под общий codestyle, принятой в компании. И надо будет быть готовым гибко принимать это.


  1. dbalabanov
    01.02.2022 11:39

    return temp == "whiskey"