Neste artigo vamos procurar responder “O que é um bom código para programas de formação de devs?”.
A transformação digital é um fenômeno que vem ocorrendo de forma acelerada no mundo, inclusive no Brasil, provocando o surgimento de novos postos de trabalho e inclusive novas profissões. Esta onda de digitalização trouxe um problema para muitas empresas, a falta de profissionais da área.
Uma pesquisa da Associação das Empresas de Tecnologia da Informação e Comunicação e de Tecnologias Digitais (Brasscom), apontou um possível déficit anual de 24 mil profissionais da área de tecnologia, mostrando que anualmente se formam 46 mil profissionais na área, porém a demanda estimada é de 70 mil vagas anuais.
Frente a esse desafio, as empresas de tecnologia estão se preparando para formarem profissionais, estruturando programas de formação, mentorias e bootcamps para o preparo de pessoas desenvolvedoras para o mercado de trabalho. Porém, ainda não há relatos de metodologias claras sobre qual a melhor forma de se planejar, executar e mensurar esses programas de formação e aceleração.
Uma pergunta clássica na área de engenharia de software é: “O que é um bom código?” E há muitas pesquisas que apresentam boas respostas para esta pergunta.
Mas “O que é um bom código para programas de formação de devs?”. Neste artigo vamos buscar entender também quais nuances técnicas e comportamentais têm que ser observadas? E o que é mais relevante para quem atua nesses programas de formação possa observar em estudantes, tendo em vista a formação de profissionais para a área?
Direto ao ponto, o que é um bom código?
Esta pergunta pode parecer complexa ou até subjetiva, um bom código para quem? ?
Alguns dirão que um bom código é um código legível ou com 100% de cobertura de testes. Outros dirão que é um código rápido, com um desempenho matador. O fato é que existem várias definições na literatura sobre “o que é um bom código”.
Pois bem, no final das contas, o código é o que faz um aplicativo funcionar para os usuários. Ele ser aprovado em rodadas de testes ou ter passado por um processo de remoção de duplicações de instruções é útil, mas no fim, o pré-requisito básico é que o código precisa funcionar.
Porém, se preocupar simplesmente em fazer um código que funcione pode ser uma falha grave no processo de desenvolvimento, resultando futuramente em custos de manutenção, performance, erros, dentre outros. Então, o código precisa funcionar, mas ele também precisa seguir alguns princípios para ser bom!
Dentre várias definições possíveis, podemos combinar algumas delas e dizer que um bom código é um código legível, coberto por testes, simples, escalável e que faz o que tem que fazer.
Definições de um bom código
Durante nossa pesquisa procuramos rankear as principais definições que encontramos de “o que é um bom código?” e podemos listar:
- Ser legível;
- Ser testável;
- Ser funcional;
- Ser simples;
- Ser escalável;
- Ser reutilizável.
Ainda podemos destacar outros pontos relacionados na literatura a bons códigos:
- Ser documentado;
- Seguir padrões de projeto;
- Ser performático;
- Ser seguro;
- Ser manutenível;
- Ser acessível;
- Ser resistente a falhas;
- Ser estendível.
Muitas características estão relacionadas ao que é um bom código em um aspecto geral, mas nossa pesquisa está focada nas possíveis nuances que essa definição pode ter quando analisamos códigos criados por estudantes de programas de formação de devs. O que é mais relevante se observar e analisar em códigos desenvolvidos por estudantes? Há aspectos não observados na literatura que são importantes em códigos quando se está aprendendo?
Vamos chegar lá, mas antes, vamos falar um pouco sobre os programas de formação de pessoas desenvolvedoras e algumas de suas características.
Programas de formação de pessoas desenvolvedoras
Como iniciamos a discussão aqui neste artigo, há um déficit significativo de profissionais de tecnologia, sendo o de pessoas desenvolvedoras, um dos mercados mais aquecidos e com maior demanda. Além disso, vimos que as empresas de tecnologia estão abrindo cada vez mais programas de formação de pessoas desenvolvedoras para poderem treinar profissionais.
Pois bem, empresas de tecnologia estão inclusive se unindo a escolas de formação de pessoas desenvolvedoras para criarem seus próprios programas de treinamento. Porém, percebemos durante a nossa pesquisa que há uma ausência de metodologias e padrões formais para a estruturação desses programas de formação.
São várias perguntas abertas onde percebe-se um modelo geral de experimentação das empresas. Por exemplo:
- Qual o tempo ideal da formação?
- Qual a melhor dinâmica para a realização de atividades?
- Como avaliar o desempenho de estudantes?
- Como acompanhar a evolução de estudantes?
- Como recomendar pontos de melhoria durante o treino?
No geral, os programas apresentam características diversas, com tempo médio de formação variando entre um mês e um ano. Alguns apresentam estratégias de treinamento completamente assíncronas, síncronas e outros híbridos.
Foi possível encontrar uma quantidade significativa destes programas de formação de pessoas desenvolvedoras no Brasil, onde percebe-se uma predominância de treinos nas seguintes tecnologias: Java, React, Node.JS, Angular, Python, dentre outros. Aparentemente também não há um padrão entre as plataformas utilizadas durante as formações.
Na Zup temos vários programas de formação e aceleração em tecnologia. Te convido a conhecê-los. Inclusive, tem interesse nos programas de formação da Zup? Então leia este artigo sobre Programas de Formação Zup – tudo o que você precisa saber antes de se inscrever.
Nossa pesquisa visa dar apoio a estes programas de formação em um possível direcionamento do que é importante se observar em códigos-fonte e projetos desenvolvidos pelas pessoas durante os processos de treino.
Montamos um processo para tentar responder esta pergunta
Inicialmente realizamos um mapeamento sistemático da literatura buscando responder a seguinte pergunta de pesquisa: “O que é um bom código?”.
Priorizamos artigos de relevância científica publicados em eventos e revistas de impacto na área. Com o término deste processo separamos e revisamos 21 artigos, onde conseguimos destacar as principais características de um bom código para a literatura.
Com base nos resultados obtidos, estruturamos um questionário e um roteiro de entrevistas para serem executados em rodadas de coleta de dados com pessoas que já deram aula e/ou ministram treinamentos para estes programas de formação.
Nossa amostra é composta por 10 pessoas desenvolvedoras especialistas com vivência em aulas e/ou treinamentos em programas de formação.
Os resultados obtidos foram cruzados com os da literatura, assim geramos um manual com boas práticas que foi apresentado e discutido internamente para validação e uso nos programas de formação de pessoas desenvolvedoras.
Não se preocupe, pois todo o conteúdo deste manual já está aqui neste artigo. ?
Então, finalmente vamos aos nossos achados e as principais respostas quanto ao que deve-se observar na busca de códigos de qualidade em programas de formação de pessoas desenvolvedoras.
O que é um bom código para programas de formação de devs?
Nossa hipótese inicial era de que não haveria tanta diferença entre o que é um bom código para um contexto geral comparado com programas de formação. Porém, durante nossa pesquisa, conseguimos levantar alguns insights e contrastes interessantes entre as duas análises.
Um ponto crítico observado é que normalmente um código-fonte desenvolvido em um programa de formação irá passar por uma revisão formativa, ou seja, passará por um processo que envolve um conjunto de práticas de avaliação colocando a pessoa estudante como centro do processo, procurando medir seu desempenho e treinar ela dando feedbacks que a façam evoluir constantemente durante o período da formação.
Esses processos de avaliação podem ser realizadas por:
- pessoas que atuam na mentoria / avaliação do programa;
- outras pessoas que também estão passando pelo programa, ou seja, por pares;
- autoavaliação.
Nesse processo, destacamos três características que código tem que ser:
- Legível;
- Simples;
- Funcional.
Logo de cara, essas três características são fundamentais para um bom acompanhamento dos projetos e preparação para um futuro trabalho em time nas squads de desenvolvimento.
Afinal, pessoas desenvolvedoras em formação têm que saber resolver problemas de forma correta (funcional), objetiva (soluções simples) e com qualidade para garantir uma revisão por pares ou lideranças de time (ser legível).
Logo em seguida, foi percebida uma grande preocupação quanto ao entendimento de características básicas da linguagem a qual se está aprendendo. Então padrões de projeto, boas práticas e complexidade ciclomática foram pontos que apareceram em destaque.
Também foi comentada a importância de se ter documentações de código e do projeto, bem como, cobertura de testes, então vamos adicionar a nossa lista mais essas características:
- Padrões de projeto;
- Boas práticas da linguagem;
- Complexidade ciclomática;
- Documentação de software;
- Ser testável.
Características como ser escalável, reutilizável, performático, seguro, manutenível, acessível, resistente a falhas e estendível não foram destacadas.
Tipos de análise: análises estáticas dos projetos e análise de completude
Foram recomendadas dois tipos de análises possíveis: análises estáticas dos projetos e análise de completude.
Nas análises estáticas foi reportado que, a depender da linguagem, algumas ferramentas podem apoiar a avaliação, por exemplo:
Já nas análises de completude busca-se respostas para, por exemplo:
- Certo ou errado?
- Qual a mensuração do acerto?
- Qual a avaliação do acerto?
- Qual a recomendação frente a isto?
Pessoas formadoras podem utilizar as análises estáticas e de completude durante o processo de treino de forma estratégica para acompanhar os projetos que estão sendo desenvolvidos, bem como, relatar pontos de melhorias e sugestões para estudantes. Isso gera um direcionamento formativo para o processo de aprendizagem nestes bootcamps.
O que é um bom código pode variar de acordo com o objetivo do programa de formação
Mas aí surgiram pontos curiosos e muito relevantes durante as entrevistas. Foi destacado que é preciso analisar e avaliar os códigos dos bootcamps de maneira formativa e pontual, em cada atividade, visando extrair o melhor desempenho possível de estudantes em diferentes áreas. Em outras palavras, a depender da atividade, os critérios de “o que é um bom código” podem mudar.
Pode-se ter centenas de bootcamps, executando treinamentos em diferentes linguagens, com formações para diferentes níveis e áreas…
Os padrões de um bom código em Java são os mesmo de Python?
O que é um bom código para um perfil júnior? E para um perfil sênior?
Os programas de formação podem estar relacionados a múltiplas tecnologias e treinamentos específicos em segurança, acessibilidade etc.. Portanto, é preciso saber ponderar o que é um bom código para cada caso!
No mais, foi destacado que independente de linguagem, nível de formação, ou foco do curso, deve-se trabalhar para que as pessoas consigam entregar desde o início códigos legíveis, simples e funcionais para as atividades que foram desafiadas. Os demais pontos podem ser trabalhados ao longo do tempo e de seu período de formação.
Recomendações para quem passa por um programa de formação
Por fim, foi recomendado se trabalhar algumas orientações básicas com as pessoas em programas de formação para que elas escrevam códigos melhores naturalmente. Destacamos, por exemplo:
- Nunca se contente com um código que apenas funciona. Busque sempre escrever um código melhor. Escrever códigos de qualidade tem que se tornar um hábito;
- Aprenda a trabalhar com outras pessoas desenvolvedoras e perfis interdisciplinares. Saber compartilhar seu conhecimento e quando pedir ajuda são pontos muito importantes;
- Leia as documentações e recomendações das linguagens de programação, frameworks e ferramentas que você utiliza;
- Saber como as coisas funcionam é diferente de saber como usá-las, aprenda direito;
- Pratique muito! Procure realizar atividades e desafios que simulam cenários do mundo real;
- Aprenda a aprender e a evoluir. Não pare de aprender!;
- Aprender a programar bem leva tempo, trabalhe duro e procure sempre melhorar.
Conclusões
Pode-se perceber que há uma demanda crescente de programas de formação de pessoas desenvolvedoras pelo mercado e que há uma lacuna de pesquisas que possam contribuir para a estruturação destes programas.
Com esse trabalho, procura-se apresentar uma visão rápida e geral da literatura sobre o que é um bom código e o que é um bom código para programas de formação de pessoas desenvolvedoras, mostrando alguns desafios e oportunidades.
Na Zup Edu investimos no incentivo e na investigação da cultura do preparo, buscando fornecer as ferramentas necessárias para o crescimento exponencial dos times.
E aí o que achou da nossa pesquisa e descobertas? Conta pra gente nos comentários.