# data[].attributes.body
Matheus O.
Artur
Sérgio
Gustavo
Jessica
Miguel
Angelo
Brenno's
- A PREENCHER

# data[].attributes.headline
Evolução das linguagens de programação ao longo do tempo.

# data[].attributes.subject
Evolução das linguagens de programação ao longo do tempo.

# data[].attributes.body
Bibliografia:

https://javaconceptoftheday.com/history-of-programming-languages/

https://pt.wikipedia.org/wiki/Hist%C3%B3ria_das_linguagens_de_programa%C3%A7%C3%A3o#

# data[].attributes.body
LINGUAGEM DE PROGRAMAÇÂO:
http://www.univasf.edu.br/~marcelo.linder/arquivos_pc/aulas/aula5.pdf
Acesso em: 24/08/2023

CÓDIGO DE MÁQUINA:
https://pt.wikipedia.org/wiki/Código_de_máquina
Acesso em: 24/08/2023

CÓDIGO DE OPERAÇÃO:
https://pt.wikipedia.org/wiki/Código_de_operação
Acesso em: 24/08/2023

https://www.facom.ufu.br/~claudio/Cursos/Antigos/ICC/Resources/Modulo04/lingua_program.pdf
Acesso em: 24/08/2023

CONCEITOS BÁSICOS DE MICROPROCESSADORES YOUTUBE:
https://www.youtube.com/watch?v=4ooSArWJ0zw
Acesso em: 24/08/2023

What is the difference between opcode, operand and instruction?:
https://www.quora.com/What-is-the-difference-between-opcode-operand-and-instruction
Acesso em: 24/08/2023

MACHINE CODE DEFINITION:
https://www.linfo.org/machine_code.html
Acesso em: 24/08/2023

# data[].attributes.body
An Introduction to Programming Paradigms. In: freeCodeCamp. Disponível em: https://www.freecodecamp.org/news/an-introduction-to-programming-paradigms/. Acesso em: 24/08/2023

FLOYD, R. W., In: RESONANCE, Maio 2005. Disponível em: https://www.ias.ac.in/article/fulltext/reso/010/05/0086-0098. Acesso em: 24/08/2023

Function vs Imperative Programming. In: LEARN.MICROSOFT.COM. Disponível em https://learn.microsoft.com/en-us/dotnet/standard/linq/functional-vs-imperative-programming. Acesso em: 24/08/2023

FUNCTIONAL PROGRAMMING. In: WIKIPÉDIA. Disponível em: https://en.wikipedia.org/wiki/Functional_programming. Acesso em: 24/08/2023

LOGIC PROGRAMMING. In: WIKIPÉDIA. Disponível em:
https://en.wikipedia.org/wiki/Logic_programming. Acesso em: 24/08/2023

OBJECT ORIENTED PROGRAMMING. In: Wikipédia. Disponível em: https://en.m.wikipedia.org/wiki/Object-oriented_programming. Acesso em: 23/08/2023
PROGRAMAÇÃO ORIENTADA A OBJETOS. In: Wikipédia. Disponível em: https://pt.m.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_orientada_a_objetos. Acesso em: 23/08/2023

PROGRAMMING PARADIGM. In: WIKIPÉDIA. Disponível em: https://en.wikipedia.org/wiki/Programming_paradigm. Acesso em: 24/08/2023

CEMPER, C., Spaghetti Code: Detangling Life and Work with Programmer Wisdom, 2017.  Imagem de capa editada.

# data[].attributes.body
Basicamente, um software é um conjunto de dados, programas e instruções, que atráves da manipulação do hardware, permite que o computador execute tarefas especificas.
Ao contrário do imaginário convencional, um software não é necessariamente um sistema operacional, existindo assim, vários tipos de softwares, que atráves de uma integração em um ambiente de execução, possam vir a ser um sistema operacional.

# data[].attributes.body
Paradigmas de programação são diferentes formas e estilos nos quais um determinado programa ou linguagem de programação pode ser organizado(a), sendo possível que uma linguagem seja classificada em mais de um paradigma. Cada paradigma consiste em certas estruturas, características, e opiniões sobre como problemas de programação comuns devem ser abordados.
Existem inúmeros paradigmas, porém eles comumente são divididos - de acordo com suas características - em duas áreas principais, sendo essas:

# data[].attributes.body
Software de Aplicativo: São programas destinados a realizar tarefas específicas para os usuários. Isso inclui desde processadores de texto, planilhas, navegadores web até jogos, aplicativos de edição de fotos, aplicativos de comunicação, entre outros.

Software de Utilitário: Ferramentas que auxiliam na manutenção, gerenciamento e otimização do sistema, como software antivírus, utilitários de limpeza de disco, ferramentas de backup, etc.

Software de Comunicação: Ferramentas que permitem a comunicação entre indivíduos, como aplicativos de mensagens, programas de videoconferência, clientes de e-mail, entre outros.

# data[].attributes.attachment_caption
Uma ilustração de uma tela de notebook contendo um exemplar de código de programação.

# data[].attributes.body
Programação se refere ao processo tecnológico de dizer ao computador que tarefas realizar em ordem a resolver problemas. Pode-se pensar em programação como uma colaboração entre humanos e computadores, qual os humanos criam instruções para um computador seguir (código) em uma linguagem que o computador possa entender.

Todas as pessoas do mundo deveriam aprender a programar um computador, porque isso nos ensina a pensar — Steve Jobs

# data[].attributes.body
Uma linguagem de programação é, grosso modo, uma forma de abstração para execução de comandos pelo computador. O uso de linguagens de programação facilita a tarefa de passar instruções para a máquina, e auxilia na inteligibilidade do algoritmo. As linguagens de programação possuem, cada uma a sua maneira, um conjunto rígido de normas sintáticas e semânticas, tais regras auxiliam, não só a uma melhor inteligibilidade e padronização, como também uma maior facilidade de tradução para linguagem de máquina.

