Язык - неотъемлемая часть нашей самоидентификации. Это то, что существовало задолго до нас и быстро окутывает наше существо, когда мы выходим из младенчества и начинаем общаться с внешним миром все более изощренными способами.

Людвиг Витгенштейн, известный философ 20-го века, который большую часть своей карьеры провел в агонии за пределами языка, однажды сказал:

Философия - это борьба с очарованием нашего интеллекта с помощью нашего языка.

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

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

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

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

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

В своем путешествии по изучению программного обеспечения я решил сосредоточиться на трех основных языках - Python, JavaScript и C ++ в указанном порядке.

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

Давайте рассмотрим проблему кодирования, которая требует использования заглавных букв сверх определенной длины, скажем 3. В Python я мог бы проанализировать это и ответить в одной строке, используя понимание списка, как показано ниже. Понимание списка здесь - это просто общий термин, который также может охватывать другие формы понимания, например понимание диктовки.

В строке 2 компьютеру даны инструкции сделать следующее:

  1. Разделите строку символов test на список слов.
  2. Для каждого слова (представленного обобщенным i) используйте слово с заглавной буквы, если его длина больше трех - не считая знаков препинания - в противном случае верните слово как есть.
  3. Соедините отдельные слова обратно в предложение в качестве ответа

Лаконично.

Когда я попытался найти подобное решение в JavaScript, мне не удалось его найти. Судя по всему, сообщество предпринимало попытки ввести понимание списков или что-то подобное, но это не прижилось.

Но, к счастью, сообщество JS, как и сообщество Python, ценит чистый и элегантный код. И язык с его сильной объектно-ориентированной культурой развился в другом направлении. Чтобы добиться того же эффекта для вышеупомянутой проблемы, мы прибегаем к цепочке методов, то есть вызываем один метод за другим последовательно.

В терминах аркадных игр объединение методов можно рассматривать как комбо-ходы. Итак, выполняя перемещение split.map.join, я, по сути, повторяю шаги 1–3 в быстрой последовательности в строке 2 выше. Вы также можете заметить, что JS имеет собственный синтаксис управления потоком, который предпочитает математические обозначения человеческим словам. Это также позволяет мне шутить в одну строчку.

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

Еще одним преимуществом изучения JavaScript является то, что современный язык является отличным входом в C ++ среднего уровня, поскольку первый наследует значительную часть основного синтаксиса последнего, включая фигурные скобки, управление потоком и знаменитую / печально известную точку с запятой (которая является фактически обязательно для более старшего языка).

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

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