Não se apegue ao seu código. Se apegue aos seus testes

Faz um tempo que não falo de programação. O que atiçou a vontade de escrever de novo sobre o assunto é, pra variar, a liberdade que as redes sociais deram para que muitos pudessem falar a respeito de tudo, só pelo esporte de falar.

Dessa bagunça toda, algumas “máximas” têm sido criadas sobre o meio e, a que dá o título deste post tem me incomodado recentemente, apesar de já ter respondido sobre isso.

O motivo é, eu gosto do que faço, e sim, eu me apaixono pelo meu código, e muito. Gosto do que ele faz, do resultado que ele gera. Como não ficar feliz quando todos os seus testes retornarem “Success” depois de enviar sua versão para o build automatizado? Até mesmo antes disso, quando você roda os testes localmente.

Sim, eu gosto do meu código, mas gosto mais ainda quando ele funciona. E funcionar significa, pelo menos para mim (e recomendo que para você), que ele passa nos testes.

Permita-me caro leitor conduzi-lo de forma resumida pelo processo de amadurecimento pelo qual passei, que me fez chegar no ponto da carreira em que estou.

Como comecei a gostar do meu código

Já criei bastante código (afinal são mais de 20 anos programando), menos do que deveria, sendo honesto. Sou o tipo de programador que gosta de matutar o problema, colocar no “papel” antes mesmo de escrever uma linha de código. Esse é meu “normal”. Era melhor ainda quando isso era feito em equipe, onde todos discutiam o mesmo problema numa sala enquanto rabiscávamos o quadro.

Em um momento, seja por pressão de projetos, seja porque outros profissionais usam uma abordagem diferente, seja por outra máxima, a de “errar rápido para corrigir rápido”, senti a pressão de codificar o quanto antes. Isso foi para mim, um erro. Comecei a criar muito código, código é trabalho, e trabalho tem valor. Mesmo que tivesse criado uma monstruosidade, tinha apego por ela, afinal, era minha criação, uma obra de arte.

Depois de muito ver minha arte causar dores de cabeça para mim e para outros do time, achei melhor mudar a forma de encarar meu trabalho.

Como comecei a desgostar/desapegar do meu código

O subtítulo é drástico, mas é mais ou menos o que acontece. O que mudou de fato foi o seguinte: TESTES!

Você aprende isso na aula de programação, mas esquece no minuto seguinte.

Se pudesse dar uma recomendação para qualquer programador em qualquer idade, seria o seguinte: Apegue-se a seus testes! É a parte mais importante do seu projeto. É a garantia de que seu código, bonito ou feio, curto ou longo, siga padrões de código ou não (deveria, mas esse é assunto para outro post), funcionará. Muito mais do que simplesmente compilar, o importante é que seu código faça o que ele deveria.

Se você trabalha numa linguagem moderna, ela provavelmente disponibiliza um mecanismo de testes, comumente unitários. Use-o, abuse dele. Nenhum profissional que conheço e que utiliza testes hoje se arrepende. Os que não usam, ficam na categoria dos que “ainda não entenderam”. Isso não vem de mim, mas dos grandes nomes da programação (Robert Martin, Martin Fowler, Dave Farley, entre outros).

Quando você se acostumar com o fato de que trabalho feito significa seu código passar nos testes, será o ponto em que você terá se desapegado dele.

Boa sorte e sucesso!

IA pra todo lado, mas e aí?

No fim de 2024, postei este vídeo:

É longo (18 min, uma aberração nos dias de hoje). Nele me posiciono superficialmente sobre essa maluquice toda de Inteligência Artificial, IA daqui para frente para facilitar.

Minha opinião não mudou muito, apenas amadureceu. O que foi dito está dito. O que fiz depois do lançamento do ChatGPT e outros é entender o papel dele e de tecnologias análogas, as ditas generativas, para então saber o que fazer. A pergunta que vou tentar responder (e provavelmente falharei) é:

Como profissional de tecnologia, o que faço para me manter atualizado num mundo dominado por IA?

Gosto de me basear em bons exemplos. A definição de “bom exemplo” é assunto para outro artigo, mas vou usar a citação abaixo:

Nixon foi à China, em 1972, e perguntou ao primeiro-ministro Chu Enlai sobre o impacto da Revolução Francesa. A resposta? “É muito cedo para dizer.”
Fonte: dê um google

Isso em 1972 sendo que a Revolução Francesa acabou em 1799. E sim, acredito que essa forçada de barra de introduzir IA em tudo se compara a qualquer momento definidor na história, pelo menos em contexto tecnólogico, como foram o computador pessoal, a internet e então, redes sociais.

Resumindo, estamos tão entusiasmados com o que podemos fazer que não paramos para pensar se devíamos.

Significa que o melhor é esperar para ver o que acontece? Prefiro pensar que o preferível é não tirar conclusões precipitadas.  Tudo ainda está tomando forma. Não é preciso pensar muito para atestar isso. Veja o cenário 2 anos atrás, então 1 ano, e agora. Tivemos uma avalanche de produtos AI-based que viraram pó, promessas não cumpridas aos montes, tudo para fazer o público mais interessado, no caso, investidores,  manterem seu suado dinheirinho financiando tais iniciativas.

Enquanto somos inundados com tanto blábláblá, entenda o seguinte sobre IA:

  • Nos dias de hoje, ela é nada mais que Aprendizado de Máquina (Machine Learning, ML) com uma nova roupa, rebranded para quem é hipster.
  • ML está aí desde os tempos em que eu fiz faculdade (e tem um tempão).
  • ML tem sido entregue a nós todos os dias, tem muito tempo. Quer exemplos?
    • Google Maps/Waze.
    • Google Lens.
    • Auto-completar de código da maioria das IDEs (Visual Studio, JetBrains).
    • Corretores ortográficos.
  • Qualquer feed de rede social para fazer micro alcance de anúncios para você.
  • Avanços em áreas acadêmicas como micro biologia e genética (não entendo muito, mas tenho parentes diretos que estão na área)
  • Todo o avanço geológico, drones, etc.

O “segredo”, que é segredo algum, é ter um mínimo de base sobre o que roda dentro do capô da IA para melhor julgar o impacto que cada notícia que sai a cada segundo nos portais de tecnologia e redes sociais.

O manter-se atualizado não é consumir tudo o que aparece. Antes disso, refine seu filtro do que está acontecendo para saber investir no que fará a diferença para você enquanto profissional.

E antes de você colocar “AI expert” ou “AI first” no seu perfil do LinkedIn, aqui vai minha suave opinião sobre tudo isso:

Pouco vai mudar no curto prazo. IAs generativas servem só pra gerar ruído e manter a corrida maluca das grandes marcas para ver qual delas ficará com a medalha do “eu fiz primeiro”.

Se você estiver usando IA no seu trabalho (ChatGPT, Gemini, Grok, DeepSeek), você está certo se ela estiver te ajudando, e não fazendo o trabalho por você.

Se seu trabalho pode ser feito por uma IA generativa, procure outro tipo emprego, pra ontem!

Pense no cenário ideal como você sendo o Tony Stark e o seu assistente de IA o Jarvis (Friday nos filmes mais atuais, nerds entenderão). Jarvis faz o trabalho sujo e demorado, mas a genialidade é vem do Tony. Ele é a alavanca pra fazer com que um trabalho level minutos ou invés de anos, por exemplo, simulação de resultados.

E, sendo bem sincero, estamos bem longe disso, mas longe nos dias de hoje pode significar anos, meses, ou até semanas.

Veremos.

Carinhosamente,

O autor, movido por inteligência natural, muito café, google, e talvez um só um pouquinho de gemini.

SeleniumBasic – Erro de automação

O problema

Imagine a seguinte cena:

Você desenvolve o projeto para seu cliente usando o Selenium VBA como biblioteca, tudo funciona perfeitamente, em todos os navegadores, drivers, etc. Todos os testes passam maravilhosamente.

Então você envia o arquivo junto com todas as instruções de instalação. Mas, quando o cliente executa seu arquivo, o seguinte erro é apresentado:

A solução

Instale o .NET Framework 3.5 no computador. Você pode fazer o download dele aqui:

https://docs.microsoft.com/en-us/dotnet/framework/install/dotnet-35-windows-10

Após instalado, execute o aplicativo novamente.

A explicação

Apesar de rodar no contexto do VBA, que é aplicativo nativo do Windows, o SeleniumBasic é desenvolvido sob o .NET Framework, especificamente a versão 3.5, o que faz sua execução ser dependente dele.

Não adianta ter somente o .NET Framework 2.0 ou 4.0. Eles são independentes e precisam ser instalados separadamente.

Finalmente

Nada mais a declarar. Bom código a todos!

Web Scraping, WhatsApp, CAPTCHA e Ética

Web Scraping, e reduto da extração de dados na internet. Essa prática é tão antiga que data dos bots dos robôs de busca que já a aplicavam mesmo antes de muitos de vocês leitores terem nascido.

Sim, meu caro padawan, se você achava que estava inovando escrevendo um script em Python ou VBA para extrair dados de uma página web, pense de novo! Há uma quantidade insana de bots e spiders fazendo isso desde os tempos remotos da World Wide Web.

Pra variar, a tecnologia não perdoou e tornou cada vez mais fácil fazer esse tipo de extração de dados, mesmo para profissionais cuja rotina nada tem de relacionada com programação. Nisso entra o VBA, provavelmente a opção de automação de mais fácil alcance e didática presente no mercado.

Até aqui, tudo bem, o web scraping está aí, é fácil de fazer, ferramentas tem aos montes, sites-alvo mais ainda. Mas (sempre tem um mas) enquanto muitos passam tempo tentando descobrir o como, poucos se perguntam se realmente deveriam estar fazendo isso. 

Web Scraping e Ética?

Para o quê e quando fazer web scraping é uma pergunta que, para ser respondida, deveria sempre ter um contexto ético. Não vou entrar no mérito filosófico da questão, já que em tempos atuais o que mais tem é filósofo discutindo ética na internet. Vou basear a crença deste texto na seguinte definição:

Ética: tudo aquilo que você faz mesmo quando ninguém está olhando.

Ou seja, quando você faz web scraping de um website, você deveria sim se perguntar se você deveria estar fazendo-o. Um site quando é publicado tem a intenção primária de fornecer conteúdo legível para humanos. Quando um script entra em jogo, isso cai por terra. Ao invés de um ser humano limitado a um certo número de cliques e com uma capacidade regular de ler e interpretar textos, um bot consegue repetir a operação de clicar, baixar e salvar diversas páginas numa fração desse tempo.

Dentre vários problemas que isso pode causar, posso pensar em:

  1. O site não foi feito para aguentar tal carga de acessos
  2. Os termos e condições não permite a cópia dos dados
  3. E mais importante, o autor do site tem o direito exigir interação humana no site

Sim, Termos e Condições, aquela coisa que, assim como contratos, pouquíssimos lêem.

Termos de Condições

Vou ser claro, não sou advogado, mas já tive a oportunidade de conversar muito com vários para ter uma noção honesta do que pode acontecer se você não andar na linha. Posto isto, vamos em frente.

Quando um site exibe um texto detalhando Termos e Condições, as chances de haver uma séria limitação de acesso ao uso seu conteúdo é quase certa. 

Essas limitações atingem principalmente robôs, que nada mais são que aplicativos criados para acessar o conteúdo de um website. Sabe aquele script em VBA que você criou para extrair dados de uma página web? Pois é, ele entra nessa categoria.

No geral, não é preciso se preocupar na maior parte dos casos já que o problema está em como você usa a informação e não como ela é extraída. Mas (outro mas aqui), toda vez que você pensar em fazer qualquer tipo de extração automatizada, você deveria ler os Termos e Condições.

E sim, você deveria estar se perguntando se alguma vez você já fez isso.

Por que isso é tão importante? Porque ter acesso a um dado é diferente do uso que se faz dele, e isso comumente está claro nos Termos e Condições, que normalmente detalha não só as regras e limitações como as penalidades aplicadas.