# data[].attributes.attachment_link.readable_text
A linguagem de programação é um método padronizado, formado por um conjunto de regras sintáticas e semânticas, de implementação de um código fonte - que pode ser compilado e transformado em um programa de computador, ou usado como script interpretado - que informará instruções de processamento ao computador. Permite que um programador especifique precisamente quais os dados que o computador irá atuar, como estes dados serão armazenados ou transmitidos e, quais ações devem ser tomadas de acordo com as circunstâncias. Linguagens de programação podem ser usadas para expressar algoritmos com precisão.

O conjunto de palavras ( lexemas classificados em tokens), compostos de acordo com essas regras, constituem o código fonte de um software. Esse código fonte é depois traduzido para código de máquina, que é executado pelo microprocessador.

Uma das principais metas das linguagens de programação é que programadores tenham uma maior produtividade, permitindo expressar suas intenções mais facilmente do que quando comparado com a linguagem que um computador entende nativamente ( código de máquina). Assim, linguagens de programação são projetadas para adotar uma sintaxe de nível mais alto, que pode ser mais facilmente entendida por programadores humanos. Linguagens de programação são ferramentas importantes para que programadores e engenheiros de software possam escrever programas mais organizados e com maior rapidez.

Linguagens de programação também tornam os programas menos dependentes de computadores ou ambientes computacionais específicos (propriedade chamada de portabilidade). Isto acontece porque programas escritos em linguagens de programação são traduzidos para o código de máquina do computador no qual será executado em vez de ser diretamente executado. Uma meta ambiciosa do Fortran, uma das primeiras linguagens de programação, era esta independência da máquina onde seria executada.

O primeiro trabalho de linguagem de programação foi criado por Ada Lovelace, grande amiga de Charles Babbage. O projeto da primeira calculadora mecânica programável foi idealizado por Charles Babbage que, após gastar fortunas e um longo tempo, não conseguiu concretizar o projeto. A linguagem de programação ADA foi batizada em homenagem a esta primeira programadora.

Uma das primeiras linguagens de programação para computadores foi provavelmente Plankalkül, criada por Konrad Zuse na Alemanha Nazista, mas que teve pouco ou nenhum impacto no futuro das linguagens de programação.

O primeiro compilador foi escrito por Grace Hopper, em 1952, para a linguagem de programação A-0. A primeira linguagem de programação de alto nível amplamente usada foi Fortran, criada em 1954. Em 1957 foi criada B-0, sucessora da A-0, que daria origem a Flow-Matic (1958), antecessor imediato de COBOL, de 1959. O COBOL foi uma linguagem de ampla aceitação para uso comercial. A linguagem ALGOL foi criada em 1958-1960 O ALGOL-60 teve grande influência no projeto de muitas linguagens posteriores.

A linguagem Lisp foi criada em 1958 e se tornou amplamente utilizada na pesquisa na área de ciência da computação mais proeminentemente na área de Inteligência Artificial. Outra linguagem relacionada ao campo da IA que surge em 1972 é a linguagem Prolog, uma linguagem do paradigma lógico.

A orientação a objetos é outro marco importante na história das linguagens de programação. A linguagem Simula 67 introduz o conceito de classes. A linguagem Smalltalk expande o conceito de classes e se torna a primeira linguagem de programação que oferecia suporte completo à programação orientada a objetos. A linguagem C++ (originalmente conhecida como C com classes) populariza a orientação a objetos.

Diversas linguagens de programação surgiram desde então. Entre estas incluem-se C#, VB.NET, Java, Object Pascal, Objective-C, PHP, Python, SuperCollider, linguagem D e Ruby.

Uma linguagem de programação pode ser convertida, ou traduzida, em código de máquina por compilação ou interpretada por um processo denominado interpretação. Em ambas ocorre a tradução do código fonte para código de máquina.

Se o método utilizado traduz todo o texto do programa (também chamado de código), para só depois executar o programa, então diz-se que o programa foi compilado e que o mecanismo utilizado para a tradução é um compilador (que por sua vez nada mais é do que um programa). A versão compilada do programa tipicamente é armazenada, de forma que o programa pode ser executado um número indefinido de vezes sem que seja necessária nova compilação, o que compensa o tempo gasto na compilação. Isso acontece com linguagens como Pascal e C.

Se o texto do programa é executado à medida que vai sendo traduzido, como em JavaScript, BASIC, Python ou Perl, num processo de tradução de trechos seguidos de sua execução imediata, então diz-se que o programa foi interpretado e que o mecanismo utilizado para a tradução é um interpretador. Programas interpretados são geralmente mais lentos do que os compilados, mas são também geralmente mais flexíveis, já que podem interagir com o ambiente mais facilmente.

Embora haja essa distinção entre linguagens interpretadas e compiladas, as coisas nem sempre são tão simples. Há linguagens compiladas para um código de máquina virtual (sendo esta máquina virtual apenas mais um software, que emula a máquina virtual sendo executado em uma máquina real), como Java (compila para a plataforma Java) e C# (compila para a plataforma CLI). E também há outras formas de interpretar em que os códigos fontes, ao invés de serem interpretados linha-a-linha, têm blocos "compilados" para a memória, de acordo com as necessidades, o que aumenta a performance dos programas quando os mesmos módulos são chamados várias vezes, técnica esta conhecida como JIT.

Como exemplo, podemos citar a linguagem Java. Nela, um compilador traduz o código java para o código intermediário (e portável) da JVM. As JVMs originais interpretavam esse código, de acordo com o código de máquina do computador hospedeiro, porém atualmente elas compilam, segundo a técnica JIT o código JVM para código hospedeiro.

A tradução é tipicamente feita em várias fases, sendo as mais comuns a análise léxica, a análise sintática (ou ), a geração de código e a otimização. Em compiladores também é comum a geração de código intermediário.

Programação estruturada é uma forma de programação de computadores que preconiza que todos os programas possíveis podem ser reduzidos a apenas três estruturas: sequência, decisão e repetição. Um dos primeiros a preconizar a programação estruturada foi Haskell B. Curry Tendo, na prática, sido transformada na Programação modular, a Programação estruturada orienta os programadores para a criação de estruturas simples em seus programas, usando as sub-rotinas e as funções. Foi a forma dominante na criação de software entre a programação linear e a programação orientada por objetos. Apesar de ter sido sucedida pela programação orientada por objetos, pode-se dizer que a programação estruturada ainda é marcantemente influente, uma vez que grande parte das pessoas ainda aprendem programação através dela. Porém, a orientação a objetos superou o uso das linguagens estruturadas no mercado.

