Одна из причин, по которой я так увлекся написанием серверного JavaScript-кода, заключается в том, что у меня есть некоторый опыт работы с C#.

Советы, приведенные в этой статье, относятся к C# (через .NET Framework) и JavaScript (через NodeJS). Но это также может быть применимо к любым двум другим языкам, которые используются для выполнения той же работы. Итак, скажем, Ruby и Java, которые также можно использовать для написания кода на стороне сервера. Или, например, два клиентских JavaScript-фреймворка: Angular и React.

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

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

Абстрактно это может не иметь большого смысла. Итак, рассмотрим пример.

Используя Node, разработчик может написать простой веб-сервер, используя модуль Express. С этого момента в этой статье мы будем называть это «Экспресс-сервером». Сервер Express содержит несколько частей, в том числе механизм представления, обработчики маршрутов и промежуточное ПО. Для этого примера давайте просто рассмотрим промежуточное ПО.

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

Например, если задание сервера Express состоит в том, чтобы «добавить 2» перед отправкой ответа, сервер возьмет данные, полученные в запросе клиента (например, число «4»), добавит к ним 2, а затем отправит ответ клиенту; в данном случае цифра «6».

Хотя это немного упрощает, действия, предпринимаемые сервером Express с момента получения запроса от клиента до момента отправки ответа, выполняются функциями, называемыми «промежуточным программным обеспечением». Итак, в приведенном выше примере промежуточное ПО вызывалось, когда сервер Express «добавил 2» к ответу.

На сервере Express код промежуточного ПО выглядит так:

Итак, напомним, что разработчик может написать сервер Express, используя JavaScript, который принимает запрос клиента, использует его через промежуточное ПО, а затем отправляет обратно клиенту ответ.

Угадай, что? Разработчик может написать сервер .NET, используя C#, который принимает запрос клиента, использует его через промежуточное ПО, а затем отправляет обратно клиенту ответ.

Верно! Как только вы обнаружите концепцию промежуточного программного обеспечения в NodeJS/Express, все, что вам нужно сделать, это погуглить «промежуточное программное обеспечение .NET», чтобы обнаружить, что такая же концепция существует и там. Код промежуточного ПО в .NET выглядит так:

Конечно, знание того, что концепция является общей для двух языков, само по себе не укрепит ваше обучение. Однако сопоставление того, как ПО промежуточного слоя работает в .NET, с тем, как оно работает на сервере Express, может помочь получить более полное представление о том и другом. И в некоторых случаях, когда концепция может изначально не иметь смысла на одном языке, вы можете найти ее более интуитивно понятной на другом. Таким образом, вы усваиваете его через язык, в котором он сначала имеет наибольший смысл, а затем используете это знание, чтобы преодолеть путаницу в другом языке.

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

Пример:

В JavaScript-фреймворках на стороне клиента существует концепция «отслеживания состояния», с которой может быть довольно сложно разобраться. Мы не будем пробовать здесь. Но мы поделимся тем, что на самом низком уровне механики Интернета, когда данные фактически проходят через порты, также существует понятие «отслеживание состояния». И состояние на этом низком уровне, хотя и не совсем такое же, по своей сути похоже на состояние, которое существует на гораздо более высоком уровне клиента.

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

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