Trabalhando com RNA

Começando uma nova linha de pesquisa no ASSERT Lab

 

Trabalhando com RNA.

Anúncios
Categorias:Uncategorized

O Caminho da Inovação: Da Universidade para a Sociedade e de Volta para Ela (2014)

14 de outubro de 2014 Deixe um comentário

No início de Setembro eu fui convidado a ministrar uma palestra na Semana do Administrador promovida pela FACIPE mais especificamente nos dias 09 e 10 de Setembro de 2014.

O papo foi muito legal, sobre Inovação e como ela sai da Universidade, vai para a Sociedade e pro Mercado, claro, e depois volta para a Universidade!

Foi um ótimo papo!

Categorias:Educação, Negócios Tags:

Ensinando Engenharia de Software na Prática, Parte II

26 de junho de 2014 1 comentário

Depois de alguns meses entretido com outros desafios, minhas atenções voltaram para a construção da nova abordagem de abordar Educação em Engenharia de Software ou Como formar Capital Humano EFICIENTE em Produção de Software.

No primeiro post da série, tratei do que eu considero como A biblioteca do Desenvolvedor de Software dos dias de hoje. Diversos temas (ou verticais) foram destacados com algumas sugestões de bons (ótimos?) livros que abordam estes problemas de maneira didática, prática e objetiva.

No segundo post da série, comecei a tratar do desafio Ensinando Engenharia de Software na Prática, Parte I. Nele fiz uma contextualização das experiências e desafios que vivi tentando ensinar/vivenciar a engenharia de software na academia, ou melhor, tentando levar o estado da arte para o estado da prática. Adicionalmente, as bases desta nova abordagem que estou desenhando para a formação de capital humano em engenharia de software começaram a ser estabelecidas.

Depois destas discussões o desafio foi conseguir estruturar um ciclo de vida do conhecimento a ser apresentado e evoluído dentro de um período de um semestre letivo, que na prática são uns 4 meses. Estes meses frequentemente sofrem interrupções na sua continuidade devidos a feriados, catástrofes naturais (aqui em Recife temos sérios problemas com chuvas), Copa do Mundo (como neste ano) e por aí vai. Mas até que nada disso compromete, efetivamente, a continuidade e sobrevivência do curso em si.

Isso tudo passa, inicialmente, pela (re)definição da ementa do curso. Segundo a Wikipedia, Ementa é

(do latim ementum, “pensamento”, “ideia”, de e e mens, “juízo”, “razão”, “mente”) é um termo aplicado de modo geral, para indicar uma espécie de apontamento ou anotação tomada para lembrança, a fim de que, por aí, se produza depois o documento escrito, para que se faça e se execute o ato nela lembrado. Por exemplo, é a decisão resumida das matérias e suas cargas horárias dadas numa faculdade.

Uma ementa universitária, em geral, apresenta muito sucintamente as idéias gerais que serão abordadas ao longo da disciplina, como forma de um fichamento (frases soltas, de forma bem sintética). A apresentação mais detalhada dos assuntos que serão estudados, ponto a ponto, é dada no programa de curso.

A ementa atual do curso (até 2014.1) é a que se segue:

Engenharia de Software não é só desenvolvimento de software. Ou seja, não é somente a atividade de programar e conhecer linguagens e ferramentas de apoio à programação. Existem uma série de processos envolvidos que colaboram na “construção” de um produto de software, desde a especificação do projeto, seu planejamento de execução, desenvolvimento, testes, manutenção e evolução. Portanto, Engenharia de Software claramente não se trata apenas de programação, uma atividade que pode ser desenvolvida de forma independente de outras pessoas, mas sim de um conjunto de atividades, tarefas e mais ainda, papéis que requerem trabalho em equipe (social) e capacidade de comunicação (socialização). Neste curso, vamos estudar princípios da Engenharia de Software, seus objetivos, atividades, papéis, recursos, como planejar um projeto, descobrir requisitos, abstrair uma proposta de construção de um produto de software e apresentar uma solução que será construída de forma iterativa, bem como a continuidade da vida útil deste produto.

Analisando-a friamente, ela é até bem mais adequada do que MUITAS ementas encontradas por aí… o que não é surpresa, dado o caráter diferencial da forma como a disciplina é vivenciada. Entretanto, conforme já foi discutido até então, uma reengenharia no curso se mostrou necessária e, consequentemente, a ementa foi revista. A nova ementa é