Programação modular é uma forma de programação no qual o desenvolvimento das rotinas de programação é feito através de módulos, que são interligados entre si através de uma interface comum. Foi apresentado originalmente pela Information & Systems Institute, Inc. no National Symposium on Modular Programming em 1968, com a liderança de Larry Constantine. Exemplos de linguagens que orientaram seu projeto para este aspecto estão as linguagens Modula-2, desenvolvida por Niklaus Wirth e a Modula-3.

Orientação a objetos, também conhecida como Programação Orientada a Objetos (POO), ou ainda em inglês Object-Oriented Programming (OOP) é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos. O extensivo uso de objetos, particularmente em conjunção com o mecanismo de herança, caracteriza o estilo de programação orientada a objetos. Em alguns contextos, prefere-se usar modelagem orientada ao objeto (UML), em vez de programação. De fato, o paradigma "orientação a objetos" tem bases conceituais e origem no campo de estudo da cognição, que influenciou a área de inteligência artificial e da lingüística no campo da abstração de conceitos do mundo real. Na qualidade de método de modelagem, é tida como a melhor estratégia, e mais natural, para se eliminar o "gap semântico", dificuldade recorrente no processo de modelar o mundo real, no domínio do problema, em um conjunto de componentes de software que seja o mais fiel na sua representação deste domínio. Facilitaria a comunicação do profissional modelador e do usuário da área alvo, na medida em que a correlação da simbologia e conceitos abstratos do mundo real e da ferramenta de modelagem (conceitos, terminologia, símbolos, grafismo e estratégias) fosse a mais óbvia, natural e exata possível. A análise e projeto orientados a objetos tem como meta identificar o melhor conjunto de objetos para descrever um sistema de software. O funcionamento deste sistema se dá através do relacionamento e troca de mensagens entre estes objetos. Na programação orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software. Cada classe determina o comportamento (definido nos métodos) e estados possíveis ( atributos) de seus objetos, assim como o relacionamento com outros objetos.

Em matemática, problemas de Programação Linear são problemas de otimização nos quais a função objetivo e as restrições são todas lineares. Programação Linear é uma importante área da otimização por várias razões. Muitos problemas práticos em pesquisa operacional podem ser expressos como problemas de programação linear. Certos casos especiais de programação linear, tais como problemas de network flow e problemas de multicommodity flow são considerados importantes o suficiente para que se tenha gerado muita pesquisa em algoritmos especializados para suas soluções. Vários algoritmos para outros tipos de problemas de otimização funcionam resolvendo problemas de PL como sub-problemas. Historicamente, ideias da programação linear inspiraram muitos dos conceitos centrais de teoria da otimização, tais como dualidade, decomposição, e a importância da convexidade e suas generalizações.

As linguagens de programação podem ser classificadas e sub-classificadas de várias formas.

A ACM mantém um sistema de classificação com os seguintes subitens:

Linguagens aplicativas, ou de aplicação

Linguagens concorrentes, distribuídas e paralelas

Linguagens de fluxo de dados

Linguagens de projeto

Linguagens extensíveis

Linguagens de montagem e de macro

Linguagens de microprogramação

Linguagens não determinísticas

Linguagens não procedurais

Linguagens orientadas a objeto

Linguagens de aplicação especializada

Linguagens de altíssimo nível

Quanto ao paradigma

Diferentes linguagens de programação podem ser agrupadas segundo o paradigma que seguem para abordar a sua sintaxe e semântica. Os paradigmas se dividem em dois grandes grupos: imperativo e declarativo.

Paradigmas Imperativos

Os paradigmas imperativos são aqueles que facilitam a computação por meio de mudanças de estado. Se dividem em:

Paradigmas Declarativos

Os paradigmas declarativos são aqueles nos quais um programa especifica uma relação ou função. Se dividem em:

O paradigma funcional. Linguagens deste paradigma não incluem qualquer provisão para atribuição ou dados mutáveis Na programação funcional, o mapeamento entre os valores de entrada e saída são alcançados mais diretamente. Um programa é uma função (ou grupo de funções), tipicamente constituída de outras funções mais simples. Exemplos de linguagens deste paradigma são as linguagens Lisp, Scheme e Haskell

O paradigma da programação lógica. Este paradigma se baseia na noção de que um programa implementa uma relação ao invés de um mapeamento. Exemplos de linguagens deste paradigma são o Prolog e a linguagem Gödel.

Quanto a estrutura de tipos

As linguagens de programação podem ser definidas de duas formas ortogonais quanto a sua estrutura de tipos.

Forte ou Fracamente Tipada

Fracamente tipada, como PHP e Smalltalk, onde o tipo da variável muda dinamicamente conforme a situação.

Fortemente tipada, como Java, Ruby e Python onde o tipo da variável, uma vez atribuído, se mantém o mesmo até ser descartada da memória.

Dinâmica ou Estaticamente Tipada

Dinamicamente tipada, como SNOBOL, APL, Awk, Perl, Python e Ruby, onde o tipo da variável é definido em tempo de execução.

Estaticamente tipada, como Java e C, onde o tipo da variável é definido em tempo de compilação.

Linguagem de programação de baixo nível trata-se de uma linguagem de programação que segue as características da arquitetura do computador. Assim, utiliza somente instruções que serão executadas pelo processador, em contrapartida as linguagens de alto nível que utilizam de instruções abstratas. Nesse sentido, as linguagens de baixo nível estão diretamente relacionadas com a arquitetura do computador. Como exemplos, temos Binário e Assembly

As linguagens de baixo nível são divididas em duas categorias: primeira geração e segunda geração:

1. A linguagem de primeira geração, ou , é o código de máquina. É a única linguagem que um microprocessador pode executar nativamente. O código de máquina pode ser escrito diretamente por um editor hexadecimal. Atualmente é raro que um programador trabalhe com o código de máquina diretamente, preferindo o uso da linguagem Assembly.

