Какой язык программирования лучше для вашего IoT проекта? Ответ на этот вопрос неоднозначный и субъективный. Есть несколько аспектов, которые необходимо учитывать при рассмотрении этого вопроса: задачи, цели и потребности вашего проекта. Важную роль также играют ваши личные предпочтения, наличие и возможности квалифицированных разработчиков.



Существует мнение, что разработанный Google язык Golang, может в конечном итоге вытеснить JavaScript (или, лучше сказать, Node.js) из сферы IoT приложений. Правда ли суслик может победить в этой битве? Давайте подробнее рассмотрим, как Golang, так и JS, их преимущества и недостатки для IoT решений.

JavaScript




Языки программирования приходят и уходят, но похоже, что JavaScript останется надолго. Первоначально ненавидимый разработчиками, сегодня этот топовый язык программирования широко используется в Интернете вещей из-за его высокой ресурсоэффективности. Так как тема использования JavaScript в IoT приложениях достаточно обширная и может включать фронтенд, бэкенд и прочие этапы разработки, то давайте сузим ее до Node.js. Как известно, JavaScript — это язык, а Node.js — это программная платформа. Она позволяет устанавливать гибкое взаимодействие с устройствами ввода-вывода через свой API, а также подключать необходимые для решения задач библиотеки.

Node.js идеально подходит для управления сетями датчиков, радаров, маяков, микросистем и других подключаемых устройств. Кроме того, он отлично справляется с обработкой нескольких задач для поддержания взаимодействия между всеми этими IoT устройствами. Разработчики сходятся во мнении, что преимущества Node.js для программного IoT обеспечения — это простота использования и разумные требования к памяти.

Ведущие IoT компании, такие как Telefonica, Rightech и Salesforce IoT Cloud, продолжают внедрять Node.js в своих проектах, поэтому спрос на разработчиков JavaScript в ближайшее время, похоже, не упадет.

Golang




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

Также к его особенностям относятся:

  • Строгая типизация, типы данных устанавливаются на этапе компиляции, следовательно, их несоответствие можно отследить перед запуском;
  • Так как язык более строгий в нем меньше громоздких конструкций и соответственно его легче читать;
  • Данный язык активно используется при разработке инфраструктурного ПО вроде Docker, Kubernetes и т.д. Знание Go, при необходимости, позволит глубже изучить данные инструменты;
  • Экосистема языка относительно молодая, то существует возможность обратиться к техподдержке разработчиков языка для решения проблемных моментов;

Программисты обычно выбирают Golang для построения коммуникационного уровня в системе IoT, поскольку параллелизм и возможность одновременного запуска ввода\вывода данных являются одними из ключевых преимуществ Go. Также этот язык отлично подходит для написания сервисов логирования и парсинга.

Другие не столь очевидные преимущества Go включают:

  • инструменты: документирования — GoDoc и анализа кода — Race Detector;
  • встроенный инструмент тестирования (если вы когда-либо пробовали выбрать фреймворк для тестирования проекта на JavaScript, вы понимаете выгоду);
  • серьезный подход к параллельному программированию с помощью Data Race Detector;
  • единое руководство по стилю для всех, которому нужно следовать, в отличие от множества инструментов и парадигм в JavaScript (они известны тем, что парализуют команду, когда пришло время принять решение о структуре, соглашениях, библиотеках тестирования и т. д.)

Сравним по отдельным критериям:




Как JavaScript, так и Go, похоже, хорошо подходят для IoT проектов. Поэтому давайте сравним функционал Node.js и Go, чтобы определить победителя.

Зрелость. Будучи относительно молодым, Go довольно зрелый язык, к тому же он изначально позиционировался как стабильный и обратно совместимый. Что касается Node.js, он имеет версию LTS (Long Time Support, долговременная поддержка), а также новейшую версию, которая имеет изменяющийся API, и обширное комьюнити, поддерживающее платформу.

Производительность.. В реальных условиях сетевого взаимодействия и взаимодействия с базой данных Go и Node.js показывают равные результаты.

