Boa parte do publico do meu site são pessoas interessadas em aprender a programar, e com alguma frequência me perguntam como é o dia a dia do programador, o que faz, como se faz.. não é tão simples resumir em um post isso, mas posso tentar.
Programador? Empreendedor? Autonomo?
Programadores podem ser empregados, empresários e freelancers, e cada um desses lida de uma forma com as tarefas a serem feitas. O que muda é se você fará apenas uma parte do processo, ou se fará tudo o que será necessário. Outro ponto é a qualidade, sendo funcionário de uma empresa você pode ser “obrigado” a seguir um alto padrão de qualidade, mas também em empresas menores você pode ser cobrado por prazo e terá que abrir mão de qualidade. Quem manda é quem decide o nivel de qualidade do que deve ser feito.
O que faz um programador?
Antigamente quem programava era uma pessoa, que fazia banco de dados era outra, documentação outra.. e cada parte do processo de desenvolvimento era feito por um especialista naquilo. Hoje em dia é diferente, boa parte das vezes o desenvolvedor faz várias partes do processo. Dai vou falar um pouco de cada parte, que compõe um dia meu de trabalho.
Análise
Antes de começar qualquer coisa, é preciso saber o que deve ser feito. Faz parte do dia a dia conversar com os usuários ou com o cliente, e descrever (mesmo que minimamente) os detalhes do projeto. Qual o objetivo do projeto? Quais dados serão necessários para alcançar esse objetivo? É um aplicativo? Site? Sistema web? Quem irá utilizar? Como serão exibidas as informações? Quais processos são automatizados? E por ai vai… em empresas isso pode ser feito mais formamente, gerando documentos com os quais o cliente assina e concorda, e que serão anexados ao contrato, como pode ser uma etapa simplificada em um modelo ágil de desenvolvimento, onde um requisito será chamado de intenção.
Desenvolvimento
É meter a mão na massa. É a maior parte de qualquer projeto de software, porque é onde a coisa realmente acontece. Normalmente o desenvolvedor pega uma tarefa pra fazer, e então precisa criar o produto final. Isso pode se dividir em dezenas de tipos de tarefas, tais como interface, front-end, criação da base de dados, implementação de testes e por ai vai.
Correções
Nem sempre tudo vai como planejado, e quando alguma coisa para de funcionar quem tem que resolver é você. Você sabe se é usuário ou não quando começa a ter que descobrir o que causa um erro, e evitar que ele aconteça novamente. Porque, quando se é usuário, um erro que acontece signifca apenas que você deve clicar em “ok”, fechar, entrar novamente e torcer pra funcionar. Quando é um desenvolvedor você terá que se lascar pra entender o que causou tal falha, e, acredite, podem ser milhões de coisas diferentes… desde um erro em seu código, como um problema com o sistema operacional, uso de memória, atualização de softwares de terceiros.. alguns erros quando acontecem você já sabe exatamente o que causou, mesmo sem ver ainda o código. Já outros você passa horas tentando resolver e não consegue, não é brincadeira. Acontece também de resolver um problema sem saber exatamente o que fez, mas é bem raro.
No desenvolvimento de software, os bugs são coisas comuns. Faz parte disso. Cada software é 99,999% diferente de qualquer outro porque o código é resultado do racioncínio de quem faz, então é quase impossível haver semelhanças na forma como uma e outra pessoa faz. Dai, erros acontecem, porque não tem como se prever todas as situações.
Deploys
Tudo pronto. Hora de liberar para o cliente usar, enviar ao servidor, instalar nos computadores ou coisa do tipo. É hora de tirar da máquina do desenvolvedor e deixar o usuário começar a utilizar. Aqui também muita coisa pode dar errado. Antigamente um software era feito para funcionar no DOS, depois no Windows… depois podia ser Windows, Linux ou iOS… hoje são centenas de opções, incluindo servidores, dispositivos móveis (celulares/tables), televisores e outros tantos. É bem comum seu software ter que funcionar em vários ambientes, ou ter integração entre um e outro (API).
Depois de publicado existem outros deplys, cada nova versão precisa ser enviada para os usuários e o processo é mais ou menos o mesmo, com um grande detalhe, agora não pode falhar porque existem pessoas utilizando. Se você sobe uma versão e tudo para de funcionar, é um caos, e você terá que lidar com isso. Em muitas empresas as pessoas que podem publicar os produtos são poucas, porque é preciso ter uma visão bem clara de como a coisa toda funciona. Por exemplo, você atualiza o sistema Web e quando vai abrir, a pagina fica em branco. Sem nenhum caracter sequer. Um programador experiente sabe que podem ser dezenas de coisas, mas já tem uma sequência de verificação, depuração, que em poucos minutos dirá pra ele onde a coisa quebrou.
Servidores
Como eu disse, existem centenas de ambientes hoje.. quando falamos de servidores a coisa é bem complexa. Os bons desenvolvedores sabem lidar com servidores, acessam o shell (terminal) e executam comandos, instalam serviços, configuram seu funcionamento, verificam falhas, monitoram o desempenho e ainda precisam garantir que tudo isso é seguro.
Você pode pensar que isso é papel da infra, e realmente é. Mas o desenvolvedor precisa saber onde seu software irá rodar, quais as peculiaridades daquele ambiente, daquele tipo de servidor e sistema operacional. Isso diferencia simples programadores de programadores ninjas.
Debug
Já falei um pouco disso, mas aqui é um nível de detalhe mais perto. Quando você está resolvendo um bug, você não sai mudando tudo e vê o que acontece… você segue um processo (totalmente seu) de depurar, de ver onde o problema acontece, porque acontece e como fazer para que ele nunca mais aconteça.
Esse é sem duvida um dos momentos mais curiosos da programação. Muitas vezes você fica completamente imerso em entender exatamente porque uma falha acontece e na depuração entende, descobre coisas incríveis. Você aprende muito nesta hora, porque acontece do problema ser devido a algo que você não entende muito bem, sendo preciso ir estudar uma biblioteca ou recurso, para só então entender o problema, e depois buscar uma solução.
Não sei se isso parece simples, lendo assim.. mas te garanto, é bem complexo e exige concentração e inteligência.
Um erro em um app, pode ser desde um problema no celular do usuário, uma peculiaridade da versão do sistema operacional que ele está usando, um bloqueio na rede que impede um dado de ser obtido, até algo no servidor que por algum motivo não entrega o dado que deveria, que o aplicativo espera. Tudo isso pode ser testado no desenvolvimento mas nunca você terá um teste que cubra todas as possibilidades, e quando uma falha acontecer… você terá que depurar.
Suporte
Alguém precisa fazer, e muitas vezes será você. Lidar com o usuário final pode ser extremamente cansativo. Alguns usuários não sabem utilizar computadores, outros não sabem se expressar, ou não entendem bem o que você quer dizer. Dai essa interação é costumeiramente bem chata. O bom usuário nunca te liga, nunca te manda um email porque ele simplesmente entende o sistema e usa. Programadores gostam de programar, então lidar com usuários e dar suporte não é algo divertido.
Estudar
Acredite, você fará isso todo dia sendo um programador. Pra mim essa é uma das partes boas. Quando posso aprender coisas novas é uma maravilha. Tento sempre incluir alguma tecnologia nova em cada projeto que inicio, assim me mantenho aprendendo sempre e também fico atualizado. Mas o que acontece é que a todo tempo você precisa entender um pouco mais do que está fazendo, de como tornar mais rápido, mais seguro, mais flexível, mas fácil de entender, de usar, com melhor visualização… e tudo isso se resume em aprender sempre. Essa é uma das principais características dessa profissão, você nunca para de estudar.
Aprender domínios
Sabe como funciona uma industria química? E uma empresa de contabilidade? Questões ficais, já parou pra entender? E sobre diagnóstico por imagem?
Nessa vida de programador frequentemente você precisa aprender um domínio novo, ou seja, aprender sobre uma área de conhecimento para então desenvolver alguma solução. Um bom programador domina várias áreas de conhecimento, porque em algum momento já precisou criar alguma solução para aquele segmento. A facilidade de aprender ai fará a diferença, você precisa estar realmente aberto a conhecer coisas novas.
Por fim
Não é brincadeira um dia de trabalho de um programador!
E então, ainda assim está interessado em ser um desenvolvedor? Porque??? Comente ai!
Esqueci de algo? Você desenvolve e precisa desembolar mais que tudo isso?