2. A linguagem de segunda geração, ou , é a linguagem Assembly. É considerada de baixo nível pois embora não seja uma linguagem nativa do microprocessador, ainda assim utiliza apenas de instruções reais do processador. Desta forma a linguagem Assembly não contém nenhum tipo de instrução abstrata, onde cada instrução é convertida diretamente para a instrução equivalente em código de máquina pelo montador.

Linguagem de programação de médio nível, que possui símbolos que podem ser convertidos diretamente para código de máquina (goto, expressões matemáticas, atribuição de variáveis), mas também símbolos complexos que são convertidos por um compilador. Exemplo: C, C++

Linguagem de programação de alto nível, é uma linguagem com um nível de abstração relativamente elevado, longe do código de máquina e mais próximo à linguagem humana. Desse modo, as linguagens de alto nível não estão diretamente relacionadas à arquitetura do computador. O programador de uma linguagem de alto nível não precisa conhecer características do processador, como instruções e registradores. Essas características são abstraídas na linguagem de alto nível.

A Linguagem de alto nível é inteligível pelo ser humano e não executável diretamente pela máquina, no nível da especificação de algoritmos, como Pascal, Fortran, ALGOL, Java e SQL.

Exemplos

Por se tratar de uma classificação subjetiva, isto é, sem limites bem definidos, não é possível afirmar que "determinada linguagem pode ser mais humana que outra". Apesar disso, por questão de praticabilidade e objetividade, a classificação geralmente se limita em "linguagem de alto nível" e "linguagem de baixo nível".

A classificação das linguagens de programação em gerações é uma questão que apresenta divergências de autor para autor. Segundo Maclennan, as linguagens se dividem em cinco gerações com as seguintes características:

Primeira geração - São linguagens onde suas estruturas de controle são aparentemente orientadas a máquina. As instruções condicionais não são aninhadas e dependem fortemente de instruções de desvio incondicional como o GOTO. Uma linguagem típica desta geração é a linguagem Fortran.

Segunda geração - São linguagens onde as estruturas de controle são estruturadas de forma a minimizar ou dispensar o uso de instruções GOTO. A segunda geração elaborou melhor e generalizou diversas estruturas de controle das linguagens de primeira geração. Uma das grandes contribuições desta geração foi suas estruturas de nomes, que eram hierarquicamente aninhadas. Isto permitiu melhor controle de espaços de nomes e uma eficiente alocação dinâmica de memória. Uma linguagem típica desta geração é o Algol 60.

Terceira geração - São linguagens que dão ênfase a simplicidade e eficiência. Uma linguagem típica desta geração é a linguagem Pascal. As estruturas de dados desta geração mostram um deslocamento da máquina para a aplicação. As estruturas de controle são mais simples e eficientes.

Quarta geração - Esta geração é essencialmente o sinônimo para linguagens com abstração de dados. A maioria das linguagens desta geração focam na modularização e no encapsulamento. Uma linguagem típica desta geração é a linguagem Ada.

Quinta geração - Nesta geração, Maclennan agrupa diversos paradigmas como a orientação a objeto e o paradigma funcional, paradigma lógico.

Henri Bal e Dick Grune, já apresentam uma classificação em gerações de forma diferente, enfatizando mais o aspecto da aplicação. São elencadas 6 gerações.

Doris Apleby e Julius J. VandeKopple dividem as linguagens em quatro gerações que coincidem com as quatro primeiras gerações elencadas por Henri Bal e Dick Grune.

Existem várias linguagens de programação; de acordo com o Índice Tiobe, as 20 mais populares são:

1. Edsger Dijkstra em seu livro A Discipline of Programming assim define as linguagens de programação: "Eu vejo uma linguagem de programação principalmente como um veículo para a descrição (potencialmente muito sofisticada) de mecanismos abstratos" Dijkstra, Edsger W (1976). A Discipline of Programming (em inglês). Englewood Cliffs, Nova Jérsia: Prentice Hall. p. 9. 217 páginas. ISBN 0-13-215871-X

2. Para um mapa abrangente da história das linguagens de programação ver: "Mapa da história das linguagens de programação" (em inglês)

3. ou rodar, como se diz no jargão da computação

4. Citação de Knuth do memorando de Curry: "O primeiro passo no planejamento do programa é o de analisar a computação em certas partes principais, chamadas aqui de divisões, de modo que o programa possa ser sintetizado a partir delas. As partes principais devem ser tais que, ou pelo menos algumas delas, são cálculos independentes em si próprios, ou modificações desses cálculos." em: Knuth, Donald E (2003). "1-The Early Development of Programming Languages". Selected Papers on Computer Languages (em inglês). Ventura Hall, Stanford: CSLI. p. 17. 594 páginas. ISBN 1-57586-382-0

5. Sussman et al. menciona que as linguagens de altíssimo nível são programadas em termos de sentenças declarativas. Em: Abelson, Harold; Sussman, Gerald Jay; Sussman, Julie (1996). Structure and Interpretation of Computer Programs (em inglês) 2ª ed. Cambridge, Massachusetts: McGraw-Hill. p. 22. 640 páginas. ISBN 0-07-000484-6

6. Muitos autores classificam as linguagens quanto ao grau de abstração em apenas dois: alto e baixo. Alguns autores como Dennis Ritchie e Kenneth Thompson classificam algumas linguagens como C e CPL tanto como baixo nível como alto nível como em: Appleby, Doris; VandeKopple, Julius J (1997). Programming Languages. Paradigm and Practice (em inglês) 2ª ed. New York: McGraw-Hill. p. 132-134. 444 páginas. ISBN 0-07-005315-4

Referências

ORGANICK, E. I.;FORSYTHE, A. I.;PLUMMER, R. P. (1978). Programming Language Structures. New York: Academic Press. 659 páginas. ISBN 0-12-528260-5

# data[].attributes.attachment_link.title
Linguagem de programação - Wikipédia, a enciclopédia livre

# data[].attributes.attachment_link.description
A linguagem de programação é um método padronizado, formado por um conjunto de regras sintáticas e semânticas, de implementação de um código fonte - que pode ser compilado e transformado em um programa de computador, ou usado como script interpretado - que informará instruções de processamento ao computador.

# data[].attributes.headline
Linguagem de máquina: Uma breve visão geral

