Node.JS: o que é, como funciona esse ambiente de execução JavaScript e um Guia para iniciar
Introdução
Na atualidade, a criação de aplicações tem como foco arquiteturas que sejam escaláveis e na entrega de soluções em tempo real, além da atenção à componentização e segurança.
Além disso, soma-se a esse cenário a revolução iniciada pelos smartphones, com o uso cada vez mais intenso das mídias sociais e o aumento de soluções de IoT (Internet das Coisas). Nesse contexto, os paradigmas conhecidos no desenvolvimento de aplicações também têm passado por diversas mudanças que vão do Front-end ao Back-end, onde pensamos cada vez mais em uma solução como um todo, levando em consideração o consumo de dados e a disponibilidade de infraestrutura.
E é nessa conjuntura que nasce o Node.js, surgindo como uma solução poderosa e barata para a criação e a manutenção de ambientes de tecnologia com altas demandas. Então, vamos conhecer um pouco sobre essa ferramenta?
O que é Node.JS?
O JavaScript figura hoje como uma das linguagens mais utilizadas, e em grande parte isso se deve ao fato de ser uma linguagem base para dezenas de frameworks com alta popularidade e adesão na comunidade de desenvolvimento.
Por se tratar de uma linguagem popularmente conhecida para a construção de aplicações web mais interativas, o JavaScript possui grande foco no Front-end (client side), ou seja, é comumente utilizada para rodar no “lado cliente” da aplicação. Com a evolução das tecnologias web, tornou-se possível fazer o JavaScript rodar também no Back-end, e é nesse momento de consolidação de tecnologias e soluções que surge o Node.js.
Mas, afinal, o que é o Node.js? O Node.js é um ambiente de execução do código JavaScript do lado servidor (server side), que na prática se reflete na possibilidade de criar aplicações standalone (autossuficientes) em uma máquina servidora, sem a necessidade do navegador.
A História do Node.JS
O Node.js nasceu em 2009 como uma resposta às tentativas de rodar códigos JavaScript em modo server side, uma vez que a linguagem tinha como meta principal a manipulação do DOM (Document Object Model) e deixar as aplicações web mais interativas e dinâmicas.
Soma-se a isso o fato de que pessoas desenvolvedoras de JavaScript trabalham com uma linguagem simples, interpretada e que não necessita da instalação de ferramentas complexas de desenvolvimento.
Esses são alguns dos fatores motivadores do criador do projeto do Node.js, o engenheiro de software Ryan Dahl, responsável por esse ambiente de execução do código JavaScript fora do navegador, no lado servidor.
Linha do tempo
Abaixo, temos uma linha do tempo do Node.js, passando pelo seu nascimento até a atualidade:
Você pode conferir a versão acessível da linha do tempo no GitHub.
Depois desse mergulho na história do Node.js, recomendamos o episódio #199 do Hipsters Ponto Tech — “Node.js”, que discute o impacto do software no ecossistema JavaScript:
Como instalar o Node.JS: Linux, Windows e MacOS
O Node.js é uma ferramenta de código aberto e gratuita. Um belo atrativo, não?! Ela também é multiplataforma, o que nos permite entregar uma solução para rodar em ambientes Windows, Linux ou MacOS, e seu interpretador é baseado no V8 da Google (vamos conferir mais detalhes sobre ele a seguir).
Temos um excelente conteúdo mostrando em detalhes a instalação do Node.js em diferentes plataformas, que é o artigo Como instalar o Node.js no Windows, Linux e macOS.
Recomendamos a leitura deste material para que você entenda como instalar e explorar as diferentes versões do Node.js.
JavaScript Runtime e V8
O Node.js é a ferramenta que vai nos entregar a capacidade de interpretar código JavaScript, de maneira bem similar ao navegador. Quando executamos um comando escrito em JavaScript, o Node.js interpreta esse comando e faz a sua conversão para a linguagem de máquina a ser executada pelo computador. Por esse motivo, o Node.js também pode ser referido como um JavaScript Runtime, ou um programa de execução do JavaScript.
- Observe a sequência de comandos JavaScript no terminal exibido abaixo:
Quando iniciamos o Node.js com o comando node
, iniciamos um processo que engloba um interpretador JavaScript e um utilitário CLI (command-line interface), e é neste processo aberto no terminal que irá acontecer a interpretação e execução do JavaScript runtime. Para esse processo de interpretação, o Node.js faz uso do V8, mais precisamente conhecido como Chrome’s V8 JavaScript engine.
O V8 é um poderosíssimo interpretador JavaScript desenvolvido pela Google e utilizado pelo Chrome. Ele também é conhecido como a máquina virtual do JavaScript. Foi desenvolvido usando a linguagem C++, é de código aberto e nasceu com a intenção de acelerar a execução de aplicações desenvolvidas em JavaScript.
Por fornecer uma boa performance, várias plataformas têm adotado o Node.js como um solução viável e eficaz de tecnologia para Back-end, como o próprio Google, Netflix, entre outros.
O motor V8 é um dos principais componentes da arquitetura do Node.JS. Leia mais sobre no artigo Arquitetura do Node.js: conheça seus componentes.
Entendendo o motor
É interessante apontar que existem outros “motores” para JavaScript, como o SpiderMonkey, do Firefox, ou o WebKit, do Safari, mas o adotado pelo Node.js é o V8. De forma geral, o processo de funcionamento desses motores pode ser resumido nas seguintes etapas:
O motor acessa o código JavaScript, que veio da leitura da tag
script
de um arquivo HTML ou por meio do download de um arquivo JavaScript;Executa o
Parser
, processo de análise e conversão;Monta a AST (Árvore de Sintaxe Abstrata), um mapeamento que identifica o que cada parte do código está fazendo;
E, por fim, interpreta a AST. Nesta etapa, ao interpretar a AST, o motor V8 gera os bytecodes a serem executados pela máquina. Neste processo, ainda existe um estágio de otimização do código gerado.
Imagine a escrita da seguinte função em Javascript:
function soma(num1,num2) {
return num1 + num2;
}
Nesse processo de análise e conversão teremos a seguinte AST:
Se você quer entender mais sobre AST e como o código é transformado: pode usar AST Explorer e colocar seu próprio código para entender como ele é transformado.
Na imagem abaixo, temos uma abstração do processo de execução do código JavaScript pelo motor V8:
Com execução dessa sequência de processos apresentada no esquema acima, o nosso motor Javascript interpreta e compila o código para um bytecode otimizado para executar no computador.
Assíncrono, single thread e orientado a eventos
Uma das características do Node.js é ser um ambiente de execução assíncrono. Com isso, ele trabalha de forma a não bloquear a aplicação no momento de sua execução, colocando os processos mais demorados para um segundo plano.
O Node.js se diferencia de outras plataformas consagradas de programação, como o Java, PHP e .NET, pelo fato de ser single thread, ou seja, o Node.js não inicia threads em paralelo como outras plataformas. Por se tratar de um sistema single thread, o Node.js não tem a necessidade do gerenciamento de múltiplas threads, otimizando, assim, o processo e o consumo de memória da aplicação.
A característica do Node.js que faz com ele não seja lento ou demore a processar a fila de requisição é ser não bloqueante; isso tem a ver com o sistema de callbacks do JavaScript e o loop de eventos. Para saber mais sobre esses recursos, confira o artigo Arquitetura do Node.js: entenda o loop de eventos.
Características do Node.JS
No decorrer do artigo já falamos de algumas características do Node.js, mas vale ressaltar que ele pode ser usado para:
- Desenvolver soluções em API Rest;
- Criação de chatbots;
- Projetos de internet das coisas (IoT); e
- Dar vida a soluções de web scraping, web servers e até mesmo aplicações desktop.
O Node.js possui uma versatilidade gigantesca e Camila Pessôa, em seu artigo sobre como o Node.js funciona, elenca algumas outras características que não podemos deixar de comentar:
Escalabilidade: o Node.js foi pensando desde o ínicio para entregar soluções para arquiteturas escaláveis, por isso sua adoção por grandes empresas de tecnologias;
Multiplataforma: podemos criar desde soluções web a aplicações desktop;
Open Source: como já citado, o Node.js tem seu código aberto, o que nos possibilita contribuir com o projeto e até mesmo realizar customizações;
Multi-paradigma: com o JavaScript podemos adotar várias formas de codificar usando paradigmas como a orientação a objetos, o funcional e o orientado a eventos.
Para se trabalhar com o Node.js é preciso conhecer as bases do JavaScript, que é uma linguagem com grande receptividade, principalmente para os iniciantes, pois possui uma curva de aprendizagem mais suave em comparação a outras linguagens.
Módulos
O Node.js trabalha fortemente com o conceito de módulo, que visa organizar o código em partes pequenas e especializadas, além de aplicar o princípio de encapsulamento ao “esconder” o código e expor somente o necessário a outras partes da aplicação.
Originalmente o Node.js trabalhava com o sistema CJS (Common JS) de modularização, pois o JavaScript não tinha ferramentas específicas para isso. Posteriormente foi especificado o padrão “geral” de módulos do JavaScript, o EcmaScript Modules.
O Node.js vem adotando gradativamente o ECMAScript Modules desde a versão 13, o que traz muitas diferenças com relação à forma “original” do Node.js, o CJS. Para saber mais sobre esse tema, recomendamos a leitura do artigo Um guia para importação e exportação de módulos com JavaScript.
Usando o NPM
No processo de instalação do Node.js nos é entregue também o NPM (Node Package Manager), que vai nos permitir compartilhar os módulos que criamos com a comunidade além de possibilitar a reutilização de módulos criados por outras pessoas desenvolvedoras.
- Para verificar a instalação e versão do NPM você pode executar o comando
npm -v
:
Através do NPM podemos gerenciar todas dependências dos projetos JavaScript que estamos desenvolvendo, com ele temos acesso a uma gama enorme de bibliotecas e frameworks JS, e possibilita também a criarmos nossos próprios módulos e compartilhar com a comunidade. Quer saber como? Dá uma conferida neste super artigo.
Certificações
As certificações são sempre um ponto de muita discussão dentro das comunidades de tecnologia, mas é consenso que elas ajudam profissionais a adquirirem conhecimentos em diferentes áreas.
Além disso, certificações também são uma ótima oportunidade de conseguir mostrar para o mercado que você conhece os por menores de algumas tecnologias ou linguagens. Empresas como Microsoft, IBM, Google, Oracle e alguns institutos ou fundações promovem certificações a profissionais de tecnologia.
Mas existem certificações em Node.js? E a resposta é, sim! Através da OpenJS Foundation é possível conseguir certificações em Node.js, a fundação oferece duas opções de certificações para desenvolvedores. São elas:
- OpenJS Node.js Services Developer (JSNSD);
- OpenJS Node.js Application Developer (JSNAD).
1) OpenJS Node.js Services Developer (JSNSD)
Certifica a pessoa como competente na criação de API Rest e Serviços com atenção especial à implementação de segurança.
2) OpenJS Node.js Application Developer (JSNAD)
Esta certificação é para pessoas desenvolvedoras com capacidade de criar aplicativos web com Node.js.
Resumo sobre as Certificações
Em resumo, a certificação é uma sinalização para o mercado e comunidade de tecnologia que você, enquanto profissional, treinou habilidades e tem conhecimento em determinada tecnologia, e podem dar um up
bem legal no currículo.
Para ficar mais por dentro do assunto e entender a relevância de certificações no mercado de trabalho, você pode conferir esse episódio do #HipstersPontoTube:
Sua utilização no mercado
Fica a pergunta: “E no mercado onde existe o Node.js rodando?”. Por se tratar de uma tecnologia flexível e escalável, hoje grandes empresas utilizam o Node.js como parte de sua stack. Entre elas, podemos citar:
GoDaddy: que migrou e implementou diversos projetos de frontend e backend em Node.js, inclusive abandonando tecnologias .NET em prol do Node.js;
Netflix: este é um caso bem emblemático por se tratar da maior plataforma de streaming da atualidade. Substituiu o Java pelo JavaScript para melhorar a performance de suas requisições;
NASA: A engenharia da NASA desenvolveu uma API com Node.js para trabalhar a integração de bases de dados em um serviço de cloud;
Slack: conhecida plataforma de comunicação pessoal ou profissional, roda suas aplicações e desenvolveu seu cliente de desktop com Node.js;
Uber: a aplicação que conecta usuários e condutores foi construída com base no Node.js.
Podemos citar diversas startups e até gigantes da tecnologia como IBM que possuem soluções desenvolvidas com o Node.JS. É uma tecnologia em grande expansão, que tem aberto inúmeras oportunidades de trabalho no Brasil e exterior.
Suporte Node.js: repositório para validações e ajuda em projetos
No contexto deste universo que é o Node.JS, o projeto mantém um repositório com diversos exemplos de implementações usando a tecnologia, portanto se você quer validar algum conceito, ou mesmo uma ajuda na implementação de um servidor usando o Node.js essa documentação é para você, acesse o repositório de exemplos.
Saiba mais: Dev em T — programação, carreira e tipos de perfil
Dev em T: programação, carreira e tipos de perfil | #HipstersPontoTube
Guia de Carreira Node.JS — Tech Guide
Caso você queira mergulhar nessa tecnologia mas não saiba por onde começar a estudar, não deixe de acessar o Tech Guide Node.JS, lá você vai conhecer trilhas de estudos do iniciante ao avançado, trazendo tecnologias e conceitos que vão te ajudar a ser um profissional em T.
Confira também o episódio da série Guia de Carreiras do #HipstersPontoTube sobre o Node.JS e aprenda mais sobre essa tecnologia, suas vantagens e o que é necessário para iniciar sua profissão nesta área de desenvolvimento de software:
Os melhores livros de tecnologia e programação
Os MELHORES livros de tecnologia para ler em Programação com Roberta Arcoverde | #HipstersPontoTube
Aprenda mais sobre Node.JS gratuitamente
Acesse gratuitamente as primeiras aulas dos cursos feitos pela Escola de Programação da Alura e continue aprendendo sobre temas como:
- JavaScript: tipos, variáveis e funções
- JavaScript: Arrays
- JavaScript: objetos
- JavaScript I: algoritmos de ordenação
- Algoritmos com JavaScript II: aprofundando em algoritmos de ordenação e busca
- Node.js: criando sua primeira biblioteca
- JavaScript: programação orientada a objetos
- Node.js: API Rest com Express e MongoDB
Apostilas — Você profissional em T
Com as Apostilas de tecnologia sobre Programação, Front-End, Data Science e UX & Design da Alura avance nos estudos e no desenvolvimento da sua carreira em T.
Você poderá se aprofundar nos seguintes tópicos:
- Desenvolvimento Web com HTML, CSS e JavaScript;
- SQL e modelagem com banco de dados;
- Python e Orientação a Objetos;
- Java para Desenvolvimento Web;
- Java e Orientação a Objetos;
- C# e Orientação a Objetos;
- UX e Usabilidade aplicados em Mobile e Web;
Baixe elas completas em: Apostilas da Alura - Conteúdo livre para o seu aprendizado
Conclusão
O JavaScript é uma linguagem muito popular e nos últimos anos vimos nascer vários frameworks que a utilizam. Com o Node.js é possível usar todo o poder do JavaScript também no backend, além de chatbots, IoT, desenvolvimento de aplicações desktop e até mesmo IA.
Para as pessoas desenvolvedoras, independente da linguagem, hoje, já é um diferencial ter conhecimentos em Node.js. Quer dar um mergulho ainda mais profundo? Deixamos aqui algumas referências que serão de grande ajuda:
Artigo Node.JS: definição, características, vantagens e usos possíveis;
Podcast | HipstersPontoTube Ecossistema Node.js;
Podcast | HipstersPontoTube JavaScript para back-end;
Site Node.org.