- A educação formal é útil para transmitir proficiência de forma eficiente, mas tem limitações para desenvolver a intuição necessária para resolver problemas inesperados
- Tentativa e erro repetitiva com propósito (algoritmo) é o fator que mais eleva a proficiência, por meio do processo de falhar e corrigir em situações reais
- Nos exemplos reais, figuras como Linus Torvalds e Margaret Hamilton passaram por falhas, superaram-nas e assim desenvolveram capacidades extraordinárias
- A mentoria é um importante acelerador, mas a experimentação autodirigida e a experiência direta são o núcleo do crescimento definitivo
- A experimentação orientada a objetivos, de enfrentar problemas de frente, quebrar coisas e resolvê-las por conta própria, é a base do verdadeiro aprimoramento técnico
A força que cria os melhores engenheiros de software: tentativa e erro com propósito
O mito da sala de aula
- A educação formal é valiosa para transmitir conhecimento, mas é um processo otimizado para escalar
- Ela empacota experiências práticas complexas em procedimentos bem refinados, num formato que pode ser concluído em um semestre
- Nesse processo, é possível aprender a proficiência básica necessária no trabalho, mas há limites para construir a capacidade de resolver intuitivamente problemas em crises inesperadas
- Especialmente quando um problema real acontece em produção às 3 da manhã, apenas a receita aprendida na sala de aula não basta para resolvê-lo
O crescimento real ao aprender enfrentando os problemas diretamente
Casos exemplares
- Linus Torvalds criou o Linux ao reescrever o MINIX
- Margaret Hamilton ajudou a criar o conceito moderno de confiabilidade ao corrigir problemas de código em tempo real no projeto Apollo
- Incontáveis mantenedores de open source também cresceram quebrando o próprio laptop e depois consertando tudo de novo
- Eles não começaram assistindo a aulas sequenciais; foi graças às falhas e ao impacto real delas que adquiriram competência profunda
Por que a tentativa e erro supera a receita
- O loop de feedback é imediato. Analisar um crash nos logs proporciona um aprendizado muito mais rápido do que um quiz
- Casos de borda aparecem naturalmente em ambientes reais, trazendo cenários de uso que nenhum material didático consegue imaginar
- Problemas resolvidos com dificuldade ficam profundamente na memória. Viram memória muscular
- Quando não existe um guia pronto, a criatividade se manifesta de forma explosiva
Reavaliando a mentoria: complemento, não substituto
- Um bom mentor acelera o feedback e amplia a visão, mas, no fim, quem experimenta e vive a experiência é a própria pessoa
- O code review tem valor por compartilhar os resultados do experimento, mas não substitui a experiência direta
Cultivando hábitos de experimentação autodirigida
- Tente um projeto paralelo que o deixe um pouco desconfortável
- Meça tudo para garantir dados analisáveis quando algo falhar
- Impõe restrições como limitar frameworks ou concluir algo em 48 horas para desenvolver soluções criativas
- Publique seu código para receber validação externa
- Faça uma retrospectiva semanal para registrar as causas das falhas e o que foi aprendido
Resumo
- Mentoria, cursos e blogs atuam como aceleradores, mas a verdadeira habilidade é construída no atrito intenso com os problemas do mundo real
- Os melhores engenheiros alcançam resolução prática de problemas e crescimento por meio de tentativa e erro livre e com propósito
- A experiência adquirida nesse processo se torna o maior ativo para o seu eu do futuro
1 comentários
Comentários do Hacker News
Eu mesmo sou um desenvolvedor autodidata e passei a maior parte da minha carreira em grandes empresas trabalhando com colegas formados em CS
Pela minha experiência, desenvolvedores autodidatas, se tiverem inteligência suficiente, acabam encontrando uma solução para o problema dado
Já os formados em CS muitas vezes nem tentam quando entram em uma área totalmente desconhecida para eles (claro, isso varia conforme o perfil; eu diria que uns 85% se encaixam nisso)
Diante de muita incerteza, eles travam
No fim, formados em CS se encaixam melhor em ambientes de grandes empresas, trabalhando dentro de padrões como engrenagens substituíveis
Desenvolvedores autodidatas estão sempre inovando, tentando reduzir repetições ineficientes, e essa postura original acaba deixando os outros desconfortáveis
Mas essas pessoas autodidatas acabam produzindo resultados muito melhores
A maioria dos desenvolvedores parece valorizar mais manter o emprego e reduzir insegurança do que escrever código realmente excelente
Muitos engenheiros com formação formal também gostam de atacar problemas novos com vontade
Isso parece menos uma questão de autodidatismo vs. formação formal e mais uma questão de perfil: curiosidade, dedicação, criatividade, inteligência etc.
Pode ser que isso apareça com mais força entre autodidatas porque, para ter sucesso assim, eles necessariamente precisam dessas características
Quando um engenheiro com formação formal também tem essas características, ele frequentemente tende a superar qualquer um dos dois grupos
Acho que a maior diferença provavelmente é de personalidade
Eu, como autodidata, sempre me apoiei muito na diligência
Talvez eu não tivesse uma visão técnica tão boa do “quadro geral”, mas em compensação eu tentava ser quem mais entregava resultado no time
Já cheguei a montar três protótipos em poucos dias para testar na prática
Meus colegas formados em CS faziam o design uma vez no quadro branco e depois implementavam o código uma vez só
Os dois métodos nunca foram aplicados ao mesmo trabalho, então é difícil dizer qual gera resultados melhores
Na minha cabeça, o meu método parece “testado no mundo real”
É verdade que o método de CS era visto como o ideal
Mas também acho que aprendi muito com a mentoria de engenheiros formados em CS
Depois de uns 10 anos de experiência, independentemente de como a pessoa começou, todo mundo acaba ficando parecido e desenvolvendo uma intuição semelhante sobre qual é a “resposta certa”
Talvez eu esteja romantizando ou generalizando um pouco; seria bom se outras pessoas complementassem isso nas respostas
Concordo em parte
A maior parte dos currículos de CS é bem distante do trabalho real, então um diploma não é um indicador imediato de habilidade
Mas não consigo concordar de jeito nenhum com a ideia de que 85% dos formados em CS não conseguem lidar com problemas desconhecidos
Se existe uma virtude no diploma de CS, é que a trilha de engenharia inclui disciplinas extremamente exigentes em termos intelectuais
É difícil acreditar que alguém capaz de passar por tudo isso não consiga atuar em desenvolvimento de software no trabalho real
Quando você entra em áreas de desenvolvimento realmente difíceis, eu diria até que uma grande parte das pessoas tem diplomas avançados em CS
Parece que essas características surgem em quem tem interesse profundo por software, e muitos deles também vêm de CS
Pela minha experiência, autodidatas passam por uma seleção natural
Ou seja, um autodidata que não consegue resolver problemas desconhecidos nem chega a ser contratado
Quem vem de formação formal costuma ser mediano ou melhor, mas não necessariamente extraordinário
Já alguém que descobriu tudo sozinho e ainda validou isso com formação universitária costuma demonstrar uma força absurda no trabalho real
Acho que o ponto central não é a forma de aprendizado, e sim a “paixão”
Se a motivação é fraca, tanto faz o método de aprendizado: o limite aparece rápido
Esse tema também tem um lado difícil de discutir numericamente
A formação formal pode construir muito bem conceitos fundamentais como matemática, hardware, sistemas operacionais, compiladores etc.
O autodidatismo é orientado a objetivos, então pode acabar ignorando fundamentos
Quando você nem sabe o que não sabe, ter um bom mentor (professor, ótimo livro) economiza um tempo enorme
Muitos engenheiros, inclusive eu, passam tanto por aprendizado formal quanto informal
Quando existe paixão, a pessoa continua construindo coisas por conta própria e fazendo experimentos além do aprendizado formal
O que realmente diferencia engenheiros excepcionais não é o tipo de formação, mas uma paixão muito clara
Casos como Linus e Margaret também eram, no fim das contas, pessoas com um apetite gigantesco por aprender
Eu também, como programador autodidata, concordo totalmente
Aprendo sozinho desde a era dos computadores de 8 bits dos anos 80, e nunca fiz faculdade
Quando consegui meu primeiro emprego formal de programação aos 19 anos, eu já programava havia 9 anos
Quando a maioria se formou na faculdade, eu já tinha quase 15 anos de experiência escrevendo código
Acho difícil ignorar esse nível de paixão e iniciativa
Ainda hoje, quase 40 anos depois, continuo gostando de software do mesmo jeito
Acho divertido criar coisas, continuo lendo artigos acadêmicos, acompanhando a área, e ainda escrevo código demais
Mas acho meio injusta essa ideia de que autodidatas não têm fundamentos
Na prática, muitos autodidatas também exploram bastante a parte acadêmica — isso depende muito da área
Pode faltar tempo para estudar algo com profundidade, mas depois de décadas de experiência, às vezes os fundamentos ficam até mais sólidos do que em quem só passou pela escola
Também já contratei e demiti bastante gente, e muitas vezes autodidatas entregaram resultados melhores
No fim, eles simplesmente tiveram muito mais tempo de “mão na massa” — a paixão acaba empurrando o volume de aprendizado
Essa parte de “quando você não sabe o que não sabe, é muito útil ter alguém te guiando com eficiência” faz muito sentido para mim
Meu caso fica no meio do caminho entre formal e informal
Nunca cursei matemática discreta avançada nem álgebra linear, então tenho muitas lacunas de base
Às vezes nem sei quais termos devo pesquisar
Em certas áreas, realmente é essencial ter orientação de alguém
Já foi muito difícil até conseguir um tutor para validar programas de matemática vetorial quando eu já estava perto dos 40 anos
A paixão impulsiona o autodidatismo, mas no ambiente de sala de aula talvez ela seja menos necessária porque sempre existe alguém mantendo você nos trilhos
E também existe autodidata “orientado a objetivos”, mas há autodidatas cujo objetivo é entender como o sistema funciona por dentro
Mesmo que alguém te leve à força até a água, isso não quer dizer que você nunca tenha ido sozinho até lá
A diferença consistente é que todo autodidata, pelo menos uma vez, já foi até a água com as próprias pernas
Eu sou um caso híbrido de formação formal + autodidata
Fiz muitas disciplinas na faculdade, mas não tirei o diploma porque não fui bem o bastante nas provas
Só consegui aprender o resto por conta própria porque as aulas me deram a base necessária
Acho as aulas da faculdade realmente excelentes
Se eu não soubesse absolutamente nada, nunca teria ido por conta própria atrás da API de sockets de C, de projetos em bash, de sistemas distribuídos, de estruturas de dados ou de algoritmos
Na prática, entrevistei muitos autodidatas e pessoas vindas de bootcamp, e elas tendem a cavar só nas áreas em que já se sentem confortáveis, ou desmoronam facilmente diante de perguntas mais acadêmicas
Por outro lado, quem passa pela faculdade sem realmente ter programado acaba tendo uma habilidade muito fraca, e mesmo durante a faculdade muita gente esquece tudo que aprendeu antes
Acho que a melhor combinação é programar um pouco antes de entrar na universidade
Você precisa ter sentido na pele a dor de bater cabeça sozinho para realmente internalizar as soluções teóricas e elegantes apresentadas na faculdade
Quanto mais você sofreu com erros de gerenciamento de memória como os relacionados a RAII, mais fundo esse tipo de conceito entra em você
Pessoas de bootcamp e autodidatas devem ser tratadas como grupos diferentes
Pode até haver gente talentosa saindo de bootcamp, mas entre as pessoas que conheci, muitas escolheram esse caminho por não conseguirem aprender sozinhas e por estarem tentando faculdade ou outra área antes, e bootcamp era só a alternativa mais barata
Antigamente nem existiam bootcamps, e eu também evitava cursos online ou métodos tradicionais de estudo
Eu queria construir algo incrível, e achava muito mais empolgante resolver problemas por conta própria do que simplesmente seguir apostilas e repetir tentativas
Aprendi C sozinho quando era jovem porque havia coisas que eu queria fazer e que o material existente ou o código disponível simplesmente não permitiam, e eu queria tanto um resultado legal que tive de fuçar fóruns, ler documentação e chegar lá por tentativa e erro
Acho que o mais importante não é o método de estudo, mas o desejo forte de aprender
Antes mesmo da faculdade, eu já dominava C, a API de sockets e já tinha experiência entregando software
Eu tinha um amigo que ganhou dinheiro no ensino médio vendendo jogos para C64
Nós dois estávamos muito à frente de iniciantes em termos de programação prática
O que me faltava era mais a parte teórica: cálculo, álgebra linear, matemática discreta, e às vezes também algumas lacunas em estruturas de dados e algoritmos
O curso de CS ajudou a preencher esses buracos, mas não melhorou minha habilidade de programar em si
As matérias de programação não eram nada difíceis para mim, o que realmente pegava eram as disciplinas de matemática e teoria
O curso de CS me tornou um engenheiro mais equilibrado, mas não um desenvolvedor melhor
Na minha época de universidade, o ambiente de CS era exatamente o oposto do que hoje se fala como vantagem do ensino superior
Eu mesmo não escolhi CS na faculdade por esse motivo (hoje sou desenvolvedor sênior em empresa de tecnologia nos EUA), e naquela época CS, apesar de ser um curso de elite numa universidade excelente, tinha os piores índices de reprovação, desemprego e clima entre professores
Claro que muita gente tirou muito valor da universidade, mas a realidade não é assim para todo mundo
Muitos formados em CS com quem trabalhei tinham muita dificuldade em comunicação, entendimento de negócio e priorização de trabalho
Muitas vezes só conseguiam escrever código (e às vezes nem isso muito bem), e sair de um curso de CS realmente pronto para o trabalho é mais raro do que se imagina
Na verdade, acho que o formato universitário é um grande exemplo de permanecer na “zona de conforto”
Também é preciso reconhecer que o próprio acesso e custo das aulas universitárias são uma questão de classe social e econômica
E também existem autodidatas que aprenderam sozinhos API de sockets, projetos em bash e coisas do tipo
Só para constar, autodidatas e pessoas vindas de bootcamp são perfis completamente diferentes
Eu posso até travar em situações impostas, como entrevistas estilo audição, mas sozinho resolvo problemas reais muito bem
Pode soar meio boomer, mas eu também fui de uma geração em que a universidade era realmente muito boa
Construí compiladores, um toy OS, interface com GPS e outras coisas
Alguns anos atrás fui convidado para lecionar em outra instituição e fiquei muito decepcionado
O currículo parecia um bootcamp moderno esticado por alguns anos, com um monte de matérias sem muita relação
Quase não havia fundamentos; tirando algoritmos, era tudo React e frameworks populares nas startups locais
(edição: olhando o currículo de fato, havia disciplinas de negócios, gestão, humanas, química, meio ambiente, empreendedorismo e e-sports)
Parece que muita gente gasta bastante energia tentando aceitar a própria falta de educação formal
Existem autodidatas brilhantes e diplomados nem tão inteligentes assim, mas pela minha própria experiência acho que ter tido um diploma em CS teria ajudado no meu caminho
CS, em essência, não é apenas programação, assim como ME (engenharia mecânica) não se resume às tarefas de um ofício específico
Engenheiros mecânicos também não são melhores do que mecânicos em consertar vazamento de óleo ou pneu furado
Mas ninguém desvaloriza um diploma de engenharia por causa disso
Eu também comecei resolvendo no chão de fábrica, com a mão na graxa, problemas que técnicos não conseguiam resolver, mas isso vinha do meu gosto pessoal e da minha curiosidade
O motivo de autodidatas produzirem resultados excelentes é justamente que, para se tornarem autodidatas, eles já precisaram ter motivação, paixão e autonomia acima da média
No fim, se a pessoa tem curiosidade, foco e disciplina, vai ficar acima da média com formação formal ou informal
Também existe viés de sobrevivência — você só enxerga os autodidatas que realmente sobreviveram na prática
Em contrapartida, talvez os autodidatas que fracassaram tivessem se saído melhor com ensino adequado
Eu gostei tanto da formação em CS quanto da matemática, mas em termos de formato sempre senti que aprender sozinho combinava mais comigo
A palavra “frequentemente” é só um jeito vago de maquiar a imprecisão
Eu sou desenvolvedor de software e também professor universitário de CS
O traço comum entre engenheiros que realmente têm sucesso é, no fim, o “interesse” e a “paixão”
Autodidatas naturalmente têm muito interesse na área, então a motivação deles já vem validada
Já entre diplomados o grupo é mais misto — há quem só queira o diploma, e aí a pessoa conhece os termos teóricos, mas fica difícil avaliar a habilidade real
O autodidata, por definição, é alguém com motivação e interesse fortes o suficiente para sair do sistema e estudar por conta própria
Dá para pensar o conhecimento como um círculo desenhado num quadro
https://matt.might.net/articles/phd-school-in-pictures/
O círculo que se aprende na universidade é surpreendentemente estreito e, em geral, segue um currículo quase idêntico
Por exemplo, não há tempo para ensinar algoritmo DMC (usado no melhor algoritmo de compressão)
Em vez disso, todo mundo repete um currículo mais genérico
Mas existem pessoas que avançam para além desse círculo
Essas pessoas são os melhores programadores da indústria — conhecem até algoritmos raros que você normalmente só vê em artigos, e por isso demonstram uma habilidade diferenciada
O mesmo vale para autodidatas; como eles podem ter lacunas justamente no círculo comum que todo mundo aprende, muitas vezes partem de motivação própria e humildade
Mas o círculo de conhecimento que eles têm foi construído de forma orgânica pela paixão
E essa paixão é, na minha opinião, o melhor sinal de desempenho em engenharia
Em outras palavras, “uma pessoa que já demonstrou a capacidade de decidir sozinha o que precisa aprender de forma independente, e depois de fato aprender isso, tende a se destacar em trabalhos que exigem exatamente essa competência”
Torvalds, quando publicou a primeira versão do Linux em 1991, mal tinha tido educação formal em CS até então
Também concordo com isso
No nosso curso de graduação também havia um projeto em que precisávamos implementar um sistema operacional multiprocessos em assembly 68K
Esse tipo de experiência me ajudou a entender com muito mais facilidade a estrutura e o funcionamento do kernel do Linux
Se eu nem soubesse o que era um kernel, nem conseguiria começar
Recentemente venho tentando aprender por conta própria um problema de análise numérica com o qual eu não tinha experiência (construir um solver LU esparso)
O material mais útil não foi implementar diretamente nem desmontar código de solvers existentes, mas sim notas de aula sobre o tema
Ao ver a aula inteira, passei a entender também conceitos relacionados que eu nem sabia que precisava conhecer
Em outras áreas aconteceu o mesmo: frequentemente o melhor material vinha de aulas universitárias
Se a tese é que aula universitária é desnecessária, então fica difícil explicar por que justamente o melhor material costuma vir da universidade
Existe também o argumento de que construir coisas diretamente é a melhor forma de ganhar habilidade, mas os próprios projetos universitários quase sempre avaliam fortemente a parte de “construção real”
Concordo completamente
Livros técnicos profundos também são excelentes, mas o valor que você tira deles muda completamente conforme a postura com que você chega
Se você aprende só teoria sem nenhuma aplicação real, perde o interesse e esquece tudo muito rápido
Mas quando aprende uma teoria ligada a uma necessidade concreta ou a um trabalho relacionado, aquilo vira conhecimento prático essencial quase instantaneamente
Se alguém entra na universidade depois de já ter acumulado bastante experiência autodidata e consegue manter a paixão, pode realizar coisas impressionantes em pouco tempo
Em resumo, teoria obviamente importa
Só que, se você primeiro constrói alguma coisa e depois estuda a teoria, fica muito mais claro onde está o verdadeiro insight