Параллелизм. Здесь Go определенно выигрывает: он использует легкие потоки — goroutines, а Node.js унаследовал механизм цикла обработки событий JavaScript, который имеет свои недостатки.

Кривая обучения. Благодаря JavaScript, согласно недавнему опросу Node.js стал одним из самых быстрорастущих языков разработки. Причиной этому является проста освоения, обширная документация и большое открытое комьюнити. Go, также довольно легок в обучении. Опрос PW Engine показал, что большинство разработчиков считают его очень интуитивным, а это большой плюс если компании требуется как можно быстрее ввести новых сотрудников в рабочий процесс. Так что, здесь тоже ничья.

Обработка ошибок. Здесь мнения расходятся. Go использует явную проверку ошибок, в отличии от неявного try\catch. за счет этого проверок на ошибки становиться больше, но они понятней, так как находятся ближе к месту их возникновения и направлены на определение проблемы в конкретном месте, во второй версии Go обещают добавить check\handle. Node.js использует принцип try\catch, общий для многих языков, и обладающий определенными ограничениями.

Фронтенд и бэкенд. Go нацелен на разработку параллельных сервисов, поэтому он отлично подходит для серверной части. И хотя для Go есть фреймворки для создания веб-приложений, такие как Beego и gopherjs, гораздо удобнее создавать современный пользовательский интерфейс с JavaScript. К тому же исходя из факта, что JS господствует на фронтенде, то проще поддерживать и бэкенд и фронтенд на одном языке — JavaScript
Выбор разработчиков. Здесь нет сомнений: JavaScript остается наверху так как уже давно влился в рабочие процессы разработчиков во всем мире. Конечно, Go вошел в топ-20 самых популярных технологий, но, к сожалению, он по-прежнему далек от JavaScript с точки зрения популярности.

Sync/Async IO (синхронный/асинхронный ввод-вывод). Node.js славится своей неблокирующей моделью ввода-вывода, которая делает его легким и эффективным с точки зрения ресурсов. Но у него также есть недостатки, например, бесконечные обратные вызовы в коде и странные трассировки стека. С другой стороны, Go, используя свой планировщик, рекомендующий разработчикам использовать синхронные операции, опираясь на различные инструменты, предоставляемые ОС, для повышения эффективности и сокращения блокировки ресурсов.

Работа на устройствах. С менеджером пакетов NPM Node.js можно эффективно использовать в качестве среды программирования на одноплатниках, таких, как Raspberry Pi, Iskra Js или BeagleBone Black. NPM содержит около 80 пакетов с открытым исходным кодом для контроллеров Arduino, Intel IoT Edison, Raspberry Pi и более 30 пакетов для различных устройств и датчиков Bluetooth. Что касается Go, то он хорошо подходит плат Raspberry Pi, так как он запускает полную сборку Linux. Однако маломощные IoT-устройства, такие как Arduino, не могут работать с двоичным кодом Go. Вот почему был создан фреймворк Gobot. Он поддерживает множество платформ, Bluetooth LE устройств и даже интерфейс NeuroSky.

Библиотеки.По количеству библиотек JavaScript конечно же пока обходит своего оппонента, однако в определенных областях, например, в математике, для Go написаны более мощные инструменты по работе со сложной математикой и анализом данных.

Заключение


Golang – это компилируемый многопоточный язык программирования, который позволяет создавать целые системы подключенных контроллеров, и эффективно работать с базами данных. JavaScript идеально подходит для асинхронных операций, требующих низкого времени отклика. Сейчас эти два языка далеко не взаимозаменяемы. JavaScript остается самым популярным языком в мире, в том числе и конкретно в Интернете вещей. Он прочно удерживает свои позиции и вряд ли уступит Golang в ближайшем будущем. Однако, благодаря своему инновационному и надежному подходу, Go имеет очень яркие перспективы, чтобы возглавить топ технологий IoT разработки.

