Show
Página principal do livro Compre na Amazon, Submarino ou UmLivro Veja também os cursos de extensão a distância Engenharia de Software Moderna (48 horas) e Teste de Software (20 horas), oferecidos pelo DCC/ICEX/UFMG. Por Marco Tulio Valente (versão 1.1 - 11/01/2021) IntroduçãoEm 2019, ministrei pela primeira vez um curso de Engenharia de Software para alunos de graduação. Desde então, tenho estudado, trabalhado e refletido sobre questões ligadas à formação qualificada de Engenheiros de Software no Brasil. Assim, neste artigo, vou compartilhar minha visão sobre os desafios envolvidos em tal tarefa. RelevânciaPrimeiro, para delimitar o contexto deste artigo, acho importante começar lembrando que Engenharia de Software é cada vez mais essencial na formação de alunos de Ciência da Computação, Sistemas de Informação, Engenharia de Computação, etc. Para ressaltar esse fato, na primeira aula da minha disciplina apresento para os alunos o seguinte diagrama. Esclareço que ele não é baseado em nenhum estudo científico, mas na minha experiência acadêmica e profissional. Costumo usar também o seguinte tweet de um profissional com larga experiência no mercado de desenvolvimento de software para reforçar o meu argumento:
Segundo o tweet, grandes empresas de tecnologia possuem de 10 a 20 mais engenheiros de software do que Product Managers (PMs), analistas e cientistas de dados e designers de interfaces, por exemplo. Portanto, a mensagem para os alunos é clara: quando vocês se formarem, não todos, mas a maioria será Engenheiro de Software. Ou terá um título equivalente, como Frontend, Backend, Fullstack, Mobile developer, Arquiteto de Software, Tech ou Squad Lead, etc. Contexto BrasileiroTemos também no Brasil capacidade, vocação e potencial para desenvolver um mercado de software relevante e com impacto global. Na verdade, não estou falando nenhuma novidade, pois sempre se falou nesse assunto. Também, não estou sugerindo que nosso mercado de software seja inexistente e inexpressivo. Pelo contrário, estamos avançando e temos inúmeros casos de sucesso. Por outro lado, temos esse descasamento paradoxal entre oferta e demanda de profissionais de TI no Brasil. Digo, em um país onde existe um brutal problema de desemprego temos um setor da economia – empresas de TI – com centenas de milhares de vagas abertas, sendo a maioria delas para trabalho diretamente relacionado com Engenharia de Software. Assim, acredito que nunca foi tão importante formar, no Brasil, um maior número de profissionais com capacidade e interesse de atuar na área de Engenharia de Software. Eixos de FormaçãoO propósito central deste artigo é destacar que a formação qualificada de Engenheiros de Software requer um conjunto de esforços em dois eixos (veja também a próxima figura):
A seguir, detalho um pouco mais sobre esses eixos e suas respectivas categorias de formação. Eixo Central de FormaçãoEste eixo envolve a formação básica de um Engenheiro de Software, a qual deve contemplar, em nossa opinião, o desenvolvimento de habilidades conceituais e práticas. Formação ConceitualQuando ministrei a disciplina de Engenharia de Software pela primeira vez, na graduação, senti uma falta de livros didáticos mais modernos na área. Por isso, resolvi dedicar um ano de intenso trabalho para escrever um livro-texto sobre Engenharia de Software. Veja a sua capa no topo desta página. Sou suspeito para afirmar, mas acredito que, após a escrita desse livro, estou conseguindo cobrir essa dimensão do ensino de Engenharia de Software de maneira satisfatória. Isso envolve transmitir conceitos, práticas e princípios, sempre modernos, de processos, projeto, arquitetura, testes, manutenção, etc de software. Na verdade, estamos bastante satisfeitos com a adoção do livro. Após um ano de seu lançamento, mais de 100 professores estão usando o nosso material. Também gostaríamos de comentar sobre dois problemas que podem ocorrer quando aborda-se a parte conceitual:
Para evitar o primeiro problema, tomamos o cuidado de tornar o nosso livro enxuto (lean), com cerca de 400 páginas. Mesmo em futuras edições, pretendemos manter esse tamanho e, assim, evitar que o livro se transforme em uma enciclopédia. No fundo, a ideia é maximizar o valor de cada página e, assim, manter o engajamento do leitor. Para nos ajudar a cumprir esse objetivo, sempre lembramos da seguinte frase de Mark Twain:
No entanto, é importante ressaltar que extensões do livro já estão em pleno andamento, mas na forma de artigos didáticos. Nesse caso, o propósito não é apenas apresentar um conteúdo novo, mas também usar os artigos como trabalhos para os alunos. Esclareço: os artigos são auto-contidos ou, no máximo, referenciam conteúdo do próprio livro. E são sempre acompanhados de exercícios. Formação PráticaPorém, de nada adianta dominar a teoria, se o aluno nunca colocou ela em prática. Ou seja, o aluno tem também que aplicar os conceitos que viu na teoria, dentro do ambiente acadêmico e de sua estrutura curricular. Ao comentar sobre isso, sempre me lembro da frase do Torvalds (Linus):
Então, sobre a dimensão prática da formação do Engenheiro de Software, quero dizer que não concordo que ela possa ser completamente terceirizada por meio de estágios ou atividades semelhantes. Por outro lado, quando a universidade assume parte da responsabilidade pela formação prática dos alunos, surgem complicações naturais do ambiente acadêmico. Por exemplo, torna-se desafiador pedir que os alunos implementem um sistema real em uma disciplina acadêmica, na qual devem ser cobertos também aspectos conceituais. Da mesma forma, pedir para que os alunos trabalhem em sistemas de terceiros, como sistemas de código aberto, também não é trivial. O motivo é que o aluno, normalmente, não tem tempo, no escopo de uma disciplina acadêmica, para entender um sistema real e complexo. Assim, para atender à formação prática dos alunos, estamos trabalhando em duas frentes principais:
Eixo Transversal de FormaçãoNeste eixo estão incluídas duas categorias de formação: comportamental e em negócios. Decidimos chamar o eixo de transversal porque ele trata de questões que são também importantes em outros profissionais de computação, como cientistas de dados, administradores de redes, etc. Por isso, elas podem também ser abordadas em outras disciplinas de graduação. Formação ComportamentalConcluindo e, na falta de um nome melhor, estou usando o termo formação comportamental para referenciar os soft skills que são fundamentais em um Engenheiro de Software. Isto é, hoje em dia, não basta saber programar e dominar os conceitos básicos da área (formação conceitual). Não basta também ter capacidade de realização (formação prática). Além disso, o Engenheiro de Software moderno tem que saber trabalhar em equipe, saber liderar e ser liderado, saber se comunicar e se expressar, de forma escrita e oral, saber ouvir e saber falar na hora certa, ser capaz de entender o que a organização espera dele, etc. De fato, em um artigo recente, publicado na revista científica Information and Software Technology, fizemos uma análise de várias ofertas de emprego postadas no Stack Overflow Jobs. Pudemos confirmar que a grande maioria faz referência a soft skills. Veja a seguir aqueles que são mais demandados: Porém, a abordagem da dimensão comportamental em cursos de Engenharia de Software é ainda um problema em aberto, pelo menos para mim. Talvez, na verdade, o problema não seja exclusivo de disciplinas de Engenharia de Software, mas de caráter mais geral na formação de profissionais de Computação. Formação em NegóciosEm um mundo cada vez mais ágil e dinâmico, os Engenheiros de Software não podem restringir sua atuação à escrita de código. Eles têm também que constantemente refletir sobre o valor que está sendo gerado pelo código que eles produzem. Para isso, os profissionais têm que entender do negócio principal da empresa na qual trabalham. Isso é importante inclusive para conversar e argumentar com outros profissionais, como POs, gerentes de produtos, designers e mesmo com os usuários finais. No fundo, o emprego de Engenheiros de Software depende do valor gerado pelo código que eles produzem. Então, não é bom assumir que os requisitos e funcionalidades de um sistema vão sempre chegar prontos e perfeitamente definidos. O desenvolvedor moderno tem que ser capaz de propor novas funcionalidades, participar e influenciar na evolução dos sistemas nos quais trabalha, sugerir novas funcionalidades e mesmo novas oportunidades de negócio. Idealmente, um time de desenvolvedores deve procurar relacionar seu trabalho com a melhoria de um indicador de negócio. Por exemplo, uma determinada funcionalidade pode estar sendo implementada porque ela tem potencial para ampliar a base de clientes em x% ou reduzir a taxa de cancelamentos em y%. Ela pode ainda permitir que a empresa economize z milhões de reais em serviços de cloud ou em serviços de terceiros. Evidentemente, do ponto de vista de ensino, não dá para tratar da variedade de negócios que beneficiam-se atualmente de software. Porém, pelo menos transversalmente, é importante comentar com os alunos sobre a importância desse alinhamento: sistemas e negócio. Outras disciplinas de graduação – como uma disciplina de empreendedorismo – podem também ajudar nessa formação. Na verdade, em uma época de transformação digital – como a que estamos vivemos –, as oportunidades que existem para criação de novas empresas são imensas. E Engenharia de Software é o motor da maioria dos processos de transformação digital. Adicionalmente, as empresas cobram cada vez mais uma mentalidade empreendedora de seus colaboradores, por meio do que costuma-se chamar de empreendedorismo interno. Comentário FinalAntes de concluir, gostaríamos de mencionar dois pré-requisitos que achamos fundamentais para iniciar a formação de engenheiros de software:
Voltar para a lista de artigos. Quais são os desafios a serem enfrentados hoje na produção de software?Um dos principais desafios se refere à questão financeira, afinal recurso financeiro normalmente é escasso e não pode ser jogado fora. Talvez seja o recurso mais crítico para o desenvolvimento de software e um levantamento de requisitos bem executado contribui muito para que se tenham custos em níveis razoáveis.
Quais são as grandes preocupações de um engenheiro de software?O engenheiro de software cuida de toda a parte técnica e científica dos sistemas, desde o desenvolvimento até a gestão. Ele pode cuidar tanto das aplicações visíveis aos usuários (que é chamada de front-end) quanto dos bastidores –– nesse caso, o back-end.
Quais os principais desafios para a engenharia para os próximos anos?Hoje, com o avanço das tecnologias e da informação, um dos principais desafios de engenheiros de todas as áreas e, em especial, da construção civil é adequarem-se às novas realidades e inserirem em seu ambiente de trabalho o uso tão necessário das novidades do setor, além de reafirmarem a sua credibilidade.
|