Tabela de conteúdos

Linguagens De Programação


As linguagens de programação são métodos padronizados, agrupados por sintaxes e semânticas que formam um programa, com o intuito de dar comandos/instruções para o computador. Elas permitem que os programadores definam claramente os dados que um computador processa, como são armazenados e como são transmitidos, além de permitirem que os programadores escrevam algoritmos de maneira precisa.

As linguagens foram criadas para facilitar a interação humano computador, portanto, um código escrito pelo ser humano é traduzido para linguagem de máquina que assim instrui o computador ao que fazer. Pois imagine se o humano tivesse que escrever longas linhas de código, no entanto, completamente em binário (linguagem de máquina), isso seria péssimo para manutenções e o grau de aprendizagem se elevaria muito, a ponto de simplesmente não ter pessoas para trabalharem na área. Portanto, as linguagens de programação são projetadas com sintaxes de nível superior que são menos complexas de entender por programadores humanos, sendo ferramentas importantíssimas para a produtividade e rapidez.

Quando falamos de linguagens de programação muitos já devem ter se questionado: “como são criadas ou como funcionam as linguagens?”. A resposta dessa pergunta é muito ampla e pode ser respondida de diversas formas. Uma linguagem de programação não passa de um conjunto de regras para um programa que transformará o arquivo fonte em um novo conjunto de instruções que pode ser usado por uma máquina para executar o programa escrito no arquivo, esses programas são chamados de processadores de linguagem. Um tipo de processador de linguagem é o compilador(Compiladores), em um compilador ele recebe um arquivo fonte, o processa, e tem como saída um arquivo que pode ser executado pela máquina. Outro tipo de processador de linguagem é o interpretador, onde ele recebe o arquivo fonte de programa e as entradas para esse programa e executa-o utilizando as entradas passadas.

Existem certas linguagens de programação cujo objetivo não é facilitar na escrita e manutenção do código, elas são criadas com intuitos diferentes, seja ela por pura arte, piada ou por curiosidade de ver se é possível usar algum conceito para criar programas.

Linguagens que marcaram a computação


Fortran

Criada por John Backus, é considerada a linguagem de programação mais antiga em uso hoje em dia. A linguagem de programação foi criada para computação científica, matemática e estatística de alto nível. O Fortran ainda hoje é usado em alguns dos supercomputadores mais avançados do mundo.

Smalltalk

Linguagem que expandiu o conceito de classes e se tornou a primeira linguagem de programação que oferece suporte completo à programação orientada a objetos. Ele introduziu uma variedade de aspectos de linguagem de programação que são linguagens visíveis de hoje, como Python, Java e Ruby. Empresas como a Leafly, Logitech e CrowdStrike usam Smalltalk em suas pilhas de tecnologia.

C

A linguagem C foi desenvolvida por Dennis Ritchie nos Laboratórios Bell Telephone para uso com o sistema operacional Unix. Foi chamado de C porque se baseava numa linguagem anterior chamada 'B'. Esta linguagem transformou o rumo de milhares de linguagens da programação, sendo base para quase todas que precederam sua criação, como por exemplo: C#, Java, JavaScript, Perl, PHP, Python…

Java

Uma equipe de programadores liderada por James Gosling na empresa Sun Microsystems e criaram a linguagem Java, uma das linguagens modernas da computação, que se tornou uma das mais importantes no mercado até os dias atuais.

Javascript

Linguagem de programação interpretada e estruturada, criada por Brendan Eich, uma linguagem que revolucionou a web, junto com HTML e CSS, compõem as 3 principais linguagens do World Wide Web.Quase todos os principais sites usam JavaScript. Gmail, Adobe Photoshop, e Mozilla Firefox são alguns exemplos bem conhecidos.

PHP

Outra linguagem que veio para revolucionar a web, desenvolvido por Rasmus Lerdorf, PHP que significa ‘Hypertext Preprocessor’, foi utilizada para construção e manutenção de páginas web dinâmicas, assim como o desenvolvimento do lado do servidor. Algumas das maiores empresas de todo o mundo usam PHP incluindo Facebook, Wikipedia, Digg, WordPress, e Joomla.

Grandes Nomes da história das linguagens de programação


Ada Lovelace