# data[].attributes.subject
Linguagem de máquina: Uma breve visão geral

# data[].attributes.body
A linguagem de máquina (Machine code) é expressa em código binário e está intimamente ligada à arquitetura e conjunto de instruções de um computador. Ela proporciona controle granular sobre o hardware e permite uma execução extremamente rápida. No entanto, não é legível para humanos, o que dificulta a depuração e o desenvolvimento de software de uso geral. Os programadores utilizam assemblers para traduzir a linguagem de montagem em código de máquina. Compreender a linguagem de máquina é importante para cientistas da computação, programadores de sistemas integrados e aqueles que trabalham com sistemas operacionais ou controladores de dispositivos. No entanto, no desenvolvimento moderno de software, o uso de linguagens de alto nível é mais comum. A linguagem de máquina ainda é crucial para aplicações que requerem controle absoluto do hardware e máximo desempenho.

# data[].attributes.attachment_caption
Linha do tempo das linguagens de programação.

# data[].attributes.headline
Evolução das linguagens de programação ao longo do tempo.

# data[].attributes.subject
Evolução das linguagens de programação ao longo do tempo.

# data[].attributes.body
A primeira linguagem de programação foi criada pelo engenheiro alemão, Konrad Zuze, que foi feita entre os anos de 1942 e 1945. O Plankalkul, como era chamada, foi desenvolvida na década de 1940, mas só foi implementada anos depois.

Na década de 1950, surgem as primeiras linguagens modernas, como FORTRAN, LISP e COBOL.

As linguagens mais conhecidas atualmente, como Python e Java, foram criadas na década de 1990. Nessa época as primeiras redes sociais estavam surgindo e a internet havia chegado no Brasil.

Bibliografia:
History Of Programming Languages (javaconceptoftheday.com)

História das linguagens de programação – Wikipédia, a enciclopédia livre (wikipedia.org)

# data[].attributes.body
• Imperativa, no qual o programador, a fim de concluir um objetivo, instrui a máquina em como mudar seu estado, passo-a-passo. Declarando, assim, a ordem em que as operações ocorrem. Alguns paradigmas relacionados incluem:

- Procedural (ou Procedimental), que agrupa as instruções em procedimentos;
- Orientado a objetos, baseado no conceito de “objetos”, que podem conter dados e códigos. Neste paradigma, programas de computador são projetados a partir de objetos que interagem entre si.

# data[].attributes.body
* Na Programação Declarativa, o programador meramente declara as propriedades desejadas no resultado final, porém não a forma como a computação deve ser feita. Alguns subtipos mais conhecidos são:

F uncional, em que o resultado desejado é declarado como o valor de uma série de aplicações de funções. Os programas são tratados como uma sequência de avaliações de funções sem estado;

Lógica, em que o resultado é  declarado como a resposta a uma pergunta sobre um sistema de fatos e regras. A programação sob este paradigma pode ser vista como uma dedução controlada;

Reativa, em que o resultado desejado é declarado com data streams e propagação de mudanças. Este paradigma foi proposto como forma de simplificar a criação de interfaces de usuário interativas.

# data[].attributes.body
O conceito de paradigmas de programação tem a denominação citada explicitamente pela primeira vez no artigo "The Paradigms of Programming" de 1979, de Robert W. Floyd, no qual ele reconhece as inadequações no ensino, na variedade de paradigmas conhecidos, e no suporte oferecido pelas linguagens de programação então existentes.

O próprio conceito por sua vez, é inspirado no conceito de 'mudança de paradigma' do filósofo da ciência estadunidense Thomas S. Kuhn, o qual reconhecia que grandes avanços científicos tinham sido causados por estas mudanças de paradigmas, que alteravam completamente a forma de organizar e executar a prática científica e, mais fundamentalmente, a própria experiência subjetiva dos fenômenos empíricos pelos cientistas.

Alinhado com o pensamento de Kuhn, Robert Floyd cita ainda em seu texto que: "os avanços continuados em programação irão requerer invenção, elaboração e comunicação continuadas de novos paradigmas".

# data[].attributes.body
É um conjunto de softwares responsável por criar uma ponte entre o dispositivo (computador, celular, console de videogame, tablet...) e o usuário. O sistema operacional é responsável por todos os recursos presentes em um sistema, desde hardware e sistemas de arquivos até programas de terceiros.

• Pra que servem?

O sistema operacional é o primeiro programa executado quando ligamos o computador ou dispositivo. Ele é responsável por transformar comandos dos dispositivos de entrada e saída(como por exemplo mouse,teclado,impressora) e instruções do sistema em linguagem de máquina para o processador,que traduz para código binário,executa os comandos e retorna uma resposta adequada para o usuário. Além disso, é responsável por gerenciar o tempo de uso de cada terefa no processador e a distribuição da memória.

bibliografia:
https://youtu.be/yjfB-asZVF4?si=X8Yf94Yo-Mr5Sqtu
https://tecnoblog.net/responde/o-que-e- um-sistema-operacional/
https://www.alura.com .br/artigos/sistemas-operacionais-conceito-estrutura

# data[].attributes.body
A ciência da computação se dedica ao estudo dos sistemas, técnicas, metodologias e instrumentos computacionais, bem como suas aplicações tecnológicas.

A mesma abrange um leque extenso de áreas de atuação no mercado de trabalho. Abaixo estarão listados alguns exemplos:

Data Science;

Segurança da Informação;

Programação para Jogos.

Referência:
https://br.indeed.com/conselho-de-carreira/desenvolvimento-de-carreira/areas-atuacao-computacao#:~:text=Ela%20%C3%83%C2%A9%20dividida%20em%20quatro,da%20computa%C3%83%C2%A7%C3%83%C2%A3o%20e%20computa%C3%83%C2%A7%C3%83%C2%A3o%20cient%C3%83%C2%ADfica

# data[].attributes.body
A ciência de dados é o estudo dos dados para extrair insights significativos para os negócios. Ela é uma abordagem multidisciplinar que combina princípios e práticas das áreas de matemática, estatística, inteligência artificial e engenharia da computação para analisar grandes quantidades de dados. Essa análise ajuda os cientistas de dados a fazer e responder perguntas como o que aconteceu, por que aconteceu, o que acontecerá e o que pode ser feito com os resultados.