Hoje a Engenharia de Software não é só desenvolvimento de software ou de um Software as a Service (SaaS). Ou seja, não é somente a atividade de programar e conhecer linguagens e ferramentas de apoio à programação. Existem uma série de processos envolvidos que colaboram na “construção” de um produto de software, desde a especificação do projeto, seu planejamento de execução, desenvolvimento, testes, manutenção e evolução porque um software ou SaaS não tem vida curta. Portanto, Engenharia de Software claramente não se trata apenas de programação, uma atividade que pode ser desenvolvida de forma independente de outras pessoas, mas sim de um conjunto de atividades, tarefas e mais ainda, papéis que requerem trabalho em equipe (social) e capacidade de comunicação (socialização).
Neste curso, vamos estudar princípios da Engenharia de Software através de técnicas ágeis altamente produtivas para desenvolver sistemas de informação na forma de SaaS. Espera-se que os alunos se deparem e compreendam os novos desafios e oportunidades de SaaS versus software empacotados por meio da aplicação de técnicas de desenvolvimento fundamentais para a concepção, análise, projeto, implementação, teste e implantação de um sistema de informação SaaS simples.

É importante ressaltar que esta é uma das poucas disciplinas do curso de SI que possibilita ao aluno um contato mais próximo e prático com as disciplinas relacionadas ao desenvolvimento de software propriamente dito, uma clara carência não só deste curso mas uma necessidade real do mercado de TI nacional e com muitas posições de trabalho em aberto o que demonstra uma clara carência de capital humano especializado.

É sabido que uma imersão prática em Engenharia de Software em um curso semestral (em torno de 15 semanas) com Exercícios Escolares intercalados, necessidades de aulas práticas de monitoria, revisões e um significativo projeto em times com data limite para conclusão é uma meta bastante ambiciosa.

Neste contexto, espera-se que os estudantes, para cursar esta disciplina com sucesso, estejam confortáveis com pelo menos uma linguagem de programação Orientada a Objetos e com os conceitos básicos da Orientação a Objetos (classes, herança, polimorfismo, sobrecarga, entre outros) e conceitos básicos de abstração e estrutura de dados (abstração de dados, abstrações de procedimentos / funções de alta ordem, recursão, tipos abstratos de dados, entre outros).

Antes desta disciplina, é importante ressaltar que os alunos de SI do CIn cursam “IF966 INTRODUÇÃO AOS SISTEMAS DE INFORMAÇÃO” (pré-requisito) que introduz os alunos aos principais conceitos e fundamentos dos Sistemas de Informação e da Tecnologia da Informação e Comunicação; “IF968 PROGRAMAÇÃO 1” (pré-requisito) que aborda os conceitos básicos de algoritmos, estruturas de dados dinâmicas, técnicas de construção de algoritmos e alguns breves conceitos de complexidade de algoritmos, usualmente em Java mas com experiências feitas utilizando Python (são duas turmas, onde a turma com os “reprovados” trabalham com Python como uma experiência em verificar qual o impacto de já iniciar com Java e suas complexidades atrapalha na absorção do conteúdo); e, “IF969 ALGORITMOS E ESTRUTURA DE DADOS” (obrigatória do curso) utilizando Java que conforme o nome diz, trata dos algoritmos e estruturas de dados. A IF968 e a IF969 são as únicas disciplinas do curso que tratam de algoritmos e programação e juntamente com a IF977 formam a trilha de disciplinas obrigatórias para trabalhar o desenvolvimento de software propriamente dito.

Existem ainda disciplina (co)relacionadas como:

  • “IF976 – BANCO DE DADOS”
  • “IF979 – PLANEJAMENTO E GERENCIAMENTO DE PROJETOS”
  • “IF978 – GESTÃO DE PROCESSOS DE NEGÓCIO”

No próximo post tratarei do projeto propriamente dito do curso, ou seja, o programa da disciplina. Quais os principais temas, como eles serão tratados, o ciclo de vida do conhecimento dentro do framework do curso e o que eu imagino enfrentar de desafios e os riscos envolvidos!

Espero não demorar tanto para o próximo post, mesmo porque o semestre atual está no fim e a disciplina tem que ficar pronta logo!

Ensinando Engenharia de Software na Prática, Parte I

19 de fevereiro de 2014 1 comentário

Dando continuidade no tema de Educação em Engenharia de Software ou Como formar Capital Humano EFICIENTE em Produção de Software, vem o segundo post da série. O primeiro você pode conferir aqui: A biblioteca do Desenvolvedor de Software dos dias de hoje.

Eu sou professor de Engenharia de Software há alguns anos… especificamente no Centro de Informática da UFPE, desde o primeiro semestre de 2012.

A primeira experiência pode ser vista neste link. Aqui a ideia já veio de experiências prévias em disciplinas na UPE, no Mestrado Profissional do CESAR.EDU e de apoio a disciplinas da pós-graduação do CIn, em especial:

  • IN0953 – Engenharia de Software, junto com o prof. Silvio Meira
  • IN1163 – Tópicos Avançados em Desenvolvimento de Software de Código Aberto, conduzida com o pessoal do RiSE

