New Pointer the billion dollar mistake o erro de um bilhão de Dólares Vamos ler esse artigo da pessoa MV ndy não sei pronunciar primeiro um pop quiz se você tem uma função que recebe três parâmetros só que dois delas são opcionais você chama essa função com dois parâmetros isso torna o terceiro parâmetro nul ou undefined a resposta é undefined Mas qual que é a diferença entre null e undefined vamos dar uma olhadinha nisso aqui em inglês que vai fazer um pouco mais sentido n é um objeto que é designado e é um membro de todos
os tipos definido para ter um valor neutro sem valor undefined quer dizer que a variável ou o valor ainda não foram assigned ainda não foram designados que gente tá desse texto porque a gente quer entender Por que o criador acha que nul é um erro de 1 bilhão de Dólares enquanto undefined existe desde que a programação existe nul é uma invenção equivocada segundo o próprio criador do nul né Tony hor também criador do quicksoft Então você sabe que esse cara é muito inteligente porque quick sort é uma sacada muito boa e ele criou o no
em 1964 mais ou menos 5 milênios atrás a ideia surgiu quando ele foi encarregado de criar uma nova linguagem de programação no período em que a maioria dos códigos eram escritos em código de máquina e para avançar para uma linguagem de mais alto nível isso significava que a depuração né isso aqui tradução de debugging não podia passar pelo código de máquina aí o que aconteceu então nessa época né para proteger os clientes antes dos detalhes da implementação eles queriam né programar os erros em Alto Nível ao invés de fazer o dump do hexadecimal é que
eu tô em inglês porque a tradução não tá fazendo tanto sentido assim que aí eles iam poder Gerar uma mensagem de erro que faça mais sentido né você não não quer o cliente escrevendo numa linguagem de alro nível e recebendo um dump ext decimal como erro não ia ser muito legal então a máquina ia checar as referências dentro do programa e essa checagem de referências dentro do programa é aparentemente demor bastante e comia bastante do espaço alocado pro programa O que os clientes Não não curtiram muito né e a a sacada dele foi que você
podia fazer o tradeoff de nul por velocidade você podia apontar pro nul e aumentar a velocidade dessa checagem anos depois os criadores do Java Óbvio é tudo culpa do Java né decidiram replicar essa decisão para Bound checking the ARS né para Enfim fazer a verificação orientação a objeto introduziu objetos que podem ser referenciados através de um ponteiro que a gente tem um codigo Zinho Java né getters E setters por que que Jairo gosta tanto de getter etc eu nunca entendi cara des criação de Java a os checks né as checagens de tipos estáticos no programa
já tinham melhorado bastante então o hor inventou o new Pointer porque um cliente e solicitou um cliente basicamente queria a habilidade de desabilitar a checar agem de tipos Vocês estão entendendo o que que é isso aqui o cliente basicamente solicitou pro pro hor aqui implementar o n antes do typ script ele queria um n em Java é fantástico durante esse período os programadores em fortran preferiam arriscar a possibilidade de um desastre ao invés de checar subscripts não sei direito o que que é subscripts ah checar todas as referências para que o programa não crushe que
a gente tem uma foto do errinho né no Pointer Exception todo mundo já viu esse erro na vida um milhão de vezes o nosso grande figurinha carimbada que Edgar dxtra falou que no Pointer Possivelmente era uma ideia ruim cara o dxtra raramente erra né nunca erra esse pau cara um gênio como é que o dxtra pode estar sempre o lado certo da história ele comparou no Pointer com um Adultério promiscuo cara que metáfora estranha que o dixter usou Mas enfim continuando independentemente disso e o hor escolheu a capacidade de executar código rapidamente ao invés de
verificações de segurança é engraçado né hoje em dia vocês sempre me vem no canal batendo na tecla de que eu não gosto de coisas sem tipagem e o cara que criou o new Pointer para basicamente implementar um n em Java diz que isso é um erro de 1 bilhão de Dólares quer dizer esse carinha aqui e o dxtra não sei se o dxtra não tá vivo né mas esse carinha aqui eu não sei se tá vivo ou não Provavelmente concordariam com as minhas ideias de que tipagem em Python devia ser massivamente melhorado o jeito que
tá feito é péssimo para aplicações escaláveis enfim a introdução de nu permitiu a possibilidade de permitir que programas compil assem e travasse lindo permitiu mais erros permitiu vazamento de memória e pior problemas de segurança no código mas não foi até que os métodos do C permitiram que os primeiros vírus se infiltrarem sobrescrevendo os valores de retorno do código essencialmente ensinando o mundo a escrever malware o vírus codad um Worm de warm Será que em inglês é Worm mesmo ah computer warm que infiltrou companhias do mundo inteiro e derrubou todas as Networks interrompeu todos os servios
bancários comuns outros negócios e foi estimada a custar a economia mundial 4 bilhão de Dólares cara quando que foi isso né Foi muito tempo atrás porque 4 bilhões de dólares é o que sei lá se a Amazon cair por 20 minutos já dá mais do que isso mais tarde o bug do milênio que foi uma classe de bugs relacionada a armazenamento e formatação de dados de calendário foi estimado em custar um pouco menos de 4 bilhões de dólares segundo Tony h e o Tony em 2009 se apresentou na kcon e as lições que a gente
pode aprender disso daqui são que referências nulas historicamente foram uma péssima ideia e privamente Você devia evitar o máximo possível usar n em JavaScript ou non no Python E você devia ter cheques para isso os primeiros compiladores forneceram opções de exclusão para verificações em tempo de execução em detrimento de correção é o n né do typescript os designers de linguagem de programação devem ser responsáveis pelos erros em programas escritos nessa linguagem Isso aqui é uma coisa que que a pessoa que o pessoal geralmente tem dificuldade entender é a a linguagem não é uma uma escrita
perfeita vinda do cels ela tem sempre seus tradeoffs né só que o que muita gente fala que é um tradeoff eu acho que é mais um off do do que um trade né porque por exemplo eu acho que go corrige muita das limitações de Python muito mesmo ao ponto de que eu nem consigo enxergar como que é um tradeoff a gambiarra que é a tipagem de de Python e tipagem fraca ou tipagem dinâmica eu não lembro qual como é que a gente define formalmente isso e tudo que o go faz no âmbito de tipagem é
muito melhor que de Python prefire uma quantidade absurda de err tá beleza você pode escord de mim na parte do trycatch né que o é é um pouquinho verboso o if Air igual diferente de New no go é um pouco chato você pode descordar de mim no un Marshall de Jason que também é um pouco chato em Gol você pode discordar de mim em ponteiros de gol que também é implementado de uma maneira um pouco estranho às vezes Mas no geral eu não acho que tem tradeoff no geral eu acho que acho que acho que
o ponto que eu quero chegar é que eu não vejo motivo para você usar uma tipagem para você fazer código sem tipagem eu simplesmente não não consigo enxergar nenhum dos códigos que eu escrevi foi mais rápido por não ter tipagem todos eles chegaram num ponto em que se eles crescerem o suficiente e não precisa nem crescer muito cara no momento que você trabalhou num código por três dias ele já tá grande o suficiente para tipagem ser benéfico enfim o design da linguagem ele pode ser melhor ou ele pode ser pior e existem quesitos de algumas
linguagens que eu acho que são só decisões piores e algumas que eu acho que são só decisões melhores você vai ver o só forte de JavaScript completamente confusos várias coisas em JavaScript são completamente confusas e não intuitivas o Python tem for else que é completamente não intuitivo e na minha opinião é mal desenhado é terrivelmente desenhado enfim as pessoas que que escrevem linguagens elas são programadores também elas também cometem erros a linguagem nenhuma linguagem é perfeita e algumas T decisões muito melhores que outras os pedidos dos clientes do mercado podem pedir o que não é
bom para eles Ah isso aí is que é programador sabe né você sabe que o cliente nem sabe o que que ele quer e às vezes ele acha que ele quer uma coisa e ele tá errado é se ele pedir para você escrever código sem testes usando chat ept rede neural você sabe que ele provavelmente tá errado e e ponto você não devia fazer quer dizer tá o cliente é que paga as suas contas e É ele que vai lidar com as consequênci depois mas você entendeu o ponto né Você devia tentar pelo menos argumentar
contra se se o erro de 1 bilhão de Dólares foi o no Pointer na verdade no Pointer não é um erro de 1 bilhão de Dólares né a gente já tá no mundo pós erro da Crowd Strike eu acho que a gente pode tranquilamente corrigir isso daqui deixa eu dar um spect rapidinho pronto 1 trilhão de Dólares agora acho que tá mais correto né porque cara quase Com certeza a quantidade de erros de New Pointer se a gente considerar que o erro da Crowd Strike foi causado por um New Pointer que eu acho que foi
eu Oli algo assim mas eu não analisei muito a fundo a gente já deve ter batido trilhão só com o new Pointer a gente é bom demais a função do ser Gets é um erro de vários Bilhões de Dólares que criou a oportunidade para mers e vírus prosperarem muito bom então acho que a gente aprendeu que é tudo culpa do Java né Eu sou Augusto Galego eu falo bastante sobre software se você tá interessado no assunto Dá um subscribe aí embaixo e um like para me ajudar e como esse vídeo não tem Patrocínio eu tô
recomendando o livro arquitetura de software as partes difíceis vai ter um link afiliado ali embaixo na descrição Se você comprar esse livro você vai estar ajudando esse canal e você vai estar se ajudando porque ele vai te ajudar a ser um desenvolvedor de software melhor principalmente no que tange os assuntos de arquitetura de software e System design