O JavaScript inicialmente foi criado como um complemento para o navegador da Netscape. Por muito tempo foi visto como uma linguagem ruim, bagunçada e lenta (e estavam certos).
Mas o JavaScript evoluiu muito. Hoje em dia é bem mais organizado, rápido e possui várias funcionalidades que nos facilitam criar várias coisas. Além disso, a linguagem não se limita mais apenas aos navegadores.
Vamos conhecer algumas áreas onde podemos atuar com JavaScript além do seu uso comum e até além dos navegadores. Dessa maneira você poderá usar seus conhecimentos em JavaScript e escolher entrar em alguma área além da web, como desenvolvimento de jogos, robótica, automação, etc.
Observação: esse post não incentiva o uso de JavaScript para tudo. Há de se ponderar a melhor ferramenta/tecnologia para o problema que se precisa resolver.
Curso JavaScript Básico
Conhecer o cursoNode.js e Deno
Não tem como começar essa lista sem falar do Node. Ele é basicamente uma ferramenta que executa o JavaScript fora do navegador. Quando instalado, chamamos o Node.js pelo terminal. Como não estamos executando o JavaScript em um navegador, os cuidados com segurança são diferentes.
Há várias funcionalidades disponibilizadas para o Node.js, fazendo com que possamos fazer coisas com JavaScript que não conseguimos fazer quando o nosso ambiente é o navegador.
Um exemplo é o acesso a arquivos. Um código JavaScript no navegador não consegue acessar os arquivos do usuário, pois seria um problema de segurança você entrar em um site e ele vasculhar seu computador. Já que o Node.js está instalado em sua máquina, o JavaScript tem liberdade de acessar os arquivos contidos no HD.
Como resultado, o Node.js possibilitou a criação de várias outras ferramentas para podermos usar JavaScript fora do navegador, e hoje em dia é um conhecimento obrigatório para quem quer trabalhar com JavaScript.
Curso React Native - Fundamentos
Conhecer o cursoAssim como o Node.js, o Deno também é um ambiente de execução de JavaScript. Ele foi criado pelo próprio criador do Node.js utilizando a linguagem Rust. Além de algumas melhorias e modernizadas aprendidas com os erros de projetos cometidos com o Node.js, o Deno também interpreta TypeScript.
npm
O Node.js vem com o “npm” (node package manager). Com ele podemos gerenciar as dependências de nossos projetos.
Um exemplo: caso queira usar jQuery em seu projeto, ao invés de ter o trabalho de fazer download do jQuery, basta executar o comando:
$ npm install jquery
Caso queira atualizar a versão do jQuery em seu projeto, basta executar o comando:
$ npm update jquery
O npm também pode ser usado para instalar outros programas que podem nos auxiliar no desenvolvimento de nossas aplicações e executar comandos, como é o caso do nosso servidor de desenvolvimento, o Tw Dev Server, que pode te ajuda em testes e estudos.
Curso Webpack - Empacotando aplicações
Conhecer o cursoTestes
Quando estamos escrevendo código é preciso fazer muitos testes para assegurar que nossas funções estão retornando o valor esperado. É bom sempre testar a mesma função passando vários valores diferentes, inclusive valores que a função não aceita para ver se há necessidade de criar um tratamento para a aplicação não quebrar.
Acontece que qualquer alteração em uma função pode afetar outras funções. Então há ferramentas que facilitam a criação de testes.
- https://qunitjs.com/
- https://mochajs.org/
- https://jasmine.github.io/
- https://testing-library.com/
- https://jestjs.io/
- https://www.cypress.io/
Curso JavaScript - Testes automatizados com Jasmine
Conhecer o cursoQualidade de Código
Quando estamos escrevendo nosso código, é muito importante mantê-lo com qualidade. Uma característica de um código de qualidade é mantê-lo uniforme.
Isso inclui sempre identar o código, padronizando a quantidade de espaços ou se será usado “tab”, se ao criar uma função você irá abrir chaves “{“ na mesma linha ou em uma linha nova, etc.
Há ferramentas como o JSLint e JSHint que analisam o nosso código e indicam se estamos mantendo as regras que foram definidas.
Automatização de Tarefas
Quando estamos desenvolvendo é comum precisarmos realizar certas operações para melhorar o nosso código. Um exemplo é minificar o nosso código, fazendo com que os arquivos fiquem menores, o que faz a aplicação ser carregada mais rapidamente pelo navegador.
Outras tarefas podem ser a execução de testes de qualidade, como o JSLint, ou testes de software, como o Jasmine.
Para nos auxiliar temos os automatizadores de tarefas. Os mais famosos são o Grunt e o Gulp. Podemos definir qualquer tarefa e pedir para que estas ferramentas as executem para nós.
Imagine que quando salvamos um arquivo, ele deve ser testado pelo Jasmine, analisado pelo JSLint e, se todos os testes passarem, iremos minificar o arquivo.
E mais! Podemos querer também que se tudo der certo, ele envie um E-mail para o nosso cliente dizendo que em breve iremos lançar uma nova versão da nossa aplicação!
Eles nos ajudam a automatizar o que quisermos, o limite é sua imaginação!
Curso Webpack - Empacotando aplicações
Conhecer o cursoServidores
Normalmente os códigos escritos no lado do servidor são feitos com linguagens como Java, PHP, Ruby, etc.
Com o Node.js foi possível começar a escrever código para o servidor com JavaScript. Já houve outras tentativas, mas o Node.js teve mais sucesso.
Os frameworks mais conhecidos para Node.js são: Express, Hapi e Koa.
Também podemos criar código Back End com o Meteor. O Meteor é uma plataforma de desenvolvimento fullstack (front e back end).
Curso Node.js - Templates com PUG
Conhecer o cursoBancos de Dados
O MongoDB é um banco de dados orientado a documentos. O console que usamos para acessar os dados executa JavaScript. Então se você sabe JavaScript, pode ter facilidade em aprender a gerenciar o MongoDB.
Curso MongoDB - Desenvolvedor
Conhecer o cursoAplicativos Mobile
Com JavaScript também podemos criar aplicativos mobile. A vantagem é usar uma única linguagem de programação para as diferentes plataformas. O modo mais conhecido é usando o Cordova/PhoneGap. Com eles nós criamos aplicações híbridas.
São chamadas de “híbridas” porque unem duas tecnologias diferentes. Por exemplo, o código nativo do Android é escrito em Java. Com o Cordova nós criamos aplicações web comuns, com HTML+CSS+JavaScript. Para acessar funcionalidades do dispositivo, há uma integração do código nativo em Java e nós acessamos essas funcionalidades pelo JavaScript.
Quando abrimos o aplicativo, estamos na verdade abrindo um navegador interno que irá apresentar a nossa aplicação e que pode acessar funcionalidades do dispositivo que não poderíamos acessar a partir de uma aplicação web comum.
Então a ideia de “híbrido” é porque estamos juntando tecnologia web com a tecnologia nativa.
Também podemos criar aplicações nativas. As ferramentas mais conhecidas são o React Native e o NativeScript. Com eles nós criamos telas com XML ao invés de HTML, e podemos estilizar com CSS. Isso será convertido para uma tela nativa de cada plataforma, como Android e iOS. Já as ações são escritas com JavaScript mesmo.
A vantagem disso é que, por ser uma aplicação nativa ao invés de uma aplicação com um navegador, teremos melhor performance do que uma aplicação híbrida.
Outra vantagem é que as aplicações híbridas dependem do navegador padrão do sistema, então corremos o risco de criar um código que o navegador daquele dispositivo não suporte. Em uma aplicação nativa, já que não dependemos de navegadores, não precisamos nos preocupar se haverá suporte para as funcionalidades ou não.
Curso React Native - Acesso às APIs de Hardware
Conhecer o cursoSoftwares Desktop
Com o Node.JS também é possível criar aplicações Desktop. Estas aplicações normalmente utilizam o Chromium, navegador de código aberto que está por trás do Google Chrome, e o Node.js.
As telas são feitas com HTML5 e CSS3, e o JavaScript pode se comunicar diretamente com o Node.js, que fica embutido na aplicação.
Atualmente o framework mais utilizado é o Electron, criado pela equipe do GitHub. Com ele já foram desenvolvidos famosos softwares como o Atom, Slack, WhatsApp Desktop e Visual Studio Code.
Curso Electron - Criação de aplicações desktop
Conhecer o cursoSmartTVs
Também é possível criar aplicativos para SmartTVs. Você irá também usar HTML/CSS/JavaScript. As que dão maior suporte para isso são as TVs da Samsung.
3D
A partir do elemento canvas
do HTML5 também temos uma API chamada WebGL. Ela nos ajuda a trabalhar com renderização de gráficos 2D e 3D.
Uma biblioteca que nos ajuda a trabalhar com 3D com JavaScript é o three.js.
Jogos
Também é possível criar jogos com JavaScript. Isso graças ao elemento canvas
do HTML5, que nos permite desenhar na tela com JavaScript.
Há várias bibliotecas que nos ajudam a criar jogos com JavaScript. Uma das mais famosas é o Impact, que era paga, mas agora é gratuita. Infelizmente parou de ser atualizada. Uma outra famosa, que é gratuita e ainda está em constante evolução, é o Phaser.
Como os jogos apenas usarão o elemento canvas
do HTML5 e JavaScript, você poderá criar jogos para qualquer lugar que os suporte ou possua um navegador.
Pode-se usar ferramentas como o Cordova/Phonegap, mas também há outras ferramentas que ajudam a otimizar jogos feitos com JavaScript para dispositivos móveis.
Plugins
Há softwares que possibilitam a criação de plugins. Isso permite que as pessoas criem novas funcionalidades para eles. Normalmente esses plugins são escritos com linguagens de scripts.
Um exemplo é o PhotoShop. Ele aceita a criação de plugins escritos em JavaScript.
Sistemas Operacionais
Um sistema baseado no Node.js, escrito apenas com JavaScript, foi desenvolvido. É o NodeOS.
Qualquer pacote do npm é um pacote do NodeOS, o qual conta com mais de 475.000 pacotes. O objetivo do NodeOS é fornecer apenas o necessário e o npm cuida do resto. Já que qualquer um pode contribuir com o npm, qualquer um pode criar pacotes para o NodeOS.
Você pode ver mais em:
Programação de Hardwares e Internet das Coisas
Com o Node.JS também é possível controlar hardwares. Podemos então usar o JavaScript para trabalhar além das telas dos computadores e celulares, como controlar drones.
Ao programar placas, podemos criar códigos para até mesmo integrar vários objetos, o famoso “Internet das Coisas” (IoT). Imagine usar JavaScript para controlar as lâmpadas, portas e janelas de sua casa de acordo com a iluminação do ambiente. Ou que quando o GPS do seu smartphone perceber que você está chegando em casa ou no trabalho, ligue a cafeteira para que o café esteja pronto quando você chegar.
Um exemplo é o noduino, um framework para acessar os controles básicos do Arduino a partir de aplicações web usando HTML5, Socket.IO e Node.JS.
Também há o projeto Tessel. No próprio site você pode comprar as placas para montar o seu produto.
Outro famoso projeto é o Cylon.js. Ele é um framework voltado para robótica, computação física e Internet das Coisas.
Você pode ver mais em:
Hologramas
O JavaScript também é capaz de ser utilizado com hologramas. Um exemplo é o HoloJS, da Microsoft, que é um framework para criar aplicações holográficas usando JavaScript e WebGL.
Realidade Virtual e Realidade Aumentada
Muito se fala sobre Realidade Virtual e Realidade Aumentada. Um exemplo para realidade aumentada é o JavaScript ARToolKit.
https://github.com/artoolkit/jsartoolkit5
Inteligência Artificial
Também podemos aproveitar o JavaScript na área da inteligência artificial. Há muitas bibliotecas e exemplos.
Uma biblioteca muito usada para isso é o Tensorflow.js
, versão em JavaScript da famosa biblioteca Tensorflow
, originalmente escrita em Python pelo Google. Com ela podemos desenvolver modelos de Machine Learning diretamente no navegador ou com o Node.js.
Eu também já mostrei aqui no blog como criar no navegador uma Inteligência Artificial que reconhece cores usando o Tensorflow.js
.
Concluindo
Hoje em dia várias linguagens de programação tentam estar onipresentes, como é o caso do JavaScript. Porém, nem sempre é algo bom. Não existe “bala de prata”. Há linguagens que estão mais evoluídas e adaptadas para certas áreas.
Mesmo que JavaScript seja minha linguagem principal, há momentos em que prefiro usar outras linguagens de programação, pois admito que possuem ferramentas melhores para se trabalhar e acabam entregando algo com mais rapidez e qualidade.
A vantagem que enxergo em utilizar uma única linguagem em várias áreas é possibilitar que uma pessoa com conhecimento em uma linguagem possa experimentar novas áreas, ou que uma pequena empresa possa reaproveitar os conhecimentos da equipe e códigos para trabalhar com outras tecnologias.