A experiência nestas disciplinas foi plenamente prática, com um esforço na implantação de técnicas baseadas em PBL (Problem-Based Learning). Na primeira experiência de ES no curso de Sistemas de Informação, a intenção foi a mesma, com foco na resolução de problemas ao invés de um monte de slides com teorias, puramente.

Todos os tópicos teóricos do curso giravam em torno da execução de um projeto em equipe que devia ser desenvolvido em iterações (quatro para ser mais exato).

Para começar, era feito uma imersão nos conceitos básicos e fundamentais da Engenharia de Software, mais especificamente no que é Software, o que é Engenharia, como se dá a Engenharia de algo tão complexo e diferente que é o Software e tudo o que cerca esse processo produtivo. Uma das perguntas que faço sempre aos alunos é: como eu defino o preço do meu software?

Em seguida, uma discussão acerca das Fábricas de Software, desde as clássicas até os modelos mais “diversos” existentes hoje… como se dão, o que são, por que são… qual o princípio e necessidade de existir uma comunidade ao redor desse ciclo de desenvolvimento, onde entra o software livre… Claro, a leitura e discussão do clássico The Cathedral and the Bazaar é obrigatória!

A definição do projeto, contra a minha real vontade, sempre ficou a cargo dos alunos. Como era difícil conseguir projetos reais ou mais próximos do mundo real (por uma série de questões, mas a principal é falta de tempo do professor – entidade única envolvida na disciplina, uma vez que os monitores são apoio e normalmente são alunos que acabaram de cursar a disciplina) a abordagem era estimular a descoberta de oportunidades de negócios, aproveitando todo o caráter inovador e empreendedor que o CIn tem em seu DNA.

Tivemos excelentes resultados e resultados nem tão significativos… mas acredito que no final o saldo é positivo. A partir da segunda rodada da disciplina, ou seja, de 2012.2 resolvemos promover duas integrações, digamos assim.

A primeira foi horizontal e teve por objetivo tratar o currículo de Engenharia de Software que acreditamos ser o ideal no CIn. Então por uma iniciativa dos professores de ES dos três cursos de graduação do centro (Ciência da Computação, Engenharia da Computação e Sistemas de Informação) tentamos encontrar o que seria o core de ES e compartilhamos tudo referente a este núcleo. A metodologia, critérios, artefatos e templates, políticas e métodos de avaliações, enfim, buscamos montar um framework para somente acrescentarmos o que seria específico e necessário em cada curso. Daí nasceu essa primeira integração, disponível neste site: Engenharia de Software e Sistemas.

A segunda integração ocorreu de maneira vertical, ou seja, dentro do curso de Sistemas de Informação e buscamos uniformizar o conhecimento, a metodologia, os tópicos cobertos e até mesmo os projetos que deveriam ser executados nas disciplinas intimamente relacionadas:

Até o presente momento estas três disciplinas tem rodado ainda desta forma. Não ocorreram mais conversas ou atualizações horizontais entre as disciplinas de Engenharia de Software.

Após estes 4 semestres ministrando a disciplina e vendo as deficiências deste modelo, pontos de melhoria e a carência do Arranjo Produtivo Local, num primeiro momento, e a carência nacional e mão de obra em produção de software, me senti motivado a fazer uma reengenharia desta disciplina e é esta reengenharia que eu vou ir apresentando aos poucos aqui.

Para começar, resolvi me inspirar no curso CS 169 Software Engineering da UC Berkeley. O curso tem um formato também já focado na prática, que gira em torno do uso das próprias metodologias ágeis na condução do curso em si bem como da aplicação de conceitos e tópicos da ES em um projeto executado por pequenos times formados pelos alunos.

Além disso, ele está plenamente de acordo com as novas plataformas de software e serviços, utiliza conceitos e recursos de Software as a Service e Cloud Computing e preocupações com o projeto, atenção aos objetivos de negócios, entrega de MVP e exercitar mais uma vez a prática da programação, que no caso do curso de Sistemas da Informação é um pouco deficiente, na minha humilde opinião.

O cerne do curso vai continuar sendo o Software Engineering Body of Knowledge (SWEBOK) mas as novas tecnologias, metodologias e eventualmente ferramentas vão fazer parte do convívio dos alunos no curso.

A intenção principal é trabalhar a lacuna existente entre o que a academia acredita que deveriam ser cobertos em cursos de ES e o que a indústria quer ver nos alunos formados por estes cursos. As empresas não querem que as universidades se transformem em escolas profissionalizantes que ensinam tecnologias, ferramentas, linguagens ou frameworks específicos; elas querem habilidades que transcendem estas “coisas“, incluindo lidar com código legado e trabalhar em equipe para atender a um cliente que não fala o “computês“.

