- Relembrando uma jornada de programação de 25 anos que começou na universidade, com foco menos na tecnologia em si e mais em pessoas, relações e experiências
- Os 10 minutos vendo o código-fonte em um laboratório de informática da universidade, aprendidos por acaso, se tornaram o ponto de partida de uma longa trajetória criando e mantendo um site pessoal
- Um pequeno experimento que reiniciou o sistema ao pular para o vetor de reset do processador 8086 marcou em um colega uma postura de aprendizado movida pela curiosidade
- Depuração de código espaguete, o fracasso realista de animações em widgets de set-top box, alto desempenho em uma competição de CTF e outros episódios repetiram erros, tentativas e crescimento
- Com o passar do tempo, veio a percepção de que a capacidade de resolver problemas não é talento, mas resultado da experiência; e, no fim, o que permanece é expertise, ética e a forma de tratar as pessoas
O começo da web: ver o código-fonte (Viewing the Source)
- Logo após entrar na universidade em 2001, enquanto navegava pela web no laboratório de informática no começo da noite, digitou
susam.com na barra de endereço e teve seu primeiro contato marcante com a web
- Um veterano que observava por cima do ombro abriu o menu View > Source do Internet Explorer e explicou que um site era texto escrito em HTML
- Abriu o Notepad, escreveu diretamente um HTML simples como
<BODY><FONT COLOR="RED">HELLO</FONT></BODY> e mostrou como aquilo aparecia no navegador
- Na época, a tag
FONT era amplamente usada e era comum escrever as tags HTML em maiúsculas
- Mostrou rapidamente como funcionava a web, alterando tamanho e cor da fonte, alinhamento centralizado e cor de fundo
- Foram apenas uns 10 minutos de explicação, mas a World Wide Web de repente pareceu menos misteriosa e muito mais interessante
- Depois de terminar a explicação, o veterano não devolveu o lugar e continuou usando a web; como havia poucos assentos, foi preciso voltar para o dormitório
- O domínio
susam.com já estava em uso por um negócio relacionado à culinária turca, então não foi possível registrá-lo; depois, a escolha acabou sendo um domínio .net
- Esse breve encontro se tornou o ponto de partida de uma longa jornada criando e mantendo um site pessoal
O vetor de reset (The Reset Vector)
- Um episódio da época da universidade, enquanto escrevia em uma máquina MS-DOS baseada em Intel 8086 um programa de controle de elevador em linguagem assembly no laboratório de informática
- Veio à mente o que havia aprendido em aula: quando o 8086 é resetado, o CS:IP é definido como FFFF:0000
- Ficou curioso sobre o que aconteceria ao saltar para esse endereço no
DEBUG.EXE e decidiu testar
- Logo após executar o comando
C:\>DEBUG -G =FFFF:0000, o sistema reiniciou imediatamente
- Um amigo que era o primeiro da turma em todo semestre viu a cena, ficou muito surpreso e perguntou como alguém poderia pensar em fazer aquilo
- Uma semana depois, ele foi ao dormitório e confessou que, embora sempre tirasse o primeiro lugar, não tinha essa curiosidade de lembrar um pequeno fato e testá-lo por conta própria
- Declarou que deixaria de buscar ser o melhor da turma e passaria a estudar explorando, experimentando e se divertindo com o que aprendia
- Depois disso, continuou tirando notas altas, mas de fato nunca mais ficou em primeiro lugar
- Um único experimento, saltando para o ponto de entrada de reset do processador, acabou se tornando o gatilho para mudar a atitude de aprendizagem de alguém, da competição para a exploração
Ataque man-in-the-middle e o primeiro cargo de engenharia (Man in the Middle)
- Após se formar, no primeiro emprego foi alocado para a equipe de suporte técnico de um produto de e-banking, com a tarefa de executar um instalador para distribuir um determinado componente
- O instalador, escrito em Python, falhava com frequência porque suas premissas sobre o ambiente de destino eram frágeis; na primeira semana, estabilizou o instalador e escreveu um guia passo a passo para usuários
- O guia para usuários teve repercussão maior do que as melhorias no código
- Sentindo limites no trabalho repetitivo de suporte, passou a querer algo mais voltado a desenvolvimento e pediu várias vezes para mudar de equipe
- No fim, surgiu a oportunidade de entrevistar para a equipe Archie (arquitetura) em outra cidade
- A equipe Archie era responsável pelo framework web e pelos componentes centrais de arquitetura que sustentavam todo o produto de e-banking
- Fazia internamente, com Java Servlet e JSP, itens como roteamento de API, autenticação e autorização, além de gerenciamento de cookies
- Era uma estrutura criada antes do aparecimento de frameworks open source como Spring ou Django
- Como era usada em ambiente bancário, testes rigorosos de segurança e auditorias periódicas eram indispensáveis
- Em uma entrevista por telefone em 2006, conseguiu responder perguntas de segurança como SQL injection e mitigação de XSS, mas admitiu que não conhecia o termo MITM (ataque man-in-the-middle)
- O entrevistador explicou: “Estude PKI e MITM a fundo. Vamos implementar funcionalidade de assinatura digital em um produto de internet banking corporativo”
- Nas semanas seguintes, mergulhou em RFCs, materiais sobre infraestrutura de chave pública (PKI) e padrões de criptografia de chave pública
- No início parecia difícil e pesado, mas com o tempo passou a fazer sentido como um sistema intuitivo e sofisticado
- Cerca de um mês após se mudar para a nova cidade, concluiu a funcionalidade de assinatura digital usando a biblioteca open source Bouncy Castle
- Depois disso, desenvolveu várias outras partes centrais do produto e acumulou a experiência de ver seu código incluído em um sistema maduro usado por centenas de bancos e milhões de usuários
- O gerente era um mentor excepcional, e seu apoio se tornou por muito tempo a base da autoconfiança
- Mesmo cerca de 20 anos depois, o produto ainda está em operação; às vezes, ao abrir as ferramentas de desenvolvedor do navegador como cliente, ainda encontra vestígios do código escrito naquela época
Código espaguete (Spaghetti Code)
- Por volta de 2007–2008, participou de um trabalho de prova de conceito (PoC) para desenvolver widgets para set-top boxes OpenTV
- Enquanto escrevia código em um ambiente C extremamente reduzido, surgiu um problema de travamentos intermitentes no widget
- Por causa de uma lógica complexa e emaranhada e de operações com ponteiros sem controle, o código chegou a um estado de código espaguete difícil de entender até para quem o havia escrito
- Entregou o código em forma de tarball ao líder e arquiteto de uma equipe de quatro pessoas
- Um problema que não conseguiu resolver por horas foi identificado pelo arquiteto em apenas 5 minutos após receber o código, apontando exatamente um bug de ponteiro em um arquivo específico
- Ao corrigir aquela única linha, o travamento desapareceu imediatamente
- A experiência mostrou que, embora acreditasse ser bastante bom, ainda faltava muito para se tornar um bom desenvolvedor de software
- Crescendo ao longo dos anos seguintes, hoje consegue lidar com a complexidade de software em um nível incomparável ao daquela época
Widgets animados para televisão (Animated Television Widgets)
- Em outro projeto do mesmo período, foi responsável pelo desenvolvimento de widgets para uma plataforma de set-top box baseada em Java ME (Micro Edition)
- O projeto era conduzido em uma estrutura de colaboração entre três partes
- Sua empresa: papel de fornecedora de software
- Uma grande operadora de telecomunicações: dona da marca do serviço de televisão DTH
- O fabricante do set-top box: fornecedor do hardware e da plataforma
- A operadora perguntou se seria possível aplicar aos widgets efeitos de animação como entrar e sair deslizando
- Em uma reunião com os parceiros, o fabricante do set-top box afirmou categoricamente que “esse set-top box não suporta animação” e que isso era impossível
- A avaliação foi de que, se o widget podia ser desenhado, então seria possível animá-lo redesenhando-o repetidamente com pequenas mudanças de posição
- Com esse princípio, foi implementada uma demonstração funcional no emulador
- Na reunião seguinte, ao compartilhar a demo, o fabricante reagiu com irritação e exigiu a interrupção imediata do trabalho
- O motivo era a contradição com a posição oficial de que aquilo era impossível
- Um representante da operadora interveio dizendo: “Eles estão mostrando uma implementação de algo que vocês disseram ser impossível”; e criticou duramente:
como pode o próprio fabricante não conhecer o desempenho do seu produto?
- Depois, ao testar no hardware real, ficou claro que a animação que parecia suave no emulador aparecia na TV com engasgos evidentes
- Ao longo de algumas semanas, tentou ajustar frame rate, mudar a forma de buffering e otimizar o loop de renderização
- Ficou exposto o limite do desempenho restrito do hardware embarcado, incapaz de sustentar cálculo e renderização
- No fim, a operadora concluiu que “era melhor não ter animação do que ter uma animação ruim” e descartou a funcionalidade por completo
- No resultado final, confirmou-se que a avaliação do fabricante do set-top box estava correta em termos práticos
Boas bênçãos (Good Blessings)
- Em 2009, depois de trabalhar cerca de um ano na RSA Security, passou a buscar um trabalho mais intelectual, centrado em matemática e algoritmos
- O cientista-chefe da RSA Laboratories, Dr. Burt Kaliski, ofereceu pessoalmente uma conversa para aconselhar sobre a direção da carreira
- Com base nesse conselho, ingressou em uma nova equipe e permaneceu nela pelos 6 anos seguintes
- Geradores de parser, especificação e implementação de linguagens formais
- Desenvolvimento de mecanismos de indexação e consulta para bancos de dados em escala de petabytes
- Aprendendo algo novo quase todos os dias, viveu o período mais prazeroso da carreira
- Anos depois, ao perceber que aquela conversa breve havia mudado sua trajetória profissional, enviou um e-mail de agradecimento
- A resposta do Dr. Kaliski incluía a seguinte ideia
- Assim como outras pessoas investiram na carreira dele, o objetivo era oferecer encorajamento a quem ainda está crescendo
- Passar boas bênçãos de uma geração para a próxima
O placar do CTF (The CTF Scoreboard)
- Em 2019, já não era mais um engenheiro iniciante na casa dos 20 anos, mas um staff engineer experiente, após anos desenvolvendo sistemas de banco de dados e redes de baixo nível em C/C++
- A carreira entrou em uma nova fase, liderando o desenvolvimento de microsserviços em Go e Python
- Como já usava Python e Go em projetos pessoais, a transição foi relativamente natural
- Em outubro, no mês de conscientização sobre cibersegurança, a empresa promoveu uma competição interna de CTF (Capture the Flag)
- Ela era composta por diversos tipos de quebra-cabeças técnicos, como SQL injection, criptografia fraca, reversing de binários e exploração de stack overflow
- Apesar do desconforto com desafios competitivos e com limite de tempo, participou e, em cerca de 8 horas, resolveu aproximadamente 90% dos problemas, ficando em 1º lugar
- Durante a competição, colegas passavam pela mesa, viam o andamento e demonstravam surpresa, tornando o assunto comentado no escritório
- Acabou ouvindo por acaso uma conversa entre dois jovens colegas engenheiros que respeitava muito
- Quando um elogiou o resultado, o outro respondeu: “Claro, ele trabalha com C há mais de 10 anos”
- Na juventude, resolver esse tipo de problema era interpretado como “ser inteligente”; agora, percebeu a mudança para uma leitura natural como resultado da experiência
- Mesmo que conquistas técnicas passem a ser vistas como fruto da experiência, daqui para frente quer deixar uma boa impressão por expertise, ética e pela forma de tratar os colegas
Retrospectiva geral
- A jornada de 25 anos na computação é um fluxo que começa na curiosidade e segue por experimentação, colaboração, gratidão e reflexão
- Mais do que conquistas técnicas chamativas, o que permanece por mais tempo são as relações humanas e de aprendizado construídas ao longo do caminho
- As experiências de cada fase se conectam entre si e se acumulam como crescimento contínuo e uma postura humilde
- No fim, o essencial de uma carreira em desenvolvimento de software está menos no código em si e mais nas histórias das pessoas com quem se aprendeu e trabalhou
1 comentários
Comentários do Hacker News
Antigamente havia confiança de que, se você atribuísse um trabalho às pessoas, elas dariam conta sozinhas
Mas hoje exigem de engenheiros juniores um projeto de sistema no nível do Twitter e fazem eles decorar soluções de problemas do Leetcode
Antes isso era um procedimento inútil, e há expectativa de que os LLMs acabem com essa cultura
Eu também comecei de um jeito parecido
Na 3ª série do ensino fundamental, vi o livro “Make Your Own Web Page! A Guide for Kids” na feira do livro da escola e pedi para minha mãe comprar
Na época eu achava que a internet era quase algo exclusivo de empresas, então descobrir que eu mesmo podia criar uma página web me fisgou completamente
Aprendendo HTML, eu me sentia como se tivesse virado um hacker, e a professora ficou tão surpresa que até ligou para os meus pais
Depois aprendi programação com “Sams Teach Yourself C in 24 Hours”, um livro de ActionScript para Flash MX 2004 e um livro de C++
Graças a isso, hoje construí uma carreira decente e, recentemente, reencontrei esse livro no eBay, reli e sorri
Eu ri alto na parte em que o funcionário da operadora disse ao responsável pelo set-top box: “cala a boca”
A situação toda era uma cena absurda e engraçada. Muitas vezes as pessoas se apegam a coisas inúteis e acabam se colocando em apuros
Acabou fazendo a si mesmo parecer um idiota sem necessidade. Ainda assim, foi um texto realmente muito divertido
Me identifiquei com a parte sobre o instalador escrito em Python sempre precisar de intervenção manual porque as premissas sobre o ambiente estavam erradas
Eu também gastei meio dia configurando um ambiente de desenvolvimento para SDR. O inferno de dependências continua aí
No fim funcionou, mas estava uma bagunça completa
É bom quando você controla o ambiente com contêineres, como no lado servidor, mas fora disso eu não queria usar de jeito nenhum
Havia uma mistura de software comercial antigo com projetos OSS abandonados, e a cada poucos meses algo quebrava aleatoriamente, paralisando o desenvolvimento
No fim, uma empresa chegou a adotar um esquema de subir instâncias EC2 baseadas em AMI para cada desenvolvedor, mas até a CLI usada para gerenciar isso quebrava com frequência
Eram tempos realmente “divertidos”
Eu também estou entrando agora na marca de 20 anos de carreira, mas como só trabalhei com desenvolvimento web, acho que não tenho muitas histórias curiosas para contar
Quanto mais velho a gente fica, menos as pessoas se surpreendem quando você resolve problemas técnicos
Ainda assim, se um dia eu estiver programando mesmo já idoso, talvez volte a causar impressão
Na frase “saltou para o ponto de reset do processador”, me veio a sensação de que não só a CPU, mas também a postura de aprendizado da pessoa foi resetada
Se você tem interesse em DevOps, recomendo "Tales from the Machine Room", de Davide Bianchi
Foi dito que antes não conseguiram comprar o domínio “susam.com”, mas agora ele está à venda
Talvez dê até para comprar por menos que o preço cheio. Claro, .net também serve, mas se houver apego emocional, pode valer a tentativa
Obrigado por compartilhar essas boas histórias
A experiência de ter trabalhado na indústria de software antes dos LLMs é algo que só dá para entender de verdade vivendo isso