A primeira linguagem de programação foi criada por Ada Lovelace em 1843. Ela usou papel para escrever o primeiro algoritmo para um computador, pois não havia computadores na época. Desde então, muitas linguagens de programação foram desenvolvidas e usadas para diferentes propósitos. Compreender a história das linguagens de programação requer uma compreensão de sua origem: o primeiro algoritmo escrito para um computador.

Grace Hopper

Grace Hopper criou o primeiro compilador em 1952, para a linguagem A-0, e em 1958 ela criou a linguagem chamada Flow-Matic, que logo foi inspiração para a criação da linguagem Cobol que teve grande influência na tecnologia.

John McCarthy

Criador da linguagem Lisp em 1958, que se tornou amplamente utilizada na área de pesquisa de ciência da computação, principalmente na área de Inteligência Artificial e se tornou uma das linguagens importantes para o desenvolvimento da computação.

Kristen Nygaard e Ole-Johan Dahl

Eles criaram a primeira linguagem que introduziu o conceito de classes, chamada Simula 67, que mais a frente se tornou inspiração para a linguagem Smalltalk que expande o conceito de classes e se torna a primeira linguagem de programação que oferece suporte completo à programação orientada a objetos.

Aplicações


Linguagens de programação são como ferramentas, algumas fazem mais de uma coisa outras servem para trabalhos específicos. As chamadas linguagens de domínio específico são criadas para certos problemas específicos, como por exemplo SQL que é uma linguagem de programação para fazer consulta em bancos de dados. Algumas linguagens são de uso geral, ou seja, foram criadas ou começaram a ser usadas para diversas áreas. Por exemplo, a linguagem python, que hoje em dia é muito utilizada para Ciência de Dados, desenvolvimento web e aprendizado de máquina. Vale dizer que a linguagens de domínio específico muitas vezes não são Turing Complete, que significa tem o mesmo poder computacional de uma Visão geral e pode manipular de outras formas diferentes os dados recebidos. Entretanto, as linguagens de propósito geral são sempre Turing complete pois devem ser capazes de manipular os dados de formas diferentes da que foram criadas inicialmente.

Exemplos de linguagens de domínio específico:

SQL:               Consulta e modificação de bancos de dados relacionais;
Makefile:          Automatização a construção de executáveis e/ou bibliotecas;
YACC Grammars:     Criação de analisadores para um analisador lexical;
GameMaker Laguage: Programação dentro da plataforma GameMaker.

Exemplos de linguagens de uso geral:

Python:            Linguagem de programação de alto nível;
Java:              Linguagem de programação orientada a objetos;
C:                 Linguagem de programação compilada de propósito geral;
Rust:              Linguagem de programação multiparadigma compilada.

Então se pode dizer que a aplicação de uma linguagem de programação depende de quem está usando ela e como ela será usada. É claro que podemos utilizar javascript para manter um Banco de Dados porém seria ineficiente, uma vez que a linguagem é de propósito geral e ao lidar com uma grande quantidade de dados queremos a forma mais eficiente e rápida de consultar ou alterar o banco de dados e então podemos utilizar SQL, caso esse banco de dados seja relacional.

Características das linguagens de programação


Conceitos da programação

Programação estruturada

A programação estruturada é uma forma de programação de computador que afirma que todos os programas possíveis podem ser reduzidos a três estruturas: sequência, decisão e repetição. Um dos primeiros defensores da programação estruturada foi Haskell B. Curry. A programação estruturada instrui os programadores a usarem subrotinas e funções para criar estruturas simples em seus programas.Esta forma foi muito predominante na área de criação de software entre programação linear e programação orientada a objetos. Apesar do sucesso da programação orientada a objetos, pode-se dizer que a programação estruturada ainda tem um impacto significativo, pois a maioria das pessoas ainda aprende a programar por meio dela. No entanto, a orientação a objetos superou o uso de linguagens estruturadas no mercado.

Programação orientada a objetos

