Ensinamos corretamente a engenharia de software?

A questão acima foi delineada por um interlocutor deste blog que trabalha em uma empresa do setor produtivo de software. Dentro da referida empresa ele é responsável por recrutar programadores e testadores.

Bem, confesso que não respondi a questão no momento que ela foi elaborada. Aproveito a oportunidade para afirmar que tenho várias dúvidas sobre organização curricular das disciplinas da área de engenharia de software. A questão que intitula este post me levou a delinear algumas reflexões.

A ordem que as disciplinas são apresentadas está correta?

A grande maioria dos cursos de computação e informática apresenta, em um primeiro momento, aos seus alunos as disciplinas introdutórias da área de programação. Posteriormente são tratados os conteúdos referentes às estruturas de dados. Aspectos relacionados ao levantamento de requisitos, e modelagem sistêmica ocupam terceiro lugar nesta ordem. As informações inerentes ao projeto de software são configuradas como o quarto item. Saliento que alguns cursos possuem algumas disciplinas que apóiam o desenvolvimento do projeto, geralmente estas apresentam IDEs e linguagens de programação aos alunos, possibilitando-lhes a própria “materialização” do software. Os aspectos ligados a teste de software, em quase 100% dos cursos, são tocados (quando são) de forma superficial.

Será que não seria mais interessante organizar o currículo da área de engenharia de software a partir da seguinte equação?

Engenharia de Software = {analise de sistemas + [projeto de software + (programação + teste) + implantação+manutenção]} + processo e gestão de projetos de software

Na equação, primeiramente, resolvemos os parênteses, ou seja, as disciplinas de lógica, algoritmo e estrutura de dados seriam apresentadas nos semestres iniciais. Posteriormente proponho que os aspectos formais ligados a testes sejam discutidos na disciplina de Engenharia de Software I. Em Engenharia de Software II seriam apresentados os conceitos relacionados a projeto de software. O corpo de conhecimento ligado a implantação e manutenção do software seriam apresentados, concomitantemente, à disciplina de Engenharia de Software II. Por fim aspectos ligados a análise de sistemas, fator que requer um maior nível de abstração, seria visto no final, em Engenharia de Software III.

Ao ensinar algoritmo devemos apresentar uma linguagem de programação?

Trabalho com a disciplina de Algoritmos e Estrutura de Dados I, meu plano de ensino contempla o ensino da linguagem C (nota: nesta disciplina existem outros professores, não tenho pleno poder de decisão sobre o plano). É interessante ensinar C? Será que um compilador portugol não seria menos indigesto para os alunos? Como minimizar o número de reprovações nestas disciplinas? Fiz algumas experiências e materializei-as neste post.

Em que momento do curso devemos apresentar os conceitos ligados a orientação a objetos?

Alguns currículos apresentam a OO logo nas séries iniciais, outros inserem tais conceitos na metade. Qual é o melhor momento para apresentar estes conceitos? Sinceramente, não tenho uma posição definida sobre este assunto.

Qualidade de software é um tema importante?

Será que nosso aluno conhece os conceitos ligados a qualidade de software? Todos sabem o que é um processo produção de software? Aspectos ligados a qualidade do processo e do produto são delineados nos cursos de computação? Na maioria dos cursos, tenho a impressão que estes conteúdos são comentados superficialmente junto aos alunos.

A gestão de projetos é um conteúdo que deve ser ministrado por um professor da área de engenharia de software ou da área de administração?

Aspectos ligados a tempo e esforço para o desenvolvimento de um projeto deve ser apresentados aos alunos. Tenho certeza os conteúdos ligados a gestão de projetos são de extrema importância. Em alguns currículos, vejo que tais conteúdos estão ligados as disciplinas da à administração. Não seria interessante que um professor da área de engenharia internalizasse esse conteúdo junto aos alunos.

Acredito que a maior parte das reflexões delineadas é compartilhada por toda comunidade. A discussão está aberta, espero que todos a fomente.

J. A.

fabri@femanet.com.br

2 thoughts on “Ensinamos corretamente a engenharia de software?

  1. Uma posição sobre a dúvida: Em que momento do curso devemos apresentar os conceitos ligados a orientação a objetos?

    O maior problema que existe no paradigma OO na questão de ensino é que programadores já formados, que hoje lecionam, não aprederam a programador com os conceitos OO. Sendo assim, há um mito entre estes que afirma que aprender uma linguagem estruturada antes de OO ajuda no aprendizado. Minha opnião sobre quando deve-se expor a POO: logo no início do curso de programação expondo a programação estruturada como velharia. Deve-se ensinar a programar com OO e no decorrer do curso expor também a Orientação a Aspecto. A OO tornou-se popular por ter uma estrutura que aproxima-se com o mundo real, então, porque não começar com OO? Porém, o problema é outro, os professores atuais não aprederam assim, e isso torna esse tipo de ensino pouco aceito entre eles. E ainda é bom lembrar que 95% das grandes fábricas de softwares trabalha com OO, seja com C++, C#, .Net, Java etc.
    Sendo assim, porque ensinar programação estruturada, que apesar de haver no mercado, está ultrapassada?

    Sem mais.

  2. Muito bom o artigo!

    Realmente seria importante abordar com maior ênfase as discilplinas destacadas caso o Brasil queira alavancar na produção de software de qualidade. Aliás, essa é a proposta do bacharelado de Engenharia de Software já oferecido pela Universidade Federal de Goiás e em breve nas federais do Ceará e Rio Grande do Norte. Sou aluno do curso na UFG e tenho visto que algumas observações feitas no artigo são, de fato, eficazes. Como tem sido feito na instituição, aliar o ensino de programação e alguns conceitos da ciência da computação paralelamente aos de engenharia de software e gerência de projetos de forma profunda parece-me bastante proveitoso. Desde o início aprendemos que criar grandes projetos de software não é algo apenas técnico, princípios rigorosos devem ser aplicados no que tange a cronograma, custo, teste, manutenção, etc. Além disso, já começamos com OOP e creio que isso é importante para evitar certas dificuldades com tal paradigma quanto se tem em mente apenas a programação estruturada. Não digo que a programação estruturada está ultrapassada, possui quande aplicação em projetos de tempo real e embarcados, por exemplo. Todavia, se o foco é projetos complexos e grandes, creio sim que a OOP deve ser ensinada desde o início na universidade.

Leave a comment