Padroes de projeto (em ingles, Design Patterns) sao solucoes para problemas especificos que ocorrem de forma recorrente em um determinado contexto que foram identificados a partir da experiencia coletiva de desenvolvedores de software. A proposta original de padroes veio do trabalho de Christopher Alexander na area de arquitetura. Sua definicao para padroes e que "Cada padrao e uma regra (esquema) de tres partes que expressa uma relacao entre um certo contexto, um problema, e uma solucao". O contexto descreve uma situacao no desenvolvimento na qual existe um problema.O problema que ocorre repetidamente no contexto deve tambem ser descrito bem como as forcas (requisitos, restricoes e propriedades) associadas a ele. A solucao descreve uma configuracao ou estrutura de componentes e suas interconexoes, obedecendo as forcas do problema. As forcas, denominacao dada por Alexander, descrevem:os requisitos que caracterizam o problema e que a solucao deve satisfazer, as restricoes que devem ser aplicadas as solucoesas propriedades desejaveis que a solucao deve ter. Exemplo: Observer (Observador)Considere uma interface grafica que permita representar uma estrutura de dados de diversas formas - tabela, grafico de barras e grafico de tortas. A solucao mais simples e ativar cada uma das classes que implementam as tres diferentes visualizacoes cada vez que a estrutura de dados for ativada. Isso, no entanto, torna o nucleo do software dependente da interface (maior acoplamento). Alem disso, para adicionar novas visualizacoes, e preciso modificar tambem a estrutura de dados.Um bom design de software requer um unica estrutura de dados independente das tres diferentes visualizacoes e atuando como observadores. Para isso, e preciso que a implementacao das visualizacoes sejam observadores (ouvintes) da estrutura de dados e que sejam avisados quando ocorrer um evento de atualizacao.O padrao Observer oferece uma solucao para isso:Contexto: Situacoes nas quais varios componentes dependem de dados que sao modificados em outro componente (sujeito).Problema: Os dados do componente sujeito modificam-se constantemente e precisam ser atualizados nos outros componentes. O numero de componentes pode variar.Solucao: Utilizar um mecanismo de registro que permite ao componente sujeito notificar aos interessados sobre mudancas.A visualizacao das classes e a interacao dos objetos sao ilustrados na figura abaixo.Para saber mais:Pattern-Oriented Software Architecture (POSA) A System of Patterns F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, M. Stal John Wiley and Sons Ltd, Chichester, UK, 1996 Engenharia de software, uma profissao que envolve o design e a criacao de software para diversos dispositivos desde sistemas operacionais a aplicativos de telefones celulares e videogames, foi classificado como o melhor emprego de 2011 nos EUA pelo relatorio Jobs Rated da CareerCast. Foram analisadas 200 diferentes profissoes em uma ampla variedade de industrias e foram analisados niveis de habilidades e salarios de acordo com cinco criterios: ambiente de trabalho, esforco fisico, estresse, salarios e perspectivas. O objetivo do estudo e indicar qual emprego e mais gratificante para a maioria dos empregados (e nao apenas para os mais bem sucedidos).O que torna a engenharia de software como a melhor opcao sao as possibilidades de duas industrias em expansao: sistemas Web e Computacao-em-Nuvem. Um grande numero de empresas esta investindo em desenvolver aplicacoes para smartphones