Atualmente, grandes empresas trabalham com altos volumes de dados. A manipulação desses dados para a geração de análises, otimizações e resultados é de suma importância para o bom desempenho da mesma.

A ciência de dados ainda engloba outras áreas como:

Inteligência Artificial: Implementada em modelos de machine learning e usada principalmente para análises preditivas e prescritivas.

Computação em Nuvem: Garante flexibilidade e capacidade de processamento para análises de dados avançadas.

IOT: Referente aos vários dispositivos que, ao se conectarem automaticamente à internet, geram e coletam dados que podem ser usados para iniciativas de ciência de dados.

Computação Quântica: Computadores quânticos são utilizados para realizar cálculos complexos em alta velocidade. É usada por cientistas de dados qualificados para criar algoritmos quantitativos complexos.

Tais fatores tornam o profissional em Data Science bastante requisitado nos dias de hoje.

Referência:
https://aws.amazon.com/pt/what-is/data-science/

# data[].attributes.body
Software proprietário

È aquele cuja cópia, redistribuição ou modificação são proibidos pelo autor em determinado grau. É necessário solicitar permissão ou pagar para utilizar.
Ex.: Microsoft Office, Adobe Cloud, ect.

Freeware

Software proprietário que é disponibilizado gratuitamente, mas não pode ser modificado.

Ex.: LibreOffice, Linux Mint, ect.

GNU: General Public License (GPL)

É uma licença para software livre com maior utilização. Essa licença se baseia em quatro liberdades:

1. executar o programa para qualquer propósito;

2. estudar seu funcionamento e adaptá-lo;

3. copiar e redistribui-lo;

4. modificar e aperfeiçoar o programa.

Ex.: VirtualBox, WordPress, ect.

# data[].attributes.attachment_caption
Programa em hexadecimal que imprime "Hello world!" em linguagem de maquina

# data[].attributes.body
Linguagem de maquina é a linguagem de mais baixo nivel, constituida por um codigo binario, 0s e 1s, o que a torna impraticavel de ser lida diretamente, o nome é dado pois é a forma como o hardware entende e executa as informaçoes como pela CPU(unidade de processamento central).

# data[].attributes.body
As instruções em código de maquina são feitas de bytes, conjunto de 8 bits, por sua vez bit é a menor unidade de informação podendo ser 0 ou 1. Cada byte significa algo para o processador, como cada byte não possui significado inerente é necessário a criação de um conjunto de regras para determinar o significado de cada byte. Esse conjunto de regras é definido pelo OPCODE(código de operação), cada modelo de CPU possui seu próprio OPCODE determinado pelo fabricante.

# data[].attributes.body
OPCODE são instruções internas em linguagem de maquina, entretanto representadas em hexadecimal, do processador que permitem-no realizar operações primitivas tais como operações aritméticas( soma, subtração, multiplicação e divisão), leitura e armazenamento(armazena ou lê valore dentro da memoria)...

MNEMÔNICOS são palavras chave que representam um OPCODE, assim facilitando a programação.
A partir daqui a linguagem ASSEMBLY começa a ganhar forma.

# data[].attributes.body
Linguagens de programação de baixo nível tem como característica um baixo nível de abstração em suas instruções, facilitando a execução de comandos implementados em nível de hardware. Ela surge como uma primeira camada de abstração entre a linguagem de máquina e uma linguagem com uma escrita mais humana. Dado o seu baixo nível de abstração e as diferentes implementações de comandos em hardwares distintos linguagens de montagem sofrem pequenas alterações de acordo com a arquitetura do processador que executará os comandos.
Passando agora para as linguagens de alto nível, é perceptível o maior nível de abstração entre os comandos executados pelo hardware e a escrita. Apesar de algumas linguagens, como o próprio C, ainda usarem comando de alocação de memória e ponteiros para endereços específicos, elas facilitam o processo de construção de algoritmos, pois permitem uma sintaxe mais humana e uma menor preocupação em como as instruções que serão passadas, auxiliando a tarefa de desenvolvimento.

# data[].attributes.attachment_link.title
Assembly language vs. machine code — 6502 part 3

# data[].attributes.body
Uma história sobre ferramentas e paradigmas.

# data[].attributes.body
Segurança da informação é uma série de ações adotadas estrategicamente para controlar e evitar riscos de roubo, danos e perdas dos dados, dispositivos, servidores, sistemas e redes. Sua função é identificar, registrar e combater as ameaças que surgem no meio do caminho.

Com o avanço da tecnologia houve também o aumento de riscos cibernéticos. Empresas necessitam, mais do que nunca, de um bom gerenciamento e boas práticas para a proteção de seus dados.

Dentre as áreas de atuação do profissional de segurança da informação estão:

Segurança Corporativa: O profissional responsável por esta área deve criar planos e estratégias para proteger os dados da empresa, realizando auditorias nos sistemas, monitorando e controlando as políticas de segurança da organização.

Desenvolvimento de Software de Segurança: Este profissional é responsável pelo desenvolvimento de produtos e serviços para aumentar e aprimorar a segurança das informações, além de analisar códigos maliciosos.

Segurança Forense: Esta área atua diretamente com a pesquisa, coleta e realização de laudos de provas digitais para investigações policiais, principalmente de crimes cibernéticos.

Inteligência de Estado: O especialista dessa área atua em órgãos de segurança do governo, como as agências de inteligência.

Pela sua importância no contexto moderno, as vagas na área são bastante exigentes, necessitando em alguns casos de 5 anos de experiência e certificações adequadas.

Referências:
https://www.docusign.com.br/blog/seguranca-da-informacao
https://promovesolucoes.com/profissional-de-seguranca-da-informacao-como-esta-o-mercado-de-ti/#:~:text=Um%20especialista%20em%20segurança%20da,segurança%20e%20arquiteto%20de%20segurança.