A programação orientada a objetos é um dos mais famosos paradigmas de programação, utilizada em diversas áreas como criação de jogos, servidores, simulações, etc. O início do paradigma foi com uma linguagem chamada simula, que foi criada por Kristen Nygaard e Ole-Johan Dahl para criar um modelo de simulações. O paradigma se baseia na criação de Classes e Objetos, onde as classes são como moldes para criar objetos específicos que têm o mesmo formato especificado em uma classe. Ao criar uma classe é preciso declarar quais os tipos de dados e funções a classe terá, ao se criar um objeto daquela classe dizemos que ele é uma instância da classe que foi criada. Criando a classe Carro podemos dizer quais os atributos, ou tipo de dados, que o objeto que for criado terá. Além dos atributos devemos criar os métodos que manipulam os dados de um objeto ou manipulam os dados passados por parâmetro. Exemplo:

Na imagem podemos ver que a classe não contém dados, apenas o formato deles. E possui também os métodos, que nesse caso são utilizados para poder alterar algum atributo do objeto. Alguns outros conceitos de programação orientada a objetos são os quatros princípios base de orientação a objetos, que são: Abstração, Encapsulamento, Herança e Polimorfismo.

Outros conceitos de programação

Além desses tópicos, podemos citar Programação linear/não-linear e Programação modular, conceitos importantes dentro do tema e que trazem formas diferentes de estruturação das linguagens e como podem ser feitos diversos tipos de programas usando esses exemplos de conceitos da programação.

Paradigmas De Programação

Paradigmas de programação são formas de classificar linguagens de programação, os dois principais grupos são Imperativas e Declarativas. A maior parte das linguagens de programação caem no paradigma imperativo, algumas delas são: C, Pascal, Java, etc. Algumas linguagens de paradigma declarativo são: Haskell, SQL, Scheme, OCaml, etc. O paradigma declarativo está relacionado ao COMO o programa de ser executado, ou seja, manejar diretamente os dados e qualquer falha de memória ou controle de fluxo são de responsabilidade do programador. Quanto a linguagens de paradigma declarativa estão mais preocupadas em dizer O QUE o programa faz, porém a forma como a memória ou se o programa vai ser o melhor ou não não estão dentro do objetivo do paradigma, pois não importa como ou qual vai ser o estado da máquina mas sim o resultado final.

Um exemplo é por exemplo implementar um código para alterar todos os itens de uma lista de acordo com uma função recebida. Em uma linguagens de paradigma imperativo, o programa iria usar uma estrutura de repetição e aplicaria a função em cada elemento da lista, enquanto em uma linguagem declarativa é muito comum existir uma função que faça isso, porém não se sabe de que forma ou como ela faz essa aplicação da função, importa apenas que ela faz e retorna a lista alterada.

Apesar de parecerem opostos o paradigma declarativo é apenas um conceito abstrato do paradigma imperativo, pois se vermos todo o processo que o programa deve passar antes de ser executado, ele deve ser transformado em linguagem de máquina para depois ser executado, sendo assim transformado em instruções para uma CPU que estão agindo sobre o princípio imperativo. Quase todas as linguagens de programação podem abstrair a forma de COMO um programa ou código deve ser executado e aplicar um pouco do paradigma declarativo, pois ele é mais fácil de entender e de modularizar.

Tipos de linguagens

Dentro deste assunto fantástico podemos encontrar vários tipos de linguagens de programação, como por exemplo:

Estrutura de tipos

Existem algumas formas de estruturação de tipos nas variadas linguagens de programação, nas quais podem ser definidas de duas formas ortogonais quanto a sua estrutura de tipos: forte ou fracamente tipada e dinâmica ou estaticamente tipada.

- Fortemente tipadas (Java, Ruby e Python):

Linguagens fortemente tipadas, são aquela em que todas suas variáveis devem conter tipos específicos para cada uma, e geralmente estas linguagens são estaticamente tipadas, onde uma vez em que ela foi declarada, não poderá trocar de tipo até o fim do código

-Fracamente tipadas (PHP e Smalltalk)

Esses tipos de linguagens não que não se importam com o tipo das variáveis, o que acarreta a serem linguagens dinamicamente tipadas, onde o tipo das variáveis podem mudar a qualquer momento, possibilitando que os programadores não tenham que fazer conversões de tipos (cast).

- Dinamicamente tipada (SNOBOL, APL, Awk, Perl, Python e Ruby):

Quando uma variável é declarada com um tipo ela pode receber outro a qualquer momento. Isso causa muita confusão fazendo com que muitos pensem que linguagens dinamicamente tipadas são a mesma coisa que linguagens fracamente tipadas. Acontece que a linguagem não permite que uma variável numérica realize uma operação com uma variável do tipo string, mesmo que o conteúdo do texto seja composto por números causando um erro

