Recebi meu primeiro salário como desenvolvedor de software em julho de 2004. Já se passaram 20 anos.
Durante esses anos fui desenvolvedor, dono de empresa, consultor, instrutor, e aprendi (principalmente cometendo erros) muitas coisas sobre o lado técnico e o lado social do desenvolvimento de software.
O que escrevi aqui é baseado no que vivi neste mercado, o que significa: é baseado em muitos anos de experiência, mas também é enviesado por essas mesmas experiências. Mas como vi coisas mudando e outras não mudando, gostaria de tentar elaborar meu raciocínio sobre quais são as causas e consequências desses resultados.
Então, vamos lá!
O que mudou em 20 anos?
Bem… Obviamente, a tecnologia mudou. E com isso, tudo mudou.
Quando comecei a programar não tínhamos iPhones ou telefones Android, e curiosamente eu estava trabalhando com computação móvel. Pocket PC 2002 era o sistema operacional e eu escrevia código C++ que precisava ser altamente otimizado por causa de todas as restrições de memória que tínhamos naquela época.
Mobile nos anos 2000: Esses dispositivos conseguiam fazer o Nokia 3310 parecer frágil
Mas mais importante: as organizações mudaram. E a maioria das mudanças que vi foram causadas por inovações tecnológicas.
Complicado, depois mais simples, depois complexo
Se você já escreveu uma aplicação web usando J2EE e Enterprise Beans, lembra como era burocrático. O deploy não era direto, precisávamos escrever muito código para fazer a coisa mais simples e mudanças no schema do banco de dados eram um pesadelo. A questão é que estávamos principalmente criando aplicações web privadas porque a web não era o que é hoje (nem mesmo o Orkut tinha sido criado ainda).
No início, esses pontos de dor incentivaram as organizações a buscar equipes maiores, um departamento de gerenciamento de banco de dados especializado e também um departamento de operações.
Por outro lado, os desenvolvedores começaram a criar ferramentas para resolver esses pontos de dor: frameworks ORM como Hibernate começaram a se tornar populares, depois frameworks como Rails começaram a introduzir maneiras mais fáceis de criar bancos de dados evolutivos e também uma abordagem mais direta para criar uma aplicação web.
Essas mudanças empoderaram os desenvolvedores e permitiram que pequenas equipes fossem ainda mais produtivas do que as grandes equipes corporativas eram. Com isso vimos uma mudança no mercado: todo mundo queria equipes menores com os chamados Desenvolvedores Full-stack. Computação em nuvem estava disponível para todos por menos de US$5/mês com Heroku, DigitalOcean e AWS, e muitas startups começaram a aparecer em todo lugar.
Mas então… tudo mudou.
A web evoluiu e o que era um simples REQUEST/RESPONSE com HTML e CSS se tornou um quebra-cabeça complexo usando Ajax, jQuery, e depois Angular, Ember, React, Vue, Svelte. As empresas começaram a exigir desenvolvedores frontend.
No backend, as coisas ficaram ainda mais complexas. Os gigantes da indústria estavam enfrentando os desafios causados pelo seu próprio sucesso: como lidar com uma quantidade tão massiva de usuários simultâneos? Como armazenar eficientemente essa quantidade massiva de dados?
Então novamente, os desenvolvedores vieram ao resgate e criaram soluções como Docker, Kubernetes, Grafana. Os gigantes compartilharam suas histórias de sucesso e as empresas de médio porte decidiram adicionar toda essa complexidade aos seus produtos para alcançar os mesmos resultados. Em parte, esse movimento também foi causado pelos desenvolvedores: queríamos trabalhar com a tecnologia de ponta usada pelos gigantes do mercado, mesmo que claramente não fosse necessário para nossos servidores que estavam lidando com muito menos usuários do que Google ou Facebook.
Desenvolver um software simples parecia… desnecessariamente complexo. A maioria das empresas com as quais trabalhei naquela época não estavam criando produtos para as massas, mas produtos de nicho com pouca ou nenhuma necessidade de tal complexidade. E foi na verdade quando comecei a trabalhar mais com consultoria e treinamento novamente. Eu estava constantemente defendendo modelos mais simples sempre que eram bons o suficiente.
Ainda estou.
O que não mudou em 20 anos?
Muitas coisas:
-
Ainda precisamos de desenvolvedores de software
-
As pessoas ainda estão tentando descobrir como medir produtividade no campo de desenvolvimento de software
-
Estimativas ainda são um problema para a maioria das pessoas
-
As pessoas ainda discutem sobre qual é o melhor editor de texto/IDE/framework/linguagem
-
E bem… desenvolvimento de software ainda me traz alegria :)
Não sinto que disse tudo o que queria dizer. Ainda preciso refletir mais sobre como mudei durante esses 20 anos.
Talvez eu escreva mais sobre isso no futuro.