diff --git a/community_guides/GUIDE_pt.md b/community_guides/GUIDE_pt.md index 52c3734b4a3..7405c308e93 100644 --- a/community_guides/GUIDE_pt.md +++ b/community_guides/GUIDE_pt.md @@ -4,11 +4,11 @@ Este arquivo, o GitHub Code Vault, foi estabelecido pelo GitHub Archive Program, cuja missão é preservar o software livre para as gerações futuras. O leitor pode estar lendo isso daqui a um ano, ou mil, mas de qualquer forma, esperamos que seu conteúdo, e talvez o próprio conceito de código aberto, sejam úteis para você. -Este é principalmente um arquivo de software. Software é uma série de comandos usados para controlar as ações de um computador. Um computador é um dispositivo que pode realizar funções matemáticas automaticamente com muito mais rapidez do que a mente humana e tem poderes muito além de nós. Nossos computadores são usados para ajudar a explorar os segredos do universo, para conectar toda a humanidade em uma teia onipresente de informações, para manipular sinais rápido o suficiente para transmitir sons e projetar imagens em movimento detalhadas em telas elétricas e para controlar máquinas extremamente poderosas que excede a capacidade e a precisão do trabalho humano. +Este é principalmente um arquivo de software. Software é uma série de comandos usados para controlar as ações de um computador. Um computador é um dispositivo que pode realizar funções matemáticas automaticamente com muito mais rapidez do que a mente humana e tem poderes muito além de nós. Nossos computadores são usados para ajudar a explorar os segredos do universo, para conectar toda a humanidade em uma teia onipresente de informações, para manipular sinais rápido o suficiente para transmitir sons e projetar imagens em movimento detalhadas em telas elétricas e para controlar máquinas extremamente poderosas que excedem a capacidade e a precisão do trabalho humano. -Um computador sem software não pode fazer nenhuma dessas coisas. Um computador é uma coisa extraordinária e maravilhosa, mas sem software, todo o seu poder é inútil. O objetivo deste arquivo é passar o que sabemos sobre software para você. +Um computador sem software não pode fazer nenhuma dessas coisas. Um computador é uma coisa extraordinária e maravilhosa, mas sem software, todo o seu potencial é inútil. O objetivo deste arquivo é passar o que sabemos sobre software para você. -O software é escrito como sequências de comandos complexas, mas legíveis por humanos, os vários sabores dos quais são conhecidos como linguagens de programação, porque uma unidade completa de software é freqüentemente chamada de programa. Esses programas são então convertidos para a linguagem binária de uns e zeros usada por computadores. Este processo é conhecido como compilação. +O software é escrito como sequências de comandos complexas, mas legíveis por humanos, os vários sabores dos quais são conhecidos como linguagens de programação, porque uma unidade completa de software é frequentemente chamada de programa. Esses programas são então convertidos para a linguagem binária de uns e zeros usada por computadores. Este processo é conhecido como compilação. Como o software compilado é muito difícil de decifrar de volta à sua forma de programa original, também conhecido como código-fonte, é possível que as pessoas mantenham o segredo dessa forma original e reivindiquem a propriedade sobre ele. O software de código aberto não é um tipo diferente de software, mas um ethos diferente. O ethos do código aberto rejeita o sigilo e a propriedade. Os programas de software de código-fonte aberto são disponibilizados para qualquer um que quiser usá-lo, sem nenhum custo, para que eles possam, por sua vez, melhorar esses programas ou usá-los para construir algo novo e melhor. @@ -26,19 +26,19 @@ Em princípio, tudo que você precisa para acessar o conteúdo deste arquivo é Nossa expectativa é que você não precise de nossas definições de software, computador e outros termos. Imaginamos que você tenha seus próprios computadores, provavelmente muito mais avançados do que os nossos, e possivelmente com arquiteturas fundamentalmente diferentes. Depois de compreender a visão geral e o guia abaixo, você poderá acessar facilmente todos os dados. -No entanto, é possível que você tenha computadores inferiores aos nossos, ou mesmo nenhum computador. Nesse caso, preparamos um rolo de dados não compactado, não codificado e legível por humanos, que chamamos de Árvore Tecnológica. A Árvore Tecnológica contém informações sobre nossas tecnologias fundamentais, nossos computadores e nosso software, na esperança de que, ao longo do tempo, você seja capaz de usar esse conhecimento para recriar computadores que podem fazer uso do software de código aberto neste arquivo. +No entanto, é possível que você tenha com computadores menos avançados que os nossos, ou mesmo nenhum computador. Nesse caso, preparamos um rolo de dados não compactado, não codificado e legível por humanos, que chamamos de Árvore Tecnológica. A Árvore Tecnológica contém informações sobre nossas tecnologias fundamentais, nossos computadores e nosso software, na esperança de que, ao longo do tempo, você seja capaz de usar esse conhecimento para recriar computadores que podem fazer uso do software de código aberto neste arquivo. ## O que há dentro O arquivo é tão grande - cerca de 21 trilhões de bytes (explicado abaixo) - porque é extremamente inclusivo e democrático. Muitos milhões de pessoas tornam o software que escrevem disponível para todos. Este arquivo inclui um instantâneo - ou seja, uma única cópia, em um único momento no tempo - de todo o software público que os usuários do GitHub estão desenvolvendo ativamente. Isso significa que inclui milhões de repositórios separados. Nossa esperança é que essa abordagem ampla e democrática seja do interesse dos historiadores do futuro. -Os repositórios incluídos neste arquivo foram determinados puramente pela hora do último commit, ou seja, a última vez que foram atualizados e sua contagem de estrelas. (Os usuários do GitHub podem todos 'marcar' repositórios públicos, para indicar que eles são de interesse ou significância para eles.) O instantâneo foi iniciado em 02/02/2020, ou seja, no segundo dia do mês de fevereiro, em o ano de 2020 do calendário gregoriano, conforme contamos o tempo. Os repositórios incluídos nele são: todos os repositórios com quaisquer commits nos 80 dias anteriores; todos os repositórios com pelo menos uma estrela com quaisquer commits nos 365 dias anteriores; e todos os repositórios com pelo menos 250 estrelas, independentemente de quando foram atualizados pela última vez. +Os repositórios incluídos neste arquivo foram determinados puramente pela hora do último commit, ou seja, a última vez que foram atualizados e sua contagem de estrelas. (Os usuários do GitHub podem todos 'marcar' repositórios públicos, para indicar que eles são de interesse ou significância para eles.) O instantâneo foi iniciado em 02/02/2020, ou seja, no segundo dia do mês de fevereiro, no ano de 2020 do calendário gregoriano, conforme contamos o tempo. Os repositórios incluídos nele são: todos os repositórios com quaisquer commits nos 80 dias anteriores; todos os repositórios com pelo menos uma estrela com quaisquer commits nos 365 dias anteriores; e todos os repositórios com pelo menos 250 estrelas, independentemente de quando foram atualizados pela última vez. -É claro que nem todos esses repositórios são igualmente importantes em termos de influência e dependências. A árvore tecnológica inclui um índice e uma breve descrição dos repositórios mais importantes no arquivo e listas em que cada um pode ser encontrado, de modo que possam ser acessados sem ter que percorrer todos esses milhões de repositórios para determinar quais são os mais práticos útil. +É claro que nem todos esses repositórios são igualmente importantes em termos de influência e dependências. A árvore tecnológica inclui um índice e uma breve descrição dos repositórios mais importantes no arquivo e listas em que cada um pode ser encontrado, de modo que possam ser acessados sem a necessidade de percorrer todos esses milhões de repositórios para determinar quais são os mais práticos e úteis. ## Uma Visão Geral do Arquivo -O arquivo consiste em 188 rolos de filme: um "rolo-guia" de informações e orientações legíveis por humanos, que chamamos de Árvore Tecnológica, e 187 rolos de software arquivado. Cada bobina inclui 65.000 quadros individuais. As molduras no início de cada bobina e as molduras da bobina guia incluem texto e imagens legíveis por humanos. Todos os outros quadros de filme consistem em dados digitais armazenados em uma forma visual conhecida como códigos QR. +O arquivo consiste em 188 rolos de filme: um "rolo-guia" de informações e orientações legíveis por humanos, que chamamos de Árvore Tecnológica, e 187 rolos de software arquivado. Cada rolo inclui 65.000 quadros individuais. As molduras no início de cada bobina e as molduras da bobina guia incluem texto e imagens legíveis por humanos. Todos os outros quadros de filme consistem em dados digitais armazenados em uma forma visual conhecida como códigos QR. Dados digitais significam dados armazenados em formato binário, ou seja, como 0s e 1s, porque os próprios computadores são binários - controlados por sinais elétricos que estão "ligados" ou "desligados", correspondendo a 1 ou 0 - e, portanto, os dados binários são muito mais fácil para os computadores entenderem do que qualquer outro. @@ -54,7 +54,7 @@ O resultado após a descompactação é conhecido como um arquivo compactado: um Finalmente, cada arquivo de componente é seu próprio conjunto de dados binários, ou seja, uns e zeros. Os dados podem ser entendidos se você souber seu formato. Por exemplo, no formato conhecido como 'UTF-8', o formato mais comum no arquivo, os uns e os zeros são divididos em grupos de oito, conhecidos como bytes, o byte 01000001 representa a letra A; os três bytes 01101001 01101110 01110100 representam a palavra int; e os dois bytes 11000011 10000011 representam a letra à (A com um acento til no topo). -Este processo de arquivamento de dados, arquivos binários compactados em arquivos compactados e, em seguida, codificados por QR, é obviamente complexo em comparação com a simples escrita de texto legível. O processo de desarquivamento pelo qual você precisará passar - QR para binário compactado; comprimido para não comprimido; arquivar arquivo em vários arquivos; arquivos de texto para texto legível por humanos - é similarmente complexo. Isso ocorre porque essa complexidade nos permite armazenar muito mais dados do que seria possível de outra forma, de uma forma legível por computador com relativa facilidade. +Este processo de arquivamento de dados, arquivos binários compactados em arquivos compactados e, em seguida, codificados por QR, é obviamente complexo em comparação com a simples escrita de texto legível. O processo de desarquivamento pelo qual você precisará passar - QR para binário compactado; comprimido para não comprimido; arquivar arquivo em vários arquivos; arquivos de texto para texto legível por humanos - é similarmente complexo. Isso ocorre porque essa complexidade nos permite armazenar muito mais dados do que seria possível de outra forma, em um formato legível por computador de maneira relativamente fácil. Se essa complexidade for difícil e cara para você, pedimos desculpas, mas nossa expectativa é que, se for o caso, este guia e a árvore de tecnologia legível por humanos aliviarão essa complexidade e talvez possam ser mais úteis para você do que o arquivo conteúdo, pelo menos até que seus computadores estejam avançados o suficiente para que a complexidade dos dados do arquivo seja fácil de lidar. @@ -64,15 +64,15 @@ Pode ser instrutivo discutir como o arquivo está logicamente dividido. Em parti Um arquivo é uma coleção de dados agrupados em uma entidade coerente com um único nome: pense nos dados como areia e um arquivo como uma espécie de bolsa que pode conter areia, e apenas areia. Um diretório é uma coleção de arquivos: pense nele como uma espécie de bolsa que só pode conter outras bolsas. Seguindo essa metáfora, todo repositório consiste em um diretório externo, conhecido como diretório raiz, que contém vários arquivos e / ou vários diretórios. Cada diretório pode, por sua vez, conter arquivos e diretórios. -Essa estrutura é preferida porque os arquivos organizados em grupos são muito mais fáceis de trabalhar do que uma única coleção de arquivos. O identificador de um arquivo específico dentro do diretório externo consiste nos nomes de todos os seus diretórios incluídos, começando com a raiz, seguido por seu próprio nome individual, com um caractere / entre cada nome. Por exemplo, um arquivo chamado README.md no diretório raiz seria identificado como /README.md e um arquivo identificado como /public/www/index.html seria o arquivo index.html no diretório 'www' dentro do ' public 'diretório dentro do diretório raiz. +Essa estrutura é preferida porque os arquivos organizados em grupos são muito mais fáceis de trabalhar do que uma única coleção de arquivos. O identificador de um arquivo específico dentro do diretório externo consiste nos nomes de todos os seus diretórios incluídos, começando com a raiz, seguido por seu próprio nome individual, com um caractere / entre cada nome. Por exemplo, um arquivo chamado README.md no diretório raiz seria identificado como /README.md e um arquivo identificado como /public/www/index.html seria o arquivo index.html no diretório 'www' dentro do 'public' diretório dentro do diretório raiz. Cada repositório, por sua vez, tem dois nomes, separados por um divisor, que no arquivo é um _ ou sublinhado. (Historicamente, tem sido uma / ou barra, mas também é usada para indicar um diretório, então usamos _ para maior clareza.) O primeiro nome é a conta GitHub que possui esse repositório; o segundo é o nome do repositório individual. A combinação de repositório e identificadores de arquivo pode ser usada para identificar exclusivamente um arquivo individual no arquivo. Por exemplo, o arquivo 'package.json' no diretório 'web' no repositório 'ykarma' na conta do GitHub 'rezendi' pode ser identificado exclusivamente como /web/package.json em rezendi_ykarma no arquivo. Tipos diferentes de arquivos têm finalidades diferentes. O arquivo GitHub consiste basicamente em arquivos de texto, ou seja, arquivos cujos dados representam a linguagem escrita. A maioria dos softwares é escrita em arquivos de texto contendo texto altamente estruturado conhecido como código-fonte. Um programa especial conhecido como compilador converte esse código-fonte legível por humanos em instruções legíveis por computador, conhecidas como código compilado ou código de máquina. -Arquivos que não são arquivos de texto, como arquivos que representam imagens visuais ou contêm código compilado, são freqüentemente chamados de arquivos binários. Infelizmente, esse é um termo enganoso, pois os arquivos de texto também têm, em última análise, 1s e 0s. Iremos nos referir a arquivos que não são arquivos de texto como arquivos não textuais. +Arquivos que não são arquivos de texto, como arquivos que representam imagens visuais ou contêm código compilado, são frequentemente chamados de arquivos binários. Infelizmente, esse é um termo enganoso, pois os arquivos de texto também têm, em última análise, 1s e 0s. Iremos nos referir a arquivos que não são arquivos de texto como arquivos não textuais. -Existem muitas maneiras de representar a linguagem humana escrita usando 1s e 0s. Por razões históricas, a maior parte do código-fonte foi originalmente escrita no que é conhecido como script latino. A escrita latina tem 26 caracteres básicos que são usados para representar palavras faláveis, cada um dos quais tem duas formas, maiúsculas e minúsculas. Ele também possui 10 dígitos para representar números. A escrita latina, junto com vários outros símbolos associados usados para indicar estrutura e outros conceitos, é codificada em 1s e 0s em um formato conhecido como 'ASCII', que pode representar 128 caracteres diferentes e por razões históricas foi dominante na maioria dos softwares por muitos anos . +Existem muitas maneiras de representar a linguagem humana escrita usando 1s e 0s. Por razões históricas, a maior parte do código-fonte foi originalmente escrita no que é conhecido como script latino. A escrita latina tem 26 caracteres básicos que são usados para representar palavras faláveis, cada um dos quais tem duas formas, maiúsculas e minúsculas. Ele também possui 10 dígitos para representar números. A escrita latina, junto com vários outros símbolos associados usados para indicar estrutura e outros conceitos, é codificada em 1s e 0s em um formato conhecido como 'ASCII', que pode representar 128 caracteres diferentes e por razões históricas foi dominante na maioria dos softwares por muitos anos. No entanto, a escrita latina é apenas um pequeno subconjunto das muitas maneiras como os humanos se expressam na linguagem escrita. Para suportar outros scripts, ao mesmo tempo que permite que todos os softwares escritos para usar ASCII continuem trabalhando sem alterações (um conceito conhecido como compatibilidade com versões anteriores), outro formato de dados conhecido como 'UTF-8' foi introduzido. @@ -95,7 +95,7 @@ Aqui, forneceremos uma visão geral de como descompactar um repositório arquiva 4. Descompactar o arquivo nos subarquivos separados que ele contém. Observe, entretanto, que os dados do arquivo são geralmente compreensíveis, embora confusos, mesmo se esta etapa for omitida. 5. Finalmente, converter cada um desses subarquivos - sequências de 1s e 0s que podem variar de bastante curtas a muito longas - em caracteres escritos, se forem arquivos de texto. - + ### Identificando a bobina e quadros específicos nos quais os dados do repositório são arquivados Cada rolo de filme começa com um líder de filme vazio e, em seguida, o Quadro de Referência Zero, que consiste em um retângulo preto sólido em um canto de um quadro vazio. O próximo quadro legível por humanos é o Quadro de Controle, com informações sobre o carretel. A seguir está o Índice, que por sua vez inclui uma lista de Arquivos de Dados do Usuário. @@ -112,21 +112,21 @@ Os detalhes de como decodificar os quadros do filme em dados binários são enco 1. Um guia para o programa de arquivamento GitHub (este documento) -2. GitHub descriptive index, a list and brief description of all the repositories on this reel +2. GitHub descriptive index, a list and brief description of all the repositories on this reel -3. Representation Information description +3. Representation Information description -4. Digital Preservation and How to Retrieve Data, an overview of data retrieval details +4. Digital Preservation and How to Retrieve Data, an overview of data retrieval details -5. Storage Medium description +5. Storage Medium description -6. Data Retrieval Technology +6. Data Retrieval Technology -7. Generic Preservation Reel Structure (reel format) +7. Generic Preservation Reel Structure (reel format) -8. Generic 4K Frame format description +8. Generic 4K Frame format description -9. Unboxing library description (for the QR codes) +9. Unboxing library description (for the QR codes) 10. Unboxing library source code @@ -140,7 +140,7 @@ Os detalhes de como decodificar os quadros do filme em dados binários são enco 15. XZ file format specification (for compression / decompression, described below) -The sixth of those items, the Data Retrieval Technology document, describes the requirements and processes to use a scanner to capture the data on a single digitally encoded frame of film and turn it into a form amenable to computer analysis. The eighth of them, the Generic 4K Frame format description, provides the technical information, including source code, required for a computer to take such a scanned image and convert it into binary data. +O sexto desses itens, o documento de **Tecnologia de Recuperação de Dados**, descreve os requisitos e processos para usar um scanner para capturar os dados de um único quadro digitalmente codificado de filme e transformá-los em uma forma passível de análise computacional. O oitavo deles, a descrição do **Formato Genérico de Quadro 4K**, fornece as informações técnicas, incluindo código-fonte, necessárias para que um computador pegue tal imagem digitalizada e a converta em dados binários. É teoricamente possível, em princípio, converter um repositório de dados codificados por QR em dados binários sem usar um computador. No entanto, seria extremamente difícil e provavelmente exigiria um esforço considerável de uma comunidade bem organizada durante muitas semanas, senão meses ou anos. Uma vez que o conteúdo dos repositórios são softwares destinados a serem executados em um computador, seu uso na ausência de um computador seria mínimo. @@ -148,21 +148,21 @@ No caso de os herdeiros deste arquivo não possuírem computadores, eles devem m ### Descompactando o arquivo nos subarquivos separados que ele contém -O arquivo binário para cada repositório está em um formato conhecido como TAR, para Tape Archive. Um arquivo TAR é essencialmente composto pelo agrupamento de vários arquivos, conectando o final de um ao início do próximo, como colar pedaços de papel em um único rolo. Um arquivo TAR pode incluir qualquer número de arquivos, de qualquer tamanho, divididos em qualquer número de diretórios e subdiretórios. +O arquivo binário para cada repositório está em um formato conhecido como **TAR**, para *Tape Archive*. Um arquivo TAR é essencialmente composto pelo agrupamento de vários arquivos, conectando o final de um ao início do próximo, como colar pedaços de papel em um único rolo. Um arquivo TAR pode incluir qualquer número de arquivos, de qualquer tamanho, divididos em qualquer número de diretórios e subdiretórios. -Cada subarquivo em um arquivo TAR é precedido por um registro de cabeçalho de 512 bytes, que atua como a fita na metáfora do scroll. Este registro de cabeçalho contém informações sobre o arquivo, como seu nome e tamanho. O fim do arquivo é indicado por pelo menos dois blocos consecutivos de 512 bytes. +Cada subarquivo em um arquivo TAR é precedido por um registro de cabeçalho de 512 bytes, que atua como a fita na metáfora do rolo. Este registro de cabeçalho contém informações sobre o arquivo, como seu nome e tamanho. O fim do arquivo é indicado por pelo menos dois blocos consecutivos de 512 bytes. Como os arquivos TAR são essencialmente apenas coleções de arquivos com registros de texto entre eles, se um arquivo TAR contiver todos os arquivos de texto, ele poderá ser tratado como um arquivo de texto. Se ele contiver uma mistura, pode ser tratado como um arquivo de texto que contém uma mistura de texto estruturado e significativo (os arquivos de texto constituintes) e linguagem incompreensível (os arquivos não textuais constituintes). É possível aninhar arquivos TAR dentro de arquivos TAR, um contêiner dentro de outro, e é assim que a maioria dos nossos dados arquivados são armazenados. Para qualquer repositório, o arquivo TAR externo conterá pelo menos: -* um único arquivo de metadados descompactado chamado META, que inclui o nome do repositório, nome da conta, descrição, idioma, contagem de estrelas e contagem de fork -* um arquivo compactado (veja abaixo) denominado COMMITS, que inclui o registro das mudanças feitas no repositório ao longo do tempo -* um arquivo chamado repo.tar.xz, um arquivo TAR compactado que contém o conteúdo real do repositório +- Um único arquivo de metadados descompactado chamado META, que inclui o nome do repositório, nome da conta, descrição, idioma, contagem de estrelas e contagem de forks +- Um arquivo compactado (veja abaixo) denominado COMMITS, que inclui o registro das mudanças feitas no repositório ao longo do tempo +- Um arquivo chamado **repo.tar.xz**, um arquivo TAR compactado que contém o conteúdo real do repositório Outros metadados, como wikis, páginas gh, questões e solicitações pull, também podem ser incluídos como arquivos compactados separados. -Detalhes específicos dos arquivos TAR e do software para codificá-los e decodificá-los podem ser encontrados nas Informações de Representação em cada bobina do arquivo. +Detalhes específicos dos arquivos TAR e do software para codificá-los e decodificá-los podem ser encontrados nas **Informações de Representação** em cada bobina do arquivo. ### Descompactando arquivos compactados em arquivos legíveis e descompactados @@ -210,9 +210,9 @@ Os idiomas mais usados no mundo são o inglês e o chinês. Por razões históri Não é garantido que os herdeiros deste arquivo saibam inglês, embora pareça um idioma particularmente provável de durar indefinidamente. Caso alguma orientação em outros idiomas seja útil, estamos incluindo as mais de 500 traduções disponíveis da Declaração Universal dos Direitos Humanos como um arquivo UTF-8 descompactado no início de cada rolo e também na Árvore Tecnológica. Esta declaração é uma lista dos direitos e liberdades de cada ser humano em nossa era, que nunca devem ser retirados. -### Linguagens de programação +# Linguagens de Programação -Linguagens de programação são aquelas usadas por humanos para comunicar instruções aos computadores. Eles são os idiomas nos quais o software é expresso. Outros humanos (treinados) também devem ser capazes de ler o software escrito em linguagens de programação, mas esse é um objetivo secundário. +Linguagens de programação são aquelas usadas por humanos para comunicar instruções aos computadores. Elas são os idiomas nos quais o software é expresso. Outros humanos (treinados) também devem ser capazes de ler o software escrito em linguagens de programação, mas esse é um objetivo secundário. Uma linguagem de programação é um conjunto de elementos predefinidos, a maioria dos quais são palavras, que podem ser organizados de uma maneira estruturada para instruir um computador a executar a ação especificada da maneira especificada. Uma coleção dessas instruções é conhecida como programa ou código-fonte. O código-fonte é essencialmente software em uma forma escrita congelada. @@ -220,64 +220,52 @@ Os programas geralmente são divididos em etapas discretas, conhecidas como inst Existem centenas de linguagens de programação diferentes, espalhadas por muitas formas, abordagens e filosofias diferentes. Alguns são compilados em arquivos binários separados, que são executados; algumas, conhecidas como linguagens "interpretadas", são efetivamente compiladas e executadas de uma só vez, sem estágio intermediário. A maioria das linguagens de programação modernas inclui bibliotecas de funções pré-escritas, e essas bibliotecas podem ser muito volumosas e elaboradas. Algumas das linguagens de programação mais populares de hoje incluem: -- C, uma das linguagens mais antigas e rápidas, mais universais e poderosas, simples em alguns aspectos, mas bastante limitada em outros, e nem sempre intuitiva, fácil de ler ou fácil de aprender. +- **C**: Uma das linguagens mais antigas e rápidas, mais universais e poderosas, simples em alguns aspectos, mas bastante limitada em outros, e nem sempre intuitiva, fácil de ler ou fácil de aprender. -- C ++, uma evolução mais complexa, abstrata e poderosa de C. +- **C++**: Uma evolução mais complexa, abstrata e poderosa de C. -- C #, uma evolução posterior compilada não em código de máquina binário, mas em um "tempo de execução" interpretado. +- **C#**: Uma evolução posterior compilada não em código de máquina binário, mas em um "tempo de execução" interpretado. -- Java, que é semelhante (mas anterior) ao C #, é talvez a linguagem mais usada atualmente. +- **Java**: Semelhante ao C#, é talvez a linguagem mais usada atualmente. -- JavaScript, bastante diferente de Java apesar da semelhança no nome, e também conhecido como 'ECMAScript', é uma linguagem inicialmente usada totalmente em um navegador da web, ou seja, um programa que buscava, interpretava e exibia dados de um computador remoto conhecido como Internet servidor; hoje, porém, é amplamente usado nesses servidores também. +- **JavaScript**: Bastante diferente de Java, usada inicialmente em navegadores da web, mas também amplamente utilizada em servidores. -- TypeScript, uma forma de JavaScript com regras mais rígidas para que erros, também conhecidos como bugs, sejam menos prováveis de entrarem nos programas. +- **TypeScript**: Uma forma de JavaScript com regras mais rígidas para reduzir erros. -- Python, uma linguagem elegante popular entre os cientistas, poderosa e uma boa primeira linguagem. +- **Python**: Uma linguagem elegante e popular entre cientistas, fácil de aprender e poderosa. -- Ruby, uma linguagem intuitiva cujas afirmações costumam ser quase como o inglês escrito. +- **Ruby**: Intuitiva, com sintaxe quase como o inglês escrito. -- Go, uma linguagem simples e poderosa que se destaca especialmente em programas paralelizados, ou seja, programas escritos de forma que várias funções sejam executadas independentemente ao mesmo tempo. +- **Go**: Destaca-se em programas paralelizados. -- Swift, uma nova linguagem usada para escrever para telefones e outros dispositivos usados por um bilhão de pessoas. +- **Swift**: Usada para desenvolver para dispositivos móveis. -- Rust, destinado a substituir o C, o que torna muito menos provável erros perigosos. +- **Rust**: Visa substituir o C, tornando os erros perigosos menos prováveis. -- PHP, uma linguagem simples usada para servidores de Internet. +- **PHP**: Usada principalmente em servidores de Internet. -- Lisp, uma linguagem muito antiga com uma abordagem de programação fundamentalmente diferente e baseada em funções. +- **Lisp**: Uma linguagem muito antiga com uma abordagem baseada em funções. -- SQL, um tipo muito diferente de linguagem usada para buscar dados de armazenamentos de dados estruturados e altamente eficientes conhecidos como bancos de dados. +- **SQL**: Usada para buscar dados de bancos de dados. -- Assembler (ou assembly), uma família de linguagens muito enigmática, limitada, mas rápida e poderosa em que existe uma relação direta entre as construções da linguagem e o código de máquina do computador em questão; pode ser considerado código semi-compilado. +- **Assembler (ou Assembly)**: Uma linguagem com relação direta ao código de máquina, rápida e poderosa. -## Desenvolvimento, dependências e código aberto +## Desenvolvimento, Dependências e Código Aberto ### Desenvolvimento -O processo de pegar um único arquivo de código-fonte simples e convertê-lo em impulsos elétricos dentro de um computador é extremamente complexo. Lidamos com essa complexidade usando camadas de abstração. Uma abstração conhecida como conjunto de instruções permite que a saída do código de máquina de um único compilador seja usada em muitos tipos diferentes de computadores. Um autor de código-fonte geralmente não precisa saber ou se preocupar com que tipo de computador, ou mesmo que conjunto de instruções, será usado para executar esse código; isso é abstraído pelo compilador. - -O software moderno é, por sua vez, muito mais complexo do que um único autor trabalhando em um único programa para um único computador. Consiste em muitos autores trabalhando em vários arquivos dentro de um único projeto, simultaneamente, geralmente usando várias linguagens de programação. Além disso, todo projeto depende de outros projetos separados e independentes como ferramentas e / ou componentes, enquanto esses projetos estão sendo ativamente trabalhados e, por sua vez, dependem de outros projetos. Fazer com que todas essas partes móveis funcionem juntas de maneira elegante e eficiente é o desafio do desenvolvimento de software moderno. +O processo de desenvolvimento de software é complexo, lidando com várias camadas de abstração. Uma dessas abstrações, o conjunto de instruções, permite que o código seja executado em diferentes tipos de computadores, sem que o autor precise se preocupar com os detalhes de cada máquina. -Quando vários autores de código-fonte, também conhecidos como desenvolvedores de software, trabalham em um único projeto, cada um tem seu próprio computador e uma cópia de todo o projeto em seu computador. Se cada um fizer alterações, cada um terá uma versão diferente do mesmo projeto. O processo de reconciliar várias versões de um projeto é conhecido como controle de versão. É gerenciado por software de controle de versão; neste arquivo, por um software chamado Git, após o qual o próprio GitHub é nomeado. Cada repositório neste arquivo é um repositório Git. +O desenvolvimento moderno envolve equipes de desenvolvedores, trabalhando em diferentes arquivos e utilizando várias linguagens de programação. Além disso, projetos geralmente dependem de outras bibliotecas e componentes, tornando o gerenciamento de dependências crucial para o sucesso. -O Git pode mesclar automaticamente diferentes versões de software em uma forma coerente com o mínimo de intervenção humana necessária. O Git também mantém um histórico completo que permite que você volte para uma versão anterior quando necessário. No entanto, para economizar espaço, os repositórios deste arquivo geralmente não incluem históricos Git. - -Quando vários desenvolvedores seguem um projeto em vários caminhos diferentes simultaneamente, isso é conhecido como ramificação de um projeto, e esses caminhos são conhecidos como ramificações. O branch principal acordado de um projeto é conhecido como o tronco ou o branch master. Git fornece um recurso que os desenvolvedores podem usar para resumir as diferenças entre dois ramos e propor unir os deles aos do outro. Isso é conhecido como solicitação de pull. O desenvolvimento de software moderno consiste basicamente em ramificar um projeto, escrever ou editar o software em seu branch e, quando concluído, enviar uma solicitação de pull para que seu trabalho seja reincorporado ao branch master. +**Controle de versão**, como o **Git**, é usado para coordenar o trabalho em equipe, reconciliando diferentes versões do código. O processo de **ramificação** e **mesclagem** permite que os desenvolvedores trabalhem de forma independente e, quando necessário, combinem suas alterações no código principal, através de **solicitações de pull**. ### Dependências -Essencialmente, todas as linguagens de programação apoiam a construção do trabalho de outros. Sem reutilizar o trabalho de terceiros, cada projeto seria enormemente mais difícil e muito mais lento, e poucos projetos seriam realmente usados no mundo real. - -Se o projeto A precisa incluir o projeto B para que A faça seu trabalho, então A é conhecido como dependente do projeto B e B é conhecido como uma dependência do projeto A. A pode ter muitas dependências, cada uma das quais pode ter muitas dependências próprias e assim por diante. Além disso, cada dependência é para uma versão específica, ou intervalo de versões, de um determinado projeto. A discriminação completa de todas as camadas múltiplas de dependências de um projeto é conhecida como sua árvore de dependências. - -Geralmente, as dependências são discriminadas dentro dos arquivos de código-fonte, geralmente no topo, e cada vez que o compilador ou interpretador encontra uma dependência, ele a procura em um conjunto de diretórios predefinidos. Como a árvore de dependências de um projeto pode ser muito complexa, às vezes ela é detalhada em sua totalidade em um único arquivo dentro de um projeto conhecido como lista de pacotes. Por exemplo, projetos Ruby podem ter um Gemfile para este propósito, e projetos JavaScript podem ter um arquivo package.json. Isso permite que um tipo de ferramenta conhecido como software de gerenciamento de pacotes busque todas as dependências de um projeto de uma vez, de um ou mais servidores da Internet. - -No caso deste arquivo, é provável que as dependências de qualquer projeto existam em outro lugar no arquivo. Para encontrar uma dependência no arquivo, é necessário primeiro descobrir o nome da dependência no código-fonte ou na lista de pacotes, cujos detalhes exatos variam de acordo com a linguagem e estrutura, e então usar o índice mestre no carretel do guia, ou, na sua ausência, os índices na frente de cada bobina, para determinar em qual bobina e quadro (s) o repositório em questão pode ser encontrado. - -### Código aberto +Cada projeto depende de outros projetos ou bibliotecas para funcionar corretamente. Quando um projeto depende de outro, ele é conhecido como **dependente**. Dependências são especificadas em arquivos como `Gemfile` (para Ruby) ou `package.json` (para JavaScript), e ferramentas de **gerenciamento de pacotes** ajudam a buscar e instalar as versões corretas dessas dependências. -Como a execução de um programa em um computador requer apenas o código de máquina compilado, é possível distribuí-lo enquanto mantém o código-fonte em segredo. Isso é conhecido como o modelo de código fechado. Nos primeiros dias da computação, o código-fonte era geralmente distribuído junto com o código de máquina, mas posteriormente, à medida que o software se tornou uma indústria lucrativa, o modelo de código-fonte fechado tornou-se mais comum. +### Código Aberto -Desde então, aprendeu-se que tornar o código-fonte público, para que qualquer pessoa possa copiar, ramificar e melhorar, é uma abordagem muito mais eficaz para o desenvolvimento de software. Mais pessoas que podem ler o código-fonte de um projeto significa mais pessoas para identificar possíveis necessidades e novos recursos úteis, mais pessoas que entendem o projeto o suficiente para contribuir com ele, mais pessoas que podem detectar bugs e enviar correções e mais pessoas para testar e verificar esse novo código funciona. +O **código aberto** é uma abordagem em que o código-fonte de um projeto é disponibilizado publicamente, permitindo que qualquer pessoa contribua, aprimore ou utilize o código. Isso cria uma comunidade de desenvolvedores interconectada, promovendo a colaboração e o avanço rápido dos projetos. -Em geral, o código fechado leva a comunidades menores, isoladas e fragmentadas que lutam para encontrar e adotar ideias novas e melhores. O código aberto leva a comunidades grandes e interconectadas, cada uma ajudando os projetos uns dos outros a crescer, florescer e ter sucesso, usando o trabalho uns dos outros como dependências e / ou reutilizando seu código e aprendendo uns com os outros. O software de código aberto é um kit de ferramentas para o uso coletivo de toda a humanidade, e quanto mais e melhores ferramentas tivermos, mais rápido e melhor poderemos progredir como espécie. +Em contraste, o **código fechado** mantém o código-fonte privado, limitando a colaboração e frequentemente resultando em comunidades menores e mais isoladas. O modelo de código aberto tem mostrado ser mais eficaz para o desenvolvimento de software, proporcionando ferramentas coletivas para o progresso humano.