Должен сказать, что мне очень понравилось изучать Ruby и фреймворк Ruby on Rails; с обоими интересно работать, и они избавлены от многих наиболее утомительных частей программирования. Серьезно, то, что Rails делает для вас, безумно; Я думаю, что многие люди из моей группы не работали ни с каким другим бэкенд-фреймворком и поэтому не всегда понимают, насколько легко использовать Rails по сравнению, скажем, с Express. К сожалению, несмотря на то, что с Ruby приятно работать, он просто не так часто используется веб-разработчиками, как, скажем, Javascript. Однако наш буткемп учитывает это и обучает нас Javascript, пока я пишу это. У нас уже есть представление о том, как можно использовать JavaScript на веб-страницах для добавления некоторых дополнительных функций, даже если мы еще не совсем знаем, как его использовать для этой цели.
Однако многие не понимают, что мы можем использовать JavaScript во многих других областях. Это не всегда было так, поскольку Брендан Эйх и Netscape никогда не планировали, что он будет работать вне браузера, когда он был впервые закодирован — предполагалось, что он будет работать, встроенный в HTML, чтобы добавить интерактивность веб-странице, но фактически он не существовал как внутренний язык. Он был просто слишком ограничен — это один из немногих языков программирования, в котором нет встроенного способа обработки ввода и вывода.
Так что, естественно, разработчики JavaScript дали ему такую возможность в 2009 году.

Войдите в Node.js, среду выполнения, которая позволяла использовать JavaScript для внутренних сценариев и эффективно освобождала язык от ограничений браузера. Это позволило создавать полноценные приложения JavaScript с одним и тем же языком, используемым как на задней, так и на внешней стороне. Разработчики вскоре внедрили Node в свои проекты, и теперь JS используется для поддержки всего, от веб-серверов до криптографии.
Одна из причин, по которой Node так хорошо зарекомендовала себя, заключается в том, что он невероятно быстр; другое программное обеспечение HTTP-сервера, такое как Rails, по сравнению с ним работает очень медленно. Насколько я могу судить, на это есть две основные причины. Во-первых, это количество уровней абстракции: благодаря движку Google V8 Node может компилировать JavaScript прямо в машинный код, тогда как Ruby компилирует в C. Вторая причина сложнее и связана с парадигмой, называемой асинхронным программированием.

Программы обычно обрабатывают цикл ввода-вывода одним из двух способов. Первый называется синхронным вводом-выводом, когда сервер будет отвечать на запросы в порядке их поступления. Другими словами, если мы запрашиваем файл у сервера, сервер будет искать файл и возвращать его, а затем сервер может делать что-то еще. Просто и логично, правда?
Однако у этого подхода есть свои недостатки, главный из которых заключается в том, что он «блокирует» — пока сервер ищет и возвращает запрошенный файл, это все, что он делает, а все другие инструкции, которые дает ему пользователь, приостанавливаются, пока они ждут для ответа сервера. Это приводит к потере большого количества системных ресурсов, особенно при чтении или записи файлов — за время, необходимое серверу для физического перемещения головок чтения/записи на своих жестких дисках, его процессор мог бы выполнить десятки миллионов вычислений. Это много времени простоя, которое можно было бы использовать для лучших целей.
Чтобы исправить эту ситуацию, было создано асинхронное программирование. Вместо того, чтобы сервер тратил время и ресурсы, пока выполняются инструкции, асинхронные программы сообщают серверу, что нужно начать действие, дают серверу что-то еще, пока это действие выполняется, и заставляют сервер выполнять функцию после завершения действия. . Это позволяет клиенту гораздо более эффективно использовать ресурсы сервера и, таким образом, немного ускорить работу. (Вот почему моя группа сейчас переживает ад обратных вызовов — обратные вызовы имеют решающее значение для создания и понимания асинхронного JavaScript.)

Таким образом, асинхронность является основной причиной того, почему Node такой быстрый — программа на основе Node никогда не зависает без дела.
Node сам по себе имеет ряд встроенных функций. Он имеет мощную функциональность HTTP как с серверными, так и с клиентскими классами и позволяет пользователям создавать свой собственный HTTP-сервер, хотя и с немного большей настройкой, чем мы привыкли:

Однако, где Node действительно сияет, так это в связанных с ним модулях и библиотеках. Node обладает крупнейшей в мире экосистемой библиотек с открытым исходным кодом: более 650 000 из них доступны через NPM, менеджер пакетов Node. Их так много, что есть библиотека практически для всего, что вы можете сделать с Node — Express для внутренней маршрутизации, целый ряд ORMS баз данных (лично я использую Sequelize, Postgres ORM), Chalk для создания text выглядит красиво, Lodash для глубокого клонирования и, конечно же, React, который скоро будет изучать моя группа. Есть даже довольно популярная библиотека для создания игр под названием Phaser, с которой я повеселился в прошлом.
В основном мы будем изучать Node для использования React на нашем буткемпе, а пока есть много интересных вещей, которые мы можем сделать с ним. Исследуйте и проверьте их!