- Estaticamente tipada (Java e C)

Linguagens estaticamente tipadas são aquelas que ao se declarar uma variável, seu tipo será o mesmo e não poderá ser trocado.

Impacto Social

As linguagens de programação mudaram a sociedade como um todo desde quando foram inventadas. A criação dos computadores; automatização de tarefas que antes eram feitas pelos seres humanos; crescimento nas áreas da pesquisa como um todo; aumento da comunicação global; criação da internet; avanço dos computadores; surgimento dos celulares e etc. Esses citados e outros milhares de avanços da tecnologia foram consequências das linguagens de programação, até mesmo o surgimento de linguagens melhores com o passar do tempo. Claro que não poderíamos deixar de lado os malefícios que ela também nos trouxe, por exemplo: o controle mundial das Big Techs, como Facebook e Google, que possuem uma base enorme de dados de bilhões de pessoas, podendo usar essas informações como quiserem, para o controle da sociedade como um todo, outro exemplo seriam os hackers que usufruem das tecnologias e linguagens de programação, para burlarem sistemas e prejudicarem os usuários. Entretanto, os avanços da tecnologia não devem ser resumidos somente em coisas ruins, pois trouxe muitos benefícios em milhares de áreas da sociedade.

Referências


1. Linguagem de Programa, Wikipedia. Disponível em: <https://pt.wikipedia.org/wiki/Linguagem_de_programa%C3%A7%C3%A3o> Acesso em: 05/09/2022

2. História da Programação, devskiller. Disponível em: <https://devskiller.com/pt/historia-da-programacao-idiomas> Acesso em: 05/09/2022

3. AHO, Alfred V.; LAM, Monica S.; SETHI, Ravi; ULLMAN, Jeffrey D.. Compilers: Principles, Techniques, & Tools. 2. ed. Addison Wesley, 2006

4. WIRTH, Niklaus. Compiler Construction. Addison-Wesley Pub. Co, 2005.

5. Esoteric programming language, Wikipedia. Disponível em: <https://en.wikipedia.org/wiki/Esoteric_programming_language> Acesso em: 05/09/2022

6. Domain-specific language, Wikipedia. Disponível em: <https://en.wikipedia.org/wiki/Domain-specific_language> Acesso em: 05/09/2022

7. General-purpose programming language, Wikipeia. Disponível em: <https://en.wikipedia.org/wiki/General-purpose_programming_language> Acesso em: 05/09/2022

8. Make (software), Wikipedia. Disponível em: <https://en.wikipedia.org/wiki/Make_(software)> Acesso em: 05/09/2022

9. Turing completeness, Wikipedia. Disponível em: <https://en.wikipedia.org/wiki/Turing_completeness> Acesso em: 05/09/2022

10. Linguagem tipada, Wikipedia. Disponível em: <https://pt.wikipedia.org/wiki/Linguagem_tipada> Acesso em: 05/09/2022

11. Declarative vs imperative, dev.to. Disponível em: <https://dev.to/ruizb/declarative-vs-imperative-4a7l> Acesso em: 05/09/2022

12. Imperative programming, Wikipedia. Disponível em: <https://en.wikipedia.org/wiki/Imperative_programming> Acesso em: 05/09/2022

13. Difference Between Imperative and Declarative Programming, GeeksforGeeks. Disponível em: <https://www.geeksforgeeks.org/difference-between-imperative-and-declarative-programming/> Acesso em: 05/09/2022

14. Declarative programming, Wikipedia. Disponível em: <https://en.wikipedia.org/wiki/Declarative_programming> Acesso em: 05/09/2022

15. Object-oriented programming (OOP), educative.io. Disponível em: <https://www.educative.io/blog/object-oriented-programming> Acesso em: 05/09/2022

16. Object-oriented programming, Wikipedia. Disponível em: <https://en.wikipedia.org/wiki/Object-oriented_programming> Acesso em: 05/09/2022

17. Simula, Wikipedia. Disponível em: <https://en.wikipedia.org/wiki/Simula> Acesso em: 05/09/2022

18. Programming paradigm, Wikipedia. Disponível em: <https://en.wikipedia.org/wiki/Programming_paradigm> Acesso em: 05/09/2022