Pode começar. Pronto. Pode falar seu nome.
Ah, desculpa, gente. Darl Domingos de Almeida. Pessoal, vocês sabiam que programar é um super poder?
Você sabiam que quem sabe programar tem o super poder de transformar ideias em realidade? Mas olha que interessante, a habilidade de programar está assentada sobre o conteúdo que é que faz parte do corpo da disciplina de linguagens de programação. Meu nome é Nar Domingos de Almeida.
Eu sou graduado em computação pela Unemat. Sou graduado em matemática pela UNIPER e sou mestre em Ciências e Tecnologias Espaciais pelo ITA. Esse semestre eu vou guiar vocês através da disciplina linguagens de programação.
E hoje nós vamos começar com uma aula bem mais curta do que o normal. E o título é Linguagem de programação, uma visão geral sobre definição, classificação e domínios de aplicação. O objetivo da nossa aula, pessoal, não é Decoeba.
O objetivo da nossa aula é formar uma visão geral da disciplina de linguagem de programação. O objetivo ao final da aula de hoje é que vocês tenham em mente tudo que vai ser estudado ao longo da disciplina, tá bom? Não precisa anotar e nem tentar decorar, porque no final da aula eu vou passar o mapa mental com o resumo dessa aula para vocês, tá bom?
Para nós começarmos, o que que é uma linguagem de programação, pessoal? Por definição, uma linguagem de programação é uma linguagem formal projetada para comunicar instruções ao computador. Ela é composta por regras sintáticas e semânticas que determinam a forma e o significado das construções usadas para escrever programas.
Professor, que definição linda, eu não entendi nada. Vamos por partes. O que que é uma linguagem formal?
É uma forma de comunicação estruturada. Estruturada e que tem muito claro e definida o quê? Um conjunto de símbolos e um conjunto de regras.
O conjunto de símbolos nada mais é do que o alfabeto da linguagem. O conjunto de regras é a gramática da linguagem, que entre outras coisas guarda as regras para que a gente possa combinar símbolos para formar palavras e combinar palavras para formar sentenças. Professor, a gente vai estudar esse aspecto formal de linguagem e programação nessa disciplina?
Não. Esse aspecto é estudado com uma disciplina chamada linguagens formais e autônomos, tá? Professor?
Mas você falou de regras sintática e semântica. Isso vem lá da da língua portuguesa. Eu lembro esta aula de português.
É verdade. Elas fazem parte do conteúdo da gramática. E é importante a gente lembrar e revisitar a aula de português.
Por quê? Porque a sinta de uma linguagem diz respeito à estrutura das frases e das orações. A semântica é o significado atribuído a essas construções.
Por exemplo, se a gente pegar o comando if na linguagem C, a sintasse desse comando é palavra reservada if, entre parênteses uma expressão lógica seguido por uma instrução, fecha com ponto e vírgula. Qual que é a semântica, o significado atribuído a essa construção? Se o valor lógico dessa expressão for verdadeiro, essa instrução vai ser realizada.
Professor, essa instrução não tinha que tá entre chaves? Não, se for uma instrução de uma linha única, mas a gente vai falar sobre detalhes de sintasse ao longo da disciplina, tá bom, pessoal? Mas se uma linguagem de programação é projetada para comunicar instruções ao computador, a gente precisa ter muito claro qual a linguagem do computador.
Qual que é a linguagem do computador? Vocês já estudaram na disciplina de arquitetura e organização de computadores que a linguagem do computador é o sistema binário? O computador entende, ele manipula zeros e uns.
E eu sei que vocês sabem que o que tá percorrendo o circuito eletrônico do meu computador, do seu smartphone, não são zeros e uns. É um sinal elétrico na forma de variação de tensão que é convertido para um sinal elé digital e manipulado pelo processador como zeros e us. Por que que você tá falando disso, professor?
Porque se a gente pensar no primeiro computador eletrônico apresentado, o N1 lá em 46, a programação desse monstrão, pessoal, era feita diretamente do hardware. Era a combinação desses cabos e essas chaves que estabelecia a programação desse equipamento. Quem tiver curiosidade de ver como que isso era feito, sugiro que assista o filme O Jogo da Impitação.
Excelente. Conta a biografia do Alan Turing, pai da computação. Vale a pena demais, mas a primeira linguagem de programação foi surgir, a primeira linguagem relevante surgiu para nós em 1949, a linguagem assembly.
De lá para cá, várias outras linguagens foram apresentadas e se consolidaram acompanhando a evolução do hardware, que é notória e gritante, e também as demandas científicas e de mercado, tá, professor? Mas a gente tem tanta linguagem de programação assim? Calma.
De acordo com o ranking do I3E publicado em agosto do ano passado, a gente tem 63 linguagens de programação em uso atualmente, algumas com número muito pouco expressivo de usuários, mas se tem alguém usando, tem aplicação. E por que que eu tô falando disso? Porque na ciência, sempre que uma família de elementos tem um número muito grande de objetos, são estabelecidas formas de classificação.
As linguagens de programação podem ser classificadas em função de diferentes aspectos. Ao longo do semestre, nós vamos estudar vários deles e hoje a gente vai vislumbrar mais ou menos o que que significa alguns deles, tá? a começar por nível de abstração.
Entenda a abstração como distância entre o programador e os detalhes de hardware subjacentes. Professor, não entendi. Vamos fazer uma analogia com dirigir um carro.
Alto nível de abstração quer dizer que o motorista só precisa se preocupar com dirigir, passar a marcha, acelerar e frear. baixo nível de abstração quer dizer que para realizar cada uma dessas operações, ele tem que acionar os componentes relacionados a essas operações. Por exemplo, numa linguagem de baixo nível como assembly, para mostrar um simples Hello Word na tela, o programador ele tem que fazer uso de comandos simbólicos ou minemônicos para controlar registradores, endereços de memória, passar diretiva de processamento para mostrar um Hello Word na tela.
Enquanto que numa linguagem de alto nível como Python, que além de ter uma estrutura muito mais próximo da nossa linguagem natural, print é uma palavra inglês que no português significa imprima. Ele vai imprimir Hello Word na onde? Na saída padrão, que é o monitor.
Mas o programador tem que se preocupar com esses detalhes de controle de hardware? Não. Por quê?
Porque numa linguagem de alto nível, isso é responsabilidade da linguagem e do seu compilador ou interpretador. Vocês vão encontrar na literatura alguns autores que apresentam linguagens sendo de nível intermediário para fazer menção especialmente as linguagens C e C+ mais. Por quê?
Porque elas têm características de linguagens de alto nível. Elas são muito próximas da nossa linguagem natural. Olha aqui um print aqui, ó.
intem fácil pra gente ler e entender. O programador ele fica livre de se preocupar com detalhes de hardware. E por outro lado, essas linguagens oferecem um recurso chamado ponteiros.
Para que que serve um ponteiro? Para manipular endereço de memória principal em tempo de execução. E isso é um detalhe de hardware, característica de linguagem de baixo nível.
Por isso, linguagem de nível intermediário, tá? Mas a gente vai falar mais sobre isso aqui. Ã, bom, se uma linguagem de programação, pessoal, se ela é projetada para comunicar instruções ao computador, e nós sabemos que a maior parte das linguagens de programação tem uma estrutura muito próximo da nossa linguagem de linguagem natural, print, int, main, main, vente principal, a maioria das linguagens de programação, estrutura próxima da nossa linguagem natural, enquanto que a linguagem de máquina é qual?
O sistema binário. Você concorda que tem uma distância entre essas duas estruturas de comunicação? Para fazer a interface de comunicação entre essas duas estruturas distintas, nós vamos fazer uso de compiladores ou interpretadores.
Eu gosto de usar uma analogia para mostrar a diferença entre esses dois. E a analogia é a seguinte: imagina que eu preciso conversar com o meu gerente de projeto. Ele é, ele tá lá na China, tá lá em Bequim, que ele só fala mandar, o Angli.
Eu não falo mandar, mas eu preciso me comunicar com ele por e-mail. O que que eu posso fazer? Eu escrevo uma mensagem em português, salvo num arquivo de texto, uso uma ferramenta de tradução qualquer que eu quiser, copio a tradução no outro arquivo, certo?
E o que que eu vou mandar pro meu gerente projeto? O arquivo com a tradução que tá na língua dele. Isso é análogo à compilação.
Por quê? Porque na compilação nós vamos escrever um código usando uma linguagem de alto nível que a gente chama de código fonte. Vai passar pro processo de compilação e vai dar origem a um segundo arquivo aqui em código de máquina, que é o que o computador entende.
Esse código de máquina é o que é lido pelo processador, executado para mostrar um resultado na tela. Essa etapa de compilação nós vamos ver na disciplina brevemente, porque ela é estudada em profundidade numa disciplina chamada compiladores. Professor, uma disciplina só para isso?
Sim. Por quê? Porque a compilação para gerar um arquivo de máquina a partir do código fonte envolve análise léxica, sintáticas, análise léxica, semântica, sintática, otimização de código, inserção de diretiva de processamento.
É bastante divertido. É tão divertido que a capa do principal livro da disciplina é um cavaleiro matando um dragão. Já não vou falar mais nada sobre o nível de diversão dessa disciplina.
Professor, ainda não ficou claro para mim. Vamos ver o exemplo prático. Se eu escrever um código em linguagem C, considera a linguagem C como linguagem de autoível.
Eu vou salvar esse código num arquivo chamado programa. C. Vou acionar um compilador, no caso GCC, e ele vai gerar um segundo arquivo ponto exeu executável.
Professor, mas você não falou que a linguagem de máquina é o código binário? Por que que aqui tá em hexadecimal? Só para fins didáticos, tá?
Tá? Por quê? Porque só essa primeira linha em código binário já fica assim.
E é isso que o processador vai ler dentro do arquivo executável para mostrar a saída da execução desse código aqui, tá bom? E a interpretação. Imagina que agora eu tenho que falar com Angli por telefone, comunicação síncrona ao vivo.
Eu pego a minha mensagem que eu escrevi em português, salvei no arquivo de texto e eu vou convidar um amigo que fala mandar influente e ele vai fazer o papel de inérprete e ele vai ler a minha mensagem ao telefone pro angelin. Isso é análogo à interpretação. Por quê?
Porque na interpretação nós vamos escrever um arquivo que a gente chama de código fonte, linguagem de alto nível. Esse arquivo, pessoal, ele é lido e interpretado linha a linha para uma entidade chamada interpretador, diretamente pro processador. Por exemplo, se a gente construir uma estrutura de código usando a linguagem JavaScript, a gente vai acionar um interpretador, no caso Node, e ele vai ler esse código linha a linha e passar as instruções pro processador que vai executar e mostrar no console ou no navegador a saída da execução desse código.
Então é interpretação e compilação. São dois diferentes. Existem linguagens que são compiladas e interpretadas.
E a gente chama de linguagens híbridas. Paraa gente entender a híbridização, a gente precisa pensar num negócio. Quando eu escrevo o meu código fonte e eu compilo, ele gera um arquivo executado em qualquer máquina que tenha o mesmo sistema operacional da onde ele foi compilado.
Por quê, professor? Porque na hora da compilação, na última etapa da compilação, o assender da linguagem, o montador, ele vai inserir no arquivo EXZE uma série de diretivas de processamento que são específicas do sistema operacional. Então, se eu preciso que o meu código seja executado em diferentes sistemas operacionais, eu preciso compilá-lo em diferentes sistemas operacionais.
As linguagens híbridas elas são compiladas e interpretadas por quê? Eu escrevo meu código fonte alto nível, vou compilar. Ao invés de dar origem a um arquivo ponto exz, eu vou gerar um arquivo chamado byte code.
Esse arquivo ele é lido e interpretado por uma entidade chamada máquina virtual. Se eu tiver escrevendo o código em Java, é a máquina virtual Java. E eu posso rodar esse código em qualquer sistema operacional que tenha a máquina virtual Java.
instalado. A gente vai ver esse processo em detalhes ao longo do semestre, não precisa preocupar, tá? Tipagem de dados.
As linguagens de programação podem ser classificadas em função da sua estrutura ou tipagem de dados. Primeira forma de classificação como tipagem estática ou dinâmica. Tipagem estática, pessoal, nós precisamos declarar o tipo da variável antes do uso dela.
A gente chama isso de definição em tempo de compilação. E aí tem um detalhe, é estático. Por quê?
O tipo de uma variável não muda em tempo de execução. Essa variável só recebe valores inteiros. Numa numa linguagem que tem tipagem dinâmica, o tipo da variável é definida em tempo de execução pelo tipo de dado que é armazenado dentro dela.
A mesma variável tem um dinamismo, uma flexibilidade de que uma variável pode receber o inteiro, ela pode receber uma string. Professor, mas não tem um risco e um perigo associado? Tem.
Se eu preciso de desempenho, se eu preciso de controle de memória, eu vou usar um tipo de linguagem. Vou usar uma uma linguagem ter um tipo de característica. Se eu preciso de uma certa flexibilidade, eu vou adotar uma linguagem com outro tipo de característica, certo?
As linguagens podem ser classificadas como de tipagem explícita ou implícita. E aí é autoexlicativo. Tipagem explícita, nós precisamos explicitar, definir explicitamente o tipo de data da variável.
Na tipagem implícita, eu declaro que é uma variável, mas o tipo dela vai ser definido no momento em que eu inseri um valor dentro dela. Ela vai ter o tipo do valor que eu armai, certo? E a gente ainda tem tipagem fraca e tipagem forte, que a gente vai ver bastante exemplos ao longo do semestre.
Por quê? numa numa linguagem de tipagem fraca. Lembra do seguinte, para eu fazer a combinação de variáveis de tipos diferentes, eu preciso converter uma das duas pro tipo da outra, porque eu só faço operações com variáveis com o mesmo tipo.
Na tipagem fraca, a linguagem permite ou ela realiza uma conversão implícita de tipo. Então, se eu tenho uma variável que recebeu um inteiro, uma variável que recebeu uma string, para fazer essa combinação, eu tenho que mudar o tipo de uma das duas. Aqui, ó, a conversão foi implícita.
A linguagem transformou o cinco numa string e a saída como resultado da concatenação, 5 0. Numa linguagem de tipagem forte, para fazer uma combinação de variáveis com tipos distintos, eu preciso explicitar a conversão de uma delas. Isso aqui é interessante por se eu tô usando uma linguagem de tipagem fraca, como programador preciso conhecer como que essa linguagem se comporta.
Numa linguagem de tipagem forte, é minha responsabilidade total fazer isso. E eu preciso saber também. Paradigmas de programação, pessoal.
Paradigmas de programação é um item muito importante, porque diferentes linguagens podem dar suporte ao uso de diferentes paradigmas. E é um aspecto relevante. Mas o que que é um paradigma?
Pense, entenda paradigma como uma forma de organizar a solução do problema que você quer resolver e estruturar o código que você vai construir de acordo com esse modelo conceitual, esse modelo que você adotou. Professor, mas não tem só uma forma de fazer isso? Eu penso no problema, construo a solução.
Não. Para um problema simples de transporte, a gente tem diferentes formas de atacar esse problema. Imagina agora as diferentes famílias de problemas, diferentes abordagens são requeridas, são possíveis, né?
O primeiro paradigma que a gente vai estudar é o paradigma imperativo. Bom, pra gente entender, eu vou fazer, vou apresentar algumas analogias para vocês, tá? Paradigma imperativo, pessoal.
Lembra do modo verbal imperativo. O que que o modo verbal imperativo nos lembra? Quem lembra das aulas de português?
Modo verbal imperativo quer dizer ordem. Se a gente vai ensinar uma criança a fazer um sanduíche, você passa instruções na forma de ordens. Pegue, passe, coloque, cubra.
E essas instruções estão numa ordem, numa sequência ordenada. Se eu quero construir um código baseado no paradigma de programação imperativo, esse código ele é uma sequência finita de instruções que executadas numa determinada ordem leva à solução do meu problema. Professor, eu já ouvi essa frase em algum lugar?
Sim, é a definição de algoritmo. O paradigma imperativo casa perfeitamente com a definição de algoritmo. Por quê?
É uma sequência de passos muito bem estruturada para resolver um problema. O foco está no como fazer as coisas. Nos primórdios, o paradigma imperativo, ele era estruturado.
Por quê? Porque existia um recurso chamado go to que permitia a gente criar saltos no fluxo de execução do código e isso gerava códigos com uma estrutura que o pessoal carosamente chamava de código espaguete. Olha que coisa linda.
No exemplo aqui, ó, quando o fluxo de execução, que é a leitura do código linha a linha de cima para baixo, encontra o comando go true, o que que ele faz? ele leva o fluxo de execução para onde tá esse módulo. Ou seja, ele acabou de criar um loop, só que o Goldu ele não exige condições e aí o programador podia colocar Gold para levar o fluxo de execução para qualquer lugar.
Isso gerava muitos erros em tempo de execução, erros lógicos. Atualmente a gente faz uso do paradigma imperativo estruturado. A gente tem estruturas de sequência condicionais e estruturas de loop muito bem definidas.
Como loop, a gente tem o for, tem o while, tem oile, que tem um escopo definido e que para entrar e sair nessa estrutura de loop existem uma série de condições associadas que tm que ser respeitadas. Então isso é muito interessante porque facilita a leitura e a manutenção desse código. A manutenção, a depuração, né?
Correção de de erros. Paradigma funcional. Bom, lembra de uma calculadora?
Numa calculadora, você insere valores e a uma função e a função te devolve um valor. O foco de uma calculadora está no quê? No que você quer fazer.
Eu quero somar, eu quero calcular a raiz, eu quero calcular a potência. Num código baseado em paradigma funcional, nós vamos estruturar o nosso código em funções. E estruturando o código em funções, a gente vai ter que respeitar e privilegiar o caráter de funções puras.
O que que é uma função pura? Uma função autocondida. Ou seja, tudo que eu preciso está dentro da função ou ela recebe por parâmetros.
Uma função autocondida. não recebe e nem escreve em variáveis globais. Uma função pura, ela privilegia o caráter de atomicidade.
Uma função tem que ser muito específica. Uma função até pode acionar outra função, mas o escopo do objetivo dela tem que ser muito específico. Professor, lá em estrutura de dados, a gente construiu bilha, fila, deck, árvore, a gente usou função adoidado.
Era o paradigma funcional, não era o paradigma imperativo estruturado, usando funções para modularizar o código e facilitar o reuso, tá? Facilitar a manutenção também, mas não era funcional. A gente vai brincar com ele agora.
Paradigma lógico. Esse é muito massa. Esse vocês não usaram.
Pessoal, presta atenção. Se eu passar esse desafio lógico para vocês, se Maria é irmã de João, João é filho de Ana, quem é a mãe de Maria? Qual cálculo você faz para resolver esse problema?
Nenhum. Por quê? Porque para resolver esse problema você precisa fazer uma dedução lógica.
Um código construído baseado no paradigma lógico, ele vai ser, ele vai ter um foco na declaração de fatos e regras que definem e delimitam o problema. E a execução desse código vai gerar uma solução a partir de uma dedução, ou seja, uma inferência a partir das assertivas que você construiu. É um modo diferente de pensar.
Aqui um exemplo usando o prolog, que é uma linguagem que surgiu na década de 60 e o pessoal usava em projetos de inteligência artificial baseado em dedução lógica. Atualmente inteligência artificial o pessoal usa Python, que é uma linguagem mais moderna, e outros outros paradigmas também. No slide anterior eu mostrei a linguagem, que a gente não vai estudar, mas eu trouxe só porque é o pessoal chama de linguagem dos parêntes.
Ó o tanto de parênteses aqui. Professor, mas se abrir o parênteses tem que fechar. Para que abrir tudo isso?
Não tem que abrir, mas vamos lá. O paradigma declarativo, esse aqui eu amo, pessoal. Esse aqui é sensacional.
Se você vai na pizzaria, você pede sua pizza de quatro queijos, você ensina o pizzaiola a fazer a pizza. Você fala para ele assim, ó: "Eu quero 23 minutos de forma e 35 g de mussarela". Você fala isso?
Não, a gente pede o que a gente quer. Numa linguagem de paradigma declarativo, o foco está no resultado. Aqui é um exemplo usado na linguagem ST, que é usada em bancos de dados relacionais.
Olha essa instrução aqui. Selecione, né, ou me mostre nome e idade dos elementos da tabela clientes, onde o valor do campo idade é maior do que 18. Nós estabelecemos o resultado que nós desejamos.
Você falou aqui como que é para fazer? Não. Paradigma declarativo é assim.
Por último, mas não menos importante, pelo contrário, a gente vai estudar muito orientação objeto, porque é um paradigma muito moderno e utilizado amplamente em vários projetos modernos. A gente tem a orientação objetos. Lembra do paradigma imperativo?
O que que eu falei sobre o paradigma imperativo? Se eu quero fazer um pão usando o paradigma imperativo, eu tenho uma sequência de passos muito bem definidos. Sim ou não?
Sim. Se a gente for construir um código para representar a produção de um pão, de um bolo, de qualquer coisa, usando o paradigma orientado a objetos, a gente precisa pensar em termos de interações entre os elementos ou objetos presentes nesse cenário. O foco da orientação objetos, pessoal, é modelar o ambiente real que eu estou constru pro qual eu tô construindo uma solução.
Então, por exemplo, se eu quero modelar, construir o código para fazer um pão, né, que represente o a fazer um pão usando orientação objetos, eu tenho que pensar nos elementos que interagem nesse cenário. Forno, rolo de pão, tudo. Um objeto, ele vai ter características, que a gente chama de atributos, e ações, comportamentos, que a gente chama de métodos.
O objeto foro, por exemplo, quais as características, quais os atributos dele? Porta, tamanho da porta, se é a gás, se é elétrico, tem um termômetro, tem um temporizador, quais os comportamentos desse objeto forno? ligado e desligado, abrir, fechar a porta, setar a temperatura, determinar o tempo, são comportamentos.
Professor, não entendi. Imagina agora que a gente quer construir um carro usando orientação objetos. A gente vai estabelecer as características do carro dentro de um negócio chamado classe.
Eu tô falando assim bem simplista, mas eu sei que você já tem uma noção de de orientação a objetos. Quem não tem, lembra que vocês vão precisar entender disso aqui porque precisa engenharia de software, modelagem de projeto usando UML, tá? Pessoal, o que que é uma classe?
Grosseiramente, eu gosto de explicar na primeira aula que classe é a forma para produzir todos os elementos daquela família. Então, os elementos da classe carro, eles têm, ó, atributos. Atributos são características.
Aqui a gente só colocou modelo, mas poderia ser número de porta, diâmetro da roda, se o banco é tecido, se é couro, potência do motor, características. E ele tem métodos, ele tem comportamentos, ações que um carro pode realizar. Pode ser qualquer coisa.
Quando eu instanciar um objeto da classe carro, eu posso determinar os valores dos seus atributos e acionar os seus métodos para a partir disso encontrar ou executar e alcançar o resultado que eu desejo, certo? Bom, pessoal, na nossa aula de hoje a gente viu bastante teoria. Ao longo do semestre a gente vai pro laboratório, a gente vai praticar, tá?
vai ser bem mais interessante. Mas, professor, para que que eu tô estudando linguagem e programação se eu tô no quinto semestre de ciência da computação, sexto semestre de de engenharia da computação, quarto semestre de ADS, para que que eu tô vendo linguagem de programação agora? Minha avó ia te falar que é assim: primeiro a gente equilibra, depois a gente anda, depois a gente corre.
Primeiro a gente vê algumas coisas que são fundamentais, depois a gente vai mergulhando e estudando em profundidade. Mas o professor Darle vai te explicar assim: "A finalidade de estudar linguagens de programação, pessoal, é compreender os fundamentos de projeto das diferentes linguagens. Por que que a gente tem diferentes linguagens de programação?
Porque a gente tem diferentes famílias de problemas, diferentes arquiteturas, diferentes ã sistemas, diferentes abordagens, o hardware vai evoluindo e a gente precisa de outros recursos, tá? Por que que a gente precisa estudar a linguagem de programação? Pra gente melhorar a nossa capacidade de aprender novas linguagens.
Pessoal, a maioria das linguagens de programação são construídas a partir de um adicerce comum. Se a gente dominar o adicerce das linguagens de programação, o aprendizado de diferentes linguagens vai ser facilitado, até por porque, dependendo da família de linguagens que eu queira aprender, eu vou ter que dominar ou conhecer detalhes de sintaxe. Por quê?
Porque a semântica das estruturas é a mesma, vai ser muito familiar. Vocês vão ser capazes de escrever programas mais eficientes e legíveis se aplicarem o que a gente aprender ao longo da disciplina, tá pessoal? Isso aqui é interessante por professor, eu não vejo isso aí em livros como Clean Code, por exemplo, que me passa um monte de ahã boas práticas de programação.
O Clean Code tá além de boas práticas de programação. Mas por que que você tá falando isso aqui? Porque quando a gente estuda e conhece linguagens de programação e as suas características, a gente vai conseguir explorar o máximo os recursos que as linguagens nos oferecem, tá bom?
Bom, além de tudo, vocês vão ter maior potencial de oportunidade no mercado de trabalho. De acordo com o relatório do emprego publicado esse mês pelo Fórum Econômico Mundial, as profissões com maior tendência de crescimento nos próximos 10 e 15 anos estão no setor de tecnologia e, invariavelmente estão direta ou indiretamente associados à programação e, portanto, linguagem de programação. Para além disso, depois que a gente terminar essa disciplina e você fechar ela com chave de ouro, você vai ter uma habilidade de reconhecer o potencial de uso de cada linguagem nos seus domínios de aplicação específico.
O que que é um domínio de aplicação? Uma área em uma área dentro da qual eu tenho uma série de problemas muito específicos, problemas famílias de problemas com características comum. E aí eu consigo escolher uma linguagem que é mais adequada para cada família de problema, para cada domínio de aplicação.
Ao longo da disciplina, nós vamos estudar exemplos em Python, Java, JavaScript e C++. Professor, por que essas quatro? Porque são as quatro primeiras lá do ranking do I3E.
Não, aquele ram aqui, pessoal, ele varia semestralmente. Essas quatro são as principais e que nós vamos estudar na disciplina, porque abarcam a maior parte dos domínios de aplicação mais interessantes. Professor, no final da disciplina eu vou ser um programador nessas quatro linguagens?
Naturalmente que não. A disciplina não é um curso de programação. Professor, mas eu quero aprender uma linguagem de programação.
Dica do dia. Essa parte vocês podem anotar. Pensa num problema.
Ah, eu quero fazer um alarme pro meu vô lembrar de tomar o remédio. Quero fazer o joguinho pro meu sobrinho. Pensa num problema, identifica em qual domínio de aplicação esse problema se encaixa.
Escolheer o domínio de aplicação, escolhe uma linguagem. E aí você pode usar uma plataforma gratuita, como exercício, por exemplo, para seguir a trilha de exercícios e alcançar a maestria nessa linguagem. Por que escolher um problema?
Porque a aprendizagem baseada em projetos, ela é muito mais significativa e dá um propósito que você tá estudando. Tá bom, pessoal? Hoje nós vimos o que é a linguagem, a linguagem do computador, a evolução, as formas de classificação, os paradigmas de programação, as diferenças entre eles, né?
Só que agora a gente precisa lembrar do negócio. Eu não sei se vocês já ouviram falar. Esse cara é primo do Angli, o Confúcio, um filósofo chinês, ele é o autor da célebre frase, né?
Se eu escuto, eu esqueço. Se eu vejo, eu entendo. Se eu faço, eu aprendo.
Então agora a gente vai pra mão na massa. A atividade que eu tenho para vocês é a leitura de um artigo científico, na verdade é um relatório, tá? Que tá falando sobre o uso de inteligência artificial paraa geração de código.
Vocês vão fazer um resumo crítico e entregar na próxima aula e vai ser a base da nossa próxima discussão, tá bom? Aqui tem um resumo e o mapa mental da nossa aula. Vocês podem acessar tanto o material da aula quanto a atividade pelo QR Code, tá bom?
Para nós continuarmos, pessoal, deixa eu falar um negócio para vocês aqui, ó. Vocês podem acessar tudo isso aqui também pelo QRcode no celular ou no computador, mas já tá no seu e-mail, tá? Para nós finalizarmos aqui nossas referências bibliográficas, o livro base da disciplina é o conceito de linguagem de programação do Robert CB, tá bom?
Livro sensacional. Mas o que que eu comecei falando para vocês nessa aula, pessoal? Programação é um superper.
Se é um superper, eu vou deixar vocês com o célebre conselho do tio Bem pro Peter Parker. E é o quê? Com grandes poderes, vem grandes responsabilidades.
Meu nome é Nara Domingos de Almeida. Vocês podem me encontrar no meu e-mail e se Deus permitir esse e-mail que vai estar ativo em breve também.