PT | EN
Publicado dia 19 de abril de 2022

O papel do programador no time de produto

| Tempo de leitura 11 minutos Tempo de leitura 11 minutos
O papel do programador no time de produto

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. 

O que um programador realmente faz?

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: 

  • Escrever o código de testes unitários – que é um pequeno pedaço de software que testa cada parte do software original; 
  • Criar e alterar a estrutura de bases de dados conforme necessário; 
  • Configurar ferramentas de suporte – muitas vezes envolvendo também a escrita de código; 
  • Colaborar com o time para encontrar as melhores soluções para os desafios do produto. 

Então para programar basta aprender uma linguagem?

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;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. 

Quais são as ferramentas utilizadas por programadores?

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. 

  • IDE (Integrated Development Environment) ou Ambiente de Desenvolvimento Integrado: reúne várias das funções necessárias para o trabalho: editor, compilador, depurador – ferramentas que ajudam a organizar a refatoração e a criação de testes. Exemplos: VS Code, IntelliJ e XCode. 
  • Repositório: lugar onde está guardado o código fonte do software. Cada pessoa programadora tem uma cópia desse código fonte no seu computador. Durante o processo de desenvolvimento, várias versões são trabalhadas em paralelo, para depois serem reunidas em uma versão estável para produção. Todo o histórico, alterações e versões ficam salvas nesse repositório compartilhado. O mais conhecido atualmente é o Git, que está presente nas ferramentas GitHub, Gitlab e Bitbucket. 
  • Virtualização e Containerização: ferramentas que permitem codificar a infraestrutura. Assim, é possível ter o ambiente de produção rodando em nosso computador ou implantar o ambiente de produção rapidamente, com garantia de que está correto. 
  • Orquestração ou Pipelines: ferramentas que ajudam a automatizar processos. Uma alteração no software precisa ser enviada para vários ambientes ao longo do ciclo de trabalho. Inicialmente, estão em desenvolvimento, e depois passam para revisão e ambientes como testes, homologação, produção, entre outros. Os processos de implantar e remover devem ser automatizados por meio de ferramentas de Orquestração (Jenkins) ou Pipelines (Gitlab, Azure DevOps). 

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. 

Quais são as principais diferenças entre um programador e um arquiteto?

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. 

Quais as diferenças entre um programador e um engenheiro DevOps?

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. 

Quais as diferenças entre um programador e um DBA?

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. 

Quais as diferenças entre um programador e um desenvolvedor?

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. 

Como o programador interage com o resto do time de produto?

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: 

  • Ajudam a avaliar a viabilidade de ideias e pensar opções de soluções; 
  • Participam ativamente das cerimônias de planejamento do trabalho do time; 
  • Colaboram com os momentos de interação com stakeholders (Review); 
  • São protagonistas nas reuniões diárias, discutindo impedimentos e planos para atingir os objetivos da sprint; 
  • Apoiam a melhoraria de processos, por meio de discussão nas reuniões de Retrospectivas. 

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”. 

Por que o ideal é ter mais de um programador no time?

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. 

Quais são os principais tipos de programadores?

Essa não é uma categorização oficial e estanque, mas é muito usada no mercado e pode ajudar a entender melhor as diversas especialidades: 

  • Programadores Mobile: especialistas em tecnologias para dispositivos móveis, geralmente estão bem familiarizados com os desafios específicos dessas plataformas e seus padrões de usabilidade. Trabalham com tecnologias nativas de iOS e Android ou com tecnologias híbridas, como React Native e Flutter. 
  • Programadores Back-End: especialistas em construir toda a parte por trás do software (aquela que não vemos), composta pelas regras de negócio, processamentos, cálculos, validações, entre outros. Esses profissionais criam serviços e APIs. Algumas linguagens que podem conhecer são Java, Kotlin, C# ou JavaScript. Além disso, atuam com frameworks como .NET, Node.js ou Spring. 
  • Programadores Front-End: especialistas em criar as interfaces de usuário (telas) e suas validações e interações, além da integração entre essas telas e o Back-End. Geralmente, conhecem HTML, CSS e JavaScript, e trabalham com frameworks como React, Angular ou Vue. 
  • Programadores Full Stack: trabalham construindo tanto Back-End quanto o Front-End das aplicações. É comum dizer que um Programador Full Stack tem bom domínio sobre todo o ciclo de vida do produto, configurando ambiente e pipeline.

Desenvolvimento de Software na SoftDesign

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. 

Entenda melhor o papel de outros profissionais que integram o time de produto

Foto do autor

Pâmela Seyffert

Marketing & Communication na SoftDesign, Jornalista (UCPEL) com especialização em Gestão Empresarial (UNISINOS) e mestrado em Comunicação Estratégica (UNL). Especialista em comunicação e criação de conteúdo.

Quer saber mais sobre
Design, Estratégia e Tecnologia?