Тёмный

dev senior nao escreve FOR loop 

Augusto Galego
Подписаться 22 тыс.
Просмотров 39 тыс.
50% 1

📚 Livro para entender estruturas de dados e algoritmos: amzn.to/4bYu4VE

Наука

Опубликовано:

 

27 фев 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 224   
@GutoGalego
@GutoGalego 3 месяца назад
Gente isso é um gancho pra explicar TCO e recursão. Eu falo com todas as letras que não é pra parar de usar FOR. Tudo depende, Golang só tem FOR, você PRECISA escrever FOR quase todo dia em Go. Já Elixir, Haskell, Erlang, e outras FPs não tem NENHUM loop. Por isso é interessante conhecer os diferentes paradigmas.
@TheMathues123
@TheMathues123 3 месяца назад
O título do video.poderia ser "conheça outros paradigmas". Pare de fazer click bait
@ErisPorty
@ErisPorty 3 месяца назад
@@TheMathues123 pois é mano
@Tiagocf2
@Tiagocf2 2 месяца назад
@@TheMathues123 youtube né amigo, tem que colocar o que engaja mais
@allainclair
@allainclair Месяц назад
Temos um fiscal de click bait
@user-yb8zv2rr3c
@user-yb8zv2rr3c Месяц назад
"Eu falo em todas as letras" o nome do vídeo: dev senior nao escreve FOR loop ¬¬' Você pode ser o melhor do mundo, se ficar inventando click bait, isso vai ofuscar sua habilidade .. acorda
@mikumikudice
@mikumikudice 3 месяца назад
look what those interpreted developers need to mimic a fraction of compiled native code power
@meunomeebero
@meunomeebero 3 месяца назад
kkkkkkkkkkkkkkkk
@AnalistaDeTratores
@AnalistaDeTratores Месяц назад
Time to code a JS compiler ...
@gilsonconceicao5201
@gilsonconceicao5201 3 месяца назад
Obrigado por compartilhar. Vc tem uma excelente didática.
@programadorpython
@programadorpython 3 месяца назад
Bela explicação, independente do que for usar é importante saber como as coisas funcionam. Abraços
@cauamiller3425
@cauamiller3425 3 месяца назад
Cara acompanho seu conteúdo e acho ele muito bem explicado e super importante, estou aprendendo demais com você. Muito obrigado por compartilhar seu conhecimento!
@cristianoo2
@cristianoo2 3 месяца назад
Mano eu nao te conheço e é claro que é tua estratégia de clickbait e tal, mas isso é muito errado. Não engane os juniors cara. Voce pode ta prejudicando a carreira de alguém. Pra quem tiver lendo: nao façam isso por favor. Nao se troca a memoria local por stack sem motivo. Nao se faz recursao sem motivo ! Alem de deixar o código mais ilegível, voce provavelmente nao vai saber fazer. Nem o autor do video vai saber. Acredite. Recursão é foda. Tirando esses métodos ridículos que o pessoal usa de exemplo no RU-vid, na vida real vc so usa quando é necessário Ex: coisas que funcionam com linguagem de contexto, como compiladores e interpretadores. Voce provavelmente nao vai saber usar. Aprenda, mas evite.
@IronNidow
@IronNidow 2 месяца назад
Ele literalmente fala nos primeiros 5 segundos de vídeo que era mentira isso de não usar for e que só queria falar de recursividade...
@mmaldonadojr
@mmaldonadojr Месяц назад
Eu já usei recursão em parsers e varredura de árvores / estruturas aninhadas, fora disso a recursão é um problema. Em embarcados, então, pior ainda. Já precisei simular recursão com uso de pilha em array, a pilha nativa não aguentava kkkk!
@AlexeiDimitri
@AlexeiDimitri Месяц назад
@@IronNidow A recursividade tem uma utilidade muito limitada porque a explosão dos números inteiros é muito rápida e o uso da pilha é extremamente intensivo
@GustavoPiucco
@GustavoPiucco Месяц назад
calma calabreso, veja o video primeiro kkkk
@joazinhotito
@joazinhotito 3 месяца назад
Cara seu conteúdo é muito massa simples fácil de entender é muito rico.
@epinatel
@epinatel 3 месяца назад
Programo desde 1985! Já passei por diversas linguagens (basic, clipper, c, delphi, vo, java, php, etc.). Até hoje uso "for" e funciona muito bem. Não sei porque essa mania de reinventar a roda!!!
@felipe.raposo
@felipe.raposo 3 месяца назад
Ele não está reinventando a roda. Apenas fazendo o programador pensar como as coisas funcionam por baixo dos panos. Você saberia resolver esse problema com recursividade? Outra coisa, no exemplo em que ele deu, que ia decrescendo os números em vez de somando, ao contrário do que ele disse, existe uma diferença sim com os exemplos anteriores. Principalmente em relação à memória. Você saberia dizer que diferença é essa? É bem legal saber essas coisas.
@mikumikudice
@mikumikudice 3 месяца назад
​@@felipe.raposo na verdade, ele tá tentando resolver problemas de python, uma linguagem tão mal otimizada que um for loop é uma tremenda fonte de lentidão
@1lucas1910
@1lucas1910 3 месяца назад
Ainda não tenho a experiência do mestre mas concordo. No C-Sharp por exemplo, o compilador converge diversas formas de código em um mesmo código de IL. Ou seja, se usar for ou do ou oque seja, no fim roda da mesma maneira. Faltou ele especificar que ele está falando de python.
@cristianoo2
@cristianoo2 3 месяца назад
​@@felipe.raposorecursividade é uma das piores formas de resolver um problema. É raro o algoritmo que vai funcionar bem usando recursividade. Meter uma recursividade pra esconder o for não é coisa de sênior, mas de junior.
@cristianoo2
@cristianoo2 3 месяца назад
​@@felipe.raposoO sujeito acha que não tá fazendo um looping, mas ta. A única diferença é que ao invés de usar memória no contexto local, tá usando a stack. A stack é limitada pelo sistema operacional e carrega-la demais da zebra (tem até site com esse nome: stack overflow). Ou seja, é coisa de noobzao
@gleitonfranco1260
@gleitonfranco1260 3 месяца назад
Base de programação funcional mesmo pra quem não sabe o que é FP 🔝
@MrSpartaa
@MrSpartaa 3 месяца назад
Muito bom. Seus videos são muito tranquilos e claros
@pe....
@pe.... 3 месяца назад
Dev senior usa recursive functions em vez de for loop, deixando o código mais complexo? Eu raramente uso funções recursivas justamente por isso.
@hermersonaraujo9378
@hermersonaraujo9378 3 месяца назад
Não só complexo com menos performatico kk, mas eu entendi o click bait do vídeo.
@chanela6135
@chanela6135 3 месяца назад
É bait, não caia nessa
@chanela6135
@chanela6135 3 месяца назад
Ao invés de for loop, normalmente usam funções prontas da própria linguagem (como um for each, por exemplo)
@GutoGalego
@GutoGalego 3 месяца назад
Não necessariamente. Tem algoritmos que são bem mais simples de implementar recursivamente, como DFS por exemplo. E performance vai depender da lang e da TCO, tem vezes que o compilador consegue fazer ficar até mais performático do que loop, mas aqui depende MUITO. Sem saber a lang e a runtime usada, não tem como determinar. Eu preciso fazer mais um vídeo indo mais a fundo, pq esses temas são pouco explorados, complexos, e cheios de nuance que a gente raramente aprende e/ou conversa sobre, mas é bem legal!
@pe....
@pe.... 3 месяца назад
@@GutoGalego Tem algorítmos que são mais fáceis de implementar, mas a ideia que tu passou é que Senior não usa for, não funciona assim, ou por acaso você usa funções recursivas para fazer um for each? Tem situações que o código fica mais simples, é bem raro.
@eduardoprado4337
@eduardoprado4337 3 месяца назад
Um exemplo prático no dia a dia, é quando falamos de ADT (Abstract Data Types) mais especificamente quando tratamos por exemplo listas ligadas ou dicionários de tipos complexos (json por exemplo) . Isso sim é um exemplo de recursão que você pode usar no dia a dia.
@sr157juninho
@sr157juninho 3 месяца назад
minha honra galego, parabéns muito bom
@alexandremachado1014
@alexandremachado1014 3 месяца назад
Bacana demais esse tipo de conteúdo!
@leofariasrj-dev
@leofariasrj-dev 3 месяца назад
Eu já sabia o básico de recursão que todo programador normalmente conhece, mas achei muito produtivo entender que loops são "apenas" gotos "disfarçados" e todo a conversa encima de Tail Call Optimization, que não conhecia. inclusive o post do Guido exemplifica o famoso: "não existe bala de prata" conteúdo nota 10.
@imperiaonlinebr
@imperiaonlinebr 2 месяца назад
Achei isso muito interessante, porque já fui criticado por utilizar um GoTo para sair de um loop aninhado. Entendo que realmente não é uma boa prática e deveria ser feito em métodos separados, mas não dispunha desse argumento de que internamente um for e um goto são a mesma coisa.
@AlexeiDimitri
@AlexeiDimitri Месяц назад
@@imperiaonlinebr Na prática é muito melhor usar um break/continue do que uma variável de controle Goto puro realmente é meio... gambiarra, mas dependendo de como é feito é a solução mais elegante...
@AlexeiDimitri
@AlexeiDimitri Месяц назад
De fato, loops são apenas uma forma de codificar um bloco inicialização-condição-pulo, evitando as más práticas de gotos para lugares não convencionais Mas além disso são uma forma de dar previsibilidade para seu código, o que ajuda tanto uma CPU a fazer o branch prediction e puxar para o cache código que vai ser usado, ou mesmo ajudando o compilador/runtime a entregar operações paralelas para processadores/threads/unidades de execução diferentes.
@lucascampos4289
@lucascampos4289 3 месяца назад
Recursividade com sistema de memorização é muito bom para fazer uma otimização no sistema recursivo, ainda mais se os dados gerados forem semelhantes
@danigui8573
@danigui8573 3 месяца назад
Enquanto isso no meu trabalho os sêniores escrevem um 3 for aninhados em um dia bom.
@Pedro-fi5iy
@Pedro-fi5iy 3 месяца назад
Big O vai com Deus 😂
@magichatake
@magichatake 3 месяца назад
@@Pedro-fi5iykkkkkkkkkkkkkkkk
@henriquelima7958
@henriquelima7958 2 месяца назад
haduuukeenn
@Cookieukw
@Cookieukw 2 месяца назад
O maximo que já usei foram dois, um dentro do outro
@poderosoexcalibur-yp3kl
@poderosoexcalibur-yp3kl Месяц назад
e o que vocês estão codando aí, jogos, shaders?
@viniciusabreu3288
@viniciusabreu3288 3 месяца назад
Geralmente quando atuo como entrevistador de engenheiros seniores e staff, eu aplico um problema simples envolvendo recursão e separo alguns cenários passiveis de TCO justamente para inferir alguns conhecimentos mais avançados do candidato. Não é ponto deterministico na entrevista, mas sem dúvidas o candidato ganha bons pontos se souber do que se trata. Obrigado pelo conteúdo!
@AlexeiDimitri
@AlexeiDimitri Месяц назад
Mais uma daquelas exigências que não servem de nada pq na hora do trabalho real ninguém precisa 🤣🤣 Tipo 'inglês nativo" e "capacidade de se vender" Na hora de programar o que conta é sua capacidade de resolver o máximo de problemas no menor tempo possível e trazer o menor esforço possível para a equipe fazer manutenção no seu código
@viniciusabreu3288
@viniciusabreu3288 Месяц назад
@@AlexeiDimitri eu concordo. No contexto que a maioria dos profissionais é inserido, que é resolver problemas de negócio, o que acaba sendo mais valioso é investir em desacoplamento, organização e produtividade (mas se aparecer uma função quadrática numa PE a gente manda um request change hahaha).
@Vinicius-kc9pq
@Vinicius-kc9pq Месяц назад
@@viniciusabreu3288o que é PE?
@brunosousa4642
@brunosousa4642 3 месяца назад
Incrível! Estou aprendendo em minhas aulas na faculdade a recursão com Racket (lisp) e realmente é muito bom para o aprendizado, o for e os tipos de loops são mais fáceis de aplicar, mas a lógica por trás do recursion facilita ajuda a desenvolver uma visão melhor sobre os loops. Ou seja, vale a pena dar uma olhada mesmo que tu não vá aplicar! Vlw, excelente vídeo!
@andersongallo2723
@andersongallo2723 Месяц назад
Muito obrigado pela explanação.
@Cristian_DG
@Cristian_DG 3 месяца назад
Eu acredito que a forma que o paradigma funcional trata os dados é muito elegante e intuitiva, infelizmente em linguagens que não são puramente funcionais isso vem com um custo. Por exemplo, como explicado no vídeo em python não tem tail call optimisation, em js/ts as funções como map, filter e afins criam uma cópia do array e isso pode causar problemas de performance/memória quando usadas em arrays muito grandes.
@AlexeiDimitri
@AlexeiDimitri Месяц назад
JS é uma linguagem funcional O estilo de programação funcional por si só já é um conceito pouco eficiente e motivo pelo qual foi abandonado há muito tempo no mercado Só recentemente voltou a ter alguma importância pq a área de pesquisa em IA é mantida pela academia, que costuma usar soluções porcas e acadêmicas como R, Perl, etc. Até o Python por exemplo era uma coisas só usada em faculdade Creio que em algumas décadas, quando todas as outras linguagens ganharem a maturidade do Python nesse segmento o povo vai finalmente migrar para suas linguagens nativas e abandonar essa desgraça que basta um tab no lugar errado para tirar sua noite de sono
@hf3qT
@hf3qT 3 месяца назад
Primeiro vídeo que estou assistindo do canal. Gostei da sua didática, 10min que pareceram 5.👍
@sc5212
@sc5212 20 дней назад
Estou literalmente na cadeira de programação funcional e esse vídeo tirou uma boa quantidade de dúvidas a respeito do porque usar pf
@Vinicius-kc9pq
@Vinicius-kc9pq Месяц назад
Muito bom ver conteúdo sobre baixo nível em pt-br. É uma coisa que deveria ser fundamental pra qualquer desenvolvedor, tá cheio de dev “senior” por aí que não sabe nem o que é Big O e muito menos tem um conhecimento sobre o funcionamento das ADTs que são implementadas por padrão na linguagem que ele usa no dia a dia.
@malvin74s
@malvin74s 3 месяца назад
Mais um vídeo excelente 👏🏻👍🏻
@jhonatanrian8903
@jhonatanrian8903 2 месяца назад
Cara você manja muito slk
@TheMatheus12lima
@TheMatheus12lima 3 месяца назад
Excelente vídeo!
@diegobiancardi9373
@diegobiancardi9373 2 месяца назад
caralho que vídeo bom mano!
@alandionisio8090
@alandionisio8090 Месяц назад
uma dúvida genuína. a recursividade por padrão não seria um O(n) enquanto utilizar loops vai da implementação ou existe uma recursividade "ruim" (no caso, com mais complexidade)?
@nium-xp
@nium-xp 3 месяца назад
Uma coisa importante sobre o porque de Python não ter TCO (que não me lembro do Guido ter comentado no post dele) é justamente por conta de Python ser totalmente objetos (sim, você pode alterar a própria stack, memória e código em execução, talvez você conheça algo como pytest e unittest, essas bibliotecas fazem isso :D), pois todas operações que fazemos (como raise, try, finally, with, yield, function call, etc.) na linguagem mexem ou dependem da stack, então esse tipo de otimização seria extremamente complexa e difícil de ser feita, mas ainda assim existem otimizações que decorreram dela, um exemplo é a função `partial` da bilbioteca `functools` que não cria um frame na stack
@lucassantato6585
@lucassantato6585 3 месяца назад
que ferramenta é essa que você usa pra desenhar? ótimo vídeo!
@NathanOnCodes
@NathanOnCodes 3 месяца назад
Augusto, você trabalha com qual framework python no seu dia a dia? Eu vi que o fastapi passou o flask em star's no github e tá quase alcançado o Django, se acha que ele (fastapi) vai ser o padrão para Back end com python?
@GutoGalego
@GutoGalego 3 месяца назад
Trabalho com Django, são ferramentas diferentes com filosofias diferentes. Django é um batteries included, faz muito do trabalho pra você. FastAPI é mais conciso, menos boilerplate, depende mais de você mesmo fazer as coisas. Vejo os dois coexistindo, mas eu gosto bastante de FastAPI
@programadorpython
@programadorpython 3 месяца назад
sim, fastapi é full async, combinar ele com tortoise orm q tambem é async ta sendo sensacional.
@NathanOnCodes
@NathanOnCodes 3 месяца назад
@@GutoGalego entendi, vlw brother!
@NathanOnCodes
@NathanOnCodes 3 месяца назад
@@programadorpython valeu cara, mt bom seu canal tb!
@alexanderalmeida6534
@alexanderalmeida6534 3 месяца назад
Seu conteúdo é incrível! Só acho seu áudio um pouco baixo, se ficar um pouco mais alto fica perfeito!
@janpalach2443
@janpalach2443 2 месяца назад
Rapaz bom vídeo. Desenvolvo software há 24 anos. Do C,C++,Python,Erlang, Haskell, Typescript, Java e agora Rust. E eu vejo essa turma senior mais novinha "cagando regra" na internet apenas para aparecer. Sinceramente, empresa alguma deveria dar posição de senior para gente tão imatura quanto esses devs xiitas. Falo isso porwue já vi em discussão técnica umas pessoas defendendo justamente o titulo do click bait sabe? É tipo flamewar de linguagem(algo mais bizatro que isso não há).
@lucasvillani5484
@lucasvillani5484 2 месяца назад
Me indica numa empresa
@nasfoda_gamerbrbigproducti5375
@nasfoda_gamerbrbigproducti5375 Месяц назад
​@@lucasvillani5484Tropa que precisa ser indicada ✋
@Twisted6175
@Twisted6175 Месяц назад
Sim cara, dá até vontade de denunciar esse canal kkkk clickbait de mal gosto
@viniciusvinum
@viniciusvinum 3 месяца назад
recursão ferra com cache e é dífcil de ler, por isso acho q n é bom usar na maioria das vezes
@fpskkkk
@fpskkkk 3 месяца назад
É uma delicia resolver problemas de grafos com recursão kkkkk mas eu nn sabia da existência dessa TCO, achei bem interessante
@ververplayss5305
@ververplayss5305 3 месяца назад
Q vídeo bom! Apareceu do nada e que achado. Me tira uma dúvida, que programa vc usa pra rabiscar na tela?
@Zorlaf1500
@Zorlaf1500 3 месяца назад
Muito daora, interessante demais isso.
@MrStiller0
@MrStiller0 2 месяца назад
Daria pra implementar essa funcao recursiva usando generators do Python, sem sofrer esse recursive error?
@user-bc6ml4ok4x
@user-bc6ml4ok4x Месяц назад
eu já sabia que o conteúdo é recursão quando eu vi falando mau do for , que só com recursão consegue-se trocar um loop
@TheMathues123
@TheMathues123 3 месяца назад
recursividade vai muita além desse exemplo. Recursividade serve para quando você quer fazer exatamente a MESMA coisa inúmeras vezes mas passando valores diferentes até uma certa condição ser atendida. Navegar por uma árvore é um exemplo, você não sabe onde está o que você precisa, mas você tem uma função de busca que chama ela mesma passando um nó, depois o próximo e assim por diante. Se você quer ensinar conceitos mais complexos, utilize CONCEITOS COMPLEXOS. Recursão nesse caso não serve pra nada e é deixar o código inseguro.
@allainclair
@allainclair 2 месяца назад
Linguagens de paradigma funcional não tem loop, recursão serve tanto para casos simples e complexos nesse contexto. Ele contempla isso no vídeo mais ao final, dando exemplo com Elixir. Se você quer ensinar conceitos complexos, você também pode abrir um canal e ensinar esses conceitos.
@TheMathues123
@TheMathues123 2 месяца назад
Sim amigo, eu sei disso kkkk. Porém essa afirmação não condiz com o titulo do vídeo.
@cezito6831
@cezito6831 2 месяца назад
@@TheMathues123 fodase o título mano até livro faz click bait pqp
@AlexeiDimitri
@AlexeiDimitri Месяц назад
@@allainclair Na prática ninguém usa linguagens funcionais O que o povo faz é usar linguagens imperativas e procedurais com recursos de programação funcional (como Java) Na prática, não tem nenhum ganho com map-reduce e operações funcionais, o compilador e nem o runtime vão dividir cada chamada em processamento paralelo, ao contrário do que dá para fazer com for de forma praticamente transparente Além é claro dos nossos processadores terem sido projetados para usar branch-prediction baseados em loops for compactos
@allainclair
@allainclair Месяц назад
@@AlexeiDimitri ninguém usa funcional? É só um exagero seu né?
@wernek_br
@wernek_br 3 месяца назад
Vlw Galego!!!
@ratoclipss
@ratoclipss 3 месяца назад
tu parece com o Lukas Ruiz, famigerado vintage culture kkkkkkkkkkkkkk
@_Acrk629lak0sUg1s
@_Acrk629lak0sUg1s 3 месяца назад
Recursao é interessante mas ta mais pra uma solução própria que criamos usando a logica da linguagem do que uma solução oficial da própria linguagem. Geralmente é mais complexo e tende a gerar mais casos de excessão se feitas se maneira errada...
@douglasmb787
@douglasmb787 2 месяца назад
em Java eu lembro que acontece algo assim tb, mas parece que dá pra mudar o quanto a JDK usa de memória pra isso
@AlexeiDimitri
@AlexeiDimitri Месяц назад
Dá para alterar o Heap e a Stack Mas isso é programação porca Daqui a pouco vem o gerente da cloud perguntar pq uma simples rotina de folha de pagamento tá usando 256GB de memória RAM
@douglasmb787
@douglasmb787 Месяц назад
Mas esse aí é o nível extremo que o cara simplesmente esqueceu que memória não é infinita, mas eu tava falando de situação genérica, sem contexto, só da possibilidade de poder alterar
@AlexeiDimitri
@AlexeiDimitri Месяц назад
@@douglasmb787 Sim mano mas o que eu mais vejo é desenvolvedor comprando RAM e pedindo para colocar RAM no serviço mas o cara simplesmente não sabe gerenciar o próprio ambiente Por exemplo o Docker quando instala aloca metade da RAM para a VM dele Velho, isso é 8GB num PC de 16GB Quando a gente tá trabalhando com microcontainers, que não deveria ter mais que algumas centenas de megas de RAM, 4GB deveria ser mais que suficiente para uns 10 containers Aí o cara me abre um monte de coisa que come RAM e fica só aumentando a RAM do ambiente, sem entender que ele tá com programa mal feito, mal otimizado, usando recursos ineficientes, etc.
@staz.d.blood_
@staz.d.blood_ 3 месяца назад
Kkk eu ouvi um ditado que era assim "se voce precisou usar for possivelmente ta errado" kkkkk e aprendendo algoritmo mais a fundo usar for nao e o problema kk o problema e nao saber quando usar e a criar uma boa logicar pra você ter a maxima eficiência do codigo, pesquisem ai "algoritmo de ordenação por inserção" e dissequem a lógica e mt satisfatório quando vc entende
@AlexeiDimitri
@AlexeiDimitri Месяц назад
Na minha época a frase era "se vc tá usando recursão, tem alguma coisa errada" E a gente aprendia a versão for do código, que era pouca coisa diferente e rodava muito melhor e mais rápido
@Redyf
@Redyf 3 месяца назад
Em termos de memória, é adequado utilizar recursão invés do for loop? Vai consumir menos?
@GutoGalego
@GutoGalego 3 месяца назад
Sem saber qual a linguagem, qual a implementação, e qual a runtime não tem como saber. Em linhas bem gerais, se vc usa uma linguagem mais "normal", python, javascript, loop é melhor. Mas tem casos que recursão é uma boa, ou as vezes a unica alternativa (FP)
@AlexeiDimitri
@AlexeiDimitri Месяц назад
Recursão consume tanta RAM que dependendo do valor passado estoura a pilha Loop for por sua vez é otimizado pelo próprio processador na execução (branch-prediction) e até permite o compiltador/runtime utilizar processamento paralelo (cores/threads/procesasdores, etc)
@extramobs0
@extramobs0 3 месяца назад
quando você passa seu código python pra Nuitka não tem limite de recursão pois é transpilado pra C
@AlexeiDimitri
@AlexeiDimitri Месяц назад
Se tá rodando em C, tem limite de recusão. Todo programa tem uma pilha pré-definida no momento que o programa é usado
@lyri_nx5760
@lyri_nx5760 3 месяца назад
Adoro estes conteudos mais tecnicos, e acho meio dfcl de achar algum de qualidade, ganhou mais um inscrito, mas senti falta apenas de um áudio mais alto, achei baixo dms
@NunoLima10
@NunoLima10 3 месяца назад
Foi vídeo bem interessante
@1234victorxD
@1234victorxD 3 месяца назад
Boa!
@vacamococa2055
@vacamococa2055 3 месяца назад
Tive aula sobre esse assunto ontem
@g.andrei04
@g.andrei04 3 месяца назад
Não sou main em python, mas e se eu colocar um return i(n, num), eu não estaria fechando essa função ao mesmo tempo que chamo ela de novo?
@AlexeiDimitri
@AlexeiDimitri Месяц назад
Não. O return acontece DEPOIS que a função é chamada.
@nafloydnobre3810
@nafloydnobre3810 3 месяца назад
eu não entendi literalmente nada mas parece ser mt maneiro
@swiftuai
@swiftuai 3 месяца назад
Fala Augusto, qual app vc usa pra fazer esses desenhos nos seus vídeos?
@GutoGalego
@GutoGalego 3 месяца назад
Excalidraw
@kkkippy
@kkkippy 3 месяца назад
kkkkkkk valeu, eu ia perguntar a msm coisa
@adiliophi
@adiliophi 3 месяца назад
Nice explanation!
@DjEdu28
@DjEdu28 2 месяца назад
Bela explicação, mas senti falta da continuação, como fazer a recursividade desse problema funcionar otimizada no Python. Pensei em variáveis com estado permanente, que não existe no Python, então precisaríamos usar variável global ou fazer uma classe que manteasse esse estado
@somerhaha1687
@somerhaha1687 3 месяца назад
If you value code reliability and readability you never use recursion as it can lead to runaway code with, for example, infinite loops and is harder to read from an outside perspective.
@GutoGalego
@GutoGalego 3 месяца назад
skill issue
@AlexeiDimitri
@AlexeiDimitri Месяц назад
You are right. The author of this video is not considering manutenability: your code will be read by new programers.
@danxd526
@danxd526 3 месяца назад
Então, a maioria da galera quando usa recursividade não quer perder o valor anterior, justamente por isso usam a recursividade.
@marceloqueirozbraga2220
@marceloqueirozbraga2220 Месяц назад
conceito interessante... Da para fazer recursão infinita com Thread. Fica extremamente lenta, mais é possível.
@AlexeiDimitri
@AlexeiDimitri Месяц назад
A criação de threads é um recurso extremamente pesado, só perdendo para a criação de processos Se for para ficar prejudicando o código, melhor usar for
@robertochostakovis
@robertochostakovis 3 месяца назад
Recursão é bem legal, mas............. dependendo da quantidade de chamadas estoura o stack.
@felipeoliveira9512
@felipeoliveira9512 Месяц назад
Mas isso nao resolveu o problema do "empilhar processos e quando acaba o loop um a gente pode remover pq tem o loop 2"... a funcao 1 ainda ta ativa e na memoria... e vc ta chaamando a funcao 2... 3... 4... e criando uma pilha de processos nao? bom talvez se for assyncrono funcione
@SpacialCow
@SpacialCow 3 месяца назад
Muito bom o video no geral. So ficou um "buraco" nessa questao do TCO em Elixir, poderia dar uma passada por cima em como e feito na linguagem, ja que mostrou ela, e como evitar o TCO no elixir (Mostrar um exemplo que se comporta "igual" no Python :)
@Chapeu_de_aluminio
@Chapeu_de_aluminio 2 месяца назад
É uma das vantagens da recursão acumular tudo na pilha e depois voltar fechando. TCO é inútil, por ser substituível em quase todos os casos.
@lucaslicar3713
@lucaslicar3713 3 месяца назад
existe alguma vantagem em escrever map, reduce, filter etc... em vez de usar for?
@juliodonofreo
@juliodonofreo 3 месяца назад
é meio que uma perfumaria na verdade, é mais ineficiente e limitado, além de tornar seu código mais difícil pra junior entender.
@AlexeiDimitri
@AlexeiDimitri Месяц назад
Não. Se vc tiver como jogar a execução para milhares de unidades de processamento paralelo, teria alguma vantagem Mas tem o OpenMP que basicamente usa loops for. Na prática não se faz mais isso: computação paralela em larga escala vc vai usar GPUs e ASICs dedicados e para isso vc vai usar frameworks dedicados como TensorFlow, CUDA, etc.
@evans3395
@evans3395 3 месяца назад
A linguagem Lua tem. Uso direto o tco.
@alcancebrasil4467
@alcancebrasil4467 3 месяца назад
É cada uma viu.
@Ddiidev
@Ddiidev 3 месяца назад
Eu dei uma pesquisada aqui, vi que no C# essa otimização só é feita pelo JIT caso a compilação seja release x64, caso contrário StackOverflowException na cara meu camarada, 'kkkkk Mas legal saber disso.
@thiagomaiadefranca3205
@thiagomaiadefranca3205 3 месяца назад
Tirei o like porque não confio nem na minha sombra... quando o senhor provar, eu volto o like. Hahahahahahahahahahahahaha.
@chriscoyc
@chriscoyc 3 месяца назад
elixir
@smlgd
@smlgd Месяц назад
No melhor dos casos o compilador/interpretador vai ser mais esperto que vc e transformar sua recursão num loop sem te contar. É basicamente isso que TCO faz. No pior dos casos vc confia no TCO que não acontece e agora sua recursão vai dar um estouro de pilha (igual aconteceu ai no video) e vc quebra seu programa. Recursão só faz sentido ser usada num caso que vc não consiga fazer uma boa abstração em loop, como por exemplo varrer um grafo.
@user-xl8ne7ur7k
@user-xl8ne7ur7k 3 месяца назад
No node.js deu certo, muito obrigado pelo conhecimento já tinha ouvido falar isso no código fonte, mas nunca tinha implementado para testes.
@BraveCarnage
@BraveCarnage Месяц назад
2:04 não é verdade A função de ackermann é conhecida justamente pra provar que isso é falso.
@JosePaulo-zp7nd
@JosePaulo-zp7nd 3 месяца назад
que plataforma é essa onde ele faz esses desenhos?
@luciusstark
@luciusstark 2 месяца назад
ele deve usar o excalidraw, mas tem outros que usam o whimsical
@xpider8741
@xpider8741 3 месяца назад
Dev senior tem que ser calvo de regra
@Vinicius-kc9pq
@Vinicius-kc9pq Месяц назад
Eu amo programar mas trabalho com testes. Só de pensar em trabalhar como desenvolvedor já me vem na cabeça a imagem de eu ficando careca 😂
@civicmugenlxs
@civicmugenlxs 2 месяца назад
Assisti o video esperando como ele ia fazer pra transformar uma função recursiva sem usar loop, e fiquei so na espera mesmo Ate porque nao tem como vc simular recursividade sem usar pilha ou fila e sem usar loop
@marciojsm
@marciojsm 3 месяца назад
TCO acrescenta risco e complexidade quase sempre desnecessário. Mas vale mesmo a pena saber que existe.
@carlosmagno326
@carlosmagno326 2 месяца назад
me surpreende a quantidade de desenvolvedores nos comentarios que nao conseguem entender a mensagem do video, parece q so leem o titulo e ignoram o conteudo do video… pelo amor de deus
@AlexeiDimitri
@AlexeiDimitri Месяц назад
Se for para levar em conta a mensagem do vídeo, ninguém nem passaria dos 20 segundos de vídeo cara Ninguém usa recursividade na prática, é um negócio muito específico e que quase sempre tem um equivalente iterativo
@user-yb8zv2rr3c
@user-yb8zv2rr3c Месяц назад
Parece ser tão inteligente, mas por que criar clickbait? estamos em 2024 e isso é mais chato que tiktok.
@cfbf96
@cfbf96 3 месяца назад
kkkkk alá, o cara usa recursividade em prod kkkkkkkk coitado de quem revisa
@staubjoao
@staubjoao 3 месяца назад
muito bom o vídeo, me lembrei de uma parada que aprendi com um professor da faculdade é fazer for implícito usando numpy, é absurdamente mais rápido
@rayspictures
@rayspictures 3 месяца назад
Dev senior não usa for e sim Monads
@ruan9631
@ruan9631 Месяц назад
dev não pode escrever for.. mas também não pode escrever if, e agora?
@BrunoBafilli1
@BrunoBafilli1 3 месяца назад
Problema disso é que o custo de processamento fica muito alto. E tem risco de estourar um stackoverflow. De qualquer forma, parabens para o conteudo.
@GutoGalego
@GutoGalego 3 месяца назад
Não necessariamente, isso é detalhe de implementação. Pega um Elixir e tenta estourar stack overflow fazendo recursão com TCO. Não vai estourar, pode chamar 100 bilhões de vezes (como eu mostrei no vídeo)
@BrunoBafilli1
@BrunoBafilli1 3 месяца назад
Não sei dizer sobre o Elixir, pois não conheço a tecnologia, mas de modo geral, na maioria das linguagens, por baixo dos panos, ocupa mais memória, porque cada empilhamento na stack você precisa de uma cópia da função, isso naturalmente faz com que seja maior o uso de memória, independentemente da implementação. E o que pega um pouco é dizer que: DEV SENIOR NÃO USA FOR, se você não usar for na grande maioria esmagadora dos casos, você explode a aplicação rapidinho, o título que deu uma pegada..., mas o conteúdo é ótimo, parabéns, por mais vídeos como esse.@@GutoGalego
@Digimaloko
@Digimaloko 3 месяца назад
@@BrunoBafilli1Na verdade isso não ocorre se a única chamada recursiva for a ultima instrução da função , chamam isso de "Tail Recursion" que é quando você consegue se livrar da ultima chamada da call stack antes de chamar a função seguinte Ainda assim, uma chamada de função é muito mais pesada do que um simples jump em assembly, porém, algumas linguagens podem ser capazes de tornar essa chamada "inline", de forma que na prática ela vire um "loop" ao ser compilada, eu mesmo testei isso em C usando compiler explorer e observei que o assembly do loop e da função recursiva eram bastante similares e nenhum deles tinha chamadas a funções (exceto a função de print) Mas concordo com vc, é ridiculo não usar "For", até pq ele é a keyword mais flexivel de loop na maioria das linguagens, inclusive acho q o código fica bem menos legível usando recursão
@BrunoBafilli1
@BrunoBafilli1 3 месяца назад
@@Digimaloko Sim, eu entendo o que você quer dizer quando falamos sobre Tail Recursion, mas nem todas linguagens dão suporte a isso, quando você usa uma linguagem que não tem essa capacidade, trocar for por recursão é ridiculamente mais custoso. E um outro importante é que, não é por que esse comportamento ocorreu em C que vai ocorrer em todas as linguagens, esse tipo de coisa é sempre bom ser fundamentada na teoria do comportamento geral. Por isso mencionei que, o problema é o titulo do vídeo, isso pode gerar uma confusão monstruosa, principalmente nos mais iniciantes. Existe um estudo de Turing entre outros matemáticos provando que todo problema que recursão resolve, um loop também resolve, o problema é que, nem sempre é viável: (en.wikipedia.org/wiki/Computability_theory) o que pega é realmente o título do vídeo. Mas sua visão sobre é bem fundamentada, e o conteúdo do vídeo é ótimo, precisamos de mais vídeos como esse na comunidade, mas sem clickbait kkkkk
@Digimaloko
@Digimaloko 3 месяца назад
@@BrunoBafilli1 Cara concordo totalmente contigo, o titulo ai é 100% bait e mesmo no C cara eu tive que colocar a função como "static" pra ele saber que não ia ter linkagem externa e conseguir fazer essa otimização (sem isso ele n fez e é muito fácil fazer esse descuido pq raramente se olha o "assembly" do que foi gerado pra melhorar performance em programas comuns) Acho muito zoado depender desse tipo de otimização e mesmo eu n faria isso em qualquer projeto sério
@CoderA-Tech-pe2uq
@CoderA-Tech-pe2uq Месяц назад
For é so uma maneira mais bonita de escrever goto 😅
@valeriopro228
@valeriopro228 3 месяца назад
Fiz uma boa em js rsrsrs: function rec(num = 0) { if(num > 0){ return `${num} ${rec(num - 1)}`; } return 0; }
@PedroHenrique-qh3bl
@PedroHenrique-qh3bl 3 месяца назад
Resumindo, se não for em uma linguagem que for 100% funcional utilize um for kkkk
@_Acrk629lak0sUg1s
@_Acrk629lak0sUg1s 3 месяца назад
Também acho isso meio desnecessário e bastante "flex" ou Overengineering for, forEach etc são recursos criado pela própria linguagem com mais suporte compiladas de maneira correta etc, isso só é nescessário em linguagens puramente funcionais como lisp, Clojure e Haskel
@PedroHenrique-qh3bl
@PedroHenrique-qh3bl 3 месяца назад
@@_Acrk629lak0sUg1s Exatamente! Eu também uso forEach pra alguns casos, mas prefiro de longe utilizar instruções/ estruturas de repetição nativas (até porque são mais eficientes kk), .. E sim, seria um overengineering xgh for 🤣🤣
@daviramon8269
@daviramon8269 Месяц назад
Dev senior não…… caga regra
@casadogaspar
@casadogaspar 3 месяца назад
Caí do click bait haha
@rapaduraman3543
@rapaduraman3543 3 месяца назад
Eu acho que o ponto deste vídeo não é do que eu irei falar a seguida, mas é muito bom saber recursão, porém, nem de perto você irá ser um sênior por causa disso, estou falando somente da parte técnica em sí. Um sênior geralmente iria se preocupar com a otimização do código e isso você só saberá estudando análise de algorítmos e o famoso BigO para saber que com base na entrada de sua função aumentar o tempo de execução desta função também aumenta fazendo com que você troque muitas vezes a lógica de uma função só para deixá-la mais otimizada. Concluindo, uma recursão se não me engano é O(n^2) sendo então muito lenta a execução com base no aumento da entrada do parâmetro da função❤
@GutoGalego
@GutoGalego 3 месяца назад
A técnica de recursão per-se não diz sobre a complexidade Big O. Você pode ter uma DFS recursiva numa arvore binária O(N) por exemplo. A recursividade em si não altera a complexidade do algoritmo.
@AlexeiDimitri
@AlexeiDimitri Месяц назад
A tese do título vídeo é muito burra Recursão tem um limite natural que explode muito rapidamente, é preciso conhecer a natureza dos valores operados e computar se haverá estouro de pilha ou de inteiros E o uso de funções do tipo map-reduce parece bonita a princípio mas torna de difícil depuração o código e na prática não existe otimização na execução Loops for por outro lado já são otimizados há décadas e inclusive permitem ao compilador e ao runtime otimizar a execução de várias formas, incluindo a paralelização do processamento E... vc reduziu propositalmente a quantidade de parâmetros em Elixir em relação a versão Python? CARA, não é a primeira vez que vejo vc usando falsas equivalências de código para justificar alguma coisa No caso concreto, vc tá deixando de passar um número para cada chamada de pilha, o que simplesmente permite o dobro de chamadas recursivas e isso faz uma diferença MONSTRA Sem contar que vc malandramente inverteu a lógica de bottom-up para top-bottom a fim de colocar a condição de parada na assertiva da função E convenhamos, na prática ninguém usa linguagens funcionais no mercado. Apenas algumas aplicações muito específicas ocasionalmente as usam, mas o pessoa prefere usar R, Julia e até MatLab. Vc tá com o VSCode e não tem .NET na máquina? Tudo isso é preguiça de ativar a extensão e deixar ele baixar os tools?
@marlonoliveira175
@marlonoliveira175 3 месяца назад
Em sistemas críticos o recomendado é usar for loops com um plus, garantia que o loop terá um fim. Recursividade é legal, mas em sistema crítico não é recomendado. O que seria um sistema crítico? Um sistema para uma sonda espacial que vai chegar muito longe e qualquer falha de programação será uma catástrofe.
@Mateus-tj7pz
@Mateus-tj7pz 3 месяца назад
Depende, kernel do linux usa arvores, e o melhor jeito de percorer uma arvore eh um algoritmo recursivo. Na computacao tudo depende, sempre vai variar de caso pra caso.
@marlonoliveira175
@marlonoliveira175 3 месяца назад
@@Mateus-tj7pz Linux não é usado no exemplo que dei.
@Mateus-tj7pz
@Mateus-tj7pz 3 месяца назад
@@marlonoliveira175 Eh usado sim. O Perseverance e Ingenuity sao exemplos de sistemas criticos que usam linux, e por consequencia usam tambem algoritmos recursivos. Kernel do linux por si soh eh um sistema critico. E ignorando que o Kernel usa algoritmos recursivos, robotica usa recursividade em um monte de algoritmos, desde navegacao ate a controle de atuadores.
@rasputindasilva858
@rasputindasilva858 3 месяца назад
Fdx! a ideia seria ensinar não desensinar. Usem loops e c@guem nestes conceitos de mrda.
@cristianoo2
@cristianoo2 3 месяца назад
Exatamente. Tem um sujeito americano que fica fazendo shorts de python. O cara escreve um caminhão de b**ta quase todo vídeo. E um monte de maluco seguindo e aplaudindo. É nessas horas que eu temo pelo futuro da minha profissão e acredito que sim as LLMs vão substituir uns 80% dessa galera aí
@luciusstark
@luciusstark 2 месяца назад
@@cristianoo2melhor pra gente então; quando o profissional é escasso, o salário é maior. 😂
@snowshoyo
@snowshoyo 3 месяца назад
Recursao é lenta......
@GutoGalego
@GutoGalego 3 месяца назад
Sem ver a implementação não tem como saber. Recursão com TCO dependendo do caso performa pelo menos igual loop.
@cristianoo2
@cristianoo2 3 месяца назад
​@@GutoGalegoerrado. Performa infinitamente pior. Para chamada de método você tem que: Salvar a posição atual do stack pointer como return pointer na pilha Por na pilha os parâmetros Por o endereço do destino no instruction pointer Chamar a interrupção de jump Depois tem que desfazer: Desempilhar o stack pointer de retorno, empilhar o return e atualizar o instruction pointer. Loop local: basta um jump. Olha a diferença. Isso que dá achar que faculdade não é necessária...
@Mateus-tj7pz
@Mateus-tj7pz 3 месяца назад
@@cristianoo2 Evite a soberba em relação ao seu conhecimento. Com otimizações realizadas pelo compilador, o mesmo stack frame é utilizado (no caso do TCO), eliminando a necessidade de empilhar e desempilhar a cada chamada de função. Isso resulta em desempenho prático equivalente a um loop. E existem outras tecnicas que podem otimizar um algoritmo recursivo, como memoization.
@Mateus-tj7pz
@Mateus-tj7pz 3 месяца назад
@@cristianoo2 Ate mesmo um algoritmo recursivo para calcular fibonnaci pode perfomar quase igual ao mesmo algoritmo so que implementado com um loop, se feito da forma correta, e olha que a quantidade de folhas na arvore de fibonnaci vai subindo de maneira esponencial quanto mais niveis a arvore tem.
@GutoGalego
@GutoGalego 3 месяца назад
@anoo2 vê o vídeo de novo, pesquisa no google "TCO compiler optimization", e ai descobre onde no seu comentário você presumiu uma coisa que não é verdade
@rodrigobonfim9011
@rodrigobonfim9011 3 месяца назад
O cara fala pra dentro, dá pra ouvir nada.
Далее
O problema que só 1% dos devs consegue resolver
18:25
but what is 'a lifetime?
12:20
Просмотров 58 тыс.
Two Sum | LeetCode 1 | JavaScript | Easy
13:20
Просмотров 6 тыс.
Porque alguns devs ODEIAM else?
10:51
Просмотров 70 тыс.
SWITCH é mais rápido que IF ELSE?
8:30
Просмотров 21 тыс.
finalmente aprenda PONTEIROS (C/Rust/Python)
12:18
Просмотров 13 тыс.
REST vs GraphQL | Quando usar qual?
13:41
Просмотров 4,2 тыс.
Rust's Alien Data Types 👽 Box, Rc, Arc
11:54
Просмотров 133 тыс.
POPVIBE V5000 setup ASMR
0:26
Просмотров 643 тыс.
Калькулятор в iPadOS 18 ➕
0:38
Просмотров 134 тыс.