Рубрики
Без рубрики

Node.js имеет более высокую когнитивную нагрузку, чем Java

Я собираюсь предварить это, сказав, что я гораздо больший пользователь Java, чем я… Помеченный узлом js, java.

Я собираюсь предварить это, сказав, что я гораздо больший пользователь Java, чем node. Мне действительно нравится узел, но я просто не использую его так часто.

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

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

Представьте, что я пишу простое одностраничное приложение. Я собираюсь использовать:

  • Некоторая форма HTTP-сервера для работы в качестве службы REST/GraphQL/любой другой службы.
  • Создайте приложение React для создания пользовательского интерфейса (ради аргументов – мне это нравится)
  • Postgres для уровня данных. (См. выше)
  • Полный стек сквозных тестов с использованием selenium

В мире Java я могу настроить сборку, которая позволит мне это сделать. Конечным результатом может, на удивление легко, стать то, что я выполню mvn чистая установка для:

  • Загрузите все зависимости
  • Создайте серверное приложение
    • Компиляция всего кода
    • Выполнение всех модульных тестов
    • Выполнение статических проверок – например, стиль проверки
    • Полные интеграционные тесты
    • Создайте образ докера для приложения
  • Создайте веб-приложение
    • Создание выходных файлов
    • Выполнение всех модульных тестов
    • Создайте образ докера для веб-приложения
  • Создайте конечные тесты
    • Создайте образ докера для тестов

В результате этого я могу запустить интерфейс и серверную часть вместе или по отдельности, и, что важно, я могу запустить стек Docker compose всей системы, включая сквозные тесты…

Самое интересное здесь – интеграционные тесты. Я могу запустить сервер, используя библиотеку, автоматически запускать и останавливать базу данных, автоматически управлять схемой базы данных, а затем запускать целый ряд тестов против нее. И все это – всего лишь одна вещь, скрытая за одной стандартной командой сборки, которая используется миллионами других проектов…

Теперь давайте рассмотрим узел.

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

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

  • Запустите все зависимые службы самостоятельно – возможно, с помощью Docker
  • Запустите сервис, чтобы проверить себя – возможно, с помощью docker
  • Затем проведите тесты против этого
  • Тогда разрушь все это сам

Для достижения этой цели требуется приложить немало усилий.

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

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

Так вот, это не значит, что все так плохо. Здесь есть много хороших вещей, чтобы. Удивительно легко получить очень быстрое время цикла в узле – напишите код, получите результаты модульного теста, которые появятся через секунду, повторите. Или напишите код, перезагрузите сервер секундой позже и повторите. Java просто требует больше времени для достижения тех же целей. Тем не менее, разработчику требуется много дополнительного понимания, чтобы добраться до той же точки.

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

Оригинал: “https://dev.to/grahamcox82/nodejs-has-a-higher-cognitive-load-than-java-2hi6”