258 - A SUPERIORIDADE da PROGRAMAÇÃO FUNCIONAL 😱😱😱 | theWiseDev Functional

  Рет қаралды 7,285

Otavio Lemos

Otavio Lemos

Күн бұрын

Nesse vídeo eu apresento várias características OBJETIVAS que tornam a programação funcional uma opção muito atraente.
Muitas vezes são utilizadas razões SUBJETIVAS para justificar o uso de um certo paradigma, tecnologia ou abordagem. Por exemplo, às vezes se diz que o código funcional é mais elegante ou mais simples. Esse tipo de argumento é complicado porque o que é mais simples para uma pessoa pode ser mais complexo para outra.
Utilizando uma apresentação espetacular do Richard Feldman eu te mostro características OBJETIVAS da superioridade da PF com alguns exemplos em Clojure.
Chega mais!
Referências
Functional Programming for Pragmatists
• Functional Programming...

Пікірлер: 45
@rodrigo2112-
@rodrigo2112- Жыл бұрын
É um exercício legal pensar em como criar funções puras e sem side effects em um problema que tenha side effects, por exemplo uma função que chama uma URL e salva o resultado dessa chamada em disco, usando timestamp no nome do arquivo. Resolver esse problema ajuda a entender um bocado sobre injeção de dependências e um jeito diferente de pensar.
@AdolfoNeto
@AdolfoNeto 2 жыл бұрын
Livros para o público dev em geral são engraçados. Eu sugiro ler Seven Languages in Sevem Weeks, de Bruce Tate. Há um capítulo sobre Clojure, outro sobre Erlang, mais um sobre Haskell e ainda um sobre Prolog! É bastante programação declarativa!
@pedrocalaisguerra
@pedrocalaisguerra Жыл бұрын
Excelente resumo sobre benefícios da programação funcional!
@otaviolemos
@otaviolemos Жыл бұрын
Valeu, Pedro! Venha para o lado funcional da força! 😅
@jrdoidera5
@jrdoidera5 Жыл бұрын
Muito bom! Estou nessa jornada de sair um pouco do OO e indo para o funcional.
@RodrigoVazRocket
@RodrigoVazRocket 2 жыл бұрын
Muito bom, vejo que está havendo um movimento para esse paradigma. E de fato, resolve diversos problemas que uma linguagem OO possui.
@igordemetriusalencar5861
@igordemetriusalencar5861 2 жыл бұрын
Como analista de dados, a melhor coisa que me aconteceu foi conhecer programação funcional. Para trabalhar com dados é sem dúvida melhor paradigma, eu estava migrando para o python, porém quando comecei a aprender funcional no R, com o purrr e o tidyverse, fiquei apaixonado. Meu código ficou mais "humanamente" lógico, fácil de depurar, mais simples e menor. Nada melhor do que usar o "|>" para ligar uma sequência de funções.
@z-matrix
@z-matrix 2 жыл бұрын
Estou aprendendo com PHP, é bem útil.
@kellenxavier3420
@kellenxavier3420 2 жыл бұрын
Maravilha professor Otávio! Parabéns novamente pela essa iniciativa, seria muito incrível trazer esse conteúdo (programação Funcional e Clojure) para o teu canal!!! Sigo aqui desse lado ainda engatinhando mas no aprendizado desse paradigma, achando incrível (inclusive com esse livro) Sucesso e novamente parabéns!🖖👏
@arozendojr
@arozendojr 2 жыл бұрын
Sobre cache, vi um cara habilitando e desabilitando cache em funções usando anotações, gostei bastante
@otaviolemos
@otaviolemos 2 жыл бұрын
Massa...
@gabrieljose7041
@gabrieljose7041 2 жыл бұрын
Me despertou uma curiosidade a mais no tema, parabéns pelo conteúdo
@arozendojr
@arozendojr 2 жыл бұрын
Acredito que você vai compara o comportamento do clouje e elm, se possível compara com elixir também e sua virtual machine que roda o elixir
@Pawl0solidus
@Pawl0solidus 2 жыл бұрын
Interessante fazer a comparação da programação funcional com a imperativa. O que mais vemos na internet hoje em dia é a guerra entre POO e programação funcional. Falando que uma exclui a outra e etc, sendo que temos até mesmo linguagens de paradigma híbrido onde podemos usar o melhor de ambos os paradigmas. Seria interessante ter um vídeo abordando justamente esses dois paradigmas e até mostrando em uma linguagem híbrida quando faz mais sentido usar um ou outro.
@otaviolemos
@otaviolemos 2 жыл бұрын
O livro que eu pedi para o Uncle Bob escrever será sobre isso. 😄
@Pawl0solidus
@Pawl0solidus 2 жыл бұрын
@@otaviolemos estou ansioso pra ler esse livro :)
@KivySchool
@KivySchool 2 жыл бұрын
Massa seu vídeo, Otavio! Gostaria de ter visto mais exemplos implementadas de algumas características que você citou Mas massa demais
@CalangoBit
@CalangoBit 2 жыл бұрын
Muito bom o vídeo e melhor ainda essa oportunidade que terá lecionando! Parabéns! Permita-me sugerir um núcleo de estudos em programação funcional encabeçado por dois professores sensacionais da UFABC. De um modo geral eles lecionam com Haskell, mas ambos tem domínio em várias outras linguagens e uma centena de aulas em seu canal no youtube. No discord deles também tem muita coisa boa além de outros docentes e discentes para dialogar. Vale conferir!
@otaviolemos
@otaviolemos 2 жыл бұрын
Opa, obrigado! Quem são os professores? Você não falou o nome deles nem do grupo... :)
@otaviolemos
@otaviolemos 2 жыл бұрын
Opa, já achei aqui: ufabc hal :)
@CalangoBit
@CalangoBit 2 жыл бұрын
Legal! Eu acho que o youtube bloqueia links, então não publiquei. Lá no Discord o nome do grupo é "Programação Funcional". Tenho certeza que vai gostar!
2 жыл бұрын
vi uma parte faz um tempo e realmente é increvel a didatica do professor
@PhCoutoP
@PhCoutoP 2 жыл бұрын
@@CalangoBit Não consegui encontrar o servidor no Discord.
@fabricioaraujo7642
@fabricioaraujo7642 2 жыл бұрын
O modelo de paradigma hibrido como o do python e o kotlin, dart , ruby deve ser a melhor escolha para a modelagem de linguagem no dias de hoje
@otaviolemos
@otaviolemos 2 жыл бұрын
Na minha opinião a linguagem deve apoiar o uso de polimorfismo E encorajar fortemente a imutabilidade. O primeiro ponto é coberto por essas linguagens que você indicou mas o segundo não.
@joaogabrielbracaioli
@joaogabrielbracaioli 2 жыл бұрын
Tô curtindo clojure, mas acho legal a abordagem híbrido como o do kotlin, confesso que ainda prefiro mais o kotlin, mas deve ser pq só tô no começo do namoro com clojure
@otaviolemos
@otaviolemos 2 жыл бұрын
@@joaogabrielbracaioli Boa, Braca! :)
@alessandro3974
@alessandro3974 Жыл бұрын
Professor, conhece algum bom exemplo de "real world application" em alguma linguagem funcional no github?
@andreyagra
@andreyagra 5 ай бұрын
Professor, uma curiosidade: pq clojure e não elixir?
@kp_beta
@kp_beta Жыл бұрын
Teria alguma recomendação de livro para começar a estudar programação funcional?
@otaviolemos
@otaviolemos Жыл бұрын
Structure and Interpretation of Computer Programs ou algum mais específico de linguagem. Eu tô indo direto no Clojure for the Brave and True (ensina mais a linguagem mesmo) junto com Clojure Applied (ensina como fazer software com Clojure).
@thiagoleite4953
@thiagoleite4953 2 жыл бұрын
Fala aí professor, show o conteúdo! Fiquei bastante interessado na disciplina, se conseguir oferecê-la a noite seria uma boa. 🙌🏼
@otaviolemos
@otaviolemos 2 жыл бұрын
Sim, será à noite!
@smanzoli
@smanzoli Жыл бұрын
Com memoize levou 1ms, não 1s
@pedrolemoz
@pedrolemoz 2 жыл бұрын
Excelente vídeo. Como funcionaria um sistema 100% funcional? As entidades seriam simples structs? Existe alguma espécie de "interface" que possa servir de base para a construção de funções? (Já vi a forma que o Go faz, mas é meio que um workaround pra devs OOP se sentirem confortáveis). Como funciona a tipagem nesse tipo de sistema? A passagem de parâmetros para as funções sempre é por valor ou pode haver uma passagem por referência em algum cenário específico?
@pedrolemoz
@pedrolemoz 2 жыл бұрын
Por exemplo, se implementássemos um scanner que retorna os elementos sob demanda, precisaríamos de uma forma de alterar o index atual que estamos. Como isso seria possível em uma função pura?
@pedrolemoz
@pedrolemoz 2 жыл бұрын
Uma coisa que eu acho lindo dentro da programação funcional é o tratamento de erros. O Either com Left e Right é tão bom que existem pacotes em outras linguagens para simular esses comportamentos, como o dartz no Dart e o fp-ts no Typescript. Também acho bem legal a pegada do Go de permitir que a função tenha múltiplo retorno pra erro, e se o erro é diferente de nulo, o tratamento é obrigatório
@otaviolemos
@otaviolemos 2 жыл бұрын
Opa, ainda não sou especialista no tema, mas posso tentar responder. Sim: a ideia é manipular estruturas de dados mais simples, não há 'objetos' com dados e comportamentos conectados. Na questão da tipagem, depende da linguagem, como nas imperativas temos linguagens estaticamente tipadas (como é o caso do F#) e dinamicamente tipadas (como é o caso do Clojure). No caso da passagem de parâmetros acho que você pode passar uma referência mas no fundo tanto faz porque você não pode alterar o dado de qualquer maneira (valor ou referência, tanto faz).
@otaviolemos
@otaviolemos 2 жыл бұрын
No Clojure há 'protocols' que, pelo que entendi, são bem semelhantes às interfaces. O F# parece ter interfaces. Acho que aí depende muito da linguagem.
@lucasayabe
@lucasayabe 2 жыл бұрын
A minha experiência dentro do que eu estudei foi muito em cima de linguagens funcionais estaticamente tipadas (embora eu não tenha de fato programado nelas, eu só estudei os conceitos e apliquei usando TS), então em closure as abstrações provavelmente seriam diferentes. Mas algo que eu venho achando em comum quando se estuda design de programas funcionais é que geralmente as coisas acabam naturalmente terminando em alguma forma de arquitetura limpa (embora geralmente acabe ficando bem próximo da Onion architecture). Você modela o core do sistema de forma totalmente pura, e empurra o código impuro para as bordas. Num geral você não tem objetos mesmo então você vai mexer com alguma coisa parecida com as structs, mas geralmente as linguagens definem bem as estruturas de dados básicas que ela te fornecem. Mas não é algo tão pobre quanto em linguagens imperativas, pelo menos nas fortemente tipadas, você usa um sistema de tipos algébricos para descrever as coisas (seria o & e o | do TS), além de depender bastante de generics (se pensar no TS você consegue imaginar melhor, o sistema de tipos dele cobre bastante coisas em comum com sistemas de tipos usados em linguagens funcionais). Uma abordagem que eu acho muito legal é a do cara do site F# for fun and profit onde ele diz que é uma boa modelar o seu sistema a partir dos tipos e depois pensar nas suas implementações, então na maior parte do tempo você pensa em interfaces/types e só lá no final você pensa na implementação, o que ajuda a focar bem no domínio que você está modelando. A abstração em linguagens funcionais é um pouco diferente das linguagens OOP, ao invés da gente utilizar objetos, eu vejo que se usam muito estruturas algébricas (seriam aquelas coisas de Monads, Functors e etc) e um conceito chamado de Type classes para implementar elas, eu ainda estou estudando esse assunto então não sei explicar bem o que é uma type class, mas pelo que eu vi num livro sobre paradigmas de programação, elas são uma forma de abstração assim como objetos, que seria o que habilita o uso de polimorfismo em linguagens funcionais.
@urielsouza29
@urielsouza29 2 жыл бұрын
Eu queria que o TC39 aumentasse a cobertura funcional do JS. Mas os caras insistem em deixar programador OOP(classico) encher a linguagem de coisas. Enchendo a linguagem de OOP classico(JS é OOP desde sempre, mas não classico)...
@otaviolemos
@otaviolemos 2 жыл бұрын
Pois é: no final eu acho que a única saída é ir para uma linguagem puramente funcional para se ter os benefícios da imutabilidade.
Who is More Stupid? #tiktok #sigmagirl #funny
0:27
CRAZY GREAPA
Рет қаралды 10 МЛН
Ozoda - Alamlar (Official Video 2023)
6:22
Ozoda Official
Рет қаралды 10 МЛН
Cod3r Talk: Explicando a Programação Funcional
1:25:10
Cod3r Cursos
Рет қаралды 4,8 М.
288 - DATOMIC, o banco feito em CLOJURE! | theWiseDev Functional
15:24
Aprendendo Common Lisp - 1: Introdução
1:44:13
debxp
Рет қаралды 1,2 М.
Você REALMENTE sabe o que é uma STRING?
7:28
Pedro Pessoa
Рет қаралды 58 М.
Who is More Stupid? #tiktok #sigmagirl #funny
0:27
CRAZY GREAPA
Рет қаралды 10 МЛН