Entendendo Back-End para Iniciantes em Programação (Parte 2) | Série "Começando aos 40"

143.72k views9104 WordsCopy TextShare
Fabio Akita
Esta é a Parte 2 do tema de Back-end para Iniciantes. Desta vez vamos olhar com mais cuidado sobre g...
Video Transcript:
olá pessoal fábio akita esse já é o sexto episódio da série começando aos 40 o ideal é que vocês assistam todos os outros vídeos da série e se possível os da playlist de programação que tenha rápida história das linguagens nos vídeos de sua linguagem não é especial que eu vou deixar vincado também nas descrições abaixo eu continuo bem contente com a repercussão dos últimos vídeos parece que vocês estão gostando do formato então vou continuar assim até o fim dessa série hoje por acaso estou sentindo minha garganta andando para trás é possível que minha voz começa
a falhar até o fim do vídeo mas vamos lá o episódio da semana passada eu expliquei os conceitos mais básicos da computação sob instruções de máquina compilação interpretadores como os binários se limpam com suas dependências lembra nem cagen estática e dinâmica começamos a falar um pouco sobre java e dot net máquinas virtuais como jvm agora com os conceitos entendidos vão entender por que eu disse que era importante saber tudo isto antes do que eu vou falar hoje uma das coisas mais importantes para um programador de iniciante entender é que você nunca vai fazer software de
verdade totalmente do zero ou seja que 100% do código foi só você que escreveu 'você vai ser obrigado a usar bibliotecas dos outros vamos expandir o conceito de bibliotecas dinâmicas e entender qual o fundo vai o buraco disse coelho [Música] até esse ponto na história você tinha então linguagens estilo java que é muito inspirado em seus planos e alguns pontos de esmalte com alguns mas não todos os conceitos de orientação a objetos e o conceito de máquina virtual e gerenciador de memória que também havia lhes pe na prática em vez de orientação a objetos eu
argumentaria que java é uma linguagem mais orientada classes muita coisa em java não são objetos começando com a própria classe em si a orientação objetos vem evoluindo desde simulacros e com classe que originou depois plus motown que foi provavelmente a melhor representação de orientação a objetos e java que deu alguns passos para trás até esse ponto já entendemos o conceito de bibliotecas dinâmicas que podem ser realizadas bibliotecas em geral são conjuntos de funções que fazem alguma coisa útil como processar imagens converter datas formato pdf ou qualquer coisa assim que pode ser reusado componentes são funcionalidades
como um componente de calendário que tem a parte visual ea programação que controla as datas uma biblioteca pode ter vários componentes por exemplo a parte visual começou a ficar importante com o advento das interfaces gráficas com a crescente adoção de ambientes gráficos como o macintosh original o s2 que foi um filho bastardo da ibm como microsoft e finalmente o windows 3.1 por acaso modelar componentes como classe c objetos era interessante e foi quando esses dois conceitos começaram a se mesclar no começo dos anos 90 um dos conceitos ligados à orientação a objetos começou a aparecer
mais que foi a componentização em particular na forma de rádio ou grupo de application development na categoria de rádio foi onde se popularizou o conceito de integrity de véu mente invariavelmente o wii ds como os antigos powerbuilder visual basic visual de base a axis delphi as linguagens por baixo ainda não eram realmente orientada a objeto como conhecemos mas aí surgiu java que trouxe uma evolução ainda longe o que era o small talk mais é melhor do que o visual basic componentização também se tornou uma idéia é importante primeiro pra evitar reescrever software do zero toda
vez e torna mais fácil de usar software mas mais do que isso para tornar mais fácil comercializar esses componentes hoje em dia se você quer me uma biblioteca para sei lá imprimir um pdf tem centenas disponíveis de graça no beach rami para quase todas as linguagens mas naquela época a internet estava começando nem 2% da população tinha acesso ainda eo jeito para se comercializar era distribuído em disquetes encaixotado em prateleira de loja pra começar agora que tínhamos um ambiente gráfico mais sofisticado nos sistemas operacionais não dava pra todo programador toda hora tem que fazer tudo
do zero desenhar um botão fazendo as linhas da borda pixel a pixel por isso linguagens como microsoft por spams já vem com o framework o mfc o microsoft foundation classes e o delphi vem com vl ouvir joe componentes libre normalmente são conjuntos de hélices como já expliquei antes conseplan imfc podemos criar aplicativos como um world o excel mas daí a microsoft foi além e criou outra tecnologia ou l object link emery que em resumo é uma forma de incluir componentes visuais complexos dinamicamente no aplicativo vocês já sabem o que são bibliotecas dinâmicas mas do jeito
como explicamos você precisa compilar o programa já com os brindes para as bibliotecas em tempo de compilação mas como fazer para instalar um componente num programa que já existissem recompila uma demonstração impressionante na época era conseguir fazer uma tabela do excel sem embutir dentro de um documento do word e ser editável em cima do l e surgiu o l é contra ou abstenção ou o cx se você já instalou componentes no axis ou delphi deve ter visto bibliotecas com extensão o cx que se tornou a principal forma de distribuir componentes em windows isso foi uma
pequena revolução porque também permite a comercializar componentes no formato para não que podia ser inscrito em qualquer linguagem da época e embutida em qualquer aplicativo que suportasse o padrão incluindo e de hess do l original para o cx também se precisou de um modelo para a linguagem interagirem com esses componentes então nasce o componente object model ou com é assim que componentização funcionou na época do visual basic delphi no mundo java o equivalente ao copom poderia ser um java bin hoje só cx é outra coisa são componentes active ex assim como no java toda classe
era de object owen object object pascal toda classe área de ti objection com você implementa interface a ianoni aquivale entender a função de uma interface nova interface gráfica tanto faz se você tem uma janela com um botão de rock em windows ou mac wheldon ing nome no linux a interface é a mesma do ponto de vista do usuário mas a programação ou implementação por trás é completamente diferente uma da outra interface garante que quem vai consumir o serviço por trás não precisa se preocupar como ele é construído a mesma coisa são as interfaces para bibliotecas
nesse caso em vez de ser um elemento visual se trata de um arquivo em um determinado formato que simplesmente declara que funções com que argumentos com que tipos de dados e que tipo de resultados você espera daí você implementa como quiser por trás e quem consome essa biblioteca pode assumir que no mínimo ele vai implementar as funções conforme descritos na interface uma classe numa linguagem orientado a objetos é a implementação de alguma interferir se como a thai annoni do padrão com que falei antes poderíamos argumentar que o modelo de componentes mais avançado na época no
começo dos anos 90 era a next step com sua linguagem object vice que o argumentaria que é mais simples mais elegante e mais orientado a objetos do que separa os fãs object pascal ou mesmo java e tinha um conjunto de classes que eles chamavam de kits como foundation kit melhor do que o mfc da microsoft ou vercelli da bola onde pra você teve uma idéia de quão à frente do seu tempo ela tava o desenvolvimento de haia o sm é que o s ainda usa uma evolução direta das mesmas classes até hoje por isso os
nomes das classes como ns stream oms object continuam com esse ms que é de next step no cu no fim dos anos 80 e começo dos anos 90 essa idéia de arrastar e soltar componentes direto em uma janela gráfica para criar programas era uma ideia revolucionária e no next step que surgiu o lendário primeiro navegador web tim berners lee mas não só isso para nerds como eu tenha e de software que desenvolveu engine gráfica do jogo do 1o também lendário john carmack gostava dos next kilby a primeira geração de programas nessa época no fim dos
anos 80 eram aplicativos desktop normais como os feitos em power builder hoaxes que rodavam só localmente em uma máquina esses programas normalmente tinham um binário da aplicação e outro arquivo que representava um banco de dados muitos derivados do primeiro formato de bf que literalmente significa database firewall que usávamos um bebê e seu clipe on fox pro o que a gente chamava de banco de dados é uma estrutura de dados muito simples pense numa coisa parecida com uma lista ligada de estruturas e um índice primitivo numa época que empresas pequenas às vezes tinham só um computador
para a empresa inteira isso até funcionava o banco inteiro era um único arquivo mas esse dois usuários em duas máquinas quisessem compartilhar o mesmo banco de dados sem precisar ficar copiando o arquivo toda hora com a popularização dos desktops principalmente pcs e também com acesso a tecnologias de rede locais antes ainda da internet comercial realmente decolar começa a surgir o conceito de aplicativos distribuídos foi com a popularização de tecnologias de rede como da novell e do protocolo ip x sspx eo windows net bios que permitiam compartilhar arquivos numa rede local que as coisas realmente começaram
a mudar com essa possibilidade e se colocássemos o tal arquivo de banco de dados uma pasta compartilhada na rede daí copiamos o programa na máquina de cada pessoa na rede e quando o programa abre ele pode apontar para o arquivo compartilhado e bumbum agora todo mundo pode acessar os mesmos dados sensacional né só que não usa idéia errada lembrando do episódio passado que eu falei da dor de cabeça que é programa multi threaded porque cada trad tem acesso à memória global e uma pode ficar pisando na memória da outra então é a mesma coisa com
programas acessando um mesmo arquivo compartilhado na rede o que acontece quando um programa tenta escrever no mesmo registro no mesmo arquivo que outro programa na rede calço foi a era dos arquivos de banco de dados que corrompiam toda hora essas linguagens primárias e as redes da época só tinha uma coisa pra fazer nessa época bloquear o arquivo inteiro ou seja se alguém decidisse gravar alguma coisa no banco de dados todos os outros programas precisavam esperar a weiss não era ideal mas em redes pequenas de 10 20 máquinas não chegava a ser o fim do mundo
mas o problema é que um arquivo compartilhado não é mágica tem um servidor onde fica o arquivo de verdade na rede as pessoas não têm a cópia inteira do arquivo ele vai lendo pedaços do arquivo em streaming de dados aliás esse conceito de streaming é importante você entender se ainda não estudou se você tem um arquivo de digamos sem giga na rede e você quer só um pedaço no meio dele você não precisa baixar o arquivo todo você abre um stream tipo uma corrente ou esteira e vai puxando um pedaço de cada vez até chegar
na parte que é e aí pode fechar esse stream ou você pode abrir o stream direto já no meio do arquivo e lendo de lá um pedaço de cada vez quem é bem iniciante se confunde com isso porque você consegue estar os arquivos na rede como se estivesse local na sua máquina mas ver os arquivos e ter os arquivos são coisas diferentes mas e se você tentar ler esse arquivo gigante inteiro dependendo da velocidade da rede que é sempre lento pode levar muitos minutos e na hora de gravar o servidor de rede precisava não errar
onde a gravar no meio do arquivo exe seu programa dá pau na rede no meio de uma gravação ou e se a e dá pau ou se o servidor engasga de repente a gente começou a ter um monte de variáveis a mais para se preocupar onde antes era simplesmente abrir o arquivo gravar e fechar durante os anos 90 fomos evoluindo esse conceito de duas camadas o cliente servidor primitivo o próximo passo foi usar um servidor de banco de dados em vez de só compartilhar um arquivo na rede foi assim que começamos a usar bancos como
ingres cache e inter b ibm db2 oracle e só depois que a microsoft é de que ia sair bem no meio dos anos 90 que ele constrói o sql server sobre ele a diferença com arquivos compartilhados é que em vez do programa cliente tentar abrir um arquivo na rede ele se conecta antes a outro programa que está remoto um servidor nesse caso o servidor de banco de dados isso evita quase totalmente que o arquivo de dados em si se corrompa tão fácil esse servidor vai servir como um mediador os clientes pedem a ele para fazer
operações no arquivo o mediador vai executando na ordem correta as coisas e como só ele abre escreve no arquivo as chances de corromper eram menores lembra do episódio sobre a história do front end como eu expliquei que o navegador web é um cliente tcp e o servidor web é um cliente tcp é a mesma coisa que só que antes de começarmos a usar o protocolo tcp antes usávamos protocolos de rede local como ipê x que falei antes então o programa em delphi ou focos pro podia ser um cliente pxc o banco de dados é um
servidor e peixes pouco tempo depois que a internet começou a se popularizar windows finalmente começou a vir com a pilha tcp/ip que começamos a trocar tudo por tcp uma pequena evolução nessa arquitetura foi com bancos como oracle sql server que permitem escrever programas que rodam dentro do servidor de banco de dados os famigerados stored procedures em linguagens como pl sql ou tsl assim começamos a separar parte da lógica que ficava exclusivamente nos problemas cliente para o lado do servidor e isso ajuda em muito a diminuir a complexidade dos programas cliente diminui a necessidade de ficar
atualizando os programas nos desktops toda vez que a lógica de negócios muro mas por outro lado causa mais lentidão no banco de dados porque agora além de ter que fazer as operações básicas de lei escrever dados ele precisa processar e computar cálculos e lógicas em cima desses dados de novo lembra a dificuldade que era atualizar o programa cliente nos desktops você precisava gerar um novo binário e manda todo mundo desligar tudo das máquinas e de máquina em máquina com scat para instalar ou mandar todo mundo baixado o servidor de arquivos da rede pior ainda se
a empresa tinha filiais em lugares geograficamente separados onde nem todas as filiais se comunicavam com as outras lembre-se internet ainda era uma coisa opcional a gente tinha redes locais dentro do escritório mas não necessariamente internet entre os diferentes escritórios e se uma filial começa a rodar o programa mais novo mas outra filial esquece fica na versão mais velha agora alguém parou pra pensar o banco de dados é um servidor de rede os programas são clientes que se conectam nesse servidor só que o banco faz duas funções gerencia os dados e roda lógica de negócios com
essas histórias possíveis porque não mais um servidor no meio do caminho daí o cliente e se conecta nesse que tem lógica de processamento de dados primeiro que por sua vez vai se conectar em um segundo servidor que seria o de banco de dados dessa forma conseguimos tanto separar a lógica de negócios e diminuir o tamanho dos programas nos desktops e também tiramos a carga do servidor de banco de dados esse é o nascimento da arquitetura que conhecemos como três camadas ou free tears se você assistiu o episódio sobre s a pé é aqui que as
soluções corporativas começam a se encaixar com a idéia de um servidor de aplicação passamos a pensar mais em interoperabilidade protocolos de rede junte a idéia de componentes ação orientação a objetos ea necessidade de componentes agora um conceito mais abstrato chamar lógica de negócio em outro servidor assinassem especificações como o com e distributed com o decon que depois será renomeado como completos da microsoft ou concorrentes como o famigerado corpos na prática eram todas as formas de chamadas de procedimento remotos ou o que chamamos hoje de r fc o rpc quer remote procedure call os eu já
expliquei que para compilar o programa que depende uma biblioteca dinâmica precisamos de um arquivo de cabeçalho que declara que funções a biblioteca tem exposta para ser consumida é a tal interface é exatamente a mesma coisa agora só que em vez de uma biblioteca dinâmica e uma biblioteca remota mais precisamente um cliente de algum serviço remoto não temos como saber o que um servidor de aplicações têm de funções expostas então precisamos de algum tipo de interface que declara quais funções com que argumentos que resultados esse servidor de aplicações expõe pra gente através de que protocolo para
isso servem coisas como complacência ou corda que tinha o protocolo a yup o winter org onde org significa objectivo request broker para especificar esse protocolo de comunicação o formato das mensagens trocadas esse conceito coincide com a fase do java onde começa a surgir o famigerado j2ee ou java 2 enterprise edition que hoje é chamado só dj é esse e 12 já voa dois engraçado porque tivemos o java um da ele foi pra um ponto e depois 1.2 e aí nasceu j2ee mas depois as versões foram para 1.3 1.4 e só no ponto 5 que chamou
direto de versão 5 hoje eu acho que está na 10 ou 11 enfim o j-20 uma especificação realmente interessante porque consolidava tudo o que tínhamos inventado até então em tecnologias de desenvolvimento de aplicações em três camadas e agora também usam tecnologias de internet com o protocolo tcp e http em resumo j2ee específica ou também famigerados erva verde que é uma forma de encapsulá as operações de http ele especifica uma forma complexa de gerar aplicações usando um modelo chamado módulo 2 que é basicamente o modo eu vi o controle o mvc que você tanto ouvir falar
hoje na parte do móvel que costuma ser uma abstração para uma ou mais tabelas no banco de dados temos também famigerado cjb ou enterprise e jabs além do jovem s ou java message service que encapsula maneiras de acessar bancos de dados remotos e outros tipos de serviços remotos como outros servidores de aplicação e tudo isso conectado via arquivos de configuração e nessa época se tornou moda formatar arquivos de configuração no novíssimo formato xml em breve a microsoft ainda vai inventar web services usando protocolos olp que trafega os dados todos em formato xml também na verdade
começamos a xml em tudo que é lugar e assim começa a era onde passamos a associar tudo que tem xml com enterprise e passamos a onde a xml em paralelo a isso muita nova literatura começou a ser escrita para ajudar a organizar toda essa bagunça e metodologias e vocabulários para conseguir desenhar sistemas complexos orientados a objetos é quando surgem nomes como os três amigos brad butt james gamboa à hergé cobson cada um com suas idéias de metodologias que se juntaram numa empresa chamada hachinohe juntam suas idéias no famigerado e unified modeling language ou o ml
para representar soluções baseadas nessa idéia de programar objetos e componentes aliás o iml que podia ser representado em arquivos em que formato óbvio que xml a rational que viria a desenvolver diversas ferramentas como rose criar case criar quest e outros depois teremos a famosa gangue dos quatro alguém gol for que são eric gama richard hell me love johnson e johnson dos cids que escreveram o agora clássico livro de design patterns o que chamamos hoje de um mundo enterprise ase começa a ganhar forma nessa fase do fim dos anos 90 e ele começa de verdade com
j2ee e as metodologias monumentais de engenharia de software orientado a objetos em uma década evoluímos muito rápido de pequenos programas que rodavam só em uma máquina para soluções cliente servidor em duas camadas e agora arquitetura em três camadas e as sementes para aplicações realmente distribuídas com o advento da internet em paralelo como já contei antes tivermos e sharp com a origem no híbrido jp os planos de objeto de pascal como fechar basicamente a microsoft conta que controla e basicamente depende só do windows ele conseguiu evoluir bem mais rápido do que já vão nos anos seguintes
adicionando muito mais funcionalidades a linguagem que a tornaram mais do que simplesmente uma cópia da sintaxe do java tanto em termos de novas interacções quanto mais bibliotecas e serviços com pose é que tive é que se tornam as formas principais de componentes ação tanto local quanto remota e corda vai começando a desaparecer no mundo mais próximo de linux por já era popular principalmente com uma linguagem para script tar coisas como ferramentas para administração de sistemas linux ele vê pouco a pouco sendo substituído por paixão que era uma linguagem mais limpa e mais moderna que também
herdou algumas funcionalidades de orientação a objetos ele teve a sorte de pegar o crescimento das distribuições linux e acabou se tornando uma das linguagens padrão em muitas distribuições o php pegou pegou a onda das aplicações web e ganhou espaço sendo mais fácil que pro como sintáxi de linguagem o php se uniu a outras tecnologias emergentes no mundo open source como rodar em sistemas linux usar o servidor web apache e ainda novato banco de dados mais kelly e assim nasceu a pilha de tecnologias ou stec chamado de lenk mas o interpretador do php era realmente um
puxadinho bem ruim sendo um dos piores em gerenciamento de memória e constantes bugs de segurança numa época onde ainda estávamos aprendendo sobre segurança agora que começamos a colocar as coisas expostas na internet pública fora isso o estilo de programação derivado da filosofia de larry uol criador do povo de kinder dion rápido para desenvolver mas código sujo como resultado não era atraente para adoção mais séria da indústria mas a bolha da internet a ser o adoção de todos eles ao mesmo tempo com o crash da bolha demorou alguns anos para as pessoas voltarem a se interessar
em novas linguagens como eu disse antes um manifesto ágil só foi escrito bem no ano desse creche em 2001 então o mercado de linguagens que já existiu não tinha muito em essien adoção em massa de práticas como as ensinadas por metodologias como extreme programming ou christon as metodologias no mundo como java os e sharp era ditado pelos fabricantes de ferramentas como a rachão que foi comprada pela ibm ibm e oracle microsoft o google estava crescendo rápido mas ainda não tinha tanta influência nesse mercado o facebook ainda nem existir o mercado passou a associar tecnologias e
enterprise e como sérias e tecnologias open source como amadoras mas a gente sabia que tinha jeito mais simples de desenvolver principalmente se olhar as linguagens e interpretadas mas ainda não havia uma adoção significativa a não sendo php que para muitos engenheiros era uma linguagem amadora e pouco sofisticada foi só quando um hub começou a ser adotada por muitos dos signatários do manifesto ágil como o word em cannes ram martyn hall entre o hut brian américo bob marte dave thomas que as pessoas começaram a mostrar algum interesse e com incidentemente tivemos o lançamento do frango que
ruby on rails em 2004 e finalmente ruby que havia sido criado dez anos antes em 95 começou a ganhar alguma atração diferente de java ou fechar o php em vez de ter origem na herança de sintáxi dos cepos pans ele procurou inspiração do esmalte lisp isso tornou diferente o suficiente com o suficiente de sofisticação para atrair a atenção desses veteranos de cabelo branco já que era muito difícil para a inércia de gigantes como java dot net php pareceu interessante começar uma comunidade do zero com uma linguagem sofisticada mais obscura mas já aplicando as práticas evangelizados
para as metodologias que seguiam manifesto ágil essa era a marca o início da profissionalização das tecnologias open source para desenvolvimento de aplicações que poucos anos antes eram consideradas mais amadoras pelo mundo enterprise ase em vez de convencer o mundo interpride um novo mundo começou a crescer rápido pra competir com elas haztec startup o sucesso quase instantâneo do ruby on rails para criar os tipos de aplicação mas que pouco tempo antes só deveriam ser feitos em java ou c sharp trouxe uma nova idéia para a indústria e para uma linguagem fazer sucesso ela não precisava ser
um clone da sintaxe descer pelas fãs ou java ou ter o suporte de grandes nomes como ibm microsoft nesse ponto entre 2003 2007 eu diria que esse período de transição é importante porque nos anos 80 surgiu de fato o movimento ou pensar signo nos anos 90 surgiu o primeiro grande projeto que tornou o pensar se relevante a queda do linux e as distribuições de linux durante a bolha das pontocom os tivemos sucessos comerciais como vivienne no que a rede hatch depende open source não era só um hobby e tinha modelos de negócios viáveis que finalmente
botaram pressão nas empresas tradicionais mas a manutenção e criação de novos projetos não era ainda uma coisa simples avião sites como sócia ford code house e outros mais contribuem open source ainda tinha uma barreira de entrada muito alta lembre-se que dite hang só se torna realmente famoso a partir de 2008 em 2003 mesmo outra iniciativa estava começando com o surgimento do groove uma nova linguagem que compila embate code para jvm ela tem muita inspiração na sintáxi de linguagens como python eo be e uma linguagem muito mais agradável de trabalhar do que o java original e
com o sucesso do ruby on rails tivemos o grupo 1 brews mas neste momento eu acho que a comunidade java e mesmo pensar se ainda não estava preparada para se adaptar a uma nova linguagem um dos problemas de ser uma comunidade gigante é que é muito difícil mudar sua direção especialmente quando essa direção ainda era meio incerta experimental mesmo assim o grupo teve um bom nicho e ainda hoje você vai ver groove se usa ferramentas como o google o google ganhou fôlego quando entrou no kit rami e quando ganham patrocínio da pivô tão pra quem
não conhece a piorou labs foi uma consultoria que junto com outros nomes emergentes como a foto antes ajudou a tornar a jael comercial mais visível tinha na sua base tecnologias java eo be também ela cresceu rápido pós-2008 foi adquirida pela via e depois pela ieme se e hoje é uma empresa pública que mudou da área de serviços de consultoria para produtos corporativos mais especificamente cláudio corporativo e por dois anos ela patrocinou groove voltando um pouco na história até os anos 80 popularizou-se linguagens que chamamos de imperativas como seoul pascal ou pro elas são simples em
estrutura você escreve funções que recebem argumentos e devolve alguma estrutura de dados você compõe seus programas com funções que chama outras funções rapidamente você nota que um conjunto de funções que atua em cima de uma mesma estrutura podem ser agrupadas em módulos assim nasce a idéia de linguagens como modula precursor do pascal mas então alguém resolve criar um conceito ou uma abstração que uma estrutura com um grupo de funções pode ser o que chamamos de classe e podemos criar várias instâncias dessa classe que chamamos de objetos assim começa a nascer programação orientada a objetos daí
temos linguagens como simula os motores e os planos objetivos se java se sharp python organização de objetos pode ser implementada em cima de linguagens imperativas então secom classes pode vir a ser pastoso objective se pode ganhar o equivalente a classe usando bless php ganho classes bes que ganhou classes em visual basic pascal ganhou o clássico de mentalizem turbo pascal e depois de object pascal que é o delphi e até cobol tem classes hoje em dia em paralelo a isso havia outra área de pesquisas que deriva da linhagem de linguagens funcionais como munícipes que mel que
lida com a matemática dessa composição de funções ou lambidas que é definida em lambda cálculos que se iniciou com o famoso alonso short conterrâneo de alan turing turim aliás que foi aluno de short então você pode ver como as idéias dos dois se misturam e o trabalho de ambos é a fundação do que chamamos de ciência da computação no caso da vertente de short vamos simplificar assim uma função recebe um argumento tipo um número ou mais têm outra coisa e d houve outro tipo de elemento como resultado e principalmente tem um nome e só mas
porque toda a função tem que ter um nome porque não podemos ter funções sem nome o que chamamos de funções anônimas e porque funções não podem receber outras funções como argumento e devolver funções como resultado em si temos algo rudimentar onde podemos passar o que chamávamos de cal becks ou ponteiros para a memória onde está outra função mas como eu disse é uma forma rudimentar provavelmente uma das coisas mais diferentes que ruby trouxe da herança de nisp foi o conceito de lambidas para o mundo web mesmo que ainda não tenha avançado como era início e
implementar as idéias de lambda cálculos de short podemos chamar funções anônimas ou um tipo mais avançado que chamamos de clow juros ou blocos groove também trouxe lambidas para java dentre outras coisas mas esse tipo de composição abriu caminho para coisas como meta a programação e dsl sou do homem específico elenco e diz que é como se fossem me linguagens em cima da linguagem principal em vez de somente seguiu que a linguagem dita e se pudéssemos manipular a própria estrutura e sintaxe da linguagem a capacidade de moldar a linguagem para ficar com a cara que você
quisesse isso tornou chato estilo imperativo de programar em algo mais flexível e maleável e divertido embora isso também tem aumentado mais a complexidade para quem está iniciando lambidas vieram para ficar e depois disso toda nova linguagem e mesmo as antigas adotaram esse recurso hoje java c sharp outros também ganharam lambidas e alguma capacidade de meta programação com a virada do século e aceleração antes do crash que tivemos nesse período o poder computacional cresceu exponencialmente desde os anos 80 era conseqüência da lei de muro que ditava que o poder computacional dobraria mantendo o mesmo preço a
cada 12 a 18 meses e antes nos preocupávamos bem mais com a performance crua dos nossos programas para tirar o máximo de máquinas caras e fracas mas agora as máquinas ficaram realmente poderosa acessíveis então passamos até ser plus ou sobra de processamento é importante salientar essa mudança de perspectiva finalmente em vez de termos que sofrer com linguagem simples e burocráticas em nome de economizar performance porque não passar a pensar em formas de tornar programação mais agradável antes linguagem mais simples de trabalhar era quase sinônimo de baixa performance mas agora que a web provou que performance
pura não era o único fator para escolher uma linguagem podíamos começar a experimentar em funcionalidade ea escola de lambida cálculos começou a aparecer novamente graças aos programadores de cabelo branco que haviam experimentado lixo e whisky nas décadas de 70 e 80 e até orientação a objetos também veria uma evolução graças a quem experimentou os motoqueiros nesse período vale lembrar que lhes já tinha o conceito de máquina virtual e gardot colector décadas antes de java esmal tholl que tinha o conceito de que tudo é realmente objeto e que objetos ficam vivos mesmo se a máquina virtual
seja desligada pensa no virtualbox ouvir e amor quando você sobe outro sistema operacional e então suspende a máquina o esmalte ou que têm esse conceito de suspender execução sem botar a limpar a memória dentro do que ele chama de imagens ou no caso literalmente um banco de dados de objetos quando você abre uma imagem de esmalte toque ele pode ter objetos e memória que foram instanciar os 30 anos atrás e você vai compondo novos objetos usando os objetos vivos que já existem pensa que louco essa arquitetura e falando em arquiteturas exóticas uma editora de livros
que ganhou notoriedade nessa virada de século foi a de praga e mary programmer mesmo nome do clássico livro de dois signatários do manifesto ágil e que ajudaram a dar credibilidade à adoção de ruby dave thomas e em diante eles também popularizar o conceito de que todo programador deveria tentar aprender pelo menos uma nova linguagem por ano e em 2007 eles publicaram suas experiências com a linguagem erlang dos anos 80 de joe armstrong quando ele trabalhava na ericson erlang que como eu expliquei em outro episódio tema sintáxi muito diferente herdada de prologue e que tinha uma
arquitetura que ninguém no mundo web tinha visto ainda o modelo de atores erlang como java tem uma máquina virtual mas diferente do jvm ele vai um passo além e ele tem parte do conceito de lambda cálculos em ser puramente funcional e parte das principais propriedades de objetos sem ser orientado a objetos mas em vez de organizar as coisas como classe c objetos ele organiza como modos e atores um ator é como se fosse um objeto com seu estado encapsulado e se comunicando com outros atores via passagem de mensagem diferente do java c pôs panos e
sharp e mais similares motoq object vice e mais do que isso no sistema operacional além de carregar o quer no ele também carrega serviços ou demons via um serviço de supervisão como se estender ou emitir de outros dependendo do seu sabor favorito de unix ou linux o erlang tem algo similar um sistema de supervisores que iniciam atores e se encarregam do ciclo de vida dos mesmos o irã ganha assim uma jota vemos motor que são quase como sistemas operacionais inteiros ao contrário dos interpretadores com o pão o python ruby que foram feitos para iniciar rápido
e terminar rápido erlang java funciona melhor se você iniciar e deixar eles parasitarem a máquina toda assim como java a idéia é subir um único processo de lang deixa aquele gerencia máquina e seus programas rodando dentro dele erlang não foi feito para ser reinicializado toda hora e sim pra ficar de pé eternamente inclusive essa era grande funcionalidade para a indústria de telecomunicações que você não estivesse numa ligação e de repente fosse cortado da sua conversa porque alguém precisou subir uma atualização ele tem inclusive o conceito de carregar código novo sem precisar necessariamente reinicializar tudo na
prática é mais ou menos o que já vi j2 e também preferem ficar de pé sem ficar reinicializando o tempo todo ficar de pé obviamente era o grande objetivo e guardem essa característica porque vai ficar mais óbvio quando falarmos de infraestrutura e de votos mais pra frente mas o ponto é que essa linguagem super estranha despertou interesse em arquiteturas muito diferentes do que estávamos usando na época em 2009 martin o 10 que trouxe ao mundo o resultado das pesquisas que ele vinha fazendo no mundo de lambda cálculos de java desde o começo dos anos 80
e 90 na forma de outra linguagem que também compilava embate code java como groove essa linguagem foi escala e ele se popularizou muito rápido porque adicionar funcionalidades que tornava o java mais palatável coisas como trailers que em objective c o equivalente a protocolos e alguns diriam que é uma forma mais limpa de se fazer ansa de funcionalidades inferência de tipos que eu já expliquei que vem de inglês milner type system de linguagens funcionais como ml que levantou outro dilema da programação a discussão se linguagem de tipagem estática são melhores ou não que pagem dinâmica em
um super resumo todos os dados do seu código variáveis estruturas listas precisam ter tipos pensem tipos como moldes de biscoito você precisa dizer de antemão qual o tamanho do molde você vai querer pequeno grande no caso de números vai ser um inteiro 32 bits ou inteiro 64 bits ou inteiro sem sinal ou seja sem números negativos isso é importante para um compilador saber quanto de memória precisa locar para cada coisa se fizer isso é errado vai faltar memória e dá erro ou vai usar memória desnecessária causando links ou vazamentos em linguagens dinâmicas como munícipe python
ruby a gente não determina isso no código interpretador pode determinar o molde o tipo certo durante a execução do código por isso chamamos isso de tipos dinâmicos eles têm tipo só que não estão estaticamente declarados no código como fazemos em java ou c sharp antigos declara tipos é super tedioso e você pode errar quando está programando também simplesmente não declarar e deixar o interpretador decidir só quando já está rodando é muito mais conveniente mas pode causar desperdícios e alguns erros porque ele pode assumir o tipo que você não esperava e você só vai descobrir quando
estiver rodando inferência de tipos é meio que o meio do caminho dos dois mundos porque a gente não escreve todos os tipos estaticamente no código ou seja deixa de ser absurdamente tedioso mas o compilador vai tentar adivinhar os tipos em tempo de compilação daí o binário ou bytecode no final vai conter os tipos certo antes do programa executar só isso já torna escrever em escala muito mais conveniente do que escrever em java antigo e inferência de tipos foi melhorando e hoje se encontra em linguagens novas como host swift cotching ou tarde script mesmo java desde
a versão 5 você tinha a possibilidade de emitir alguns tipos quando usava implementação rudimentar de genéricos no java 8 você pode emitir títulos em declaração de lambidas e no java 10 ele ganha a inferência de tipos locais como você sharp também como iniciante você vai notar que estudar tipos é muito importante independente se você vai aprender uma linguagem dinâmica ou estática se tem inferência de tipos ou não porque mesmo em referência não é mágica o compilador ainda precisa de algum contexto ou anotação para inferir o tipo certo na prática entenda escolha o molde errado e
se o biscoito vai sair do tamanho errado escala cresceu rápido por um momento mas estagnou um grande problema de escala que o binário bytecode que ele gera de uma versão de escala para a outra são incompatíveis ou seja se você tem uma biblioteca compilada para bytecode de escala 1 e você faz um programa com escala a 2 e tenta carregar biblioteca antiga vai tomar um link de acordar jvm isso era uma dor de cabeça imcompatibilidade binária entre coisas compilados em diferentes versões de escala a única forma de solucionar isso é você recompilar tudo de novo
sem reusar os binários antigos é uma escolha do design do criador para que ele pudesse renovar a linguagem sem se preocupar em ficar dando suporte para coisas antigas hoje em dia o gol meio que exige a mesma coisa ele prefere que você baixe o código fonte de todas as dependências e vem de baixa binário pré compilado e compilar tudo junto de uma só vez aliás o comentário importante eu falei lá atrás que você como programador vai precisa sempre se preocupar com as dependências e as versões certas dessas dependências lembra a discussão de compilação estática verso
compilação dinâmica nos anos 80 e 90 fabricantes de ferramentas de desenvolvimento como board microsoft ibm e oracle traziam tudo junto eles que se viravam para ter todas as dependências que você iria precisar já instalado ou de forma organizada que você pudesse comprar um cd e instalar na sua máquina e mesmo assim os anos 90 foram infestados do que chamamos de bnl réu com programas diferentes que precisavam da mesma dnl mas em versões diferentes mas tudo no mesmo sistema entrando em conflito literalmente um inferno de llx com o advento do mundo open source de repente você
podia baixar bibliotecas gratuitas de código aberto e instalar você mesmo mas eles não estavam esperando por isso e virou uma grande bagunça no começo quem daquela época nunca copiou um site em php que na sua máquina tudo funciona mas quando o copia por servidor ele falha porque você esqueceu de também copiar ou instalar as bibliotecas de dependência ou no caso de java esquecer de copiar os tais jars e aí a aplicação nem queria iniciar é assim que nascem ferramentas como mei vem no java que é um grande banco de dados de bibliotecas binárias agora você
tem um repositório centralizado onde quem escrevi bibliotecas poderia postar lá e você como desenvolvedor podia declarar no arquivo em xml lógico os nomes e versões das bibliotecas que precisava no seu projeto eo mesmo se virava para baixa tudo que você precisava e como uma biblioteca pode precisar de outras bibliotecas a gente costumava brincar que toda vez que precisávamos baixar todas as dependências do projeto o meio e baixava a internet inteira duas vezes hoje essa posição é do npm do javascript no mundo microsoft demorou mais para algo similar a aparecer mas o dot net você tem
hoje no beach que inclusive passou a vir pré-instalado no visual studio 2012 em diante do mundo de programação até esse ponto a gente tinha o ney vem no mundo java e hoje muitos usam junto grande o que é feito em grupo e como eu disse antes temos o cepam do mundo pro até hoje no mundo php era um híbrido todo mundo baixava as dependências na mão mesmo tendo coisas como o píer hoje em dia felizmente php tem algo mais moderno que o php com polzer no mundo ruby estávamos evoluindo a idéia de gerenciamento de versões
com algo rudimentar implementado dentro do próprio ruby on rails que baixava as dependências direto do kit rami e depois evoluímos para a ferramenta bandler que na época se tornou o benchmark sobre o qual todo mundo se comparava ayton preferia usar o próprio sistema de pacotes das distribuições linux então era uma zona por que você precisava fazer pacotes rpm ou deve ou outros para cada distribuição e você ainda tinha a zona de ferramentas como o setap tuzi em estoque disse não tinha nada aliás para uma linguagem que se orgulhava de ter um único jeito pra fazer
cada coisa instalar pacote não era assim infelizmente o mundo python tem o pipi agora no mundo java script como eu já falei nasceu npm que ganhou concorrência com o irn coautora dado pelo mesmo autor do bando ler derrube no mundo enix e existe o rex no mundo host existe o cargo o mundo go tem o dep mas aqui a coisa um pouco mais controversa declarado e pendências no seu projeto instalado em um repositório de iniciar os upgrades diversão é uma coisa extremamente importante você nunca pode simplesmente atualizar todas as bibliotecas para as versões mais novas
porque o seu código vai quebrar por outro lado você não pode ficar para sempre com versões velhas principalmente se elas estiverem relatos de buracos de segurança então você vai precisar atualizar as versões e alterar seu código para comportar as mudanças vai ter vezes que o autor da biblioteca simplesmente desistiu de manter sob o teca vai ter um buraco de segurança agora você precisa achar outra biblioteca para substituir precisar reescrever toda a parte do seu código que depende daquela biblioteca é uma parte considerável do trabalho de ser um programador e manter um projeto grande isso tudo
dito eu estava falando da imcompatibilidade binária do scala assim como python temp pelo be tem banda scala tem o sbt que assim como muitas ferramentas têm a função híbrida de ser um gerenciador de pacotes e também o executor de tarefas o scala jogou na mão dos desenvolvedores bibliotecas gerenciar diferentes binários de cada versão e tem até um guia para tentar manter compatibilidade binária o que fazer com isso não é possível é meio uma zona porque toda vez que a escala lance uma versão nova todo mundo que faz bibliotecas precisa ficar recompilando uma nova versão só
que é irreal achar que todo mundo vai fazer isso então você como programador que depende dessas bibliotecas ou tem que ficar meses esperando todo mundo alcançará versão nova ou você mesmo precisa lidar com recompilar manualmente e ver se nada quebra eu mencionei em gol porque o gol diferente da idéia de java ou escala ele não é uma máquina virtual para começar nem o interpretador ele é mais próximo de ser postados por que compila direto no binário nativo e efeito para fazer aplicações e não drivers ou coisas mais baixo nível como fazemos em ser e ele
prefere compilação estática para criar binários que acabam ficando gigantes em tamanho mas que você pode mover pra outro lugar e ele simplesmente funciona o gol fez uma coisa que a comunidade ruby on rails fez em 2008 e 2009 ele se integra direto com o repositório git em particular o ggit hang todo desenvolvedores bibliotecas mantém o código-fonte notícia ruby você usa o recurso de depp que eu falei para baixar todas as dependências do ggit hang five todos os códigos fonte como o intuito do gol é compilação estática ele precisa de todos os fontes disponíveis para gerar
um binário único então a menos que a sintaxe da linguagem não mude de forma drástica de uma versão para a outra você sempre consegue um binário que não quebra no final sem depender de linkagem dinâmica e ninguém de erro que o scala sofre o que você faz algo similar com o rex um host faz algo similar com o cargo a ideia é sempre baixar os códigos fontes das dependências e deixar próximo do código do seu projecto e compila tudo junto depois que baixa em vez de baixar as bibliotecas em formato binário como os jardins de
java a diferença é que em java o compilador é notoriamente lento em vez de toda vez com pilar binários a partir do código fonte nós compilamos e empacotamos em zip que chamamos de jars é o que se publica num meio em por exemplo daí você ou manualmente ou via web o sbt no caso do scala baixa os jogos pré compilados a mesma coisa no mundo dot net mas a microsoft tende a ser melhor zinha em tentar compatibilidade binária das suas dependências e agora de gerenciar as diferentes versões de cada uma antigamente isso é importante porque
não se tinha esse conceito de código aberto às empresas vendiam bibliotecas e preferiu não abrir o código na verdade eles faziam o máximo inclusive para o be fuska os bicolores gerados para dificultar alguém fazer engenharia reversa e ver como que foi implementado por isso eu salientei a diferença na virada do século da explosão do mundo de código aberto e serviços como gift rambi linguagens interpretadas como php python lube que precisam ter os códigos disponíveis escala ainda caber dando essa parte do java uma das linguagens como go west enix e investir em fazer compiladores bem mais
velozes e baixar dependências na forma de pacotes que embutem o código fonte e compilar seu programa e as dependências tudo localmente em vez de depender de versões binárias pré compilados voltando ao papo de arquiteturas groove e escala trouxeram ao mundo java uma sintaxe bem mais moderna do que o antigo java e isso ajudou a linguagem evoluir muito da versão 6 até agora escala também trouxe a arquitetura de atores para o mundo java isso somado à de praga e mary programa evangelizador lang também trouxe a possibilidade de direto na fonte já que foi ela que introduziu
o conceito de atores com seu framework o atp ou o penteado é completo fome softwares que foram inscritos para a irlanda antes também começaram é a luz do dia em particular e já verde e breve time que o numa época onde produtos de comunicação como o facebook messenger o whatsapp começaram a aparecer erlang sendo um produto desenhado para a indústria de telecom era um par perfeito para produtos de comunicação em massa mas sejamos honestos a linguagem do orlândia o rio de usar nos dias de hoje talvez o ok para os anos 80 mas não para
o século 21 a comunidade ruby começou a olhar lânguido ubes chamado toni arcieri que uma linguagem raia assim como jvm do java rodas bytecode compilados de linguagens como burro e não só do java puro o erlang também tem uma máquina virtual chamada bean com seus próprios bytecode diz o bahia foi o primeiro experimento de tentar modernizar a sintáxi do e lang nesse caso imitando quase directamente à sintáxi do hub para compilar embate cores que rodam lubin em paralelo à ele surgiu outra tentativa de fazer a mesma coisa dessa vez de outro ruby sexta o brasileiro
josé valim com a linguagem elixer o helicóptero foi uma tentativa mais avançada de não limitar diretamente o clube mas de criança sintáxi moderna em cima das capacidades do bingo erlang e também de criar um conjunto de bibliotecas base para possibilitar realmente criar aplicações de verdade levou quase quatro anos para ele dizer finalmente se tornar usável de verdade para fazer aplicações em produção ele aproveita tudo que o ernani já faz mas como assim táxi e um conjunto de bibliotecas que remetem a coisas como ruby aumentando muito mais a produtividade também por causa da influência do framework
ruby on rails surgiu freimark fênix para desenvolver desenvolvimento de aplicações web o ruby como vocês já devem ter percebido é uma linguagem que eu pessoalmente gosto ela ajudou a influenciar outras linguagens como o grupo e depois da comunidade saiu koff script que ajudou a influenciar o atual já o script s6 e também influenciou a sintax do ny e no estilo da programação de suas bibliotecas em paralelo começamos a experimentar mais com outras linguagens uma vez que o paradigma funcional baseado lambda cálculos que falei acima começou a ganhar algo o terreno linguagens obscuras como rasca e
ocamo começaram a ganhar um pouco mais de terreno inclusive o cânon influenciando a linguagem efe sharp no mundo dot net tudo isso também ajudou a evoluir a própria linguagem java agora com mais de 10 anos de idade pra finalizar esse episódio é preciso falar a linguagem gol mais um pouco que eu já vim citando durante esse episódio anterior todos sabem que é a linguagem do google mas eu não gosto muito de go porque pra mim representa um passo para trás ela foi criada em 2009 e ignorou muitos avanços que outras linguagens já tavam fazendo por
exemplo a inferência de tipos que eu falei com escala ajudou a popularizar e linguagens modernas como swift rãs e sharp mesmo java começaram a usar menos poderosa em go os tipos do gol são mais pobres e não implementa atraentes como goste em uma linguagem criada em 2009 que se poderia escolher tudo do melhor ela preferiu o caminho mais fácil escolher permitir o ponteiro nulo que é causa de muitos bugs e muitas linguagens o sistema de tipos é mais pobre os genéricos são mais pobres ela não permite estender redefinir a linguagem não suporta sobre escrever coisas
como operadores ela é de fato uma versão melhor zinha do que uns e pôs panos que cresceu tão monstruoso e complexo que é realmente difícil de usar hoje em dia mas ela não evoluiu a linhagem das linguagens como linguagem ela representa um passo para trás nenhuma linguagem é perfeita mas cada nova linguagem veio evoluindo em cima dos seus antecessores e o gol é basicamente mais um caso da síndrome do google de reinventar a roda eu quase diria que o gol é 9º bec entende o que o java script tornou no front end a gente usa
mais porque existem softwares importantes escritos em go como ultra famoso docker e agora ela está se tornando grande demais para falhar em breve não vai mais ser uma escolha não usarmos então eu vou deixar linkado nas descrições abaixo o link com diversos artigos explicando todos os problemas dessa linguagem ela acontece com javascript em críticas porém não se pode negar que ela de fato trouxe algum as coisas importantes que eu vou explicar também no próximo episódio então no próximo episódio vou continuar essa história com go mas ele quis ver um pouco mais de um broche talvez
javascript talvez de python e principalmente vou tentar explicar mais da importância da apple nos últimos 20 anos para o desenvolvimento de software e como a cruza com um evento importante no mundo open source a história do backend não acabou eu disse que a ser longo no episódio de hoje eu voltei a década de 90 e nem uma breve introdução da evolução das arquiteturas de desenvolvimento de software retornei mais ao mundo java entendemos mais sobre a longa e inacabada novela chamada gerenciamento de dependências uma fraga que vai te perseguir por toda sua carreira de programação e
finalmente começamos a ter um gosto das novas linguagens começando com groove escaler lang ele seria um pouco do gol então eu acho que finalmente passamos um pouco da metade desse tema nessa série não deixe de mandar suas perguntas nos comentários abaixo se curtiu vídeo mantém um jóia assine o canal e para não perder a continuação dessa história clique em um sininho e não deixe de compartilhar com seus amigos como semana que vem a gente tem carnaval é possível que eu tire o feriado para descansar vamos ver se não nos vemos até lá bom carnaval para
todo mundo até mais
Copyright © 2024. Made with ♥ in London by YTScribe.com