- Desenvolvimento de Software
Pessoas programadoras desempenham um papel fundamental no desenvolvimento de software, contribuindo com suas habilidades técnicas para criar e manter soluções de alta qualidade que atendem às necessidades dos usuários e às metas do negócio. Neste artigo, que integra a série sobre o time de produto, iremos explorar o papel do programador. Nossa intenção é discutir as complexidades do seu trabalho, os diversos tipos de programação e as ferramentas essenciais que utiliza. Para alcançar esse objetivo, reunimos um time de especialistas experientes que atuam no desenvolvimento de produtos digitais na SoftDesign.
Programadores são responsáveis por escrever o código do software, que consiste em um conjunto de instruções que são interpretadas pelo computador. Para escrever tais códigos é preciso utilizar linguagens de programação como Python, Java, C# e JavaScript e seguir suas regras e estruturas. Geralmente, esses profissionais conhecem e utilizam mais de uma linguagem específica.
Além de escrever o código que dá origem às telas e às regras de negócio dos produtos, um programador também desempenha tarefas como:
Não basta somente saber a língua. O programador também deve compreender o paradigma daquela linguagem, ou seja, sua abordagem fundamental de resolução de problemas. Existem diferentes paradigmas como funcional, declarativo, entre outros, e cada um exige habilidades específicas. Em uma analogia simples, podemos comparar o português e espanhol como duas línguas do mesmo paradigma, enquanto o chinês – que tem estrutura gramatical totalmente diferente e nem sequer tem o conceito de alfabeto – é considerado outro paradigma.
Além de dominar o paradigma e a linguagem, deve-se também dominar as suas bibliotecas e frameworks. As bibliotecas são conjuntos de funções que visam facilitar a codificação; já os frameworks contêm uma estrutura inicial que acelera e padroniza o desenvolvimento. Sendo assim, já sabemos que as pessoas programadoras conhecem paradigmas, linguagens e frameworks. Mas, além disso, é preciso também conhecer uma série de ferramentas.
Muitos acreditam que basta abrir um editor de texto e sair escrevendo. Entretanto, o ambiente de desenvolvimento também tem sua complexidade e, claro, todo um conjunto de ferramentas específicas.
William Guimarães, Software Engineer Full Stack da SoftDesign, destaca a importância crucial do uso adequado dessas ferramentas. Ele observa que anteriormente era comum ouvir programadores expressarem frases como: “isso funciona na minha máquina” ou “não sei como esse erro reapareceu depois de ser corrigido”. Esses comentários surgiam quando o sistema operava normalmente na máquina de desenvolvimento, mas apresentava comportamentos inesperados em ambiente de produção.
Geralmente, um arquiteto é alguém com vasta experiência em desenvolvimento de software. No entanto, não é suficiente apenas acumular anos de programação; é essencial se dedicar ao estudo a fim de expandir perspectivas e skills técnicas.
Na Arquitetura de Software, podemos estabelecer uma analogia com a construção civil. Assim como arquitetos e engenheiros projetam a estrutura, modelagem, camadas e conexões de um edifício, os arquitetos de software também precisam considerar uma variedade de fatores, como disponibilidade, segurança, continuidade e tolerância a falhas.
Na prática, isso significa que depois que as ‘plantas’ são desenvolvidas pelo arquiteto, um programador pode então construir tudo que é necessário de acordo com essa visão estrutural. É claro que no software a estrutura não é tão concreta quanto em uma ponte ou prédio, por isso, arquitetos e programadores estão sempre interagindo nas tomadas de decisão que surgem a cada sprint.
Na realidade, DevOps é uma abordagem de trabalho na qual desenvolvedores e operadores colaboram de perto para evitar gargalos e erros. O seu objetivo é automatizar o trabalho operacional ao máximo possível. Contudo, devido ao grande volume de configuração e automação necessários, surgiu no mercado um novo papel: o do Engenheiro DevOps.
Tal profissional também escreve código, mas não é o código das telas, regras ou processos do sistema em si. Trata-se do código de automação dos pipelines: processos de publicação, criação e monitoramento da infraestrutura.
Um DBA, ou administrador de banco de dados, é um especialista em gerenciamento de bancos de dados. No início de um projeto ou ao trabalhar em um produto de escala menor, é comum que os próprios programadores se encarreguem de criar e manter o banco de dados.
No entanto, conforme a demanda cresce e os requisitos se tornam mais desafiadores – ou o produto se torna mais complexo –, é importante ter uma pessoa especializada que atue na estruturação, manutenção e otimização do banco de dados.
Para muitas pessoas, esses papéis são vistos como equivalentes. Segundo a definição do Scrum, o termo “desenvolvedor” é mais abrangente, referindo-se a qualquer pessoa envolvida no processo de criação de uma solução, mesmo que não estando diretamente envolvida na codificação. Por outro lado, “programador” se refere especificamente à função de escrever o código em si. Em resumo, qualquer programador que faça parte de um time (squad) e esteja envolvido no ciclo de vida da entrega do software além do código, também pode ser considerado um desenvolvedor.
Esse papel já não é mais associado a pessoas introspectivas, tímidas e de difícil comunicação. Pelo contrário, os programadores desempenham um papel significativo nos times de produto. Por exemplo:
Para Felipe Schultz, Software Engineer Frontend da SoftDesign, a colaboração é muito importante. “A participação ativa dos programadores em todo o ciclo de vida do produto é um dos conceitos-chave da agilidade e traz muito impacto no resultado das entregas”, ressalta.
Bruna Nunes, Software Engineer Full Stack JS da SoftDesign, também acredita na importância da cultura de cocriação. “A colaboração é um ponto crítico crucial para o sucesso dos produtos e, por isso, precisa acontecer diariamente entre programadores e designers. Essa troca é essencial para tomar decisões que equilibrem a usabilidade e a complexidade técnica do produto”.
O desenvolvimento de um produto geralmente envolve a escrita de código em múltiplas linguagens, o que requer a utilização de diversas ferramentas integradas e a configuração de um ambiente de trabalho adequado. É improvável que uma única pessoa tenha domínio em todas essas áreas. Portanto, é mais vantajoso reunir profissionais com diferentes especialidades. Além disso, o código de um produto de software é naturalmente grande e complexo. Ou seja, depender exclusivamente de apenas uma pessoa é um risco estratégico tanto para o produto quanto para a empresa.
Por fim, é importante aderir à prática do Extreme Programming (XP) conhecida como ‘propriedade coletiva do código’. Mesmo que haja membros do time com especialidades específicas, não devem ser considerados proprietários exclusivos de determinadas partes do código. É essencial que todos tenham conhecimento abrangente e se sintam responsáveis pelo produto como um todo. Isso melhora o compartilhamento de conhecimento, a qualidade do código e a padronização.
Essa não é uma categorização oficial e estanque, mas é muito usada no mercado e pode ajudar a entender melhor as diversas especialidades:
Em nosso processo de desenvolvimento end-to-end, pessoas programadoras participam desde a fase de experimentação – onde apoiam a construção de MVPs Low-Code do produto – até a fase de desenvolvimento de software.
Na SoftDesign, o nosso maior desafio é criar produtos digitais data-driven e com alto poder de engajamento. Para isso, profissionais experientes e colaborativos são essenciais. Se você precisa de um parceiro com competências avançadas em estratégia e design, entre em contato conosco. Juntos, iremos desenvolver software sob medida, de acordo com as necessidades e objetivos da sua organização.