📖 Meu curso de estruturas de dados e algoritmos: https://www.udemy.com/course/algoritmos-e-estrutur...
Video Transcript:
reflexões depois de 10. 000 horas programando segundo o Malcolm gladwell que escreveu o livro outliers ele diz que depois de 10. 000 horas de prática deliberada em alguma coisa a pessoa chega no nível numa classe assim que ela tá no no topo da da habilidade Mundial né Se você treinar algo por 10.
000 horas você vai ser um dos melhores do mundo nessa coisa é é esse negócio da das próprias das 10. 000 horas tá Não precisa levar tão a sério porque o próprio Malcom glad eu critica essa ideia é é é um número um pouquinho não super confiável vai mas a ideia aqui do texto trazer uma reflexão de alguém que passou muito tempo programando 10. 000 horas você medir aqui vamos colocar aí é 8 horas por dia 5 dias na semana 52 semanas por ano por 5 anos é vai dar 10.
000 horas né não é tanta coisa assim 5 anos programando direto pô eu também tenho 10. 000 horas provavelmente Mas vamos lá certamente não sou especialista de classe mundial mas eu coloquei minhas 10. 000 horas de prática deliberada em programação aqui estão 31 das minhas reflexões sobre programação Essas são reflexões apenas sobre Pure coding nenhuma lição se resume a programação sobre pessoas ou como sero líder técnico snior enfim né só sobre sobre escrever código aqui acho que a primeira dic que a gente pode tirar é que se você quer ficar bom em escrever código que você tem que fazer é escrever mais código é é isso é é só isso você tem que ler código bom então abre aí um open source no no github vai entender como é que código funciona e você tem que escrever mais código é isso você não precisa ficar seguindo o curso você não precisa ficar vendo aula fazendo sei lá o quê cria coisas interessantes escreve mais código ao escrever mais código tentar fazer coisas interessantes você vai ter que ir atrás de documentação você vai ter que ir atrás de como implementa as coisas aí você vai aprender de Fato né e eu sendo uma pessoa que vende o curso eu tô te falando para você não perder o seu tempo só com o curso não faz o menor sentido se você quer ficar B escrever no código não é vendo curso que você vai ficar bom é escrevendo código essas flexões são apenas sobre escrever código deliberadamente por 10.
000 horas a maioria não se aplica a iniciantes a gente vai jogar isso escritor não é tu não essas reflexões não são conselhos de carreira mas eu vou levar um conselho pense nelas como lições sobre ser um guitarrista técnico não sobre ser um bom membro de uma banda elas são sobre se tornar um programador melhor para si mesmo cara essa tradução tá tão estranha que eu acho que a gente vai em inglês mesmo eu traduzo ao vivo que vai ser mais fácil olhar a fonte é quase sempre mais rápido do que encontrar qualquer coisa no stack overflow sim porque o stack overflow cara eu posso dar até um exemplo prático disso aqui a gente estava com uma questão aqui no trabalho sobre o Prism Database o tipo Jason e a gente tava usando um Jason no postgress através do do Prisma né e usando client do Prisma em Python você procurar aqui ó Prisma Prisma Python client how to Store Jason eu for no stack overflow eu fui eu fiz isso eu vi isso é só porcaria nada resolvi o meu problema o que resolveu foi eu ir direto na documentação do Prisma e entender o que que tava acontecendo foi muito mais rápido eu só perdi tempo né aquela clássica né 6 horas de debugging pode te poupar 5 minutos de L documentação em muitos casos que você está trabalhando não tem uma resposta na Internet isso geralmente significa que o problema é difícil importante ou ambos cara a gente leu outro texto aqui que falava um pouco sobre isso né que seu problema já foi resolvido e se você consegue estimar o quanto que demora para resolver esse seu problema ele provavelmente é um problema muito importante pra computação mas a real é que no dia a dia trabalhando numa empresa é raríssimo você encontrar um problema que não foi resolvido ainda tipo raríssimo mesmo o o que vai acontecer mais provavelmente é você não conseguir buscar a internet pela solução que já existe porque a solução provavelmente já existe tá tipo assim se você quer encontrar a sei lá a a menor rota de X caminhos na sua aplicação de de Maps de review de sei lá o qu é algoritmo de dxtra quem inventou o algoritmo foi dxtra você só tem que implementar delete o máximo de código que você conseguir concorda ass embaixo synthetic Sugar açúcar sintático é geralmente péssimo sim cara todo Framework faz algo que é só funciona ou que funciona através de magia foge O problema é que quando algo só funciona É que quando ele quebra ele só quebra também entendeu Tipo assim quando você vai usar um Framework e as coisas do Framework elas só funcionam assim naturalmente não tem que configurar nada quando elas param de funcionar você nem sabe o que que parou de funcionar você não sabe como consertar e aí ela só quebra E se ela funciona que nem mágica ela quebra que nem mágica também mágica é horrível Simple is hard simples é difícil tem uma ampla Gama de ferramentas e saiba qual utilizar para o trabalho isso aqui é complicado né porque isso aqui vai requerer que as pessoas e de fato explorem coisas além do que do que tá na função principal P do trabalho delas né para você expandir o seu toolbox para você expandir o seu ferramental isso requer que Você estude coisas que são coisas que você não tá utilizando no momento da empresa que você trabalha entendeu isso significa que você vai ter que estudar fora do horá de trabalho às vezes sim às vezes não né Para bom entendedor meia palavra basta Saiba como funciona internamente as ferramentas mais utilizadas como Git ou Bash a gente podia trazer né Como que o o algoritmo de dif do do Git funciona é um algoritmo bem interessante de olhar mas assim is é o que a gente sempre defend aqui no canal né saber como é que as coisas funcionam por por debaixo dos panos saber como é que elas funcionam de fato construa suas próprias ferramentas e workflows não tem nada mais rápido do que usar uma ferramenta que você mesmo e escreveu Cara isso aqui é para para tudo que você faz repetidamente tá eu eu tenho feito cada vez mais isso eu acho que é extremamente benéfico todas as coisas que você faz muitas vezes que você acha que dá para automatizar você automatiza mesmo se não valer a pena em termos de tempo tipo assim vamos supor que tem uma tarefa que você faz ela é demora sei lá um minuto para fazer ela manualmente você faz ela duas vezes por semana né é uma tarefa que não precisa ser automatizada não faz sentido Na pura matemática das coisas do quanto tempo você vai gastar automatizar essa tarefa mas eu acho que vale porque essa automatização ela vai tirar essa tarefa da sua cabeça tipo esse ganho não vai ser só um ganho de tempo vai ser um ganho de uma carga cognitiva que você diminuiu você não precisa mais pensar nisso e o próprio ato de automatizar algo te transforma num Dev melhor então que você vai est sempre querendo utilizar Shell scripts pro máximo possível Chrome Jobs e tem um que eu tô usando agora bastante que a gente começou a usando no trabalho que eu achei bem legal que é o tal do rake rake scripts galera de Ruby sabe o que é se você não sabe o que que é uma dessas três coisas aqui vai pesquisar que vale a pena só aprenda dos melhores nem todos os projetos valem a pena emular mas é um bom começo é cara isso aqui tem muito código aberto bom tá você pode aprender com muito open source Fantástico se parece feio provavelmente é um erro terrível sim sim sim Provavelmente tem que ser refatorado se você precisar escrever um comentário que não é uma Dog string comentários né E isso aqui é um é um take do do C code cara porque é o seguinte imagina que você tem aqui é um comentário né vou imaginar que isso aqui é Python então asterisco Zinho é comentário você tem aqui função que faz xyz aí embaixo desse comentário você tem Def nome ruim né porque se o nome da função fosse bom você não precisaria desse comentário a função que faz xyz e aqui a função né x y z Quais os problemas que um comentário tem primeiro se o nosso nome não for o nome ruim ele for um nome bom você não precisa est o comentário explicando o que que a função faz né é o próprio comentário evidenciou que seu código tá uma porcaria e tá ilegível se segundo que se eu por acaso alterar aqui o meu a minha função e alterar os testes dessa função de modo que eu não faço mais XY Z eu faço xpto esse comentário aqui vai correr um grande risco de você ignorar porque você sim no seu trabalho você ignora todos os comentários quase o tempo inteiro ess esse comentário vai est defasado né a função foi atualizada e pr pra build ficar verde você teve que atualizar os testes também mas o comentário não tá atualizado comentário fica defasado comentário mente e mentiras são uma das maiores causas de bugs em software então se a sua codebase tiver muitos comentários deleta todos abre o codebase deleta todos os comentários se ninguém entender o que que tá acontecendo é porque o código tá ruim e aí você tem que melhorar Ah galigo mas agora eu deletei os comentários não sei o que que nada faz você tem que usar Git né você consegue olhar os comentários que você deletou no Git né não tem nenhum problema deletar código O código tá lá no Git deletar não é um problema se você não entende como seu programa Roda em production você não entende o programa at all assim na minha experiência os melhores Engenheiros sabem como o programa funciona em todos os environments cara isso aqui é algo que que eu cada vez mais eu eu penso sobre que é o seu ambiente de produção e o seu ambiente local eles têm que estar muito próximos tem que ser muito parecido se tu tem que fazer muita gambiarra para subir pra produção tá errado você vai desenvolver código de uma maneira no seu local e quando você subir pra produção não vai funcionar da mesma maneira a sua base de dados que você tá testando a aplicação localmente ela tem que ter dados parecidos com de produção né você consegue fazer um setup em que você consegue puxar os dados de pre vamos supor 10% dos dados de pre só que anonimizar eles anonimizar os n anonimizar os valores isso é possível essa pipeline precisa existir para você conseguir fazer um código decente a regra também vale para pipelines de build né use código de outras pessoas religiosamente sim mas fos se para você entender o código a maior parte do código existente é terrível isso aqui é verdade isso aqui o que vai salvar o teu emprego tá o chat GPT tá lendo esse código terrível e tá reproduzindo esse código terrível Eu já mostrei isso aqui no canal né Vamos lá right a Memory efficient quick sort in Python pedi para ele escrever um código e quick sort de maneira que seja eficiente em memória né em Python vamos ver o que que chat jpt escreve ele provavelmente vai implementar a pior implementação de todas de quicksort Ah não curiosamente ele ele conseguiu escrever uma boa tá mas as últimas vezes que eu usei esse esse prompt aqui ele escreveu uma implementação de quick sort que não era Memory efficient deixa eu tentar só e pedir para ele escrever quicksort de novo em Python aqui ó Pronto ele escreveu uma implementação a implementação que não é eficiente de quicksort tá essa implementação que ele escreveu é tenebrosa é é a pior implementação de quick sort que existe em termos de performance porque para cada iteração dela ele acaba fazendo três list comprehensions S que é bizarramente ruim e bom se você entender quicksort você não tem esse problema né só que você provavelmente não entende de quicksort você tá copiando o código do chat PT o chat PT tá lendo um monte de código porcaria e tá te dando esse código porcaria você tá inserindo esse código porcaria na sua code base voltando aqui para o que o autor falou né a maior parte do código que existe é terrível às vezes é mais fácil escrever uma uma versão melhor você mesmo Sim e e tipo assim eu não tô falando que você é mais inteligente do que as outras pessoas eu tô falando que se você tem um problema que é importante que ele seja resolvido você tem que entender o problema e ao entender o problema você vai conseguir fazer uma solução adequada o chat chpt chat chpt aqui não entende seu problema ele não não liga para Qual é o seu problema ele é um software estatístico ele é um software que sabe que que faz aqui edging de palavras isso aqui isso aqui não é cognição não é pensamento ele tá achando correlações Entre palavras tá te cuspindo uma resposta baseado em todo lixo que ele leu da internet uma regrinha rápida aqui né nunca fona uma uma dependência de uma Lib pequena que você pode simplesmente e reescrever a gente falou sobre isso recentemente também né Tipo aqui você tem a Lib no npm isod que checa se um número é é é ímpar né a gente pode abrir o aqui o index. js cara se você precisa muito disso aqui você não sabe fazer essa função você deveria saber você deveria ter vergonha de não conseguir fazer uma função que vê se o número é emper ou não né mas pega isso aqui e copia tá não tem nenhum problema eu eu defendo muito mais que se você tem um problema pequeno para resolver copia o código e cola o código do que adiciona dependência adicionar dependência é pior não todos os casos tá não sempre mas tipo assim se você vai validar um CPF eu prefiro que você Copie o código e colle do que você importe uma Lib para fazer isso cada dependência ali é um penduricalho que você tá adicionando na sua no seu software que vai atrasar um pouquinho as coisas vai fazer a build um pouquinho mais devagar você vai ter que baixar sei lá o quê isso que pode causar problema no futuro pode causar conflito de sei lá o qu npm é uma porcaria quanto menos você usar npm melhor e e é isso aí copia o código saiba quando quebrar regras para regras como don't repeat yourself cara mas aqui ele foi bem específico né É aqui ele soube exatamente o que falar vamos lá existe a regra dry aqui a regra don't repeat yourself Essa é uma das as mais criticadas de todas Isso aqui é uma regra bem tosca tá eu pessoalmente eu não gosto de Don't repeat don't repeat yourself é para você nunca repe código tá se você tem um código que ele tá repetido em duas vezes você devia fazer alguma abstração em cima disso para não repetir ele eu acho pessoalmente uma regra péssima eu começo a fazer Abstrações geralmente quando o código tá repetido três vezes tá se um código aparece três vezes aí eu acho que é hora de fazer abstração se ele aparece duas vezes só pode ser que vale a pena fazer uma abstração se for uma abstração pequena e simples Então vamos lá vamos supor que a gente temha aqui uma vamos pegar aqui o exemplo do do quick sort né se a gente tem por acaso uma função de sei lá uma função qualquer coisa dentro dessa função a gente tem esse código aqui que é basicamente quick sort tá se a gente for copiar essa sequência de operações aqui e colar em outra função aí eu acho que vale a pena uma abstração aí eu acho que vale a pena criar uma função para isso agora se ao invés disso a gente tá fazendo Sei lá e a gente tá usando a Lib de requests né a gente tá fazendo requests pget aí endpoint p xpto e eu copio esse esse request aqui Eu uso esse request com esse mesmo endp em alguns lugares no código eu não acho que tá na hora da gente criar uma classe de endp handler builder e sei lá o que não Sinceramente cisto aqui cola várias vezes que não tem problema organizar o código em módulos packages funções é importante mas a arte de verdade tá em saber onde estão os limites da api verdade escolha a ferramenta mais eficiente na maioria das vezes e escolha o que você conhece Arc Linux é o sistema operacional mais eficiente para o desenvolvedor moderno não Óbvio que não pro pro escritor aqui é mas pr pra maioria provavelmente não você deve usar acme não só se você for Rob Pike eu uso macos tá macos tá bom demais eu sinceramente eu tenho mais o que fazer ficar configurando ambiente Linux vocês vão me odiar por causa disso mas é verdade evite nesting né é neste ar condicionais profundamente isso aquii é legal eu sempre a galera sempre acha muito bacana quando quando eu falo sobre isso né todo mundo sabe que se você tem if aí você tem else você não devia ter else E aí dentro desse if você vai ter outro if e você vai ter outro else aí O código vai ficar pulando né aí if sei lá o quê você vai ter aqui que x é igual 0 mas se outra outra coisa acontecer o x vai ser igual a 6 e se essa outra coisa não acontecer na verdade o x vai ser igual a 9 e caso contrário na verdade não tem nem X É Y = 9 gente isso aqui é péssimo tá ficar eh o o bom do Python é que não sei nem se é é específico do Python isso tá mas é que a gente convencionou que que o espaço aqui a indentação ela é quatro espacinhos né um Tab indentação de de dois espaços então quando a convenção é que a indentação ela é dois espaços só e não quatro isso te incentiva indentar mais isso é péssimo a indentação para mim devia ser tipo assim uns 16 espaços lá pra frente pro envolvedor saber que ele não devia estar indentando quanto mais indentação você faz mais bizarramente complexo seu código vai de ler mais complexidades porque assim ó todo mundo né o cérebro normal de uma pessoa aqui ler vai ler aqui ó de cima para baixo assim que a pessoa vai entender o código quando seu código tem um monte de if elestado e não utiliza sei lá de early return ou de qualquer coisa do tipo você vai entrar aqui mas se isso aqui não for verdade você vai entrar aqui embaixo mas se isso aqui for verdade ele entra aqui aí ele entra aqui tipo assim essa essa lógica é mesma o mesmo motivo que eu critico Troy Cat tá essa indentação cria uma complexidade ciclomática muito grande e você não consegue ler o que que tá acontecendo em sequência do outro fica muito tipo assim a coisa não cabe na sua cabeça e direito você pode falar ah Galego Mas eu sou inteligente na minha cabe sim cabe só que você tá dando mais trabalho você tá fazendo código que é mais difícil de dar manutenção isso que é mais chato de testar é mais difícil de testar todos os todos os pefs sabe é é ridículo não tem porque fazer isso se você abstrair isso daqui para ou para early return ou para algumas funç funções diferentes ou sei lá um Switch Case um negócio mais decente Zinho seu código vai ser muito mais fácil de testar vai ser muito melhor indentação é horrível no meio variáveis corretamente é bastante Raro mas às vezes é um problema com compilador se não for compilador é sempre DNS é sempre DNS use features esotéricas da sua linguagem é sparingly é o mínimo possível mas uso quando for para utilizá-las né cara isso daqui o o Python é o rei dessas aberrações tá o Python é o rei da das features que ninguém nem conhece sabia que no Python você tem um for aí você tem um for loop né que vai até lá o final e depois do for loop você pode botar um else muita gente já brigou comigo por causa disso porque eu falei que isso daqui é é terrível eu falo que isso daqui é é antipattern absurdo né Aí você tem aqui for x in sei lá 0 1 2 else você vai fazer isso aqui ó Y = 9 tá x = x x 2 eh olhando para esse código aqui tá Isso aqui é um código em Python seu do código em Python vai me diz quando que você acha que que vai entrar aqui no else Tá qual condição precisa ser satisfeita para que aconteça o o ELS quando quando que esse ELS aqui vai executar opção a quando isso daqui quando essa lista aqui for vazia quando a lista for vazia o ELS vai executar opção b quando por acaso trigar um Break aqui no for loop né se trigar um Break o Elson vai executar opção C se o for loop chegar até o fim e não for Break de nenhuma maneira ou não tiver tregado nenhum contínuo ou nada do tipo contínuo Não na verdade né se for chegar até o final sem ser brecado ou última opção só vai entrar nesse ELS aqui quando der um erro aqui dentro do for você sabe me dizer qual dessas É verdade provavelmente não tá provavelmente você não faz a menor ideia de quando que o else depois do for no Python funciona por isso não Dev usar essa porcaria ninguém vai saber ninguém na sua empresa vai saber porque que isso funciona quase nenhuma linguagem tem isso é o o o loop Na verdade o esse else aqui quando que ele vai acontecer ele vai acontecer quando o for loop for executado por inteiro e não for Break Em nenhum momento né então se o for loop de fato percorrer todos esses elementos aqui na lista Aí sim ele vai entrar no ELS né qual a utilidade disso a utilidade disso isso que existe aqui para quando você tá procurando um elemento dentro da lista se você não encontrar o elemento dentro da lista Aí você vai e executar alguma coisa aqui no no ELS Essa é a ideia na prática a palavra else nem significa isso é é um termo totalmente horrível que utilizaram aqui tá se eu não teria nenhum problema se isso daqui fosse sei lá um finally ou qualquer outra coisa mas não mas é else então eu acho mal feito acho que você não devia usar isso aqui no Python e é isso aqui que o autor tá falando tá as features mais exotéricas da sua linguagem você não deveria usar elas frequentemente tecnologia não se dissemina de forma eh igual por exemplo tem muitos front Change developers que podiam aprender coisas com eh low level engineers né Engenheiros de low level nosso Com certeza se de frontend São muito ruim nisso e também tem muitas ux e usability features que os JavaScript developers podiam ensinar pros Cloud engir né podiam ensinar para WS né o dia que a aws tiver uma ux e uma ui boas acabou para todos os outros todas as outras Cloud né ninguém mais vai usar hetzner ninguém mais vai usar vercel porcaria nenhuma o dia que aws for fácil de utilizar acabaram todas as outras empresas de cloud Alguns programadores são 10 vezes mais eficientes do que outros eu sei porque eu fui um 10x programmer e eu fui um menos um ex programmer sim cara é engraçado ver as pessoas fingindo que que isso aqui não acontece que você não tem um desenvolvedor que é 10 vezes mais eficiente que outros tipo sempre que alguém tenta fingir que que não existe isso é eu eu acho que a pessoa não não trabalhou com outras pessoas o suficiente tipo assim saiu uma pesquisa recentemente que pelo menos 10% dos deves não faz Basicamente nada no no trabalho deles e eu concordo 10% das pessoas que eu conheci que trabalham na área com certeza não fazem absolutamente nada ou se elas fazem algo é negativo Era melhor se não fizesse nada mesmo porque elas são péssimas não tem correlação nenhuma entre ser um 10x programmer e um 10x employ entra ser um desenvolvedor que faz 10 vezes mais código né e ser um funcionário 10x é você nunca vai conseguir ganhar 10 vezes mais salário né se você é bom mesmo assim bom mesmo que você devia estar fazendo é gastando tipo assim 5 horas por semana trabalhando numa Fang porque convo se você é bom para CCO ali 10 horinhas na semana você consegue tocar os ticket zinhos de de pleno de sor pra frente e nas outras 70 horas de trabalho que você tem na semana você toca seu projeto próprio né se você é realmente muito bom é isso aí que você faz boas apis são fáceis de usar e difíceis de utilizar de forma errada concordo o ciclo de configuração ele é o seguinte ele vai de valores codificados para variáveis de ambiente para sinalizadores de cli para um arquivo de configuração pro cara isso aqui tá muito confuso em todas as línguas tá muito confuso que ele tá dizendo aqui é que o começa com valores hard coders depois vai para pô tá tarde demais eu não vou entender isso aqui agora mas sei lá concordo na dúvida todos os layers de de abstração São maleáveis se vocês barraram uma parede Provavelmente você precisa ir um nível acima ou um nível abaixo Cara isso aqui certo tá isso aqui muito correto às vezes tipo assim às vezes você encontra sei lá um problema na sua ORM ao acessar o banco de dados você pode ou pular a ORM e ir direto pro SQL corrigir o seu problema ou você pode pular o ticket inteiro você fala que não é um bug que é uma feature pro cliente entendeu sempre tem um sempre tem o que fazer ou você fala que o cliente tá errado ou você vai direto ali no SQL você não precisa ficar no no layer de abstração que que te foi designado você pode pular para cima para baixo e vamos lá onde que eu coloquei minhas 10. 000 horas eu programo há mais ou menos 15 anos então já deve ser mais que 10.