“Rodar um programa” passo a passo
Executar código não é mágica: é uma sequência conhecida de eventos — leitura do arquivo, preparação do ambiente, execução instrução por instrução, saída e encerramento. Entender esse fluxo reduz ansiedade diante de erros e termina confusão entre “salvar arquivo” e “programa funcionando”.
Código-fonte vs linguagem de máquina
Você escreve código-fonte em linguagem legível (JavaScript, Python). CPU executa linguagem de máquina (binário). Entre os dois existem tradutores:
- Interpretador: lê linha a linha e executa (Node/V8 para JS, Python).
- Compilador: traduz tudo antes e gera executável (C, Rust, Go).
- Híbrido (JIT): interpreta, otimiza trechos quentes em tempo de execução — V8 faz isso.
JavaScript moderno no Node e no Chrome usa motor JIT — você escreve JS, runtime compila pedaços para código nativo sob demanda.
O que acontece ao digitar node hello.js
- Terminal pede ao SO criar processo
node. - Node lê
hello.jsdo disco para memória. - Parser verifica sintaxe — erro de digitação para aqui com mensagem.
- Motor executa top-level: declara variáveis, chama
console.log. console.logescreve no stdout (terminal).- Script termina; processo encerra com código de saída 0 (sucesso) ou ≠0 (falha).
// hello.js
const mensagem = 'Processo iniciado';
console.log(mensagem);
console.log('PID do processo:', process.pid); // Node expõe ID do processo
Rode e observe: cada execução nova pode ter PID diferente — nova instância de processo.
Terminal vs navegador: dois runtimes
| Contexto | Comando / ação | O que executa |
|---|---|---|
| Terminal | node script.js | Node.js (sem DOM, tem filesystem) |
| Navegador | Abrir HTML + script | Motor JS do browser (tem DOM, sem fs direto) |
Mesma linguagem, APIs diferentes. document.querySelector só no browser. require('fs') no Node. Erro “document is not defined” no Node significa código de browser rodando no lugar errado.
Erros antes vs durante execução
- SyntaxError: parser não entende — programa nem inicia.
- ReferenceError / TypeError: sintaxe ok, falha em tempo de execução — variável inexistente, tipo errado.
- Erro de ambiente: arquivo não encontrado, porta ocupada, módulo não instalado.
console.log(x); // ReferenceError: x is not defined — executou, mas x não existe
Mensagem indica fase e linha — habilidade central de depuração (post dedicado na semana 2).
Dependências e node_modules
Programas reais importam bibliotecas. npm install express baixa pacotes para node_modules. Ao rodar, Node resolve import/require procurando nessa árvore. Sem instalar dependência → Cannot find module.
Versionamento de dependências (package.json) garante que colega e servidor executem o mesmo conjunto — assunto avançado, mas saiba que “rodar” inclui ambiente preparado.
Variáveis de ambiente
Config sensível (token API, senha banco) não fica no código — passa por variáveis de ambiente:
PORT=3000 node server.js
const porta = process.env.PORT || 3000;
console.log(`Servidor na porta ${porta}`);
Mesmo código, comportamento diferente conforme ambiente — dev vs produção.
Código de saída e scripts em pipeline
Processos retornam número ao SO: 0 = sucesso. Scripts de deploy e CI encadeiam comandos — se testes falham (exit 1), pipeline para. Você verá isso ao usar GitHub Actions no futuro.
Programa que “não para” vs script one-shot
node hello.js termina rápido. node server.js com servidor HTTP fica rodando — loop de eventos aguardando requisições. Ctrl+C envia sinal ao SO para encerrar processo. Entender diferença evita achar que “travou” quando na verdade está aguardando conexões.
Prática obrigatória deste post
- Crie
02-processo.jscom trêsconsole.logem sequência. - Execute e confirme ordem de saída.
- Introduza SyntaxError (parêntese faltando) — leia mensagem.
- Corrija e rode de novo até exit code 0.
No próximo post você monta ferramentas (editor, Node, pasta de estudos) com esse modelo mental já claro.
Para aprofundar na web
Para entender melhor este tema, pesquise por:
- "interpretado vs compilado linguagens diferença" — entender como JS, Python e C/C++ chegam à CPU
- "como funciona Node.js V8 engine" — saber o que executa seu JavaScript no terminal
- "exit code processo terminal significado" — ler códigos de saída em scripts e CI
- "browser vs Node.js diferenças APIs" — evitar rodar código web no Node e vice-versa
- "variáveis de ambiente Node.js process.env" — configurar apps sem hardcodar segredos
Priorize documentação oficial (MDN, docs do Node.js, Git) e artigos com data recente. Anote o que aprendeu no seu README pessoal.
Atividades
SyntaxError ocorre em qual fase?
Ver resposta
Resposta correta: A) Antes/durante parsing — código mal formado impede execução normal
Erros de sintaxe são detectados ao analisar o código, antes da lógica rodar.
document is not defined ao rodar node app.js indica:
Ver resposta
Resposta correta: A) Código de browser executado no Node
DOM (document) existe no navegador, não no runtime Node padrão.
Exit code 0 significa:
Ver resposta
Resposta correta: B) Execução bem-sucedida do ponto de vista do SO
Convenção Unix: 0 = sucesso; valores não zero indicam falha.
Liste três diferenças entre executar JS no Node e no navegador.
Ver resposta
Exemplos: Node tem fs/path/process; browser tem DOM/window/fetch nativo; entrada/saída via terminal vs tela; módulos npm vs script tag/bundler.
0 comments