Давайте объединим программирование и прозу

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

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

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

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

Ниже приводится отрывок из книги Стивена Пинкера Чувство стиля.

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

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

Пинкер также предлагает альтернативное предложение:

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

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

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

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

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

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

Здесь есть многое, что может отвлечь нашего ученика от того, что такое обратный вызов и что он делает, например, как я должен был определить тип функции в параметре (result: String) -> Void и определение { s in … } как анонимной функции.

Однако, просто взглянув на это решение, реализованное в javascript, мы узнаем, что именно делают обратные вызовы:

Здесь определение анонимной функции почти точно такое же, как определение стандартной функции, поэтому мы точно знаем, что это такое и что она делает, просто взглянув на нее. У нас также нет странной типизации в конце callback, которая выглядит так, как будто что-то из lisp пытается проткнуть что-то из Visual Basic коротким копьем.

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

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

Разный синтаксис часто лучше представляет разные проблемы, и небольшое изучение Scala может помочь вам лучше использовать эти методы сбора данных в C#. Немного JavaScript может помочь вам лучше понять, чего, черт возьми, пытается достичь Alamofire.

Если бы вы изучали другие языки, вы бы использовали лямбда-выражения до того, как они появились в Java и C#. Уменьшение карты ? старые новости. Актеры? Они буквально старше меня. Дважды прочитав одну и ту же книгу, вы обнаружите мельчайшие детали, которые вы упустили, но новые идеи возникают при чтении чего-то другого.