Почему нам всегда потребуются новые языки программирования

1656573734 pochemu nam vsegda potrebuyutsya novye yazyki programmirovaniya

Мартин Москало

TJLA0zPJXSOVCMWG9frHnNBbXfxA6AAZp3DM

«Структура и интерпретация компьютерных программ» Гарольда Абельсона и Джеральда Джея Сассмана — одна из лучших книг когда-либо написанных. Он опередил свое время на многие годы.

Преимущества функционального программирования, которые были подчеркнуты там, до сих пор являются постоянным источником вдохновения для ораторов, преподавателей и других писателей. Он показал силу и недостатки объектно-ориентированного программирования, когда он был еще молод. Благодаря фанатикам объектно-ориентированного программирования эти способности скоро рекламируются. Не считая того, общине понадобились годы, чтоб узреть недочеты.

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

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

Что такое язык программирования?

Смотрите следующую функцию:

fun square(a: Int) = a * a
// Usageprint(square(10) + square(20))

Что это значит square определено?

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

// Kotlinprint(10 * 10 + 20 * 20)

С точки зрения программиста, square гораздо больше. Тот факт, что мы можем определить такую ​​функцию, не только более простой способ выполнения операции, но и позволяет нам выразить понятие квадратуры. Эта функция есть некая абстракция.

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

Эволюция языков программирования

Индустрия программирования развивается, как и языки программирования. Подумайте о цикле for. Первоначально был только цикл when.

Вскоре программисты заметили распространенную закономерность:

// Cint i = 0;while(i < n) {    i++;    // ...} 

The while выражение использовалось снова и снова для перебора чего-либо — преимущественно чисел, адресов или итераторов.

Поэтому мы ввели циклы for:

// C++for (int i = 0; i < n; i++) {    // ...}

В скором времени промышленность заметила, что цикл for в основном используется для итерации элементов из списка.

Вот почему языки представили новый вариант цикла for, который предназначен для повторения list:

// Kotlinfor(e in list) {    // ...}

Поэтому нам нужны новые функции

Но языки развиваются, почему бы не придерживаться их?

Это правда, что языки развиваются. В некоторых случаях действительно поражает, как старые языки, такие как C++, Java или JavaScript могут иметь хорошую поддержку функциональных элементов программирования, для которых они не были разработаны. Но проблема в том, что новые функции не заменяют старые, а прилагаются.

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

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

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

По-моему, поэтому все так любят Котлин. Это наиболее хорошо разработанный язык программирования, который я знаю.

На это есть веские причины:

  • Он был в бета-версии в течение 6 лет и постоянно развивался в течение всего этого времени.
  • Он разработан JetBrains, которые годами овладевают своим пониманием языков программирования и того, как люди ими пользуются.

В ходе бета-версии некоторые важные функции были полностью реализованы, но они были удалены до версии 1.0. Среди них есть кортежи. Котлин их всецело поддержал! Тем не менее, команда Kotlin изъяла поддержку кортежей в Kotlin 1.0, поскольку их анализ и эксперименты показали, что кортежи приносят больше вреда, чем пользы, и люди должны использовать вместо них классы данных. Это показывает, что JetBrains подразумевает важность хорошего дизайна.

Еще один хорошо разработанный язык – Swift. Он был разработан гораздо быстрее, и разработчики, его разрабатывавшие, совершили много ошибок. Но Apple просто сменила дизайн почти с каждым выпуском основных версий. Им безразлично о наследстве.

Разработчики ворчат, но с точки зрения дизайна это здорово. Хотя они не могут продлить это долго. Чем больше вещей у Swift, тем больше стоимость изменения дизайна. Кроме того, я не думаю, что они могут изменить основные функции.

gyPeeyU3As2Bd4PHAT50byzZlibC2ResHNDd
Источник: https://getbadges.io/blog/12-gamification-platforms-that-help-learn-coding

Итак, если у нас хорошо разработаны новые языки, являются ли они окончательными?

Вовсе нет. Отрасли развиваются. Наше мышление развивается. Для этого языки программирования также должны развиваться.

Одно состоит в том, что появятся идеи о новых функциях и образах мышления, и поэтому идеально разработанные языки больше не будут идеальными.

Во-вторых, мы узнаем больше о программировании. Классы и методы открыты по умолчанию в Java. Kotlin сделал их обоих окончательными по умолчанию, поскольку разработчики чрезмерно использовали наследование, когда этого не следовало.

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

В-третьих, меняются парадигмы. Я вижу стагнацию с точки зрения парадигм программирования, но нам еще есть, что внедрить в повседневную практику.

Куда делось логическое программирование? Обратите внимание, что вы можете использовать эту парадигму и просто предоставить набор ограничений для сайта и ожидать, что веб-сайт будет создан автоматически на их основе. Это можно реализовать. Кроме того, рано или поздно родятся новые парадигмы. Не может быть, чтобы мы все исследовали.

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

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

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

Закрытие

Подумайте о математике. Равновесие можно выразить описательным способом:

Два плюс три равны пяти

Хотя это нечто совсем другое, чем выразить это с помощью математических обозначений:

2+3=5

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

Если бы это ни было важно, мы бы работали на Ассемблере вместо Java, JavaScript, Python или Kotlin. Но это важно. Вот почему нам нужны все лучшие и лучшие выражения, а также требуются новые языки программирования.

Vr01qrslh5N7yR1gf6L3OfIRGPg6r2ttP102

Об авторе

Марцин Москала (@marcinmoskala) является тренером и консультантом, который сейчас сосредотачивается на разработке Kotlin в Android и расширенных семинарах Kotlin (дополнительную информацию можно получить здесь). Он также спикер, автор статей и книги о разработке Android в Kotlin.

70Dz9UeSMUlQTowTe8t8N-QuMO2BZSD80C5b

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *