Conheça a Informant          RSS

Tecnologia


30
May 14

Um computador, dois programadores. Conheça o pair programming!

Set icons for business, communication, web

Trabalhar em equipe é sem dúvida a melhor maneira de se executar qualquer tipo de tarefa, principalmente quando essa tarefa exige dos profissionais um grande conhecimento técnico no assunto, como é a indústria de fabricação de software.

Para ir além do trabalho em equipe estudiosos de metodologias ágeis de desenvolvimento criaram o pair programming. Do inglês, pair programming significa programação pareada e envolve dois programadores trabalhando na mesma máquina para se alcançar um resultado superior no código. Um dos programadores é o “driver”, que escreve o código, enquanto o outro é o “observador” que revisa cada linha em busca de erros.

Enquanto o observa, o segundo programador também pode ajudar na estratégia de desenvolvimento, apontando o melhor caminho que o código deve tomar. Pair programming já vem sendo utilizada por muitas empresas ao redor do mundo e nos próximos parágrafos você irá entender como você pode tirar proveito dela. Confira:

Vantagens de pair programming

Um código de qualidade é apenas uma das vantagens apresentadas por pair programming. Algumas pesquisas apontam que programadores pareados gastam 15% mais de tempo do que programadores individuais para escrever o mesmo código. Por outro lado, o resultado costuma ter 15% menos erros, reduzindo assim o custo de manutenção e correções ao longo do tempo de vida do software.

Também é comum que o pair programming incentive um aprendizado entre os desenvolvedores e ajude a reforçar a comunicação na equipe. Pair programming permite que os membros do time compartilhem seus problemas e soluções entre eles, incrementando a troca de informações.

Por fim, segundo pesquisa de IEEE, 96% dos programadores preferem trabalhar em dupla do que individualmente, demonstrando que esse tipo de programação acaba sendo mais vantajosa para o profissional.

Como funciona o pair programming

O pair programming pode ser dividido em quatro combinações: expert-expert, quando se busca a mais alta produtividade e excelente resultados; expert-novato, para que haja a oportunidade de se criar um vínculo de mentoria; novato-novato, ainda que a produtividade e a qualidade sejam baixas, é uma maneira de se treinar novos programadores; e remota, quando a pair programming ocorre através de editores de texto em tempo real com os programadores em locais separados.

Em geral, a modalidade expert-expert costuma não ser boa para que se descubra novas formas de se resolver os problemas, já que esse tipo de programador não está aberto a tentar novos caminhos. Se o objetivo for inovar, o pareamento do tipo expert-novato se encaixa melhor na estratégia da empresa.

Quando adotar

Para muitas empresas, adotar o pair programming pode significar uma quebra nas metodologias de trabalho. Isso pode gerar atrito entre desenvolvedores e prejudicar o andamento de projetos. Dessa forma, a migração para o pair programming precisa ser feita de maneira cautelosa.

Por outro lado, toda empresa que deseja aumentar sua produtividade e qualidade das entregas deve considerar o uso de pair programming, principalmente se o time de desenvolvedores possuir profissionais mais experientes.

Encontrar a melhor estratégia pode exigir testes, reuniões e paciência dos gestores, mas o resultado final pode surpreender mesmo os programadores mais céticos. Dúvidas? Vamos conversar nos comentários abaixo!


29
May 14

16 extensões para Chrome que todo programador precisa conhecer

Keyboard

Todo bom programador conhece – e tem disponível para si – uma grande variedade de ferramentas que o ajudam a construir softwares melhores, mais rápidos e confiáveis. Com todo o avanço da tecnologia, atualmente não é mais necessário confiar apenas numa página de texto em branco para que seu código atenda todas as demandas dos usuários.

Da mesma forma, os próprios browsers evoluíram para que as aplicações ficassem melhores. Neste sentido, não precisamos considerar apenas os avanços nos motores de renderização, mas principalmente nas possibilidades criadas pela inclusão de extensões – tanto no Google Chrome quanto no Mozilla Firefox.

Neste contexto, criamos uma lista com 16 extensões que todo programador precisa conhecer para levar seu código para o próximo nível de qualidade. Confira:

Programadores front-end

JSON View: extensão que serve para organizar qualquer arquivo JSON, deixando-o legível e mais fácil de trabalhar. É terrível abrir esse tipo de documento e dar de cara com milhares de caracteres sem indentação, não é? Essa extensão resolve!

W3C Validator: validar um código HTML ou CSS de acordo com as normas W3C ficou muito mais fácil com essa extensão. Basta entrar no site, clicar no botão e pronto.

jQuery API Browser: a maneira mais rápida de encontrar a documentação de qualquer API jQuery. Abra a caixa de busca, digite o nome do método e toda a documentação será carregada.

Frameworks: a extensão para descobrir quais frameworks o site que você está navegando utiliza.

Programadores mobile

Window Resizer: a extensão Window Resizer faz o que o nome promete, redimensiona a tela do navegador para testar como o site se comporta em resoluções diferentes. Uma mão na roda para quem se preocupa com design responsivo!

Ripple: Ripple é um emulador completo. Através dele é possível mudar simular perfeitamente como um smarphone reagiria ao seu código, incluindo a orientação da tela e até o acelerômetro.

Para usar com Github

Octofication: Após sincronizado com sua conta do GitHub, permite receber notificações dos repositórios que você acompanha.

Diff for Gist: é uma extensão que exibe as diferenças entre cada revisão do código, simplificando a manutenção e o acompanhamento, principalmente em trabalhos em grupos.

Webdesign

ColorZilla: ColorZilla é um “conta-gotas” instalado diretamente no seu Chrome que apresenta o código de qualquer cor, clicando sobre ela.

WhatFont: O WhatFont tem um funcionando muito parecido ao ColorZilla, mas para fontes. Selecione um trecho, aponte o WhatFont e descubra qual fonte está sendo utilizada.

Workflow

LiveReload: Extensão que evita a necessidade de ficar dando F5 para visualizar as alterações na página. Ajuda, principalmente, a economizar tempo na troca de janelas.

Performance

PageSpeed: Verifica cada aspecto do seu site e avalia se ele está de acordo com as diretrizes de desempenho e SEO do Google.

YSlow: Famosa ferramenta do Yahoo! que verifica a performance do seu site.

Speed Tracer: Analisa e gera relatórios sobre a velocidade de execução dos seus JavaScripts e seletores CSS, entre outros detalhes.

Outros

Firebug e WebDeveloper poderiam se encaixar em várias das categorias acima, mas estão em “Outros” porque ajudam em todo o processo de desenvolvimento através de ferramentas de debug e otimização.

Conhece alguma outra extensão importante que ficou de fora? Aproveite os comentários abaixo e complemente nossa lista!


15
May 14

Qual a função de um gerente de produto?

Depositphotos_7263989_s

O sucesso da criação de um novo software é alcançado através da soma de diversos fatores: organização, planejamento, visão, comunicação, qualidade do time de execução e clareza do que, realmente, o cliente está buscando. Ainda assim, mesmo com todas as informações, nada garante que a ferramenta será bem aproveitada.

No meio de tudo surge uma figura muito importante para o bom andamento do projeto: o gerente de produto. Nos últimos anos as fábricas de software perceberam que possuir alguém que consiga centralizar as decisões, administrar o time e ainda entender a necessidade do cliente é valioso para os negócios, fazendo do gerente de produto o principal aliado da empresa. Nos próximos parágrafos iremos nos aprofundar sobre o papel desse profissional. Confira:

O papel do gerente de produto

É comum que as empresas acreditem que o principal papel do gerente de produto é estar focado no desenvolvimento do produto que alavanca o negócio. Mas, atualmente, sua função é muito mais ampla: ele cuida do desenvolvimento, mas também da implementação, atendimento, marketing e vendas. Apesar de não ser responsável por todas essas áreas, é função dele perceber quando problemas possam influenciar o desempenho do produto.

Basicamente, o gerente de produto presta suporte a todas essas áreas, focando na qualidade da entrega final e impedindo que outros fatores, como falta de recursos, atrapalhe a experiência do cliente. O gerente de produto costuma atuar mais no marketing e vendas, por conhecer cada vantagem do produto e saber como estas devem ser exaltadas para melhorar as vendas.

Motivos para contar com um gerente de produto

A busca por criar ferramentas cada vez melhores faz do gerente de produto uma peça fundamental em toda empresa de software. Isso significa que um bom gerente é capaz de melhorar a qualidade das suas entregas e ainda assim garantir o uso inteligente e eficaz de seus recursos.

Para se alcançar esse resultado é fundamental que você saiba o que buscar ao contratar este profissional. Lembre-se que ele terá que controlar o desenvolvimento da ferramenta, mas também estará em contato com clientes e colaboradores. Assim, é possível listar algumas competências que todo gerente de produto deve ter, além da paixão por criar bons produtos: empatia com clientes, inteligência, ética, integridade, confiança, foco, conhecimento em tecnologia, negócios, processos e uma atitude vencedora.

Apesar de parecer que essas habilidades sejam impossíveis de serem reunidas em apenas um profissional, precisamos notar que a maioria delas são obrigatórias quando estamos falando de desenvovimento de software. Um gerente de produto que não conheça tecnologia ou que não esteja por dentro dos processos e negócios da empresa não será capaz de gerenciar um time de desenvolvedores.

Já um profissional sem ética ou integridade, apaixonado pelo que faz e focado em buscar metas e objetivos não irá durar em emprego algum. Por todos esses motivos a função de um gerente de produto será, sim, de coordenar a construção das suas ferramentas, mas também será um grande ativo para sua empresa ao gerenciar clientes, recursos e resultados.

Você já trabalha com um gerente de produto? Qual sua experiência? Deixe seu depoimento nos comentários abaixo.


16
Apr 14

O que significa a arquitetura do software?

Software

Quando pensamos em arquitetura não podemos evitar de imaginar prédios, pontes, construções e plantas. Nossa visão não está errada, mas quando levamos o assunto para o desenvolvimento de softwares, essa imagem pode dificultar nosso entendimento sobre o que é arquitetura de software.

Até o início dos anos 90, praticamente não exista uma estrutura para o desenvolvimento destes programas. Assim, cada empresa, para resolver problemas mais complexos, criava da sua maneira a estrutura de dados e algoritmos. Com isso, a criação de programas era mais cara e difícil de se manter, principalmente quando havia a necessidade de se envolver mais pessoas no projeto.

A partir dos anos 90, com o aumento da demanda por sistemas, a indústria de software uniu esforços para criar uma metodologia capaz de unificar o desenvolvimento, criando assim um padrão. Apesar do início da arquitetura de software ter sido imprecisa e desorganizada, já dava sinal de que se tornaria mais eficiente.

No decorrer da década, com melhorias na metodologia, pode-se alcançar um conjunto de padrões de projeto, estilo, melhores práticas, descrição de linguagens e lógicas formais. Nascia assim, a arquitetura de software.

Descrevendo arquiteturas

A arquitetura de software tem como objetivo dar a direção a ser tomada e as tarefas envolvidas em cada área do desenvolvimento da ferramenta. Aliada aos stakeholders envolvidos no projeto, precisa ligar as múltiplas perspectivas que farão do sistema uma ferramenta útil para a demanda do cliente ou da empresa.

Na prática, criou-se linguagens de descrição capazes de organizar a arquitetura de software de acordo com os pontos de vista que o mesmo está se propondo a cumprir. Dentre eles, a visão funcional/lógica, visão de código, de desenvolvimento, de usuário, entre outras. Ainda não se alcançou um consenso sobre qual visão é melhor, sendo que cada uma deve guiar a construção dos programas de acordo com a vontade da equipe que está desenvolvendo.

Por exemplo, sistemas operacionais precisam ter uma visão de usuário sobre como cada pessoa irá utilizá-lo. Já sistemas construídos para fazerem operações matemáticas podem ter uma visão mais lógica ou de código. Dependendo do cenário, a arquitetura de software se adapta em prol do melhor desempenho.

Exemplos de arquitetura

Ao longo das duas últimas décadas, a evolução do desenvolvimento dos programas e o surgimento de novas demandas, principalmente com o avanço da internet, aplicativos e APIs, forçou a arquitetura de software a expandir seus conceitos.

Dessa forma, criou-se formas comuns de projetar módulos. Cada módulo com sua própria arquitetura, formando ao fim apenas uma. Entre elas estão algumas muito conhecidas como P2P, computação distribuída e plugins; e outras nem tão conhecidas como quadro negro, aplicação monolítica e modelo em três camadas.

Como se pode se perceber, não podemos considerar que uma arquitetura é melhor do que a outra, apenas que elas servem ao que se propõem. A busca por padrões, tão comum para quem trabalha com tecnologia, não deve limitar as possibilidades de criação de software. Pelo contrário, os desenvolvedores devem ser livres para acrescentar inovações. Devemos apenas seguir boas práticas para que nossas criações sejam úteis a nós e aos outros.

Dificuldades em entender ou determinar a arquitetura do software que quer desenvolver? Fale com a Informant!


09
Apr 14

Conheça o princípio KISS para afastar a complicação do seu software!

Software

Muitos desenvolvedores procuram criar ferramentas capazes de executar um grande número de tarefas, cálculos, interações, etc. Sistemas que aceitam grandes volumes de dados e uma infinidade de usuários. Tudo, em geral, para convencer clientes de que a melhor solução é a solução mais completa.

Toda essa complexidade cria softwares pesados e de difícil manutenção. Pior ainda, muitas vezes incrementar uma ferramenta não significa, necessariamente, que ela estará melhor. Do outro lado há programadores trabalhando para criar sistemas cada vez mais leves, com menos funcionalidades e prontos para executar de maneira quase perfeita apenas umas poucas tarefas.

Ainda que pareça contraditório, esse tipo de software ganha cada vez mais espaço no mercado. Tudo por conta do princípio KISS. Sobre ele é que trataremos nos próximos parágrafos.

O princípio KISS

KISS é um anacronismo para “Keep it simple stupid” – do inglês “mantenha simples, idiota”. O princípio surgiu na década de 1960 e é atribuído ao engenheiro de aviões Kelly Johnson, que na época trabalhava na marinha americana. A ideia por trás da expressão é que a maioria dos sistemas funcionam melhor quando são mais simples. Ou seja, simplicidade deve ser o objetivo chave do design e construção de software. “Keep it short and simple” e “keep it simple and straightforward” são algumas variações do princípio.

O princípio KISS é muitas vezes visto ao longo da história como motivador de outros gênios. Da Vinci dizia que “a simplicidade é a última sofisticação” e o arquiteto Mies Van Der Rohe aclamava o “menos é mais”.

As vantagens do princípio KISS

Há várias filosofias por trás da simplicidade que o princípio KISS prega em se tratando de construção de software. O minimalismo para computação e o princípio DRY (do inglês, não repita você mesmo) surgiram da necessidade de ampliar o KISS para situações onde simples não era tão fácil a sua aplicação.

Partindo da ideia de se criar software enxuto, o KISS prega que o desenvolvedor não deve seguir o caminho mais complexo até a solução do problema. Ou seja, sempre deve se tentar construir uma ferramenta simples. Com isso, além do software ser mais leve e de manutenção facilitada, não exige que a curva de aprendizado do usuário seja grande.

Como adotar na sua empresa

Adotar o princípio KISS na sua empresa pode exigir uma quebra de cultura entre os seus desenvolvedores, e até mesmo com seus gestores de projetos. Dependendo da maneira como você trabalha, será mais difícil convencê-los das vantagens de manter simples do que realmente construir o software.

O primeiro passo é listar de maneira muito clara as regras do negócio que envolvem a ferramenta. Apenas a partir delas será possível construir uma ferramenta simples. Feito isso busque criar um cronograma de desenvolvimento, testes e entregas. O cronograma é útil para forçar a sua equipe a manter a construção ágil. Busque ao máximo cumprir as datas, mas de acordo com a capacidade do seu time.

Por fim, esteja em contato com o seu cliente – ou usuários – para que as funcionalidades sejam validadas de acordo com as regras de negócio. Se tudo estiver de acordo com o esperado, você terá um software com grande potencial e simples.

Achou o assunto simples? Ou a simplicidade ainda lhe parece muito complicada? Comente!


04
Apr 14

Programação: Seu software é lasanha ou spaghetti?

Programação

A criação de um software é uma tarefa complexa, que envolve a produção de uma ferramenta que seja capaz de resolver um problema, oferecer uma solução ou, ainda, uma oportunidade.

Na prática, isso significa que as empresas envolvem gestores e colaboradores para criar escopos, definir prazos, objetivos e métricas para que o software ofereça um retorno sobre o investimento que justifique os recursos gastos. Por outro lado, não se presta atenção no impacto que a qualidade do software sobre todos esses aspectos, desde que tudo esteja funcionando.

Software muitos complexos, em geral criado por programadores inexperientes, podem simplesmente sair do controle e se tornar um emaranhado de GOTOs, exceções, threads e ramificações, tornando o seu funcionamento mais lento e sua manutenção mais cara. A esse tipo de software se dá o nome de software spaghetti, já que suas linhas de código lembram, de forma pejorativa, a receita italiana.

Mas spaghetti não é o único prato disponível na construção de softwares. Abaixo listamos mais quatro receitas para que você escolha a que estiver mais de acordo com o seu paladar – ou com as ferramentas que desenvolve.

Software lasanha

Software lasanha refere-se a um tipo de estrutura de programação que possui um código fonte não emaranhado, onde cada camada acessa serviços e informações das partes abaixo através de interfaces.

Entre os principais exemplos de código do tipo lasanha estão as aplicações feitas para web e os bancos de dados relacionais. Em geral, aplicações do tipo cliente-servidor são software lasanha. Adotar essa receita facilita a evolução do código através de melhorias específicas em cada camadas e na maneira como elas se relacionam.

Software raviolli

Ravioli são pequenas bolsas de massa recheadas com queijo, carne ou legumes. Na construção de software, código ravioli significa uma estrutura fracionada em módulos e acopladas de forma a criar a ferramenta.

Ainda que pareça uma abordagem boa do ponto de vista da organização, a verdade é que o software ravioli costuma inchar o código e dificultar a navegação entre os diferentes módulos, tornando a manutenção mais cara. Ao se criar módulos, o excesso de zelo entre cada um, mais prejudica do que ajuda o desenvolvedor.

Spaghetti com almôndegas

Dentro do software spaghetti há ainda a variação spaghetti com almôndegas. Essa receita é utilizada para descrever, também de forma pejorativa, códigos construídos através de programação orientada a objetos. Em geral, é resultado de um sistema com um ciclo de vida longo e falta de padrões de codificação.

Ainda que a programação orientada a objetivos tente evitar que o código se transforme num spaghetti, neste jargão o spaghetti acaba sendo as linhas de código não estruturadas enquanto as “almôndegas” denotam o uso de estruturas de classe.

Software macarrão

Por fim, a receita de macarrão: combinar duas ou mais linguagens de programação em único documento. Essa receita é muito comum no desenvolvimento de softwares para a web, já que a grande maioria dos documentos incorpora partes de HTML com JavaScript. Também é muito comum em PHP e em SQL. Para não tornar o código difícil de se manter, indica que cada parte do “macarrão” deve ser isolada em arquivos separados.

Agora que você conhece todas as receitas, basta identificar qual delas descreve seu código. Se for spaghetti, com ou sem almôndegas, talvez seja hora de você fazer um curso de culinária.

Ficou alguma dúvida sobre o tipo de software? Quer acrescentar alguma outra informação? Então deixe o seu recado!