# data[].attributes.body
Hardware não executa o código como o escrevemos, para ele ser inteligível para o processador, devemos traduzi-lo para um conjunto de instruções que sejam aceitas pelo hardware específico, para esse propósito existem os compiladores. Não importa se o código será compilado antes de ser executado, ou se será compilado enquanto a execução ocorre, ele sempre será traduzido em um conjunto de instruções em linguagem de máquina para uma arquitetura específica. A diferença entre uma linguagem compilada como o C e uma interpretada como o Python é como essa compilação ocorre. Em C o código é integralmente traduzido para binário executável antes da sua execução, já em Python essa tradução ocorre durante a execução do próprio programa.

# data[].attributes.attachment_link.title
Linguagem Compilada vs Interpretada | Qual é melhor?

# data[].attributes.body
A programação, nos tempos atuais, tem ficado cada vez mais existente no dia a dia das pessoas, mesmo que elas nem percebam; ela está presente no alarme do celular, nas balanças de super mercado, no controle de estoques nas empresas e até mesmo na agropecuária. No estado atual pode se dizer que a programação atingiu com força a tecnologia que a humanidade depende, pois se ela simplesmente sumisse muitos empregos, produções e entretetimento iriam parar.

# data[].attributes.body
Bibliografia:
Áreas da Computação:
https://br.indeed.com/conselho-de-carreira/desenvolvimento-de-carreira/areas-atuacao-computacao#:~:text=Ela%20%C3%83%C2%A9%20dividida%20em%20quatro,da%20computa%C3%83%C2%A7%C3%83%C2%A3o%20e%20computa%C3%83%C2%A7%C3%83%C2%A3o%20cient%C3%83%C2%ADfica

Data Science:
https://aws.amazon.com/pt/what-is/data-science/

Segurança da Informação:
https://www.docusign.com.br/blog/seguranca-da-informacao
https://promovesolucoes.com/profissional-de-seguranca-da-informacao-como-esta-o-mercado-de-ti/#:~:text=Um%20especialista%20em%20segurança%20da,segurança%20e%20arquiteto%20de%20segurança.

Programação para Jogos:
https://horadecodar.com.br/programador-de-jogos/

# data[].attributes.body
• Windows: criado pela empresa Microsoft, o sistema Windows  é o mais utilizado nos tempos modernos sendo normalmente instalado na maior parte dos computadores, essa popularidade se deve a sua facilidade de manuseio, sua linguagem de programação tem como base C e C++

• Linux: um sistema de código aberto ou seja qualquer pessoa pode quebra distribuir  ou modificar o código de forma gratuita, mesmo sendo um sistema gratuito ele é pouco usado de maneira doméstica, porém é mais utilizado em empresas já que é prático e pode ser personalizado facilmente, sua linguagem de programação tem como base C e assembly

• Android: criado pela open handset alliance (OHA) , que é uma junção de empresas colaborativas tendo um destaque maior a google. o Android  é um sistema operacional de código aberto feito principalmente para celulares, tem como inspiração o núcleo linux, sua linguagem de programação tem como base java, java script, C, C++ dentre outras.

• IOS: O maior concorrente do Android, feito pela Apple para aparelhos móveis, normalmente IPhones, não podem ser terceirizados, ou seja só podem ser utilizados por aparelhos feitos pela empresa, sua linguagem de programação tem como base Swift, C++, C, Assembly e Objective-C

- Bibliografia

https://miro.medium.com/v2/resize:fit:698/0*7FjJW89gWct6ISLH.jpg

https://www.alura.com.br/artigos/sistemas-operacionais-conceito-estrutura#:~:text=Fundamentalmente%2C%20um%20sistema%20operacional%20%C3%A9,macOS%2C%20UNIX%2C%20entre%20outros.

https://www.significados.com.br/android/

https://pt.wikipedia.org/wiki/Wikip%C3%A9dia:P%C3%A1gina_principal

# data[].attributes.attachment_link.title
Como Ser um Profissional de Segurança da Informação? (PRIMEIROS PASSOS E OPORTUNIDADES)

# data[].attributes.body
Ou seja:

• Representação binária: As instruções em linguagem de máquina são expressas em código binário, em que cada instrução corresponde a um padrão específico de 0s e 1s. Estes padrões são concebidos para serem compreendidos pela CPU do computador.

• Específica do hardware: A linguagem de máquina está intimamente ligada à arquitetura e ao conjunto de instruções de um determinado computador ou processador. Cada família de CPU tem a sua própria linguagem de máquina, o que faz com que os programas de código de máquina não possam ser transportados entre diferentes arquiteturas.

• Abstração de baixo nível: A linguagem de máquina fornece o nível mais granular de controle sobre o hardware de um computador. Os programadores têm de trabalhar com conceitos de baixo nível, como endereços de memória, registos e manipulação de dados.

• Velocidade de execução: Os programas escritos em linguagem de máquina são executados diretamente pela CPU, o que resulta numa execução de código extremamente rápida e eficiente. Isto é crucial para aplicações de desempenho crítico.

• Ilegível para humanos: A linguagem de máquina não se destina a ser lida ou escrita por humanos. Não possui as mnemónicas e os símbolos de fácil leitura que se encontram nas linguagens de programação de nível superior.

• Assembler: Os programadores utilizam frequentemente um assembler - um tipo de ferramenta de software - para escrever código de máquina de forma mais conveniente. Os assemblers traduzem mnemónicas (associações) legíveis por humanos (linguagem de montagem) para código de máquina.

• Desafios da depuração: A depuração de programas de código de máquina pode ser excecionalmente difícil devido à falta de abstrações de alto nível. Os programadores recorrem frequentemente a ferramentas e auxiliares de depuração para interpretar o código de máquina e identificar problemas.

• Importância histórica: Embora o desenvolvimento de software moderno ocorra principalmente em linguagens de alto nível, compreender a linguagem de máquina é crucial para os cientistas informáticos, os programadores de sistemas integrados e os que trabalham em sistemas operativos ou controladores de dispositivos.

# data[].attributes.body
O programador de jogos é responsável pela criação de códigos que darão forma ao jogo e suas mecânicas.

