Como ser um EXCELENTE programador?

23.99k views6866 WordsCopy TextShare
Augusto Galego
📖 Meu curso de estruturas de dados e algoritmos: https://pay.hub.la/L8wi9vio7WPnWbmF8ZIO?coupon=LOG...
Video Transcript:
Esse é o vídeo mais difícil que eu já fiz, muito mais difícil que os vídeos técnicos. Fica aqui que vai valer a pena. Ao longo dos meus quase 10 anos de carreira, eu nunca soube direito o que que era lógica de programação.
Eu não tive aula disso na faculdade. Ninguém nunca me entrevistou sobre isso. Ninguém nunca fez essa pergunta para mim numa entrevista de emprego.
Isso nunca foi útil no meu emprego per, mas desde que eu comecei aqui no YouTube, pelo menos uma vez por semana me pedem para fazer um vídeo sobre lógica de programação, que é algo que eu nem sei direito se existe, tá? OK. Eu sei que quem teve isso na faculdade aprendeu ali o Portugal, aprendeu, sei lá, laços, caixinhas, os fluxogramas e tudo isso daqui é ensinado como lógica de programação.
E para mim, sinceramente, lógica de programação, sempre que alguém fala isso, vem na minha cabeça que é a capacidade que eu tenho de desenhar um fluxograma, que pode ser um grafo, uma máquina de estados, um autômóica de programação é capacidade. Consegue desenhar umas bolinhas aqui, umas setinhas, colocar aqui se desenhar um bloco, entender que esse bloco aqui pode representar um loop que vai executar aqui do final e aí vai voltar aqui pro começo. Dada certa condição, para mim a tal lógica de programação sempre foi na minha cabeça isso daqui.
Eu consigo pegar um problema e eu consigo quebrar ele em uma tarefa ou sequência de tarefas que o computador vai executar. Então, se é só isso, só isso aqui é lógica de programação. Eu fiquei um tempão tentando quebrar a cabeça nisso, porque sinceramente para mim o vídeo acabaria aqui, né?
As pessoas querem que eu explique lógica de programação. Na minha concepção, lógica de programação é isso daqui. Não tem absolutamente mais nada.
Mas eu fiquei com uma pulguinha atrás da orelha. Não pode ser só isso. A tal lógica de programação, ela não pode ser resumida.
A, basicamente eu consigo pensar numa máquina de estado, certo? Não faz sentido. Qualquer curso introdutório de programação vai te ensinar isso aqui.
E tem uma pluguinha atrás da orelha que me diz que quando as pessoas me pedem lógica de programação, elas querem algo a mais. Não é exatamente isso que elas querem. Eu acho que eu entendi, tá?
Eu acho que eu entendi o que que é a tal lógica de programação que as pessoas tanto buscam. Eu vou explicar o que que eu compreendo como sendo isso. E na verdade a pergunta que as pessoas fazem quando elas querem saber o que que é a lógica de programação não é isso que elas querem.
Eu acho que elas querem isso o quê. Eu acho que elas querem a resposta para essa pergunta. Como eu me torno um programador competente e não o que é a lógica de programação ou como treina a lógica de programação.
Esse canal, né, o meu canal foi focado por muito tempo em lit code, em DSA, né, estruturas de dados e algoritmos. E muita gente parece que conflita essas duas coisas. As pessoas vem porque eu sou bom Elite Code, elas presumem que eu sou um programador competente.
Eu acredito que eu seja, mas não por isso. E seria muito vantajoso para mim eu fazer o salto lógico de eu te falar que DSA, certo? Estrutura de dados, algoritmos, lit code, pura e simplesmente são lógicas de programação, certo?
É muito vantajoso, até porque eu tenho um curso disso. Eu te ensino as principais estruturas de dados e algoritmos. Eu te ensino arrays, linked lists, árvores binárias, enfim.
Tudo isso de fato compõe o seu repertório, né? Amplia sua capacidade de resolução de problemas. Eu acredito que você melhor assim no programador sabendo essas coisas, mas eu não posso ser leviano e conflitar isso aqui e te dizer que isso aqui é lógica de programação.
Se você fizer esse curso, você vai ser um grande programador. Não seria verdade, certo? Eu acho que é importante.
Eu acho que isso daqui melhora um pouco a sua lógica de programação. Sim, de fato, que você vai se tornar um programador melhor, mais competente, que você não vai se arrepender, certo? Você vai poder pedir reaimbols se você quiser, quase ninguém pede.
Enfim, o link para comprar meu curso tá na descrição, mas é é muito leviano eu terminar minha análise aqui, né? Eu nem comecei a minha análise, na verdade. Ambas essas coisas, estruturas de dados e algoritmos e lit code, compõe um pouco do que é lógica de programação, mas elas são uma parte pequena do todo.
Tem duas frases famosas que eu quero usar para iniciar minha análise aqui. Primeiro é uma frase de um grande gameed dev, John Romero, que ele falou o seguinte: "Você pode pensar que programadores não são artistas, mas programação é uma profissão extremamente criativa. Ela é criatividade baseada em lógica.
E isso aqui é correto, existe bastante espaço para criatividade em programação, mas a gente precisa ser baseado em lógica, né? Se a gente escrever software, assim como os roteiristas escreveram o filme Donarco, o software não vai compilar. Se o meu software tiver cheio de plothes, ele vai est cheio de bug, ele não vai funcionar direito, certo?
Para ser um bom programador, a gente vai precisar que lógica e criatividade caminhem lado a lado. E tem uma frase que é eu acho ainda mais importante que essa, mais relevante que essa no nosso contexto, que é que o ato de descrever um programa de forma inambígua e detalhada e o ato de programar são exatamente a mesma coisa. E são coisas tão inseparáveis que eu consigo programar agora na sua frente utilizando somente português.
A gente consegue realisticamente conceber algo que é basicamente programação, só descrevendo um programa. Presta atenção em mim agora, tá? Recebemos uma lista com n números inteiros.
Inicializamos uma variável inteira x no valor zero. Em sequência, acessamos todos os itens na lista, um por um. E para cada item, a gente adiciona o valor do item ao x e retorna o valor contido em x.
Essa descrição em português, ela é bastante verbosa e a gente consegue diminuir essa verbosidade através de pseudocódigo. Eu não preciso de todas essas palavras para descrever o programa que eu tô descrevendo. A gente pode transformar isso aqui em pseudocódigo, mas não existe necessidade disso.
A gente pode transformar isso em Python e não é nada difícil, certo? Que que eu descrevi aqui? Eu descrevi um método def método.
Recebemos uma lista com n inteiro, a gente recebe uma lista. Inicializamos uma variável x no valor 0. X = 0.
Em sequência, acessamos todos os itens da lista um por um. For n, inta. Para cada um, adicionamos o valor do item ao x, x + ig a n.
No final, retorno o valor contido em x. Return x. Nota.
Perceba que esse programa aqui em cima de escrito perfeitamente em português e esse programa aqui em Python são exatamente o mesmo programa. É só pura e simplesmente uma questão de sintaxe. Agora a gente precisa entrar numa pequena tangente aqui, certo?
O fato de eu ter escolhido o Python e de eu não ter escolhido Rust fez com que eu não precisasse ser específico a nível muito baixo. A quantidade de especificidade que eu tenho aqui em português e a quantidade de especificidade que eu tenho aqui em Python são parecidas. Quanto mais a gente se aproximar de uma linguagem de máquina, maior a granularidade, maior o nível de especificidade que a gente vai precisar ter.
Se eu tentar fazer esse mesmo código aqui em Rust, eu vou ser forçado a tomar decisões que eu não fui forçado a tomar em Python, nem em português. O código em Rust, embora muito parecido com o de Python, seria algo mais ou menos assim, tá? Quais as diferenças notáveis aqui em Python?
Eu não precisei descrever o tipo dessa lista. Em Rush eu sou obrigado, foi obrigado a dizer que é uma lista de números inteiros. Em Python eu não precisei dizer se esse X era mutável ou imutável.
Em Rust eu fui obrigado a dizer que esse X era mutável. Em Python eu não precisei dizer qual é o retorno do da variável X, qual é o tipo desse retorno. Em Rust, eu sou obrigado a dizer que o meu tipo de retorno é um inteiro também.
Em Rust, eu também precisei dizer o quanto alocar de memória para cada uma dessas coisas, certo? Em Python, esse zero aqui, eu não necessariamente sei se eu tô usando 8 bits, 16 bits, 32 bits, 64 bits. Na verdade, se você souber muito em de Python, talvez você saiba.
Fato é que Python não nos obriga a determinar isso e Rust me obrigou a dizer o número de bits que eu vou separar, que no caso são 32 bits, mais do que isso vai dar um overflow. Então, nota que o o programa, embora não seja exatamente o mesmo, certo? Existem pequenas diferenças aqui entre o meu programa em Python ou meu programa em Rust.
Dependendo dos nossos parâmetros, dependendo do objetivo que a gente queira esse programa, eles fazem exatamente a mesma coisa. lógica de programação é resolução de problemas. Aqui eu tô sendo especificamente pedante porque eu quero te mostrar que a nossa programação em português talvez seja incompleta.
Vamos citar o grande. Edgar Dixtra Da enxergava isso daqui. Enxergava a nossa programação em linguagem natural como uma grande torice.
Uma linguagem de programação é uma interface propositalmente pequena, em que existe um número limitado de instruções, de formas de se construir uma instrução e uma estrutura bastante rígida. Em teoria, programar linguagem natural seria mais fácil pro ser humano, porque a gente já tá habituado a nos comunicar assim, né? Porém, seria mais difícil paraa máquina entender, uma vez que linguagem natural não foi feito para máquinas interpretarem.
Agora o Dixtra, ele vai questionar essa presunção, ele vai dar o exemplo da matemática e ele fala sobre o design da notação matemática, certo? Que ela é denotada com simbolismos que não são em inglês nem português. E existe o motivo da da matemática ser denotada formalmente, que só existem as instruções necessárias para se fazer matemática.
Ao remover tudo de humano que tem na linguagem e deixar só o necessário para executar a tarefa que a gente precisa, a linguagem se torna mais poderosa e não menos. Vamos para um exemplo aqui do que que Dixterra tá falando, tá? Pensa bem nessas frases aqui em português, tá?
Inicialize um valor X ou então defina uma variável com valor zero ou então crie um número zero. Todas essas frases existem pelo menos algum certo grau de ambiguidade. Todas essas frases não têm uma especificidade perfeita e elas podem ser interpretadas de diferentes maneiras.
Agora a frase let x = 0 inambígua. Não existe ambiguidade nisso daqui. É mais curto, mais simples, mais expressivo e menos propenso a erros.
O tempo que demora para você digitar inicialize um valor ou define uma variável com valor zero é maior do que o tempo que demora para você digitar let x = 0. Vamos voltar pro nosso problema aqui. Vamos voltar pro meu software em português.
Recebemos uma lista com n números inteiros. A gente sabe que é n inteiros. O que que acontece se não for n inteiros?
Eu preciso garantir isso em tempo de compilação ou durante runtime. Inicializamos uma variável inteira X no valor zero. Quanto de memória é para eu alocar para essa variável?
Ela vai mudar? Ela vai crescer? Ela é sempre positiva.
Em sequência, estamos todos os itens na lista. É legal. Dá para fazer em paralelo?
Vale a pena fazer em paralelo? De repente existe algum ganho de performance? Deixa eu paralelizar essa parte.
Nota que dos mais simples dos programas e basicamente não existe um programa mais simples do que isso, certo? São cinco linhas aqui em português. A gente identificou várias ambiguidades ou incompletudes do nosso programa.
Eu não sei se tem validação, eu não sei se a minha variável é mutável ou imutável, eu não sei se é para fazer paralelismo, eu não sei se é para checar as coisas em runtime ou em tempo de compilação. Em Rust, com menos caracteres, com menos linhas de descrição. A gente definiu tudo isso, a gente definiu todos esses parâmetros no R.
Na verdade, em qualquer lugar que programadores se encontram online, é muito comum a gente encontrar sentimentos como esse. Me formei, mas sinto que eu não sei nada. desesperado, estudo e parece que eu não sei nada.
Permitam-me minha licença poética aqui de presumir que eu sei qual é a situação dessas pessoas, mas o sentimento de não saber nada, o sentimento de achar que você não sabe nada, mesmo tendo estudado muito, ele é um sentimento que decorre do fato de você ter decorado muita coisa e não necessariamente entendido muita coisa. Nas palavras de Richard Finan, né, tem uma história em que ele é aponto para um pássaro e ele fala que o pássaro se chama Spencers Rebel, mas em italiano chamam chutulatipita ou em chinês chun longar e que você pode decorar o nome do pássaro em todas as linguagens do mundo. E depois que você decorar o nome do pássaro em todas as línguas que existem, você não vai saber de absolutamente nada sobre o pássaro.
Você vai saber apenas como os seres humanos chamam o pássaro. E o que importa não é a gente decorar o nome do pássaro em 15 línguas diferentes, é a gente olhar pro pássaro e saber o que que ele tá fazendo. Certo?
Eu vejo vocês da faculdade, eu vejo vocês aqui do studio Twitch. tentando encaixar todas as regrinhas possíveis na cabeça de vocês, certo? Que Python é fortemente tipada, mas é dinamicamente tipada também, certo?
É public static string, main void, args, talvez s de solid dry lambdas, elastic bean stalk, http https que é na camada 7 da o, eu acho, ou será que era camada 4? O certo é update, nome da tabela wear, condição, ou será que é sete coluna? Update, nome, tabela.
O que que eu preciso fazer? Que que faz mais sentido, né? Será que é um Kubernetes Kafka Backend?
É isso que eu preciso estudar ou eu devo focar em Git e projetos pessoais e otimizar meu LinkedIn? Talvez. Dizem que dados paga bem, né?
Então, de repente eu preciso descobrir o que que é um KGLE e como é que se implementa ele e quais empresas que cobram MLOPS para botar isso aí no meu currículo. E eu acho que a gente tá invertendo essa ordem, certo? Eu tô propositalmente te confundindo.
É, qual caminho que eu devo trilhar? E bom, isso vai depender de onde você quer chegar, né? do que que você quer fazer, que se você não sabe é bom, é, não importa.
Eu falei tudo isso daqui, eu joguei todas essas palavras aqui, essas strings de coisas especificamente para tentar confundir. O que que isso daqui tem a ver com lógica de programação? A gente tava falando de Python até agora, como é que a gente chegou em o que que eu preciso estudar para arrumar um emprego?
É porque, bom, na minha cabeça, esse problema aqui que eu vejo as pessoas tendo e lógicas de programação são o mesmo problema, o mesmo problema do gatinho aqui. Imagina o seguinte, imagina que você quer cozinhar o macarrão e você tem um livro de receita, certo? Com esse livro aqui você vai conseguir cozinhar.
Agora, se você só souber cozinhar, você não necessariamente precisa desse livro aqui. Cozinhar é basicamente física, né? Um pouquinho de gastronomia.
Se você entende o que você quer fazer, você tem prática, certo? Se você sabe balancear sal, gordura, ácido e calor, você sabe fazer qualquer coisa. Pode ser que aqui no livro de receitas te diga que você vai precisar de uma panela e um fogão, né?
Mas de repente seu fogão tá sem gás e você não tem uma panela. Se eu não tiver panela e fogão, ainda dá para fazer macarrão? Bom, se você depender 100% do livro, não vai dar.
Você não tem aquela aquele passo necessário da receita, né? Mas se você sabe o que que você quer fazer, se você sabe o que que precisa ser feito, se você entende esses quatro conceitos aqui, de repente você percebe que você tem uma travessa e um forno e que dada certas condições com isso daqui, vai ser possível fazer um macarrão. Esse não é o Happy PEF, né?
Não é o caminho correto, não é o que tá no livro, mas que vai funcionar, vai funcionar. Assim como você pode aprender que a carne vai na frigideira, mas de repente você só tem uma panela fundo, você só tem uma air fryer ou um forno, né? O livro de receitas aqui no nosso caso, isso aqui é a analogia que eu tô fazendo, é com um curso, um tutorial.
Os melhores tutoriais, os melhores cursos, os melhores conteúdos, eles vão te ensinar sobre isso daqui, tá? Eles vão fazer você entender que que você quer fazer, certo? Que você quer fazer quando você tá aquecendo uma uma carne na frigideira, você quer criar reação de maisar, acho que chama, e você quer levar a temperatura interna da carne a a 73ºC, sabe?
A partir do momento que você entende que você quer chegar nesse ponto aqui, você precisa entender o ferramental que você tem à sua disposição e o que que você pode fazer para de fato chegar nesse ponto aqui. O que você quer não é botar o macarrão na panela no fogão, que você quer simultaneamente hidratar ele e levar a temperatura dele ao ponto de que ele fique cozido no na medida que você quer. Deixa eu te perguntar, por que que você quer aprender Docker?
O que que você acha que Docker vai te ensinar que vai ser útil para você? Ah, eu quero aprender Docker porque eu quero um emprego. OK, óbvio, com certeza.
Agora você tá presumindo que a empresa vai olhar, vai enxergar que Docker é um diferencial no seu currículo, é um diferencial, bom, se eles estão selecionando para Docker, você provavelmente vai precisar usar Docker no seu trabalho. Qual é o problema que a empresa quer resolver que Docker vai ser a solução? O que que existe de problema no mundo?
O que que existe de problema na área de software que o Docker vai solucionar? O que exatamente que a gente tá querendo que o nosso Docker faça, certo? Bom, a gente quer elevar a temperatura da carne até 70 73ºC de temperatura interna.
Legal. O que que a gente quer que o Docker faça pra gente? que não dá para fazer de outra maneira ou de repente dá para fazer de outra maneira e quais são as outras maneiras, qual o objetivo final dessa tecnologia, para que que a gente tá usando ela?
E a partir desse ponto, a partir do entendimento do objetivo final que a gente quer cumprir, certo? A gente precisa entender como é que a gente vai ficar bom nisso daqui. Quando quando que eu sei que eu dominei Docker?
Bom, quando que você sabe que você domina fritar um ovo? Você vai pegar duas ou três referências de qualidade, de repente vídeos no YouTube de grandes chefes, de repente livros, de repente artigos, até o chatt vai te ajudar aqui. Você vai cozinhar, fritar uns 20 ovos.
é dois ou três por dia. Cada vez que algo der certo ou d errado, você vai tentar entender o que que deu certo, o que que deu errado. Provavelmente depois de 10 dias você vai estar muito bom nisso daqui.
Você vai conseguir fazer, é, eu vou poder confiar em você. Eu posso te dar a tarefa de fritar um ovo e confiar que vai surgir algo decente na maioria das vezes. OK?
Esquece a analogia do ovo. Então aqui, como é que você aprende Docker? Você pega duas ou três referências decentes, você faz de repente, não precisa ser 20 aqui, pode ser cinco projetos, é 20 exercícios que utilizam um Docker para solucionar um problema.
Faz ali um por dia. Em cinco dias você vai ser um iniciante com uma certa capacidade. Você não vai ser um expert, você não vai ser um grande estudioso de Docker, você não vai ser o Gordon Ramsey do Docker, mas realisticamente eu vou conseguir te dar uma tarefa de Docker e confiar que você vai entregar algo decente.
Lógica de programação não surge do nada. Eu vejo que as pessoas acham que programar de repente é uma sequência de de letrinhas e de inputs é L1, L2, R1, R2, esquerda, baixo, direita, cima, esquerda, baixa, direita, cima e torcer pro computador cuspir algo que funcione, que vai solucionar o seu problema, ou pelo menos cuspir um erro que a gente vai conseguir jogar no Stack Overflow e ver se o Stack Overflow ou a LLM vai resolver pra gente esse erro. E na minha cabeça, pode ser só porque eu sou maluco, tá?
Lógica de programação é exatamente igual a lógica de culinária ou qualquer tipo de lógica. Em essência, tudo isso é a mesma coisa. Em essência, a gente tem um resultado que a gente quer obter.
Esse resultado vai ser obtido através de quebrar o problema em problemas menores. E a gente vai orquestrar diferentes componentes, certo? Utilizar diferentes ferramentas que a gente tem no nosso repertório, que a gente tem experiência, que a gente treinou com essas ferramentas para solucionar diversos problemas.
Cada uma dessas funções vai ter eh cada uma dessas ferramentas, desses componentes, vai ter uma função, vai ter um propósito, vai ter um objetivo na solução final, né? Ou sei lá, no prato final. Você provavelmente não tem a menor ideia de como você faz um serviço de streaming.
Se eu te pedir para clonar Netflix, você provavelmente não sabe nem por onde começar e não tem problema. Pode ser que você tenha lógica, talvez te falte o repertório. Esse problema aqui de Python da lista eu consigo resolver dessa forma aqui também, mas como eu tenho repertório também, como eu tenho anos de experiência na área com Python, eu consigo resolver dessa forma aqui também.
Some lista é SU faz parte do meu repertório. É o tipo de coisa que eu conheço, certo? Dentro do meu repertório aqui, eu tenho compreendido o que que é um método.
Método tá no meu repertório. O que que é um argumento, argumento tá no meu repertório, o que que é uma variável, o que que é um número inteiro, que que é um loop, o que que é um array. Eu também conheço o método Bio Teams tudo isso aqui faz parte do meu repertório de programação.
Se você ainda tá no vídeo, se você chegou até aqui, tolerou toda essa minha filosofada gigantesca, vamos te entregar então a tal lógica de programação. Vamos te entregar depois de fazer esse vídeo gigantesco, a minha melhor compreensão atual do que que compreende lógica de programação ou do que compreende ser um bom programador. Tem aquela talk famosa, né?
Aquela, enfim, artigo famoso, não sei, que se chama que não existe lógica de de programação, que é um, acredito que doutorando na área argumentando que máquinas de sobre máquina de tuning e cálculo lambda. Não é para esse lado que eu quero levar essa conversa, tá? Eu quero levar ela para outro lado.
Lógica de programação são três ou quatro coisas. A primeira delas é a habilidade de quebrar problemas em problemas menores, certo? Aqui no nosso exemplo de streaming, bom, a gente não sabe fazer um streaming, mas a gente consegue quebrar isso daqui em alguns problemas menores.
Quais são os problemas menores? Bom, eu não sei fazer um serviço de streaming, mas eu sei que a gente vai ter que ter um cadastro de usuário, certo? Eu sei que o usuário vai precisar fazer login, que precisa ter autenticação.
Eu sei que em algum momento ele vai acessar uma página com fotinhos dos vídeos, que ele vai poder clicar nos fotinhos dos vídeos. No momento que ele clica nessa página com fotinho do vídeo, eu vou ser redirecionado para uma RL que é tipo vídeo/id = 1 2 3 4. Nessa página aqui, com o momento que o usuário cadastrou, fez login, clicou na fotinho, entrou na página do vídeo, o vídeo deve dar play.
OK. Muito bem. A gente sabe também que esse vídeo aqui ele não tá no computador do usuário, né?
Não tem como o usuário ter todos os vídeos do mundo no computador dele. Não faz sentido. Esse vídeo aqui tá enfiado em um servidor, em algum lugar.
Então, diso aqui surge duas perguntas, né? É onde tá o tal vídeo, né, do servidor? Onde cadê o vídeo?
E como é que ele chega para usuário? Você viu que a partir da da do nebuloso aqui, streaming de vídeo, a gente já quebrou isso daqui em várias tarefas e a gente já chegou pelo menos em boas perguntas para se fazer, que é onde que tá o vídeo e como que ele chega no usuário. E a partir daqui a gente pode fazer uma pesquisa.
E esse é o primeiro passo da lógica de programação, né? Habilidade de quebrar problemas em problemas menores. Eu posso tentar outro problema aqui de lógica de programação pra gente tentar quebrar um problema em problemas menores, certo?
Vamos lá. Eu tenho um problema que eu preciso remover um elemento de array. Como que eu removo o elemental array?
Eu vou no Google aqui de repente, Python. Como é que eu removo elemental array? Achei aqui, ó.
Método pop, eu removo um element array. Beleza? Qual que é o meu problema?
Eu recebo um array de números inteiros. Eu preciso remover todos os inteiros que tem o valor de val. Então eu recebo nums aqui, eu recebo o val, certo?
Imaginando que a gente recebe um val igual a 3 e o meu Noss vai ser 1 2 3 4 3 4, eu vou precisar que o meu Noss no final seja 1 2 4 4. Certo? Esse aqui vai ser o meu input, né?
E esse aqui precisa ser o meu output. OK? Vamos quebrar esse problema com problemas menores.
O que que meu pop recebe, né? O que que o tal, eu posso usar o tal do pop para resolver isso aqui, ó. O pop ele vai receber a posição do elemento que eu quero remover.
Então, bom, o que que eu preciso encontrar aqui? Posição dos elementos que eu quero remover. Isso aqui é a primeira coisa que eu preciso fazer.
Como é que eu vou encontrar essa posição dos elementos? Como é que eu vou encontrar qual elemento que é o três, né? Supondo aqui que meu valja três, que eu quero encontrar os três, como é que eu encontro três dentro de um array?
Ah, sei lá, eu posso olhar um elemento para um elemento, né? Mas eu não preciso encontrar o elemento, eu preciso encontrar a posição do elemento. Então, vamos olhar posição por posição dentro do array.
Eu inicializou minha posição de zero aqui, certo? Aí eu quero olhar todas as posições. Eu dou um while e menor do que lane nums.
Cal, como é que tu pensou em usar while e lane nums aqui e inicializar uma variável igual a zer? Isso aqui é repertório. Isso aqui é prática.
Eu susto dessas coisas. Isso só surgiu na minha cabeça porque eu tenho repertório, tenho a prática. Aí bom, tô dando um loop aqui, né?
Tô comparando todos os elementos. Eu vejo se o elemento que eu tô olhando no momento agora é igual igual a três, né? Três, no nosso caso é a variável val.
Se for igual a três, se isso aqui for verdade, eu vou dar um nums ppp pop, aquele elemento que é o que eu encontrei que eu tenho que fazer, né? Encontrei aqui que o pop remove elementos de array. É isso que eu quero fazer.
Day pop, remover aquele elemento de array. Se não for, né, caso não seja o elemento que precisa ser removido, eu dou um mais para incrementar aqui e mais igual a 1, no caso porque é Python. E acabou, tá resolvido o problema.
Eu clico aqui em submit. Eu creerei o problema em problemas menores. Eu resolver esses problemas menores, certo?
Preciso remover todas as variáveis de um array. Bom, olha todos os lugares desse array, encontra-se o a variável é igual ao valor que eu quero remover e eu dou um pop, certo? quebrei o problema em três partes, resolvi que dar uma dessas partes.
Isso aqui, esse repertório, essa prática é isso que eu te ensino no curso de estrutura de dados e algoritmos. É essa prática, essa fluidez, esse repertório que você vai pegar, que é mais focado para entrevista de emprego, tá? A gente também tem um workshop de 10 elite codes para entrevistas.
Isso aqui é mais focado ainda em entrevista de emprego, principalmente entrevista para gringa. Se você quer ajuda nessa parte de fluidez, nessa parte repertório de estruturas de dados e algoritmos, você vai aprender as principais estruturas, aprender os principais algoritmos, vai ter recomendação de exercícios para você praticar bastante. Então, clica no link na descrição e vai ser um prazer te ajudar com isso, tá?
Você não vai se arrepender. Se você se arrepender, você pode pedir reembols, tá? Eu falo isso porque ninguém quase nunca pede.
Pode pedir daqui um mês, dois meses, se você não gostou, qualquer coisa do tipo, não tem nenhum problema. E na real, cara, esse vídeo tá tá tão longo, tá tá um pouco um pouco especial esse vídeo que você vai fazer o seguinte, tá? Você vai vir aqui no vídeo, vai clicar aqui no link na descrição, esquece esse cupom aqui que tá aqui, tá?
Se tiver algum diferente, vou te dar um cupom melhor para você que chegou até aqui. É, talvez já esteja embido no link, talvez não. Você vem aqui, digita lógica, aplica o cupom lógica sem acento, enfim, no final o curso que vai estar te custando é sei lá, duas pizzas ou então se você parcelar dois guaranás por mês.
Agora acabou o vídeo? Não, não acabou. Claro que não.
A gente só falou da primeira parte, né, da habilidade de quebrar o problema em problemas menores. Nota que eu falei aqui nessa parte do server, onde que tá o vídeo, como que a gente, como que o vídeo chega até o usuário, né? A gente tem a segunda parte, né, que é sobre habilidade de pesquisa e senso crítico, ver quando que as coisas vão se aplicar no seu caso.
O que que é uma boa referência para eu encontrar streaming, certo? Eu preciso encontrar artigos bons de streaming. De repente eu encontrei uma fonte que me explica como é que streaming funciona, né?
Eu preciso entender como funciona, porque talvez nessa fonte, nessa pesquisa, eu encontrei alguém implementando streaming em, sei lá, em goeng, só que de repente a minha linguagem é Java. De repente a empresa que eu trabalho trabalho com Java. Então eu preciso na verdade, né, entender o que que tá sendo feito em Goang para eu conseguir fazer essa mesma coisa que tá sendo feito em Golang.
Nesse artigo que eu encontrei em Java, na empresa que eu trabalho, no contexto que eu trabalho. Essa sua habilidade de pesquisa aqui, senso crítico e traduzir as coisas pro seu ambiente também é importantíssimo. E a terceira coisa que dado tempo suficiente, você vai conseguir fazer a maioria das coisas com pesquisa e com um brio o suficiente para ir atrás.
Mas algo que vai fazer você sentir que você é um bom programador é o tal repertório. Repertório, repertório, repertório. O que que é repertório?
Eu ajudei a empresa brasileira a criar agente de IA, porque eu estudei IA. Eu criei um agente IA no projeto pessoal. Apresentei aqui no YouTube como é que funciona o Haag, na empresa antiga que eu trabalhava.
A gente lidava, criava gente todo dia. Todo dia não vai tô exagerando. Eu aprendi a fazer isso aqui.
Aprendi a criar um repertório em volta disso daqui. Às vezes você bate no problema, você olha aqui de repente o problema. Ah, isso aqui tem cara de reds.
Como assim cara de heads? Como é que você sabe que tem cara de heads? Bom, tem cara de reds, porque uma vez você aprendeu como é que heads funcionava e você usou heads numa empresa, trocou para outra empresa, viu, usou heads como cash de novo, mexeu num heads de uma terceira empresa, de repente você vai enxergar um problema, ver que esse problema tem cara de heads.
E esse repertório aqui, que é importantíssimo, esse repertório vai tirar, te tirar dessa situação aqui, ó, que eu sinto que eu não sei nada, certo? Repertório que corrige isso daqui na minha visão, sinto que eu não sei nada. Como assim?
Você não vai sentir que você não sabe nada se você bater o olho num problema e olhar: "Ah, olha só, esse problema aqui tem cara de que vai resolvido ser resolvido com uma fila e com dynamo database. " E esse repertório aqui, você vai criar ele através de quatro projetos. Se você ler 1 2 3 4 5 15 livros de receita, só que você nunca cozinhou um macarrão, você não vai ter confiança.
Para fazer projetos, criar o seu repertório aí de programador. Você vai ter que fazer projetos, coisas que você nunca fez. Você vai ter que resolver problemas que você nunca resolveu em contextos diferentes.
Vai ter que fazer a sua pesquisa lá, vai afiar o seu senso crítico de pesquisar o que que é uma referência boa. Vai implementar essa referência, implementar essa coisa que você quer implementar dentro do seu contexto, nas suas próprias condições. Você não vai entender nada profundamente.
Só o que você fizer é seguir um tutorial, certo? Pessoal, o que você faz é seguir o livro de receita do momento que você não tiver o livro, não lembrar mais do livro ou não tiver o ferramental exatamente como tava descrito no livro, você não vai conseguir fazer de novo. Não adianta a gente repetir a mesma receita do livro 20 vezes e achar que a gente sabe cozinhar.
Não, a gente sabe fazer aquela receita, a gente sabe fazer aquela coisa que tava descrita no livro. Momento que a situação mudar um pouquinho, momento que de repente te pedirem para fazer algo que não é mais o, sei lá, você aprendeu aqui no livro a fazer um macarrão, momento que te pedirem para fazer uma lasanha, se você não aprendeu nada, é, a gente volta pra estaca zero. A gente precisa procurar um livro sobre lasanha, porque no livro só tinha macarrão.
Isso daqui a gente vai ter que construir, construir, construir coisas, preferencialmente coisas diferentes, tutorial. Tutorial vai te ensinar uma coisa. É legal fazer um tutorial ou dois, é legal fazer uma receita pronta ou duas.
Só que você precisa fazer um projeto meio explorador. Você precisa explorar um pouco para além daquilo que é só copiar e colar um tutorial. E tudo isso aqui, toda essa sua experiência, fazendo vários projetos diferentes, aprendendo, construindo várias coisas diferentes, vai resultar numa intuição que é a última etapa, o último ponto, né?
O último ponto do repertório ali, que é você bater o olho num leit code de novo e imediatamente identificar isso que parece hashmap. Na sua intuição, você vai olhar para ter uma ideia de um SAS aqui, pensar num num SAS, olhar para um projeto, não sei, eu quero um SAS de armazenamento de fotos e imediatamente, baseado nisso daqui, na sua cabeça vai surgir uma arquitetura. Naturalmente com experiência suficiente, em projetos o suficiente, essa intuição de como desenvolver soluções surge na sua cabeça natural.
Você pensa, pô, de repente foto, eu já armazenei foto uma vez, a gente estava armazenando em foto na aquela empresa lá, a gente tava armazenando no S3, né? É um SAS aqui. O que que é legal pr pra SAS?
Como é que vai funcionar? Eu vou precisar usar um gate de pagamento, certo? Eu preciso construir o meu MVP rápido.
Como que eu construí MVPs rápidos da última vez? Eu usei NextJS, eu usei Nux, eu usei Fast Shapi, certo? Essas coisas vão surgindo na sua cabeça e, tipo, em 15 segundos você vai ter na sua mente mais ou menos como que você vai montar esse SAS.
Mas vem cá, tudo isso daqui. Habilidade de quebra problemas e problemas menores, habilidade de pesquisa, repertório, projetos, intuição e a tal do Iá, hein? Eh, tudo isso aqui não vai ser totalmente irrelevante aí, a não não vai acabar com a gente.
Nota que, né, quando eu descrevi aqui o que que era tal lógica de programação, quando eu descrevi aqui como ser um programador mais competente, eu nunca falei, por exemplo, para você decorar todos os métodos do Python. Eu nunca falei para você decorar todas as APIs do Node. Eu nunca disse que essas coisas aqui eram lógica de programação.
Eu nunca sequer disse que elas eram úteis. Eu tenho meus fortes questionamentos se isso daqui sequer é útil. Mas vamos falar da, né?
Vamos voltar pro início desse vídeo. Vamos concluir onde a gente começou em que o ato de descrever um programa de forma inambigua e detalhada e o ato de programar são exatamente a mesma coisa. Recebemos uma lista com n números inteiros, inicializamos uma variável inteira x no valor zero.
Em sequência todos os valores item por item. Adicionando valor item tã, retorna no valor obtido em X. Legal.
Copia isso aqui. Abre aqui o MA. Escreva o código em Python.
Dois pontos. Enter. Enter.
Chat PT4. 1. Um dos modelos mais inteligentes.
Vamos enviar aqui o que eu escrevi em português. E aqui tá o que a cuspiu. Compara isso daqui.
Olha isso. E olha o meu método do lado. Que que a gente tem aqui?
A gente tem exatamente a mesma coisa. A LLM fez exatamente o mesmo programa que eu fiz com todas as ambiguidades também presentes no texto original em português. Todas as ausências de escolhas minhas aqui.
Tudo que faltou eu decidi aqui também faltou no programa da LLM. Eu não falei sobre validação. Validação não tava lá no software afinal.
Eu não falei sobre mutabilidade. Mutabilidade não tava lá. Eu não falei sobre paralelismo.
Paralelismo não tava lá. Percebe que nesse caso também foi literalmente mais fácil e rápido eu escrever esse código aqui inteiro em Python do que eu escrever esse código em português e pedir pra Llm converter em Python. E o resultado foi exatamente o mesmo.
É isso que eu percebo em muitos momentos lidando com LLM e às vezes até com outras pessoas, tá? Que se eu precisar explicar em detalhes, se eu precisar explicar nos mínimos detalhes aqui tudo que é para fazer, cara, de repente é só mais fácil ir lá e fazer, sabe? Aí, tá calma, eu já consigo escutar o teu contraargumento aqui.
Eu já consigo escutar o teu contraargumento aqui, que é que tem a IA, que você pede aqui, faça um app de dietas, certo? Não precisei especificar absolutamente nada, não especifiquei absolutamente nada. E aqui, né, sem precisar descrever absolutamente mais nada, eu tenho um app de dietas.
Eu posso clicar aqui em preview, tá? Meu negócio tá funcionando, eu acho. Certo?
Ó, o negocinho aqui tá rodando. Eu clico em get started, sei lá. Tem é diet planner dashboard com calorias e proteínas e carbos.
E eu posso adicionar uma 1000 aqui. E o que a gente tem aqui? Embora muito interessante, embora seja excelente para MVPs e tal, a IA ela me deu exatamente o que eu pedi, mais ou menos, porque eu pedi um ped de dieta sem especificar absolutamente mais nada, sem dar nenhuma restrição.
E o que surgiu foi, sei lá, uma amalgação do que a IA entendia por ser um ápio de dietas, do que que precisa ter no áio de dietas. um conjunto, uma espécie de Frankenstein, é tudo que existe na base de dados dela e todo o raciocínio que ela conseguiu desenvolver ali em cima com autoprompts e agente, sei lá o quê, para gerar o tal app de dietas. Agora, lembra-se que o ato de descrever um programa de forma inambígua e detalhada e o ato de programar são exatamente a mesma coisa.
Como você pediu só um app de dietas sem saber exatamente para onde era para ir?
Copyright © 2025. Made with ♥ in London by YTScribe.com