Nos próximos posts vou apresentando este novo projeto que espero servir de estímulo para mais reengenharia em disciplinas de Engenharia de Software em outras instituições.

A biblioteca do Desenvolvedor de Software dos dias de hoje

14 de fevereiro de 2014 2 comentários

Desde que comecei a me envolver com a Engenharia de Software, sempre foi difícil definir ou classificar os “skills” necessários a um engenheiro de software. E esse tipo de discussão sempre me levava para a área de saúde, mais especificamente para a medicina. Afinal de contas, são tantas especializações, tantos “microuniversos” que se assemelhava muito ao que vemos na Engenharia de Software (ES).

A ES é um bicho estranho, muito estranho. Primeiramente por conta do produto principal gerado por ela: o tal do software, conhecido por alguns por SISTEMA.

É… esse mesmo sistema que “resolve” sair do “ar” justamente quando chega a sua vez de ser atendido no banco ou logo depois de passar longos 47 minutos no telefone esperando pela atendente da sua empresa de telefonia móvel. Mas como assim “saiu do ar“? Desde quando ele voa?

Software é um produto intangível e muito difícil de mensurar o valor, ou melhor, de precificar e de calcular o retorno no investimento da sua construção, manutenção e evolução. Por ser intangível, ele também tende a viver mais do que os que o construíram.

Outro ponto de muito investimento, por parte tanto da academia quanto da indústria é justamente a construção do software. Alguns pregam que a depender do “tipo” do software, as técnicas, ferramentas, processos e papéis envolvidos mudam. Por tipo quero dizer: software empacotado, o tradicional, também conhecido por shrink-wrapped software; software como serviço (SaaS); sistemas críticos; de tempo real; larga escala; sistemas operacionais; aplicativos móveis; mainframe; entre tantos outros.

A quantidade de disciplinas envolvidas na ES é muito grande e vai desde disciplinas puramente técnicas da Ciência da Computação até questões mais humanas, envolvendo Psicologia, passando por questões legais e tributárias. O mundo é software hoje em dia e tudo é software! Absolutamente tudo!

Conforme disse Douglas Rushkoff: Program or Be Programmed.

Com este cenário bastante diversificado de emoções, desafios, ações, papéis e pessoas envolvidas, eu comecei a pensar no que seria um conjunto de perfis que poderiam ser trabalhados por alguém que quer ser um bom profissional neste mundo da Engenharia de Software, que entenda das peculiaridades que envolvem a construção do software (ou serviço, ou aplicativo, ou seja lá o que for, desde que seja programável). Já via que existem algumas listas e partilho de boa parte das opiniões delas. A que mais gostei foi a de Steve Wedig, que eu utilizei como inspiração e base para sugerir a minha. Também separei, inicialmente, por tópicos que acho importantes e dentro deles sugeri alguns livros que podem ajudar neste entendimento. Adicionei às sugestões de Steve, as versões em português ou versões “alternativas” para os tópicos propostos.

Além disso, trouxe alguns livros que tratam de tecnologias específicas, mas que as técnicas abordadas neles, podem ser levadas para outras tecnologias

Eu dividiria a disciplina de desenvolvimento de software em verticais, que seriam:

Os livros com * são de alguma tecnologia específica, mas que as técnicas podem ser utilizadas em qualquer linguagem, por exemplo.

Alguma sugestão para complementar a lista?

Categorias:Educação

Six Steps to Develop a Good Survey

25 de agosto de 2011 Deixe um comentário

Often, we researchers and scientists have to understand, evaluate, and learn different methods, processes, techniques, technologies, and so on. We discussed previously the importance of empirical studies in the area. On the other hand, another important and probable the most used research method are Surveys.

If you take look, we are often asked to participate in surveys in our life, in different roles such as: electors, consumers, service user, and so on. Doing research, many times we have to design a survey to understand and characterize some particular phenomena. However, in some situations, we forget that there is a bunch of important material about it published in other sciences and, specially, in the software engineering area.

I am designing a survey to characterize the state of reuse measurement based on expert opinion and the series of paper published by Shari Pfleeger and her colleagues were and are being extremely valuable. Thus, if you need to understand, design, construct, and evaluate a survey, I strongly recommending these papers [P1P2P3P4P5P6]. These papers gathered experience in the field during the last years and are extremely important for someone interested in this activity.

Regarding to reuse are, I recommend for example two papers in this direction [P1P2]. The second one presents the state of software reuse in Brazil conducted by RiSE.

(Article originally published at World of Reuse, September 23, 2008)

Categorias:Pesquisa

RiSE – Reuso de Software – O começo…

http://www.rise.com.br/blog/ – Video que apresenta o nascimento da empresa RiSE – Reuso de Software. Conheça um pouco mais através do blog da empresa.

Categorias:RiSE
%d blogueiros gostam disto: