{"content_id":"zkrgx4ojs2","slug":"vibe-coding-programming-language-basics","locale":"pt","schema_type":"TechArticle","category":"knowledge_base","category_name":"Base de Conhecimento","title":"Vibe coding: linguagens de programação para iniciantes","summary":"No vibe coding, é mais útil entender onde o código é executado e como os dados são processados do que saber os nomes das linguagens. Você pode conferir os fundamentos da programação, os critérios de escolha de cada linguagem e o escopo da validação do código gerado por IA.","sponsorship_disclosure":null,"affiliate_disclosure":null,"commerce_disclosure":null,"author":{"name":"injoys","url":"https://injoys.com/ko/about"},"key_points":["O desenvolvimento web começa pela distinção entre os papéis de HTML, CSS e JavaScript.","TypeScript oferece verificação de tipos antes da execução, mas não valida automaticamente entradas externas.","O conceito de propriedade do Rust se refere às regras de gerenciamento de memória, não a um mecanismo que impede todas as falhas de segurança.","Mojo é uma linguagem voltada a cálculos de alto desempenho em CPU e GPU.","O código gerado por IA deve ser executado e testado para verificar se atende aos requisitos."],"content_markdown":"O vibe coding exige uma base para distinguir o papel das linguagens e os ambientes em que o código é executado. Para a web, JavaScript e TypeScript são o ponto de partida. Para processamento de dados, considere Python. Rust e Mojo são usados no desenvolvimento de sistemas e em cálculos de alto desempenho.\n\nOs números de desempenho se baseiam no anúncio da Microsoft de 11 de março de 2025.\n\n## Por que é preciso conhecer os fundamentos das linguagens no vibe coding\n\nVibe coding é uma forma de desenvolvimento em que se cria código com a IA a partir de pedidos em linguagem natural. Os pedidos são ajustados conforme os resultados da execução do programa gerado. Mesmo os pedidos em linguagem natural precisam ser implementados como código que possa ser executado.\n\nOs fundamentos das linguagens ajudam a descrever de forma concreta as funcionalidades desejadas. Também ajudam a identificar onde ocorreu um erro. No início, procure distinguir os papéis das linguagens, em vez de decorar a sintaxe de todas elas.\n\n- Local de execução: navegador, servidor, smartphone, interior do sistema operacional\n- Entrada: valores fornecidos pelo usuário ou dados recebidos de fontes externas\n- Processamento: tarefas que o programa realizará, como cálculos, buscas e classificações\n- Saída: exibição na tela, criação de arquivos, armazenamento de dados\n- Condições de falha: entrada vazia, formato incorreto, perda de conexão\n\n## Conceitos básicos que começam por variáveis e tipos\n\nVariáveis e tipos são a base para explicar quais dados um programa manipula. Condicionais e laços de repetição definem a ordem do processamento. Funções agrupam tarefas relacionadas para permitir sua reutilização.\n\n| Conceito | Definição simples | Exemplo ao descrever uma funcionalidade |\n| --- | --- | --- |\n| Variável | Meio de dar um nome a um valor para fazer referência a ele | Nome que armazena o termo de busca |\n| Tipo | Regras sobre a categoria de um valor e as operações permitidas | Quantidade é número, título é string |\n| Condicional | Estrutura que escolhe a tarefa a executar conforme uma condição | Recusar o salvamento se o título estiver vazio |\n| Laço de repetição | Estrutura que aplica a mesma tarefa a vários elementos | Exibir cada item da lista na tela |\n| Função | Código agrupado para realizar uma tarefa específica | Função que verifica a entrada |\n| Estrutura de dados | Forma de organizar os dados | Lista ordenada, valor encontrado pelo nome |\n| Objeto | Unidade que reúne estados e comportamentos relacionados | Título de uma publicação e função de edição |\n| Tratamento de exceções | Forma de lidar com erros que ocorrem durante a execução | Avisar sobre o erro quando não for possível ler um arquivo |\n| API | Convenção para a troca de funcionalidades ou dados entre programas | Solicitar resultados de busca ao servidor |\n| Dependência | Código ou ferramenta externa que o programa utiliza | Biblioteca para manipulação de datas |\n\nA verificação estática de tipos confere o uso dos tipos antes da execução. Linguagens de tipagem dinâmica também distinguem os tipos dos valores. Tipagem dinâmica não significa ausência de categorias de dados.\n\n## Por que houve a passagem da linguagem de máquina para linguagens de alto nível\n\nA evolução das linguagens é um processo de redução das tarefas detalhadas que as pessoas precisam expressar. A linguagem de máquina representa as instruções executadas pelo processador. A linguagem assembly atribui a essas instruções símbolos que as pessoas podem ler.\n\nAssembly está intimamente ligado ao conjunto de instruções do processador. Trocar um componente não significa reescrever todo o código. O esforço de adaptação aumenta ao migrar para um conjunto de instruções incompatível.\n\n| Linguagem ou abordagem | Problema que buscava resolver | Conceito a lembrar |\n| --- | --- | --- |\n| Linguagem de máquina e assembly | Transmitir ao hardware as tarefas a realizar | Ligação direta com o conjunto de instruções |\n| Fortran | Expressar cálculos científicos de forma próxima às fórmulas | Cálculo numérico e compiladores |\n| COBOL | Processar dados empresariais em um formato de fácil leitura | Expressão voltada a registros contábeis e processamento de transações |\n| Lisp | Computação com símbolos e listas | Primeiras pesquisas em IA e expressão centrada em funções |\n| C | Escrever software de sistema com eficiência | Controle de memória e portabilidade |\n| SQL | Processar dados de bancos de dados relacionais | Consultas que declaram o resultado desejado |\n| C++ | Estruturar programas grandes e gerenciar recursos | Classes e várias formas de programação |\n| Java | Portabilidade entre sistemas com ambientes de execução diferentes | JVM e bytecode |\n\nFortran surgiu na IBM em 1957. Lisp se desenvolveu junto com as pesquisas em IA no final da década de 1950. COBOL surgiu de um trabalho conjunto de concepção iniciado em 1959.\n\nC é uma linguagem que evoluiu junto com o desenvolvimento do Unix. Ela contribuiu para a transferência de software entre diferentes tipos de máquinas. No entanto, códigos que dependem do sistema operacional e do hardware precisam de adaptações específicas.\n\nA orientação a objetos é uma forma de organizar dados e comportamentos relacionados em objetos. C++ é uma linguagem que oferece suporte à orientação a objetos. O conceito de orientação a objetos em si não foi criado pelo C++.\n\n## Diferença entre compiladores e interpretadores\n\nUm compilador é um programa que transforma código em outra representação. O resultado pode ser linguagem de máquina. Também pode ser um formato intermediário de execução, como bytecode.\n\nUm interpretador executa código ou uma representação intermediária enquanto os interpreta. Na prática, as implementações de linguagens podem combinar compilação e interpretação. É impreciso dividir as linguagens apenas entre compiladas rápidas e interpretadas lentas.\n\n| Conceito relacionado à execução | Papel | Exemplo representativo |\n| --- | --- | --- |\n| Compilação antecipada | Gerar o código de destino antes da execução | Geração habitual de executáveis em C e Rust |\n| Bytecode | Formato intermediário de instruções processado pelo ambiente de execução | Bytecode de Java e de CPython |\n| Interpretador | Executar código ou instruções intermediárias enquanto os interpreta | Execução de bytecode no CPython |\n| Compilação JIT | Converter o código necessário em linguagem de máquina durante a execução | Diversas JVMs e mecanismos de JavaScript |\n| Ambiente de execução | Fornecer os recursos necessários para executar o programa | JVM, Node.js |\n\nCPython é uma implementação de Python amplamente utilizada. Ele compila o código-fonte em bytecode e o executa. É incorreto descrever Python apenas como uma linguagem que traduz o código-fonte uma linha por vez a cada execução.\n\nA JVM de Java é um ambiente que executa bytecode. Essa estrutura ajuda a executar código mesmo em sistemas operacionais diferentes. A compatibilidade real também é afetada pela versão da JVM e pelas bibliotecas externas.\n\n## Qual é a diferença entre a interface web e o servidor?\n\nO front-end cuida das telas e das interações com as quais o usuário tem contato. O back-end processa as solicitações no servidor. O banco de dados tem o papel de armazenar e consultar os dados necessários.\n\nHTML é uma linguagem de marcação que expressa a estrutura dos documentos. CSS define o estilo e a disposição dos elementos na tela. JavaScript implementa a avaliação de condições e o tratamento das ações do usuário.\n\n| Nome | Classificação | Papel principal |\n| --- | --- | --- |\n| HTML | Linguagem de marcação | Estrutura do documento, como títulos, parágrafos e campos de entrada |\n| CSS | Linguagem de folhas de estilo | Cores, espaçamento e disposição dos elementos na tela |\n| JavaScript | Linguagem de programação | Interações no navegador e processamento no servidor |\n| TypeScript | Linguagem que adiciona um sistema de tipos ao JavaScript | Verificação de erros antes da execução e manutenção do código |\n| React | Biblioteca de interfaces de usuário | Construção de telas com componentes reutilizáveis |\n| Node.js | Ambiente de execução de JavaScript | Execução de JavaScript fora do navegador |\n| Next.js | Framework baseado em React | Organização das páginas e funcionalidades de servidor de aplicativos web |\n| PHP | Linguagem de programação | Geração de respostas web dinâmicas no servidor |\n| SQL | Linguagem de banco de dados | Consulta, inserção, atualização e exclusão de dados |\n\nReact, Node.js e Next.js não são ferramentas do mesmo tipo. Uma biblioteca é um conjunto de código do qual se aproveitam as funcionalidades necessárias. Um framework também fornece uma forma de estruturar a aplicação. Um ambiente de execução é onde o código é executado.\n\n## Comparação de linguagens por finalidade\n\nEscolha a linguagem com base no que deseja criar e no ambiente de execução existente. A tabela abaixo apresenta os principais pontos de partida para avaliar cada linguagem. Uma linguagem não se limita às tarefas indicadas na tabela.\n\n| O que deseja criar | Linguagens a considerar primeiro | O que verificar antes de escolher |\n| --- | --- | --- |\n| Aplicativo web usado no navegador | JavaScript e TypeScript | Fundamentos de HTML e CSS e ferramentas de construção de interfaces |\n| Organização de arquivos e automação de tarefas | Python | Formato dos arquivos de entrada e ambiente de distribuição |\n| Análise de dados e uso de modelos de IA | Python | Bibliotecas necessárias para análise e modelos |\n| Servidores de rede e ferramentas de operação | Go | Estrutura de processamento concorrente e integração com sistemas existentes |\n| Sistemas empresariais baseados em JVM | Java e Kotlin | Compatibilidade com o código e as bibliotecas existentes |\n| Aplicativo voltado principalmente para iOS | Swift | Ferramentas de desenvolvimento da Apple e recursos da plataforma |\n| Aplicativo voltado principalmente para Android | Kotlin | Ferramentas de desenvolvimento para Android e estrutura do aplicativo existente |\n| Sistemas que exigem controle de memória | C, C++ e Rust | Requisitos de desempenho e capacidade de verificar a segurança |\n| Otimização de cálculos em CPU e GPU | Mojo | Hardware compatível e recursos de cálculo necessários |\n| Processamento de dados relacionais | SQL | Diferenças de sintaxe entre produtos de banco de dados |\n\nA utilidade de Python também está relacionada ao seu ecossistema de bibliotecas. NumPy usa código compilado para ganhar velocidade. Nem todo cálculo escrito em Python é executado apenas com código Python.\n\nGo inclui o suporte à concorrência no projeto da linguagem. Concorrência é o conceito de organizar várias tarefas para que avancem em conjunto. Paralelismo é a situação em que várias tarefas são realmente executadas ao mesmo tempo. Escrever código concorrente não aumenta automaticamente a velocidade dos cálculos.\n\n## Diferenças entre TypeScript, Rust e Mojo\n\nTypeScript, Rust e Mojo buscam resolver problemas diferentes. TypeScript ajuda a verificar os tipos no código JavaScript. Rust estabelece regras rigorosas para o gerenciamento de memória. Mojo é voltado a cálculos de alto desempenho e ao aproveitamento do hardware.\n\n| Critério de comparação | TypeScript | Rust | Mojo |\n| --- | --- | --- | --- |\n| Foco principal | Verificação de tipos e manutenção do código | Segurança de memória e controle do sistema | Cálculos de alto desempenho em CPU e GPU |\n| Uso representativo | Aplicativos web e aplicações de servidor | Ferramentas de sistema e componentes voltados ao desempenho | Infraestrutura de IA e kernels de cálculo |\n| Conceitos a entender primeiro | JavaScript e tipos de dados | Propriedade, empréstimo e tempo de vida | Tipos, memória e cálculos paralelos |\n| Pontos a verificar separadamente | Entradas externas e regras de negócio | Código unsafe e erros de lógica | Integração com Python e suporte a hardware |\n\n### Verificação de tipos no TypeScript\n\nTypeScript adiciona verificação estática de tipos ao JavaScript. Isso ajuda a encontrar código que usa tipos de forma incorreta antes da execução. Com a inferência de tipos, ele determina automaticamente os tipos de algumas declarações.\n\nNão é preciso escrever o tipo de cada variável manualmente. As anotações de tipo são removidas no processo habitual de conversão para JavaScript. A declaração de tipos, por si só, não cria verificações de entrada durante a execução.\n\n### Propriedade e segurança de memória no Rust\n\nPropriedade é o conjunto de regras que define quem gerencia a memória de um valor. Empréstimo é uma forma de fazer referência a um valor sem transferir sua propriedade. O compilador verifica as regras relacionadas para prevenir erros de memória.\n\nAs garantias de segurança do Rust pressupõem uma implementação correta. No código unsafe, o autor assume a responsabilidade por algumas condições de segurança. A linguagem não impede automaticamente erros em fórmulas de cálculo ou em permissões de acesso.\n\n### Relação entre Mojo e Python\n\nMojo é uma linguagem distinta que usa uma sintaxe semelhante à do Python. Ela oferece suporte à escrita de código de alto desempenho para CPU e GPU. Também fornece recursos de interoperabilidade para se conectar a código Python.\n\nNão se deve presumir que o código Python existente possa ser transferido sem alterações. Confira os recursos necessários na documentação da versão de Mojo que será instalada. Para usar a GPU, também é preciso atender aos requisitos de dispositivos compatíveis e drivers.\n\n## Erros comuns ao explicar linguagens\n\nApresentações curtas de linguagens podem facilmente deixar de fora as condições de aplicação. Também é preciso distinguir fatos históricos de funcionalidades atuais. Os itens abaixo são equívocos que podem prejudicar a avaliação ao escolher uma linguagem.\n\n| Explicação comum | Entendimento correto |\n| --- | --- |\n| JavaScript é a versão web de Java | São linguagens diferentes |\n| HTML e CSS surgiram em 1991 | A recomendação do W3C para CSS1 é de 17 de dezembro de 1996 |\n| Kotlin é uma linguagem criada pelo Google | A desenvolvedora é a JetBrains; o Google oferece suporte no Android |\n| Código C roda em qualquer lugar se for recompilado | Partes dependentes do sistema operacional e do hardware podem precisar de alterações |\n| Python ocupa atualmente o 1º lugar em popularidade | É preciso conhecer a instituição responsável pela pesquisa, a data e o método de apuração para avaliar |\n| Usar Rust resolve todos os problemas de segurança | Segurança de memória e verificação de permissões de acesso são questões diferentes |\n| Usar Mojo acelera todas as tarefas em Python | É preciso medir conforme a tarefa, a implementação e o hardware |\n| O termo bug nasceu no incidente com um inseto | O incidente popularizou um termo que já era usado |\n\nO famoso registro da descoberta de um inseto é o caso do Harvard Mark II, em 1947. O Smithsonian explica que o incidente contribuiu para popularizar o termo. É impreciso apresentá-lo como um caso do ENIAC ou como a origem do termo.\n\n## Como interpretar os números de desempenho?\n\nOs números de desempenho devem ser interpretados apenas no contexto da tarefa medida. O tempo de compilação e a velocidade de execução do aplicativo pronto são métricas diferentes. Uma ferramenta de desenvolvimento mais rápida não torna uma página web mais rápida na mesma proporção.\n\nA Microsoft anunciou a migração das ferramentas de TypeScript para uma implementação nativa. O anúncio de 11 de março de 2025 apresenta medições por projeto. Abaixo está o caso da base de código do VS Code apresentado no anúncio.\n\n| Objeto da medição | Implementação anterior | Implementação nativa | Ganho de velocidade anunciado |\n| --- | --- | --- | --- |\n| Processamento da compilação TypeScript da base de código do VS Code | 77.8 segundos | 7.5 segundos | 10.4 vezes |\n\nNas condições do anúncio, o tempo de processamento caiu para **7.5 segundos**. Calculando a diferença, houve uma redução de 70.3 segundos em um processamento. Isso não significa que todos os projetos terão o mesmo resultado.\n\nAplique o mesmo princípio às comparações de velocidade entre Python e C. É preciso verificar se foram usados a mesma entrada e o mesmo algoritmo. As opções de compilação e as bibliotecas utilizadas também fazem parte das condições de comparação. Números sem informações sobre o ambiente de execução dificilmente servem como uma proporção geral de velocidade.\n\n## Verificação de tipos e validação de entradas externas\n\nMesmo quando o código passa pela verificação de tipos, o conteúdo dos dados externos precisa ser verificado separadamente. Essa diferença costuma passar despercebida na revisão de código gerado por IA. As declarações de tipo expressam a forma dos valores esperados pelo programa.\n\nImagine um aplicativo web em que a quantidade foi declarada como um tipo numérico. Uma API externa pode, na prática, enviar uma string. Atribuir um nome de tipo ou fazer uma asserção de tipo não valida o valor. É necessário código que verifique os dados durante a execução.\n\n| Etapa de verificação | O que verificar | Problema que permanece mesmo após a aprovação |\n| --- | --- | --- |\n| Verificação de tipos | Uso dos tipos dentro do código | Valores que realmente chegam de fontes externas |\n| Validação de entrada | Formato dos dados e intervalo permitido | Se a ação é permitida ao usuário |\n| Verificação de permissões | Permissões de acesso de quem faz a solicitação | Se o resultado está de acordo com as regras de negócio |\n| Teste funcional | Resultado real para as entradas previstas | Condições não testadas |\n\nEsta tabela é uma estrutura de revisão que leva em conta os limites da remoção de tipos e da segurança de memória. Ela separa o que a linguagem garante do que o serviço precisa verificar. Ao fazer pedidos à IA, distinga a validação de cada etapa.\n\n## Como explicar funcionalidades à IA\n\nAo solicitar uma funcionalidade, inclua a entrada e o resultado esperado. Definir apenas o nome do programa facilita a omissão das condições de funcionamento. Se houver um projeto existente, informe também a linguagem e a versão em uso.\n\n1. Informe o ambiente que será utilizado.\n2. Descreva o formato da entrada a ser processada.\n3. Defina o resultado para uma entrada válida.\n4. Defina como tratar valores vazios e entradas incorretas.\n5. Peça também o motivo das alterações e como verificá-las.\n\nA seguir, um exemplo de prompt que divide os requisitos. Adapte o conteúdo real do arquivo ao projeto. É preciso executar o resultado gerado para verificá-lo.\n\n```text\nPrimeiro, verifique a linguagem e o ambiente de execução do projeto existente.\nLeia as linhas que têm título em um arquivo CSV e mostre-as em uma lista.\nExiba uma mensagem de erro se faltar alguma coluna obrigatória.\nInforme separadamente quais linhas estão com o título vazio.\nSepare o código de validação de entradas externas do código de exibição na tela.\nVerifique primeiro se é possível implementar com as dependências existentes.\nExplique as partes alteradas e como testá-las.\n```\n\nSe ocorrer um erro, informe também as condições para reproduzi-lo. A mensagem de erro contém pistas para delimitar o local em que ele ocorreu. A documentação do Copilot no GitHub também exige a revisão do código gerado. Antes de adotar o código, é necessário verificar os resultados da execução.\n\n## Critérios para começar a aprender e escolher um curso\n\nO aprendizado inicial pode começar com um escopo limitado, de acordo com a tarefa que você deseja realizar. Para desenvolvimento web, tente primeiro conectar a estrutura da interface ao seu comportamento. Para automação, é melhor começar verificando a entrada de arquivos e o salvamento dos resultados.\n\n1. Escolha uma linguagem adequada ao que deseja criar.\n2. Aprenda variáveis, tipos, condicionais, laços de repetição e funções.\n3. Escreva uma pequena funcionalidade e compare os resultados da execução.\n4. Insira dados incorretos para verificar o comportamento em caso de falha.\n5. Tente explicar com suas próprias palavras por que alterou o código.\n\nAo avaliar um curso, confira o conteúdo de verificação, além da tela de resultado. Veja se há exercícios para reproduzir e corrigir erros. Outro ponto a verificar é se as versões e o ambiente de execução utilizados estão especificados.\n\n- Explicação do código: processo de explicar as entradas e saídas das funções geradas\n- Tratamento de erros: exercícios de leitura de mensagens de erro e delimitação das causas\n- Validação de dados: exemplos de tratamento de entradas externas e condições de falha\n- Reprodutibilidade: orientações para executar novamente no mesmo ambiente\n\nAs definições das linguagens podem ser consultadas na documentação oficial de cada projeto. O TypeScript Handbook explica a remoção de tipos. O livro oficial de Rust explica separadamente propriedade e unsafe. No Mojo Manual, confira os recursos da linguagem e os limites da integração com Python.","content_html":"\u003cp\u003eO vibe coding exige uma base para distinguir o papel das linguagens e os ambientes em que o código é executado. Para a web, JavaScript e TypeScript são o ponto de partida. Para processamento de dados, considere Python. Rust e Mojo são usados no desenvolvimento de sistemas e em cálculos de alto desempenho.\u003c/p\u003e\n\u003cp\u003eOs números de desempenho se baseiam no anúncio da Microsoft de 11 de março de 2025.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#por-que-%C3%A9-preciso-conhecer-os-fundamentos-das-linguagens-no-vibe-coding\" class=\"anchor\" id=\"por-que-é-preciso-conhecer-os-fundamentos-das-linguagens-no-vibe-coding\"\u003e\u003c/a\u003ePor que é preciso conhecer os fundamentos das linguagens no vibe coding\u003c/h2\u003e\n\u003cp\u003eVibe coding é uma forma de desenvolvimento em que se cria código com a IA a partir de pedidos em linguagem natural. Os pedidos são ajustados conforme os resultados da execução do programa gerado. Mesmo os pedidos em linguagem natural precisam ser implementados como código que possa ser executado.\u003c/p\u003e\n\u003cp\u003eOs fundamentos das linguagens ajudam a descrever de forma concreta as funcionalidades desejadas. Também ajudam a identificar onde ocorreu um erro. No início, procure distinguir os papéis das linguagens, em vez de decorar a sintaxe de todas elas.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eLocal de execução: navegador, servidor, smartphone, interior do sistema operacional\u003c/li\u003e\n\u003cli\u003eEntrada: valores fornecidos pelo usuário ou dados recebidos de fontes externas\u003c/li\u003e\n\u003cli\u003eProcessamento: tarefas que o programa realizará, como cálculos, buscas e classificações\u003c/li\u003e\n\u003cli\u003eSaída: exibição na tela, criação de arquivos, armazenamento de dados\u003c/li\u003e\n\u003cli\u003eCondições de falha: entrada vazia, formato incorreto, perda de conexão\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\n\u003ca href=\"#conceitos-b%C3%A1sicos-que-come%C3%A7am-por-vari%C3%A1veis-e-tipos\" class=\"anchor\" id=\"conceitos-básicos-que-começam-por-variáveis-e-tipos\"\u003e\u003c/a\u003eConceitos básicos que começam por variáveis e tipos\u003c/h2\u003e\n\u003cp\u003eVariáveis e tipos são a base para explicar quais dados um programa manipula. Condicionais e laços de repetição definem a ordem do processamento. Funções agrupam tarefas relacionadas para permitir sua reutilização.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eConceito\u003c/th\u003e\n\u003cth\u003eDefinição simples\u003c/th\u003e\n\u003cth\u003eExemplo ao descrever uma funcionalidade\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Conceito\"\u003eVariável\u003c/td\u003e\n\u003ctd data-label=\"Definição simples\"\u003eMeio de dar um nome a um valor para fazer referência a ele\u003c/td\u003e\n\u003ctd data-label=\"Exemplo ao descrever uma funcionalidade\"\u003eNome que armazena o termo de busca\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Conceito\"\u003eTipo\u003c/td\u003e\n\u003ctd data-label=\"Definição simples\"\u003eRegras sobre a categoria de um valor e as operações permitidas\u003c/td\u003e\n\u003ctd data-label=\"Exemplo ao descrever uma funcionalidade\"\u003eQuantidade é número, título é string\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Conceito\"\u003eCondicional\u003c/td\u003e\n\u003ctd data-label=\"Definição simples\"\u003eEstrutura que escolhe a tarefa a executar conforme uma condição\u003c/td\u003e\n\u003ctd data-label=\"Exemplo ao descrever uma funcionalidade\"\u003eRecusar o salvamento se o título estiver vazio\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Conceito\"\u003eLaço de repetição\u003c/td\u003e\n\u003ctd data-label=\"Definição simples\"\u003eEstrutura que aplica a mesma tarefa a vários elementos\u003c/td\u003e\n\u003ctd data-label=\"Exemplo ao descrever uma funcionalidade\"\u003eExibir cada item da lista na tela\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Conceito\"\u003eFunção\u003c/td\u003e\n\u003ctd data-label=\"Definição simples\"\u003eCódigo agrupado para realizar uma tarefa específica\u003c/td\u003e\n\u003ctd data-label=\"Exemplo ao descrever uma funcionalidade\"\u003eFunção que verifica a entrada\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Conceito\"\u003eEstrutura de dados\u003c/td\u003e\n\u003ctd data-label=\"Definição simples\"\u003eForma de organizar os dados\u003c/td\u003e\n\u003ctd data-label=\"Exemplo ao descrever uma funcionalidade\"\u003eLista ordenada, valor encontrado pelo nome\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Conceito\"\u003eObjeto\u003c/td\u003e\n\u003ctd data-label=\"Definição simples\"\u003eUnidade que reúne estados e comportamentos relacionados\u003c/td\u003e\n\u003ctd data-label=\"Exemplo ao descrever uma funcionalidade\"\u003eTítulo de uma publicação e função de edição\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Conceito\"\u003eTratamento de exceções\u003c/td\u003e\n\u003ctd data-label=\"Definição simples\"\u003eForma de lidar com erros que ocorrem durante a execução\u003c/td\u003e\n\u003ctd data-label=\"Exemplo ao descrever uma funcionalidade\"\u003eAvisar sobre o erro quando não for possível ler um arquivo\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Conceito\"\u003eAPI\u003c/td\u003e\n\u003ctd data-label=\"Definição simples\"\u003eConvenção para a troca de funcionalidades ou dados entre programas\u003c/td\u003e\n\u003ctd data-label=\"Exemplo ao descrever uma funcionalidade\"\u003eSolicitar resultados de busca ao servidor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Conceito\"\u003eDependência\u003c/td\u003e\n\u003ctd data-label=\"Definição simples\"\u003eCódigo ou ferramenta externa que o programa utiliza\u003c/td\u003e\n\u003ctd data-label=\"Exemplo ao descrever uma funcionalidade\"\u003eBiblioteca para manipulação de datas\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eA verificação estática de tipos confere o uso dos tipos antes da execução. Linguagens de tipagem dinâmica também distinguem os tipos dos valores. Tipagem dinâmica não significa ausência de categorias de dados.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#por-que-houve-a-passagem-da-linguagem-de-m%C3%A1quina-para-linguagens-de-alto-n%C3%ADvel\" class=\"anchor\" id=\"por-que-houve-a-passagem-da-linguagem-de-máquina-para-linguagens-de-alto-nível\"\u003e\u003c/a\u003ePor que houve a passagem da linguagem de máquina para linguagens de alto nível\u003c/h2\u003e\n\u003cp\u003eA evolução das linguagens é um processo de redução das tarefas detalhadas que as pessoas precisam expressar. A linguagem de máquina representa as instruções executadas pelo processador. A linguagem assembly atribui a essas instruções símbolos que as pessoas podem ler.\u003c/p\u003e\n\u003cp\u003eAssembly está intimamente ligado ao conjunto de instruções do processador. Trocar um componente não significa reescrever todo o código. O esforço de adaptação aumenta ao migrar para um conjunto de instruções incompatível.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eLinguagem ou abordagem\u003c/th\u003e\n\u003cth\u003eProblema que buscava resolver\u003c/th\u003e\n\u003cth\u003eConceito a lembrar\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Linguagem ou abordagem\"\u003eLinguagem de máquina e assembly\u003c/td\u003e\n\u003ctd data-label=\"Problema que buscava resolver\"\u003eTransmitir ao hardware as tarefas a realizar\u003c/td\u003e\n\u003ctd data-label=\"Conceito a lembrar\"\u003eLigação direta com o conjunto de instruções\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Linguagem ou abordagem\"\u003eFortran\u003c/td\u003e\n\u003ctd data-label=\"Problema que buscava resolver\"\u003eExpressar cálculos científicos de forma próxima às fórmulas\u003c/td\u003e\n\u003ctd data-label=\"Conceito a lembrar\"\u003eCálculo numérico e compiladores\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Linguagem ou abordagem\"\u003eCOBOL\u003c/td\u003e\n\u003ctd data-label=\"Problema que buscava resolver\"\u003eProcessar dados empresariais em um formato de fácil leitura\u003c/td\u003e\n\u003ctd data-label=\"Conceito a lembrar\"\u003eExpressão voltada a registros contábeis e processamento de transações\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Linguagem ou abordagem\"\u003eLisp\u003c/td\u003e\n\u003ctd data-label=\"Problema que buscava resolver\"\u003eComputação com símbolos e listas\u003c/td\u003e\n\u003ctd data-label=\"Conceito a lembrar\"\u003ePrimeiras pesquisas em IA e expressão centrada em funções\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Linguagem ou abordagem\"\u003eC\u003c/td\u003e\n\u003ctd data-label=\"Problema que buscava resolver\"\u003eEscrever software de sistema com eficiência\u003c/td\u003e\n\u003ctd data-label=\"Conceito a lembrar\"\u003eControle de memória e portabilidade\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Linguagem ou abordagem\"\u003eSQL\u003c/td\u003e\n\u003ctd data-label=\"Problema que buscava resolver\"\u003eProcessar dados de bancos de dados relacionais\u003c/td\u003e\n\u003ctd data-label=\"Conceito a lembrar\"\u003eConsultas que declaram o resultado desejado\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Linguagem ou abordagem\"\u003eC++\u003c/td\u003e\n\u003ctd data-label=\"Problema que buscava resolver\"\u003eEstruturar programas grandes e gerenciar recursos\u003c/td\u003e\n\u003ctd data-label=\"Conceito a lembrar\"\u003eClasses e várias formas de programação\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Linguagem ou abordagem\"\u003eJava\u003c/td\u003e\n\u003ctd data-label=\"Problema que buscava resolver\"\u003ePortabilidade entre sistemas com ambientes de execução diferentes\u003c/td\u003e\n\u003ctd data-label=\"Conceito a lembrar\"\u003eJVM e bytecode\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eFortran surgiu na IBM em 1957. Lisp se desenvolveu junto com as pesquisas em IA no final da década de 1950. COBOL surgiu de um trabalho conjunto de concepção iniciado em 1959.\u003c/p\u003e\n\u003cp\u003eC é uma linguagem que evoluiu junto com o desenvolvimento do Unix. Ela contribuiu para a transferência de software entre diferentes tipos de máquinas. No entanto, códigos que dependem do sistema operacional e do hardware precisam de adaptações específicas.\u003c/p\u003e\n\u003cp\u003eA orientação a objetos é uma forma de organizar dados e comportamentos relacionados em objetos. C++ é uma linguagem que oferece suporte à orientação a objetos. O conceito de orientação a objetos em si não foi criado pelo C++.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#diferen%C3%A7a-entre-compiladores-e-interpretadores\" class=\"anchor\" id=\"diferença-entre-compiladores-e-interpretadores\"\u003e\u003c/a\u003eDiferença entre compiladores e interpretadores\u003c/h2\u003e\n\u003cp\u003eUm compilador é um programa que transforma código em outra representação. O resultado pode ser linguagem de máquina. Também pode ser um formato intermediário de execução, como bytecode.\u003c/p\u003e\n\u003cp\u003eUm interpretador executa código ou uma representação intermediária enquanto os interpreta. Na prática, as implementações de linguagens podem combinar compilação e interpretação. É impreciso dividir as linguagens apenas entre compiladas rápidas e interpretadas lentas.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eConceito relacionado à execução\u003c/th\u003e\n\u003cth\u003ePapel\u003c/th\u003e\n\u003cth\u003eExemplo representativo\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Conceito relacionado à execução\"\u003eCompilação antecipada\u003c/td\u003e\n\u003ctd data-label=\"Papel\"\u003eGerar o código de destino antes da execução\u003c/td\u003e\n\u003ctd data-label=\"Exemplo representativo\"\u003eGeração habitual de executáveis em C e Rust\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Conceito relacionado à execução\"\u003eBytecode\u003c/td\u003e\n\u003ctd data-label=\"Papel\"\u003eFormato intermediário de instruções processado pelo ambiente de execução\u003c/td\u003e\n\u003ctd data-label=\"Exemplo representativo\"\u003eBytecode de Java e de CPython\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Conceito relacionado à execução\"\u003eInterpretador\u003c/td\u003e\n\u003ctd data-label=\"Papel\"\u003eExecutar código ou instruções intermediárias enquanto os interpreta\u003c/td\u003e\n\u003ctd data-label=\"Exemplo representativo\"\u003eExecução de bytecode no CPython\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Conceito relacionado à execução\"\u003eCompilação JIT\u003c/td\u003e\n\u003ctd data-label=\"Papel\"\u003eConverter o código necessário em linguagem de máquina durante a execução\u003c/td\u003e\n\u003ctd data-label=\"Exemplo representativo\"\u003eDiversas JVMs e mecanismos de JavaScript\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Conceito relacionado à execução\"\u003eAmbiente de execução\u003c/td\u003e\n\u003ctd data-label=\"Papel\"\u003eFornecer os recursos necessários para executar o programa\u003c/td\u003e\n\u003ctd data-label=\"Exemplo representativo\"\u003eJVM, Node.js\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eCPython é uma implementação de Python amplamente utilizada. Ele compila o código-fonte em bytecode e o executa. É incorreto descrever Python apenas como uma linguagem que traduz o código-fonte uma linha por vez a cada execução.\u003c/p\u003e\n\u003cp\u003eA JVM de Java é um ambiente que executa bytecode. Essa estrutura ajuda a executar código mesmo em sistemas operacionais diferentes. A compatibilidade real também é afetada pela versão da JVM e pelas bibliotecas externas.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#qual-%C3%A9-a-diferen%C3%A7a-entre-a-interface-web-e-o-servidor\" class=\"anchor\" id=\"qual-é-a-diferença-entre-a-interface-web-e-o-servidor\"\u003e\u003c/a\u003eQual é a diferença entre a interface web e o servidor?\u003c/h2\u003e\n\u003cp\u003eO front-end cuida das telas e das interações com as quais o usuário tem contato. O back-end processa as solicitações no servidor. O banco de dados tem o papel de armazenar e consultar os dados necessários.\u003c/p\u003e\n\u003cp\u003eHTML é uma linguagem de marcação que expressa a estrutura dos documentos. CSS define o estilo e a disposição dos elementos na tela. JavaScript implementa a avaliação de condições e o tratamento das ações do usuário.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eNome\u003c/th\u003e\n\u003cth\u003eClassificação\u003c/th\u003e\n\u003cth\u003ePapel principal\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Nome\"\u003eHTML\u003c/td\u003e\n\u003ctd data-label=\"Classificação\"\u003eLinguagem de marcação\u003c/td\u003e\n\u003ctd data-label=\"Papel principal\"\u003eEstrutura do documento, como títulos, parágrafos e campos de entrada\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Nome\"\u003eCSS\u003c/td\u003e\n\u003ctd data-label=\"Classificação\"\u003eLinguagem de folhas de estilo\u003c/td\u003e\n\u003ctd data-label=\"Papel principal\"\u003eCores, espaçamento e disposição dos elementos na tela\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Nome\"\u003eJavaScript\u003c/td\u003e\n\u003ctd data-label=\"Classificação\"\u003eLinguagem de programação\u003c/td\u003e\n\u003ctd data-label=\"Papel principal\"\u003eInterações no navegador e processamento no servidor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Nome\"\u003eTypeScript\u003c/td\u003e\n\u003ctd data-label=\"Classificação\"\u003eLinguagem que adiciona um sistema de tipos ao JavaScript\u003c/td\u003e\n\u003ctd data-label=\"Papel principal\"\u003eVerificação de erros antes da execução e manutenção do código\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Nome\"\u003eReact\u003c/td\u003e\n\u003ctd data-label=\"Classificação\"\u003eBiblioteca de interfaces de usuário\u003c/td\u003e\n\u003ctd data-label=\"Papel principal\"\u003eConstrução de telas com componentes reutilizáveis\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Nome\"\u003eNode.js\u003c/td\u003e\n\u003ctd data-label=\"Classificação\"\u003eAmbiente de execução de JavaScript\u003c/td\u003e\n\u003ctd data-label=\"Papel principal\"\u003eExecução de JavaScript fora do navegador\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Nome\"\u003eNext.js\u003c/td\u003e\n\u003ctd data-label=\"Classificação\"\u003eFramework baseado em React\u003c/td\u003e\n\u003ctd data-label=\"Papel principal\"\u003eOrganização das páginas e funcionalidades de servidor de aplicativos web\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Nome\"\u003ePHP\u003c/td\u003e\n\u003ctd data-label=\"Classificação\"\u003eLinguagem de programação\u003c/td\u003e\n\u003ctd data-label=\"Papel principal\"\u003eGeração de respostas web dinâmicas no servidor\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Nome\"\u003eSQL\u003c/td\u003e\n\u003ctd data-label=\"Classificação\"\u003eLinguagem de banco de dados\u003c/td\u003e\n\u003ctd data-label=\"Papel principal\"\u003eConsulta, inserção, atualização e exclusão de dados\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eReact, Node.js e Next.js não são ferramentas do mesmo tipo. Uma biblioteca é um conjunto de código do qual se aproveitam as funcionalidades necessárias. Um framework também fornece uma forma de estruturar a aplicação. Um ambiente de execução é onde o código é executado.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#compara%C3%A7%C3%A3o-de-linguagens-por-finalidade\" class=\"anchor\" id=\"comparação-de-linguagens-por-finalidade\"\u003e\u003c/a\u003eComparação de linguagens por finalidade\u003c/h2\u003e\n\u003cp\u003eEscolha a linguagem com base no que deseja criar e no ambiente de execução existente. A tabela abaixo apresenta os principais pontos de partida para avaliar cada linguagem. Uma linguagem não se limita às tarefas indicadas na tabela.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eO que deseja criar\u003c/th\u003e\n\u003cth\u003eLinguagens a considerar primeiro\u003c/th\u003e\n\u003cth\u003eO que verificar antes de escolher\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"O que deseja criar\"\u003eAplicativo web usado no navegador\u003c/td\u003e\n\u003ctd data-label=\"Linguagens a considerar primeiro\"\u003eJavaScript e TypeScript\u003c/td\u003e\n\u003ctd data-label=\"O que verificar antes de escolher\"\u003eFundamentos de HTML e CSS e ferramentas de construção de interfaces\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"O que deseja criar\"\u003eOrganização de arquivos e automação de tarefas\u003c/td\u003e\n\u003ctd data-label=\"Linguagens a considerar primeiro\"\u003ePython\u003c/td\u003e\n\u003ctd data-label=\"O que verificar antes de escolher\"\u003eFormato dos arquivos de entrada e ambiente de distribuição\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"O que deseja criar\"\u003eAnálise de dados e uso de modelos de IA\u003c/td\u003e\n\u003ctd data-label=\"Linguagens a considerar primeiro\"\u003ePython\u003c/td\u003e\n\u003ctd data-label=\"O que verificar antes de escolher\"\u003eBibliotecas necessárias para análise e modelos\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"O que deseja criar\"\u003eServidores de rede e ferramentas de operação\u003c/td\u003e\n\u003ctd data-label=\"Linguagens a considerar primeiro\"\u003eGo\u003c/td\u003e\n\u003ctd data-label=\"O que verificar antes de escolher\"\u003eEstrutura de processamento concorrente e integração com sistemas existentes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"O que deseja criar\"\u003eSistemas empresariais baseados em JVM\u003c/td\u003e\n\u003ctd data-label=\"Linguagens a considerar primeiro\"\u003eJava e Kotlin\u003c/td\u003e\n\u003ctd data-label=\"O que verificar antes de escolher\"\u003eCompatibilidade com o código e as bibliotecas existentes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"O que deseja criar\"\u003eAplicativo voltado principalmente para iOS\u003c/td\u003e\n\u003ctd data-label=\"Linguagens a considerar primeiro\"\u003eSwift\u003c/td\u003e\n\u003ctd data-label=\"O que verificar antes de escolher\"\u003eFerramentas de desenvolvimento da Apple e recursos da plataforma\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"O que deseja criar\"\u003eAplicativo voltado principalmente para Android\u003c/td\u003e\n\u003ctd data-label=\"Linguagens a considerar primeiro\"\u003eKotlin\u003c/td\u003e\n\u003ctd data-label=\"O que verificar antes de escolher\"\u003eFerramentas de desenvolvimento para Android e estrutura do aplicativo existente\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"O que deseja criar\"\u003eSistemas que exigem controle de memória\u003c/td\u003e\n\u003ctd data-label=\"Linguagens a considerar primeiro\"\u003eC, C++ e Rust\u003c/td\u003e\n\u003ctd data-label=\"O que verificar antes de escolher\"\u003eRequisitos de desempenho e capacidade de verificar a segurança\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"O que deseja criar\"\u003eOtimização de cálculos em CPU e GPU\u003c/td\u003e\n\u003ctd data-label=\"Linguagens a considerar primeiro\"\u003eMojo\u003c/td\u003e\n\u003ctd data-label=\"O que verificar antes de escolher\"\u003eHardware compatível e recursos de cálculo necessários\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"O que deseja criar\"\u003eProcessamento de dados relacionais\u003c/td\u003e\n\u003ctd data-label=\"Linguagens a considerar primeiro\"\u003eSQL\u003c/td\u003e\n\u003ctd data-label=\"O que verificar antes de escolher\"\u003eDiferenças de sintaxe entre produtos de banco de dados\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eA utilidade de Python também está relacionada ao seu ecossistema de bibliotecas. NumPy usa código compilado para ganhar velocidade. Nem todo cálculo escrito em Python é executado apenas com código Python.\u003c/p\u003e\n\u003cp\u003eGo inclui o suporte à concorrência no projeto da linguagem. Concorrência é o conceito de organizar várias tarefas para que avancem em conjunto. Paralelismo é a situação em que várias tarefas são realmente executadas ao mesmo tempo. Escrever código concorrente não aumenta automaticamente a velocidade dos cálculos.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#diferen%C3%A7as-entre-typescript-rust-e-mojo\" class=\"anchor\" id=\"diferenças-entre-typescript-rust-e-mojo\"\u003e\u003c/a\u003eDiferenças entre TypeScript, Rust e Mojo\u003c/h2\u003e\n\u003cp\u003eTypeScript, Rust e Mojo buscam resolver problemas diferentes. TypeScript ajuda a verificar os tipos no código JavaScript. Rust estabelece regras rigorosas para o gerenciamento de memória. Mojo é voltado a cálculos de alto desempenho e ao aproveitamento do hardware.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCritério de comparação\u003c/th\u003e\n\u003cth\u003eTypeScript\u003c/th\u003e\n\u003cth\u003eRust\u003c/th\u003e\n\u003cth\u003eMojo\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Critério de comparação\"\u003eFoco principal\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003eVerificação de tipos e manutenção do código\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003eSegurança de memória e controle do sistema\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003eCálculos de alto desempenho em CPU e GPU\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Critério de comparação\"\u003eUso representativo\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003eAplicativos web e aplicações de servidor\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003eFerramentas de sistema e componentes voltados ao desempenho\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003eInfraestrutura de IA e kernels de cálculo\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Critério de comparação\"\u003eConceitos a entender primeiro\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003eJavaScript e tipos de dados\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003ePropriedade, empréstimo e tempo de vida\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003eTipos, memória e cálculos paralelos\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Critério de comparação\"\u003ePontos a verificar separadamente\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003eEntradas externas e regras de negócio\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003eCódigo unsafe e erros de lógica\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003eIntegração com Python e suporte a hardware\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003ch3\u003e\n\u003ca href=\"#verifica%C3%A7%C3%A3o-de-tipos-no-typescript\" class=\"anchor\" id=\"verificação-de-tipos-no-typescript\"\u003e\u003c/a\u003eVerificação de tipos no TypeScript\u003c/h3\u003e\n\u003cp\u003eTypeScript adiciona verificação estática de tipos ao JavaScript. Isso ajuda a encontrar código que usa tipos de forma incorreta antes da execução. Com a inferência de tipos, ele determina automaticamente os tipos de algumas declarações.\u003c/p\u003e\n\u003cp\u003eNão é preciso escrever o tipo de cada variável manualmente. As anotações de tipo são removidas no processo habitual de conversão para JavaScript. A declaração de tipos, por si só, não cria verificações de entrada durante a execução.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#propriedade-e-seguran%C3%A7a-de-mem%C3%B3ria-no-rust\" class=\"anchor\" id=\"propriedade-e-segurança-de-memória-no-rust\"\u003e\u003c/a\u003ePropriedade e segurança de memória no Rust\u003c/h3\u003e\n\u003cp\u003ePropriedade é o conjunto de regras que define quem gerencia a memória de um valor. Empréstimo é uma forma de fazer referência a um valor sem transferir sua propriedade. O compilador verifica as regras relacionadas para prevenir erros de memória.\u003c/p\u003e\n\u003cp\u003eAs garantias de segurança do Rust pressupõem uma implementação correta. No código unsafe, o autor assume a responsabilidade por algumas condições de segurança. A linguagem não impede automaticamente erros em fórmulas de cálculo ou em permissões de acesso.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#rela%C3%A7%C3%A3o-entre-mojo-e-python\" class=\"anchor\" id=\"relação-entre-mojo-e-python\"\u003e\u003c/a\u003eRelação entre Mojo e Python\u003c/h3\u003e\n\u003cp\u003eMojo é uma linguagem distinta que usa uma sintaxe semelhante à do Python. Ela oferece suporte à escrita de código de alto desempenho para CPU e GPU. Também fornece recursos de interoperabilidade para se conectar a código Python.\u003c/p\u003e\n\u003cp\u003eNão se deve presumir que o código Python existente possa ser transferido sem alterações. Confira os recursos necessários na documentação da versão de Mojo que será instalada. Para usar a GPU, também é preciso atender aos requisitos de dispositivos compatíveis e drivers.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#erros-comuns-ao-explicar-linguagens\" class=\"anchor\" id=\"erros-comuns-ao-explicar-linguagens\"\u003e\u003c/a\u003eErros comuns ao explicar linguagens\u003c/h2\u003e\n\u003cp\u003eApresentações curtas de linguagens podem facilmente deixar de fora as condições de aplicação. Também é preciso distinguir fatos históricos de funcionalidades atuais. Os itens abaixo são equívocos que podem prejudicar a avaliação ao escolher uma linguagem.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eExplicação comum\u003c/th\u003e\n\u003cth\u003eEntendimento correto\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Explicação comum\"\u003eJavaScript é a versão web de Java\u003c/td\u003e\n\u003ctd data-label=\"Entendimento correto\"\u003eSão linguagens diferentes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Explicação comum\"\u003eHTML e CSS surgiram em 1991\u003c/td\u003e\n\u003ctd data-label=\"Entendimento correto\"\u003eA recomendação do W3C para CSS1 é de 17 de dezembro de 1996\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Explicação comum\"\u003eKotlin é uma linguagem criada pelo Google\u003c/td\u003e\n\u003ctd data-label=\"Entendimento correto\"\u003eA desenvolvedora é a JetBrains; o Google oferece suporte no Android\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Explicação comum\"\u003eCódigo C roda em qualquer lugar se for recompilado\u003c/td\u003e\n\u003ctd data-label=\"Entendimento correto\"\u003ePartes dependentes do sistema operacional e do hardware podem precisar de alterações\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Explicação comum\"\u003ePython ocupa atualmente o 1º lugar em popularidade\u003c/td\u003e\n\u003ctd data-label=\"Entendimento correto\"\u003eÉ preciso conhecer a instituição responsável pela pesquisa, a data e o método de apuração para avaliar\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Explicação comum\"\u003eUsar Rust resolve todos os problemas de segurança\u003c/td\u003e\n\u003ctd data-label=\"Entendimento correto\"\u003eSegurança de memória e verificação de permissões de acesso são questões diferentes\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Explicação comum\"\u003eUsar Mojo acelera todas as tarefas em Python\u003c/td\u003e\n\u003ctd data-label=\"Entendimento correto\"\u003eÉ preciso medir conforme a tarefa, a implementação e o hardware\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Explicação comum\"\u003eO termo bug nasceu no incidente com um inseto\u003c/td\u003e\n\u003ctd data-label=\"Entendimento correto\"\u003eO incidente popularizou um termo que já era usado\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eO famoso registro da descoberta de um inseto é o caso do Harvard Mark II, em 1947. O Smithsonian explica que o incidente contribuiu para popularizar o termo. É impreciso apresentá-lo como um caso do ENIAC ou como a origem do termo.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#como-interpretar-os-n%C3%BAmeros-de-desempenho\" class=\"anchor\" id=\"como-interpretar-os-números-de-desempenho\"\u003e\u003c/a\u003eComo interpretar os números de desempenho?\u003c/h2\u003e\n\u003cp\u003eOs números de desempenho devem ser interpretados apenas no contexto da tarefa medida. O tempo de compilação e a velocidade de execução do aplicativo pronto são métricas diferentes. Uma ferramenta de desenvolvimento mais rápida não torna uma página web mais rápida na mesma proporção.\u003c/p\u003e\n\u003cp\u003eA Microsoft anunciou a migração das ferramentas de TypeScript para uma implementação nativa. O anúncio de 11 de março de 2025 apresenta medições por projeto. Abaixo está o caso da base de código do VS Code apresentado no anúncio.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eObjeto da medição\u003c/th\u003e\n\u003cth\u003eImplementação anterior\u003c/th\u003e\n\u003cth\u003eImplementação nativa\u003c/th\u003e\n\u003cth\u003eGanho de velocidade anunciado\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Objeto da medição\"\u003eProcessamento da compilação TypeScript da base de código do VS Code\u003c/td\u003e\n\u003ctd data-label=\"Implementação anterior\"\u003e77.8 segundos\u003c/td\u003e\n\u003ctd data-label=\"Implementação nativa\"\u003e7.5 segundos\u003c/td\u003e\n\u003ctd data-label=\"Ganho de velocidade anunciado\"\u003e10.4 vezes\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eNas condições do anúncio, o tempo de processamento caiu para \u003cstrong\u003e7.5 segundos\u003c/strong\u003e. Calculando a diferença, houve uma redução de 70.3 segundos em um processamento. Isso não significa que todos os projetos terão o mesmo resultado.\u003c/p\u003e\n\u003cp\u003eAplique o mesmo princípio às comparações de velocidade entre Python e C. É preciso verificar se foram usados a mesma entrada e o mesmo algoritmo. As opções de compilação e as bibliotecas utilizadas também fazem parte das condições de comparação. Números sem informações sobre o ambiente de execução dificilmente servem como uma proporção geral de velocidade.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#verifica%C3%A7%C3%A3o-de-tipos-e-valida%C3%A7%C3%A3o-de-entradas-externas\" class=\"anchor\" id=\"verificação-de-tipos-e-validação-de-entradas-externas\"\u003e\u003c/a\u003eVerificação de tipos e validação de entradas externas\u003c/h2\u003e\n\u003cp\u003eMesmo quando o código passa pela verificação de tipos, o conteúdo dos dados externos precisa ser verificado separadamente. Essa diferença costuma passar despercebida na revisão de código gerado por IA. As declarações de tipo expressam a forma dos valores esperados pelo programa.\u003c/p\u003e\n\u003cp\u003eImagine um aplicativo web em que a quantidade foi declarada como um tipo numérico. Uma API externa pode, na prática, enviar uma string. Atribuir um nome de tipo ou fazer uma asserção de tipo não valida o valor. É necessário código que verifique os dados durante a execução.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eEtapa de verificação\u003c/th\u003e\n\u003cth\u003eO que verificar\u003c/th\u003e\n\u003cth\u003eProblema que permanece mesmo após a aprovação\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Etapa de verificação\"\u003eVerificação de tipos\u003c/td\u003e\n\u003ctd data-label=\"O que verificar\"\u003eUso dos tipos dentro do código\u003c/td\u003e\n\u003ctd data-label=\"Problema que permanece mesmo após a aprovação\"\u003eValores que realmente chegam de fontes externas\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Etapa de verificação\"\u003eValidação de entrada\u003c/td\u003e\n\u003ctd data-label=\"O que verificar\"\u003eFormato dos dados e intervalo permitido\u003c/td\u003e\n\u003ctd data-label=\"Problema que permanece mesmo após a aprovação\"\u003eSe a ação é permitida ao usuário\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Etapa de verificação\"\u003eVerificação de permissões\u003c/td\u003e\n\u003ctd data-label=\"O que verificar\"\u003ePermissões de acesso de quem faz a solicitação\u003c/td\u003e\n\u003ctd data-label=\"Problema que permanece mesmo após a aprovação\"\u003eSe o resultado está de acordo com as regras de negócio\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Etapa de verificação\"\u003eTeste funcional\u003c/td\u003e\n\u003ctd data-label=\"O que verificar\"\u003eResultado real para as entradas previstas\u003c/td\u003e\n\u003ctd data-label=\"Problema que permanece mesmo após a aprovação\"\u003eCondições não testadas\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eEsta tabela é uma estrutura de revisão que leva em conta os limites da remoção de tipos e da segurança de memória. Ela separa o que a linguagem garante do que o serviço precisa verificar. Ao fazer pedidos à IA, distinga a validação de cada etapa.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#como-explicar-funcionalidades-%C3%A0-ia\" class=\"anchor\" id=\"como-explicar-funcionalidades-à-ia\"\u003e\u003c/a\u003eComo explicar funcionalidades à IA\u003c/h2\u003e\n\u003cp\u003eAo solicitar uma funcionalidade, inclua a entrada e o resultado esperado. Definir apenas o nome do programa facilita a omissão das condições de funcionamento. Se houver um projeto existente, informe também a linguagem e a versão em uso.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eInforme o ambiente que será utilizado.\u003c/li\u003e\n\u003cli\u003eDescreva o formato da entrada a ser processada.\u003c/li\u003e\n\u003cli\u003eDefina o resultado para uma entrada válida.\u003c/li\u003e\n\u003cli\u003eDefina como tratar valores vazios e entradas incorretas.\u003c/li\u003e\n\u003cli\u003ePeça também o motivo das alterações e como verificá-las.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eA seguir, um exemplo de prompt que divide os requisitos. Adapte o conteúdo real do arquivo ao projeto. É preciso executar o resultado gerado para verificá-lo.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\u003cspan\u003ePrimeiro, verifique a linguagem e o ambiente de execução do projeto existente.\n\u003c/span\u003e\u003cspan\u003eLeia as linhas que têm título em um arquivo CSV e mostre-as em uma lista.\n\u003c/span\u003e\u003cspan\u003eExiba uma mensagem de erro se faltar alguma coluna obrigatória.\n\u003c/span\u003e\u003cspan\u003eInforme separadamente quais linhas estão com o título vazio.\n\u003c/span\u003e\u003cspan\u003eSepare o código de validação de entradas externas do código de exibição na tela.\n\u003c/span\u003e\u003cspan\u003eVerifique primeiro se é possível implementar com as dependências existentes.\n\u003c/span\u003e\u003cspan\u003eExplique as partes alteradas e como testá-las.\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eSe ocorrer um erro, informe também as condições para reproduzi-lo. A mensagem de erro contém pistas para delimitar o local em que ele ocorreu. A documentação do Copilot no GitHub também exige a revisão do código gerado. Antes de adotar o código, é necessário verificar os resultados da execução.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#crit%C3%A9rios-para-come%C3%A7ar-a-aprender-e-escolher-um-curso\" class=\"anchor\" id=\"critérios-para-começar-a-aprender-e-escolher-um-curso\"\u003e\u003c/a\u003eCritérios para começar a aprender e escolher um curso\u003c/h2\u003e\n\u003cp\u003eO aprendizado inicial pode começar com um escopo limitado, de acordo com a tarefa que você deseja realizar. Para desenvolvimento web, tente primeiro conectar a estrutura da interface ao seu comportamento. Para automação, é melhor começar verificando a entrada de arquivos e o salvamento dos resultados.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eEscolha uma linguagem adequada ao que deseja criar.\u003c/li\u003e\n\u003cli\u003eAprenda variáveis, tipos, condicionais, laços de repetição e funções.\u003c/li\u003e\n\u003cli\u003eEscreva uma pequena funcionalidade e compare os resultados da execução.\u003c/li\u003e\n\u003cli\u003eInsira dados incorretos para verificar o comportamento em caso de falha.\u003c/li\u003e\n\u003cli\u003eTente explicar com suas próprias palavras por que alterou o código.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eAo avaliar um curso, confira o conteúdo de verificação, além da tela de resultado. Veja se há exercícios para reproduzir e corrigir erros. Outro ponto a verificar é se as versões e o ambiente de execução utilizados estão especificados.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eExplicação do código: processo de explicar as entradas e saídas das funções geradas\u003c/li\u003e\n\u003cli\u003eTratamento de erros: exercícios de leitura de mensagens de erro e delimitação das causas\u003c/li\u003e\n\u003cli\u003eValidação de dados: exemplos de tratamento de entradas externas e condições de falha\u003c/li\u003e\n\u003cli\u003eReprodutibilidade: orientações para executar novamente no mesmo ambiente\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAs definições das linguagens podem ser consultadas na documentação oficial de cada projeto. O TypeScript Handbook explica a remoção de tipos. O livro oficial de Rust explica separadamente propriedade e unsafe. No Mojo Manual, confira os recursos da linguagem e os limites da integração com Python.\u003c/p\u003e\n","tags":["IA generativa","Engenharia de prompts","Desenvolvimento de IA","Programação com IA","Ferramentas de desenvolvimento"],"faqs":[{"question":"Preciso aprender todas as linguagens antes de começar com vibe coding?","answer":"Não é necessário aprender todas as linguagens. Primeiro, escolha uma linguagem adequada ao que você quer criar. Entender variáveis, tipos, funções e onde o código é executado permite formular pedidos mais específicos."},{"question":"No desenvolvimento web, devo começar por JavaScript ou Python?","answer":"Para criar o comportamento das telas no navegador, JavaScript é o ponto de partida. Aprenda também o papel de HTML e CSS. Python pode ser considerado um ponto de partida para automação de arquivos e processamento de dados."},{"question":"Se eu usar TypeScript, não preciso conhecer JavaScript?","answer":"Para entender como TypeScript se comporta durante a execução, é necessário conhecer os fundamentos de JavaScript. TypeScript acrescenta um sistema de tipos ao JavaScript. Entenda a diferença entre a verificação de tipos e a execução de fato."},{"question":"É preciso indicar o tipo de todas as variáveis em TypeScript?","answer":"Onde a inferência de tipos for possível, não é necessário indicá-los manualmente. As ferramentas determinam o tipo com base no valor atribuído e no contexto. Decida se um tipo explícito é necessário de acordo com o papel do código."},{"question":"React e Node.js também são linguagens de programação?","answer":"React é uma biblioteca de interfaces de usuário. Node.js é um ambiente de execução de JavaScript. Next.js é classificado como um framework baseado em React."},{"question":"Python traduz e executa o código-fonte linha por linha?","answer":"A principal implementação, CPython, compila o código-fonte em bytecode. Depois, executa o bytecode. É difícil explicar esse processo apenas dizendo que o código-fonte é traduzido linha por linha."},{"question":"Se eu usar Rust, não preciso fazer uma revisão de segurança?","answer":"A segurança de memória do Rust não significa que o serviço inteiro seja seguro. As permissões de acesso e as regras de negócio precisam ser verificadas separadamente. As condições de segurança do código unsafe também devem ser revisadas."},{"question":"Mojo é uma nova versão do Python?","answer":"Mojo é uma linguagem separada, com sintaxe semelhante à do Python. Oferece recursos de integração com Python. Confira a compatibilidade do código existente na documentação oficial da versão que você vai usar."},{"question":"É indispensável ter uma GPU para usar Mojo?","answer":"Com Mojo, também é possível escrever código para CPU. Uma GPU não é um requisito obrigatório para todos os programas. Se você for usar recursos de GPU, confira quais dispositivos e drivers são compatíveis."},{"question":"Concorrência em Go significa o mesmo que processamento paralelo?","answer":"Concorrência é o conceito de organizar várias tarefas para que avancem em conjunto. Paralelismo é o estado em que várias tarefas são de fato executadas ao mesmo tempo. A concorrência, por si só, não garante um aumento na velocidade de execução."},{"question":"Kotlin foi desenvolvido pelo Google?","answer":"A responsável pelo desenvolvimento do Kotlin é a JetBrains. O Google oferece suporte ao Kotlin no desenvolvimento para Android. É preciso distinguir quem criou a linguagem de quem oferece suporte a ela na plataforma."},{"question":"Se o compilador do TypeScript ficar mais rápido, o aplicativo também ficará mais rápido na mesma proporção?","answer":"O tempo de compilação e o tempo de execução do aplicativo são métricas diferentes. Os exemplos de desempenho da Microsoft se referem ao tempo de processamento das ferramentas de desenvolvimento. A velocidade de resposta do aplicativo precisa ser medida separadamente."},{"question":"Se o código gerado por IA passar na verificação de tipos, ele está pronto?","answer":"Não é possível determinar se uma funcionalidade está concluída apenas com a verificação de tipos. É preciso verificar as entradas externas e as permissões de acesso. Teste se os resultados esperados são obtidos em condições normais e de falha."},{"question":"Quais critérios usar para escolher um curso de vibe coding?","answer":"Verifique se há exercícios práticos para explicar e modificar o código gerado. Você também pode verificar se o curso aborda a reprodução de erros e a validação de entradas. Em cursos que especificam a versão utilizada e o ambiente de execução, é mais fácil verificar as condições de reprodução."}],"sources":[{"url":"https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html","title":"Documentação oficial do TypeScript: TypeScript for JavaScript Programmers","type":"source"},{"url":"https://www.typescriptlang.org/docs/handbook/2/basic-types","title":"TypeScript Handbook: The Basics, verificação de tipos e apagamento de tipos","type":"source"},{"url":"https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html","title":"The Rust Programming Language: What Is Ownership?","type":"source"},{"url":"https://doc.rust-lang.org/book/ch20-01-unsafe-rust.html","title":"The Rust Programming Language: Unsafe Rust","type":"source"},{"url":"https://docs.modular.com/mojo/manual/","title":"Mojo Manual: visão geral da linguagem e integração com Python","type":"source"},{"url":"https://docs.modular.com/mojo/requirements/","title":"Mojo System Requirements: requisitos de suporte a CPU e GPU","type":"source"},{"url":"https://docs.python.org/3/glossary.html","title":"Glossário oficial do Python: bytecode e conceitos relacionados à execução","type":"source"},{"url":"https://numpy.org/doc/2.0/building/index.html","title":"NumPy 2.0 Manual: Building from source","type":"source"},{"url":"https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/What_is_JavaScript","title":"MDN: What is JavaScript?","type":"source"},{"url":"https://nodejs.org/learn/getting-started/introduction-to-nodejs","title":"Documentação oficial do Node.js: Introduction to Node.js","type":"source"},{"url":"https://react.dev/","title":"Documentação oficial do React: biblioteca de interfaces de usuário","type":"source"},{"url":"https://nextjs.org/docs","title":"Documentação oficial do Next.js","type":"source"},{"url":"https://www.php.net/manual/en/introduction.php","title":"PHP Manual: Introduction","type":"source"},{"url":"https://go.dev/doc/faq","title":"FAQ oficial do Go: objetivos de projeto e características de execução","type":"source"},{"url":"https://go.dev/blog/waza-talk","title":"Blog oficial do Go: Concurrency is not parallelism","type":"source"},{"url":"https://kotlinlang.org/docs/faq.html","title":"FAQ oficial do Kotlin: responsáveis pelo desenvolvimento e plataformas de destino","type":"source"},{"url":"https://developer.android.com/kotlin","title":"Android Developers: Kotlin and Android","type":"source"},{"url":"https://www.swift.org/about/","title":"Swift.org: About Swift","type":"source"},{"url":"https://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html","title":"Oracle Java Tutorials: About the Java Technology","type":"source"},{"url":"https://www.ibm.com/history/fortran","title":"IBM History: Fortran","type":"source"},{"url":"https://www-formal.stanford.edu/jmc/history/lisp/node2.html","title":"John McCarthy: LISP prehistory","type":"source"},{"url":"https://bitsavers.computerhistory.org/magazines/Datamation/196703.pdf","title":"Howard Bromberg: The COBOL Conclusion, Datamation, março de 1967","type":"source"},{"url":"https://www.nokia.com/bell-labs/about/dennis-m-ritchie/chist.html","title":"Dennis Ritchie: The Development of the C Language","type":"source"},{"url":"https://www.stroustrup.com/bs_faq.html","title":"Bjarne Stroustrup FAQ: C++ e orientação a objetos","type":"source"},{"url":"https://www.ibm.com/think/topics/structured-query-language","title":"IBM: What Is Structured Query Language?","type":"source"},{"url":"https://www.w3.org/standards/history/CSS1/","title":"W3C: Histórico de publicação de Cascading Style Sheets, nível 1","type":"data_point"},{"url":"https://americanhistory.si.edu/collections/object/nmah_334663","title":"Smithsonian National Museum of American History: Livro de registros com bug de computador","type":"source"},{"url":"https://devblogs.microsoft.com/typescript/typescript-native-port/","title":"Microsoft: Um TypeScript 10x mais rápido, 11 de março de 2025","type":"data_point"},{"url":"https://docs.github.com/en/copilot/responsible-use/inline-suggestions","title":"GitHub Docs: Limitações das sugestões em linha do Copilot e responsabilidade pela verificação","type":"source"}],"images":[{"id":2241,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzQ0NjEsInB1ciI6ImJsb2JfaWQifX0=--aa435b9d954b7e3cf19dca343a0d0fc5333fe68f/ai-73cc4d9e.webp","is_representative":true,"generation_method":"ai_photo","license":"ai_generated","mime_type":"image/webp","width":1536,"height":1024,"translations":{"ko":{"alt":"실습 교실에서 중년 남성이 노트북을 사용하고 옆의 여성이 탁자 위 스마트폰을 가리키고 있다.","caption":"AI가 생성한 코드는 실행과 테스트로 요구사항에 맞는지 확인해야 합니다.","description":null},"en":{"alt":"A middle-aged man uses a laptop in a classroom while a woman beside him points to a smartphone on the table.","caption":"AI-generated code must be run and tested to verify that it meets the requirements.","description":null},"ja":{"alt":"実習教室で中年の男性がノートパソコンを操作し、隣の女性が机の上のスマートフォンを指さしている。","caption":"AIが生成したコードは、実行とテストで要件を満たしているか確認する必要があります。","description":null},"es":{"alt":"Un hombre de mediana edad usa un portátil en clase mientras una mujer señala un móvil sobre la mesa.","caption":"El código generado por IA debe ejecutarse y probarse para comprobar que cumple los requisitos.","description":null},"id":{"alt":"Pria paruh baya menggunakan laptop di kelas, sementara perempuan di sebelahnya menunjuk ponsel di meja.","caption":"Kode buatan AI harus dijalankan dan diuji untuk memastikan kesesuaiannya dengan kebutuhan.","description":null},"pt":{"alt":"Um homem de meia-idade usa um notebook em aula enquanto uma mulher aponta para um celular sobre a mesa.","caption":"O código gerado por IA deve ser executado e testado para verificar se atende aos requisitos.","description":null},"zh-hant":{"alt":"實作教室裡，一名中年男子操作筆記型電腦，身旁的女子指著桌上的智慧型手機。","caption":"AI 生成的程式碼必須透過執行與測試，確認是否符合需求。","description":null},"de":{"alt":"Ein Mann mittleren Alters nutzt im Kurs einen Laptop, während eine Frau neben ihm auf ein Smartphone zeigt.","caption":"KI-generierter Code muss ausgeführt und getestet werden, um zu prüfen, ob er die Anforderungen erfüllt.","description":null}}},{"id":2242,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzQ0NjcsInB1ciI6ImJsb2JfaWQifX0=--0a47db349b5b04ebfcd192a40d156aec0886d68c/ai-3af1935f.webp","is_representative":false,"generation_method":"ai_semi","license":"ai_generated","mime_type":"image/webp","width":1536,"height":1024,"translations":{"ko":{"alt":"서버실에서 CPU 방열판과 GPU 카드가 드러난 서버 내부를 살펴보는 여성","caption":"Mojo는 CPU와 GPU의 고성능 연산을 겨냥한 언어입니다.","description":null},"en":{"alt":"A woman inspects an open server with exposed CPU heatsinks and a GPU card in a server room.","caption":"Mojo targets high-performance computing on CPUs and GPUs.","description":null},"ja":{"alt":"サーバールームで、CPUヒートシンクとGPUカードが見えるサーバー内部を確認する女性","caption":"MojoはCPUとGPUでの高性能な演算を目指した言語です。","description":null},"es":{"alt":"Una mujer revisa un servidor abierto con disipadores de CPU y una tarjeta GPU en una sala de servidores.","caption":"Mojo está orientado a la computación de alto rendimiento en CPU y GPU.","description":null},"id":{"alt":"Seorang perempuan memeriksa server terbuka dengan heatsink CPU dan kartu GPU di ruang server.","caption":"Mojo ditujukan untuk komputasi berkinerja tinggi pada CPU dan GPU.","description":null},"pt":{"alt":"Uma mulher examina um servidor aberto com dissipadores de CPU e uma placa GPU em uma sala de servidores.","caption":"Mojo é voltada à computação de alto desempenho em CPUs e GPUs.","description":null},"zh-hant":{"alt":"一名女性在伺服器機房檢查打開的伺服器，內部可見 CPU 散熱器與 GPU 卡","caption":"Mojo 是以 CPU 與 GPU 高效能運算為目標的程式語言。","description":null},"de":{"alt":"Eine Frau prüft einen geöffneten Server mit CPU-Kühlkörpern und GPU-Karte im Serverraum.","caption":"Mojo ist auf Hochleistungsberechnungen mit CPUs und GPUs ausgerichtet.","description":null}}}],"published_at":"2026-10-29T14:25:12+09:00","updated_at":"2026-10-29T14:25:12+09:00","license":"cc_by","translation_status":"reviewed","available_locales":["ko","en","ja","es"],"data_locales":["ko","en","ja","es","id","pt","zh-hant","de"],"url":"https://injoys.com/en/articles/vibe-coding-programming-language-basics"}