Quando você deveria fazer web scraping

Existe um cenário ideal para quando você deveria fazer web scraping sem se preocupar muito. A maneira mais fácil de identificar tal cenário é quando você já está fazendo alguma operação manual, como por exemplo extrair dados de venda para construir um relatório específico que não está disponível num sistema interno da empresa. Ao invés de copiar e colar uma centena de dados, o que não só levaria um tempo considerável como também estaria sujeito a erros, você pode automatizar isso.

Esta é uma situação perfeita para aplicar web scraping. Os dados são da empresa, serão utilizados pela empresa e o usuário que precisa deles não tem acesso a eles de outra forma que não pelo próprio.

Qualquer coisa que vá além disso (resumindo, tudo o que não é seu) cai no filtro dos Termos e Condições.

Quando você NÃO deveria fazer web scraping

Existem diversos sinais que deixarão claro que um web scraping não é bem vindo. Não vou entrar em detalhes sobre robots.txt e outras minúscias. Isto é algo que ficará para um curso de Web Scraping que lançarei num futuro próximo.

Então, quando não é aconselhável fazer web scraping? Os exemplos abaixo são os mais comuns:

  • O site expõe um CAPTCHA
  • O site protege a informação através de login e senha
  • O site ou o detentor dele expõe formas mais adequadas de extrair a informação, como através de web services (SOAP/REST)
  • O site bloqueia seu acesso caso ele for muito frequente
  • O site não permite extração de dados de forma automatizada (Termos e Condições, lembra?)

Vale a pena detalhar um pouco mais o primeiro item citado.

CAPTCHA

Isso mesmo, aquela coisa horrorosa que temos que decifrar
Isso mesmo, aquela coisa horrorosa que temos que decifrar

O CAPTCHA é um Teste de Turing aplicado em uma página web. Para leigos, é basicamente uma maneira moderna de impedir que uma máquina se passe por um ser humano real. A razão para isso é simples: sites são conteúdos visuais, feitos para humanos consumirem. Se uma máquina/robô/script vem atazanar aquele lindo website que você construiu com tanto esforço e paga com o suor do seu trabalho para ficar hospedado, você vai querer saber o que está acontecendo.

Para evitar que seu conteúdo seja lido ao léu por robôs que querem mais é tirar proveito de informação alheia, a internet bolou formas de bloquear o acesso, sendo a mais conhecida e utilizada o CAPTCHA.

Como mencionado acima, seu script VBA entra na categoria de robôs da internet, por isso, o CAPTCHA está lá para atrapalhar a vida dele.

Por isso, toda vez que você der de cara um com desses ao escrever seu lindo web scrapper, saiba existe um motivo muito bom para ele estar lá.

E o WhatsApp?

O WhatsApp entra de vítima nessa história por alguns motivos específicos:

  • Há uma versão web/desktop que pode ser usada
  • Como todo site/app, ele também funciona sob determinados termos de condições, algo que já discutimos aqui
  • O WhatsApp é de longe o aplicativo de mensagens mais utilizado no Brasil, o que o torna alvo de todo tipo de ação que foca em atingir massas (leia-se spam)
  • O WhatsApp é do Facebook, uma gigante da indústria da internet com muito $$$ para gastar e ela não poupará em revidar se um mau uso for feito do seu aplicativo, já que este pode ser usado de graça

Recentemente a publicação deste texto, o jornal The Economic Times publicou uma matéria detalhando que o WhatsApp vai processar qualquer um que fizer uso do aplicativo para envio de mensagens em massa. Link aqui (em inglês): https://economictimes.indiatimes.com/tech/internet/whatsapp-will-take-you-to-court-if-you-send-bulk-messages-misuse-app/articleshow/69783647.cms?from=mdr

Ou seja querido scripteiro, se você estiver fazendo uso do WhatsApp desktop para fazer envio de mensagens em massa, você está infringindo o regulamento do aplicativo e sujeito a penalização.

Se você se perguntava porque até agora eu não tinha publicado um tutorial de Selenium e WhatsApp, bem, aí está sua resposta.