Para isso, o profissional na área deve se especializar em uma engine(Ex: Unity, Unreal Engine, Construct) e sua respectiva linguagem de programação(Ex: C#, C++, HTML5) para resolver problemas e criar soluções para o desenvolvimento de jogos.

Das áreas de atuação da programação em jogos, destacam-se:

Programador de Gameplay: Trabalha na implementação das mecânicas e sistemas do jogo.

Programador de IA: Desenvolve a inteligência artificial que controla Npcs e outros elementos dentro do jogo.

Programador de Gráficos: Foca no código que gera os componentes visuais do jogo como: shaders, iluminação, efeitos especiais etc.

Programador Chefe ou Lead Programmer: Gerencia a equipe de programadores, toma decisões técnicas de alto impacto e é responsável pela manutenção do código.

Referência:
https://horadecodar.com.br/programador-de-jogos/

# data[].attributes.attachment_link.readable_text
October Headline: C# is getting closer to Java

The gap between C# and Java never has been so small. Currently, the difference is only 1.2%, and if the trends remain this way, C# will surpass Java in about 2 month's time. Java shows the largest decline of -3.92% and C# the largest gain of +3.29% of all programming languages (annually). The two languages have always been used in similar domains and thus have been competitors for more than 2 decades now. Java's decline in popularity is mainly caused by Oracle's decision to introduce a paid license model after Java 8. Microsoft took the opposite approach with C#. In the past, C# could only be used as part of commercial tool Visual Studio. Nowadays, C# is free and open source and it's embraced by many developers. There are also other reasons for Java's decline. First of all, the Java language definition has not changed much the past few years and Kotlin, its fully compatible direct competitor, is easier to use and free of charge. -- Paul Jansen CEO TIOBE Software

The TIOBE Programming Community index is an indicator of the popularity of programming languages. The index is updated once a month. The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. Popular search engines such as Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings. It is important to note that the TIOBE index is not about the best programming language or the language in which most lines of code have been written.

The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system. The definition of the TIOBE index can be found here.

Other programming languages

The complete top 50 of programming languages is listed below. This overview is published unofficially, because it could be the case that we missed a language. If you have the impression there is a programming language lacking, please notify us at tpci@tiobe.com. Please also check the overview of all programming languages that we monitor.

The Next 50 Programming Languages

The following list of languages denotes #51 to #100. Since the differences are relatively small, the programming languages are only listed (in alphabetical order).

4th Dimension/4D, ABC, ActionScript, Apex, APL, Ballerina, bc, CL (OS/400), Clean, Clipper, CLIPS, Clojure, Crystal, Curl, Eiffel, Elixir, Erlang, Forth, Groovy, Hack, Icon, IDL, Io, J, J#, LabVIEW, Ladder Logic, LiveCode, ML, Modula-2, MQL5, NATURAL, Nim, OCaml, OpenEdge ABL, PL/I, PostScript, Pure Data, Q, Racket, Raku, REXX, RPG, Smalltalk, SPARK, SQR, Tcl, TOM, VHDL, Wolfram

Very Long Term History

To see the bigger picture, please find below the positions of the top 10 programming languages of many years back. Please note that these are average positions for a period of 12 months.

There are 2 important remarks here:

There is a difference between "Visual Basic" and "(Visual) Basic" in the table above. Until 2010, "(Visual) Basic" referred to all possible dialects of Basic, including Visual Basic. After some discussion, it has been decided to split "(Visual) Basic" into all its dialects such as Visual Basic .NET, Classic Visual Basic, PureBasic, and Small Basic, just to name a few. Since Visual Basic .NET has become the major implementation of Visual Basic, it is now called "Visual Basic".

The programming language SQL was added to the TIOBE index in 2018 after somebody pointed out that SQL is Turing Complete. So although this language is very old, it has only a short history in the index.

Programming Language Hall of Fame

The hall of fame listing all "Programming Language of the Year" award winners is shown below. The award is given to the programming language that has the highest rise in ratings in a year.

Bugs & Change Requests

This is the top 5 of most requested changes and bugs. If you have any suggestions how to improve the index don't hesitate to send an e-mail to tpci@tiobe.com.

1. Apart from "<language> programming", also other queries such as "programming with <language>", "<language> development" and "<language> coding" should be tried out.

2. Add queries for other natural languages (apart from English). The idea is to start with the Chinese search engine Baidu. This has been implemented partially and will be completed the next few months.

3. Add a list of all search term requests that have been rejected. This is to minimize the number of recurring mails about Rails, JQuery, JSP, etc.

4. Start a TIOBE index for databases, software configuration management systems and application frameworks.

5. Some search engines allow to query pages that have been added last year. The TIOBE index should only track those recently added pages.

Yes, the only condition is to refer to its original source "www.tiobe.com".

If a language meets the criteria of being listed (i.e. it is Turing complete and has an own Wikipedia entry that indicates that it concerns a programming language) and it is sufficiently popular (more than 5,000 hits for +"<language> programming" for Google), then please write an e-mail to tpci@tiobe.com.

We spent a lot of effort to obtain all the data and keep the TIOBE index up to date. In order to compensate a bit for this, we ask a fee of 5,000 US$ for the complete data set. The data set runs from June 2001 till today. It started with 25 languages back in 2001, and now measures more than 150 languages once a month. The data are available in comma separated format. Please contact sales@tiobe.com for more information.

Well, you can do it either way and both are wrong. If you take the sum, then you get the intersection twice. If you take the max, then you miss the difference. Which one to choose? Suppose somebody comes up with a new search term that is 10% of the original. If you take the max, nothing changes. If you take the sum then the ratings will rise 10%. So taking the sum will be an incentive for some to come up with all kinds of obscure terms for a language. That's why we decided to take the max.

The proper way to solve this is is of course to take the sum and subtract the intersection. This will give rise to an explosion of extra queries that must be performed. Suppose a language has a grouping of 15 terms, then you have to perform 32,768 queries (all combinations of intersections). So this seems not possible either... If somebody has a solution for this, please let us know.

# data[].attributes.attachment_link.description
The gap between C# and Java never has been so small. Currently, the difference is only 1.2%, and if the trends remain this way, C# will surpass Java in about 2 month's time. Java shows the largest decline of -3.92% and C# the largest gain of +3.29% of all programming languages (annually).

# data[].attributes.attachment_link.title
GAMEDEV: O que é preciso saber para ser um desenvolvedor de jogos? 🕹