Чем отличаются языки программирования от естественных языков

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

А в некоторых случаях-инструкции.

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

Это мало чем отличается от естественных языков. Если вы знаете английский, это значительно облегчает изучение других латинских языков. Таких как французский и испанский.

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

Мой жизненный опыт с языками программирования является ярким примером этой концепции. Моими первыми двумя языками программирования были BASIC и PHP. После этих первых двух было довольно прямолинейно подобрать другие подобные языки в семействе, такие как C, C++, C#, MATLAB, Javascript. Ruby и Python. Мне просто нужно было узнать, что изменилось.

Однако изучение новых языков за пределами этой основной группы стало сложным. Такие языки, как LISP/Scheme, AMPL, SQL, Regex и Dart. Для меня они чувствовали, что изучение японского языка сегодня будет после 2,5 десятилетий английского.

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

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

Самая большая языковая дискуссия 21-го века среди программистов заключается в том. Что знание нескольких языков программирования облегчает изучение нового естественного языка. И наоборот.

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

Языки не следует путать с алгоритмами. Если вы хорошо разбираетесь в Java, это не значит, что вы знаете. Как сортировать список чисел без вызова какой-либо встроенной функции. Алгоритмы в значительной степени инвариантны к языку, как и идеи в естественных языках.

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

Однако, в отличие от человеческих языков. Мы не склонны выражать эмоции и чувства через поэзию в языках программирования просто потому. Что компьютеры не знают. Как на них реагировать. Если это не инструкция, чтобы что-то сделать, компьютер в значительной степени игнорирует ее.

*-*-*-*

Что значит сказать, что вы хорошо знаете язык? Означает ли это, что вы делали это много и быстро?

Может быть. Но не совсем. Конечно, работа с языком много сделает вас быстрее в нем. Но настоящая причина заключается в том. Что длительная практика сделала вас чрезвычайно хорошо знакомыми с основными выражениями в языке. Структуры управления, например, являются, пожалуй, самыми основными понятиями в любом языке программирования — структуры управления, такие как if, then, else. While, do/while. For, foreach. Goto, blocks. Yields и т. Д. Знание языка хорошо означает, что вы знаете. Как выразить идею о структуре управления—идея управления потоком в вашей программе—хорошо.

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

Как и во всех человеческих языках. Базовые части речи все одинаковы — существительное (дополнительно состоящее из рода и числа), глагол. Прилагательное. Наречие и т. Д. Однако с самого начала они могут выглядеть по-разному в разных языках.

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

Ну, однажды они попробовали это сделать, и все закончилось полным провалом. Она называлась эсперанто.

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

Сила языка также во многом определяется тем. Насколько эффективно вы передаете инструкции. Сегодня лаконичные языки, как правило. Предпочтительнее более подробных языков в силу повышения производительности разработчиков. Язык слишком лаконичный, однако, может иметь проблемы с принятием, поскольку их труднее поддерживать в будущем. Обслуживание важно, так как почти 90%+ кодирования, сделанного сегодня, добавляет функции к существующей программе. А не пишет новые. И что хорошего в языке, который никто не принимает?

Это настоящий подвиг-уравновесить эти два жестких понятия: выразительность и лаконичность.

Языковые дизайнеры всегда идут по натянутому канату. Когда дело доходит до принятия важных дизайнерских решений относительно сложности набора функций их языка. В то же время сохраняя его кратким и окончательно однозначным.

*-*-*-*

Любопытно. Откуда берутся языки программирования? Источников довольно много. Они могут исходить из проекта курса CS в школе по компиляторам, который, в свою очередь. Перерастает в нечто большее. Это мало чем отличается от того, как Linux раньше был классовым проектом Торвальда. Который он затем перешел к открытому исходному коду.

Некоторые программисты, особенно сумасшедшие (хорошие), разрабатывают языки как хобби. Отчасти потому. Что разработка хороших языков-это очень сложная задача, а отчасти потому. Что в конце концов она может оказаться очень полезной. Эти языки для любителей часто являются лучшими, так как их разработчики не испытывают никакого цейтнота. Дизайнеры могут потратить столько времени, сколько захотят, чтобы принять правильные решения для своего языка. В отличие от любителей, некоторые люди просто платят за языки дизайна такими крупными компаниями. Как Google (Dart). Microsoft (C#) и Sun (Java).

Когда дело доходит до различий между естественными языками и языками программирования. Языки программирования также оказываются намного более строгими и менее снисходительными. Чем естественные языки. Это связано с тем, что человеческие языки имеют значительную встроенную избыточность. Которая позволяет нам разрешать двусмысленность с помощью контекста. Языки программирования практически не имеют избыточности, потому что это дополнительная работа для людей. Которые пишут компиляторы для языков. Английский язык особенно известен своей встроенной избыточностью. Вы можете легко отбросить 30% слов (слова-наполнители, такие как предлоги, союзы и артикли), отбросить все гласные. Перемешать все. Кроме первой и последней букв слова. И все же умудриться понять смысл сказанного.

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

Из-за этих проблем языки программирования фактически разрабатываются и проектируются с нуля либо одним. Либо небольшой группой очень талантливых людей. Стоимость завинчивания высока. Так как ставки выше. Особенно когда вы знаете, что ваш язык может быть использован для написания программного обеспечения. Которое питает светофор. Роботизированную руку на МКС. Ракету НАСА. Ядерную боеголовку. Аппарат МРТ или, возможно. Вашу следующую игру в Facebook. Вы же не хотите, чтобы все ваши коровы в Фармвилле внезапно исчезли, не так ли?