Знания в разных областях позволяют переносить наблюдаемые зависимости в одной области знаний в другую область и понять ее. Знания они как элементы мозайки, как паттерны проектирования. Зная некоторые паттерны в химии, некоторые в механике, некоторые в электронике, можно их применять друг у друга для лучшего понимания. Классика жанра это объяснение как течет электрический ток на примере труб с водой.
Поделюсь своим миксом паттернов в области изучения английского языка, программирования, философии. То есть рассматриваю изучение английского языка, как изучение строго типизированого языка программирования.
В строго типизированном языке программирования строковая переменная объявляется как:
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)
panzerfaust
31.01.2022 14:31+5Английский это строго типизированный язык
Это как посмотреть. Английский язык - хороший пример языка аналитического. То есть смыслы и грамматические отношения передаются через контекст. К примеру, само по себе слово "google" значит мало. А в контексте оно может быть по частям речи: существительным, приглатаельным, глаголом. По смыслу: названием компании, обозначением большого числа или синонимом "to search".
То есть "тип" обозначится только во время выполнения (разговора) - это признак динамической или утиной типизации.
А тот факт, что одно слово у нас может играть роль любой части речи - есть признак слабой типизации.
KGeist
31.01.2022 14:41Хороший контрпример это https://en.wikipedia.org/wiki/Buffalo_buffalo_Buffalo_buffalo_buffalo_buffalo_Buffalo_buffalo
Это грамматически допустимая фраза, где каждое слово выступает в разной роли - существительное, прилагательное, глагол. В русском языке такое невозможно (чтобы одно и то же слово повторялось 8 раз и меняло своё значение в зависимости от позиции в предложении).
StjarnornasFred
31.01.2022 15:16+4Косил косой-косой косой косой-косой косой Косой.
KGeist
31.01.2022 18:31+1Хороший контрконтрпример. Мне не стоило писать так категорично - "невозможно" :) Но в русском это скорее исключение, чем правило. А вот в английском, как автор выше написал -- это естественно и нормально, когда, казалось бы, одно и то же слово выступает в разных ипостасях, в зависимости от грамматического контекста (например, "warm" может быть и глаголом, и прилагательным; "anger" может быть и существительным, и глаголом, и т.д.). Вот тут непонятно, это тогда слабая типизация или сильная? В любом случае сравнение с типизацией в ЯП выглядит довольно притянуто.
dolovar
31.01.2022 15:28+4Девятка:
— С косой-косой косой (прическа) косой-косой Косой (имя) косой-косой косой (инструментом) косо косил на косом покосе (и далее по тексту)…
amarao
31.01.2022 14:52+2А где тут типы-то? Порядок следования ключевых слов в языке программирования определяется грамматикой, а не системой типов.
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?
И не понятно интуитивно, почему "иметь", "быть", "есть", "делать" и т.п. - это типы
Pavel_nobranch Автор
31.01.2022 18:41Получается переопределение переменной John?
Точнее определение свойств объекта Джон. Любой обьект в нашей реальности определяется следующими свойствами:
координаты в пространстве тип БЫТЬ
координаты во времени тип БЫТЬ
материальные свойства тип БЫТЬ
состояние движения тип ДЕЛАТЬ
отношение к другим объектам тип ИМЕТЬ
M_AJ
31.01.2022 20:09материальные свойства тип БЫТЬ
состояние движения тип ДЕЛАТЬ
Или быть делающим, например I see her looking at me (буквально «Я вижу ее смотрящей на меня» или быть сделанным (испытавшим на себе действие) A book was written — Книга была написана. Как видите, в естественном языке все несколько сложнее и сам признак, может быть выражен действием.
M_AJ
31.01.2022 19:19Знания в разных областях позволяют переносить наблюдаемые зависимости в одной области знаний в другую область и понять ее.
Ну да, примерно так древние люди и познавали мир, перенося черты и свойства известных им из опыта вещей и явлений на неизвестные. Иногда даже работало. Правда далеко не всегда, поэтому пришлось выдумывать научный метод.
kost
31.01.2022 20:32+1Но выработал такое правило именования переменных: переменная типа String должна начинаться на «s»; переменная типа integer на «i»; boolean на «b» и т.д.
Вы изобрели венгерскую нотацию: en.wikipedia.org/wiki/Hungarian_notation
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, принятой в компании. И надо будет быть готовым гибко принимать это.
KGeist
Имхо, сравнение с ЯП притянуто за уши. Разобраны довольно рандомные кейсы, и на их основе строятся какие-то далекоидущие выводы. Не понял, каким образом глагол это "тип". Тут как будто бы скорее говорится о фиксированном порядке слов и использовании "вспомогательных" глаголов в английском. Но в русском тоже есть вспомогательные глаголы ("я буду делать"), да и в английском они используются не везде и не всегда (вместо "John does exercises" можно сказать "John exercises", правда смысл будет немного другой). Отсутствие в русском языке глагола-связки "быть" в настоящем времени это скорее просто "shorthand syntax" или "syntax sugar", ведь вы можете сказать "Джон является водителем" или даже "Джон есть водитель" и вас поймут. Syntax sugar присутствует и в строго типизированных языках. Что касается фиксированности порядка слов, то это ошибка считать, что в русском языке порядок рандомный и никак не "типизируется"/"формализуется" в отличие от английского. Порядок слов в предложении имеет вполне конкретную функцию, сравните два предложения: "мальчик вошёл в комнату" и "в комнату вошёл мальчик". В первом случае мальчик известен, во втором случае -- это какой-то неизвестный нам мальчик.
В целом, я не понял, что имел в виду автор.
kryvichh
В восточнославянских языках мы так компенсируем отсутствие определённого и неопределённого артикля. Без этого понадобился бы более широкий контекст для определения о ком конкретно речь: не предложение, а группа предложений или абзац. Либо добавление местоимения "этот", "тот", "какой-то".
Radisto
маркировка темы и ремы, один блогер неплохо рассказывал это на примере русского и английского яыков
KGeist
Фраза "компенсируем отсутствие определённого и неопределённого артикля" подразумевает какое-то превосходство системы артиклей над другими системами, но это не так -- тема/рема это базовая вещь, которая присутствует во всех языках, но выражается по-разному. Где-то это артикли, где-то это постпозитивные частицы, где-то это порядок слов.
Pavel_nobranch Автор
Согласен с тем что статья не слишком структурно логичная. Дам примеры по которым вы сами заметите аналогию между английским и языком программирования
IS she a teacher? вопрос с ожидаемым ответом типа БЫТЬ(кто, какой, где)
STRING GetName(){}; метод возвращающий значение типа стринг.
HAS she a car? вопрос запрашивающий ответ типа ИМЕТЬ
INT GetNumber(){}; метод возвращающий значение типа интегер