Комментарии (18)


  1. evocatus
    12.10.2018 18:31
    +2

    JavaScript <...> из-за его высокой ресурсоэффективности.

    Вы ничего не перепутали?


    1. Daar
      14.10.2018 20:24

      Согласен, тоже подумал что проснулся в другой вселенной…


  1. cthtuf
    12.10.2018 18:34
    +3

    Без обид, но ощущение что я только реферат первокурсника прочитал.

    Лично мне, первое что в голову приходит при слове IoT это C и Python. Это те два варианта которые отбросили? Тогда неудивительно что у мужика такие глаза.


    1. idAhill Автор
      12.10.2018 22:41
      +1

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


      1. cthtuf
        14.10.2018 09:50

        А как же пункт Работа на устройствах?

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


  1. aPiks
    12.10.2018 18:40
    +1

    До этого вроде самыми подходящим языками для IoT был C/С++, Python и Java, а тут как-то резко все поменялось и, вдруг, Javascript и Go стали самыми подходящими.


    1. idAhill Автор
      12.10.2018 22:44

      Когда речь идет про серверную часть, то на go и node.js относительно легче можно организовать работу со множеством устройств, так как garbage collector позволяет заботиться об выделении памяти в отличии от c/с++


      1. gudvinr
        13.10.2018 00:47

        Спорное утверждение. GC — это не серебряная пуля выделения памяти. Повисшие горутины и всякие приколы вроде объектов в слайсах утечки создают только в путь.
        В этом плане C++/Rust с умными указателями и RAII позволяют добиться более предсказуемого поведения, так что это вообще не аргумент.


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


  1. vasimv
    12.10.2018 18:45

    Когда из двух плохих вариантов выбираешь тот, который похуже…


    1. idAhill Автор
      12.10.2018 19:52

      Когда Дибров тебя нае… л))


  1. JC_IIB
    12.10.2018 20:48
    +1

    > JavaScript останется надолго. Первоначально ненавидимый разработчиками, сегодня этот топовый язык программирования

    В каком месте он топовый?

    И вообще… сейчас бы интерпретируемый язык, на котором убоища вроде 1+'1'-1 успешно исполняются, сравнивать с языком со строгой статической типизацией, да компиляцией в бинарник.


    1. Whuthering
      12.10.2018 23:35

      Ну, топовый он как минимум в рейтинге TIOBE.


      1. JC_IIB
        12.10.2018 23:48

        Я не поленился проверить. TIOBE index.

        TIOBE Index for October 2018
        1 место Java, затем С и С++.

        «Топовый» JS на 8м месте. Под PHP и VB.NET.


        1. Whuthering
          13.10.2018 11:01

          Прошу прощения. Перепутал с рейтингом Stack Overflow.
          insights.stackoverflow.com/survey/2018#technology-programming-scripting-and-markup-languages
          Вот там — топовый :)


      1. kuftachev
        13.10.2018 00:37

        Давайте объективно,Tiobe — это помойка которая вообще ни о чем не говорит. Их рейтинг никак не коррелируется ни с вакансиям, ни с реальными программистами.


        Хоть на ограниченный рынок, но DOU даёт хоть какую-то репрезентативную выборку, а там JS очень высоко, а как второй языке вне конкуренции.


        1. Whuthering
          13.10.2018 11:02

          Прошу прощения. Перепутал с рейтингом Stack Overflow.
          insights.stackoverflow.com/survey/2018#technology-programming-scripting-and-markup-languages
          Вот там — топовый :)


  1. Alex_ME
    13.10.2018 14:46

    То же самое могу сказать и про .NET/C#. И зрелость, и асинхронность, и нормальная обработка ошибок, и GC, который вы почему-то считаете преимуществом…


  1. kaleman
    15.10.2018 00:12

    Не лезьте вы в программирование микроконтроллеров, со своими веб языками для макакинга.
    Здесь только ассемблер и C/C++ нужны. Ну еще прямые руки и светлая голова требуется.
    А то после вас разгребать сложно…