Artesanato de Software

O Manifesto for Software Craftsmanship não é tão popular hoje em dia quanto o Agile Manifesto. Entretanto, acredito que os princípios defendidos pelo Craftsmanship são tão importantes quanto os do Agile. Visando apresentar o Artesanato de Software, bem como alguns outros princípios para os graduandos em Análise e Desenvolvimento de Sistemas da FATEC De Sorocaba, no dia 08/10/2014 apresentei, com o apoio da Tegra, a palestra Artesanato de Software que compartilho aqui agora:

 

Obrigado!

Leia Mais

post001

Tegracast 001 – Contrato de Escopo Aberto

Nesse primeiro Tegracast, Alexandro Almeida, Willian Polis e Caio Carrara falam um pouco sobre contratos de escopo aberto no desenvolvimento de software e os desafios de se negociar contratos desse tipo com o cliente.

 

Comentado no episódio:

Feed do Tegracast

Assine o feed do Tegracast e receba automaticamente os novos episódios do nosso podcast no seu iTunes, smartphone, tablet ou no seu agregador favorito de feeds. É grátis e você estará sempre atualizado com o melhor conteúdo sobre tecnologia e negócios!

Ouça o Tegracast em nossos parceiros:

TuneIn (web, iOS, Android e Windows Phone)

Ouvindo Podcast (web)

Podflix (web)

Teiacast (web)

Youtuner (web)

Envie seu feedback!

Para que o Tegracast fique cada vez melhor, envie agora mesmo seu feedback sobre este episódio! É só enviar um e-mail para tegracast@tegra.me com suas sugestões, comentários, críticas, ou dicas de assuntos que você quer ouvir no Tegracast.

Se preferir, você pode deixar um comentário aqui embaixo. Mas lembre-se de dizer seu nome, idade e de onde está falando! Será um grande prazer ouvir suas opiniões!

 

Trilha sonora Creative Commons by www.incompetech.com

Leia Mais

Tegra Day #0

Na última sexta-feira, dia 01/08, reservamos o dia todo para reunir os integrantes da Tegra no nosso escritório base em Sorocaba. Realizamos o primeiro Tegra Day com o intuito de renovar a integração do time e cada um poder conhecer todas as novas caras que estão chegando. Além disso, aproveitamos para lançar a nova identidade visual da empresa, e demos as boas vindas para uma nova fase da Tegra (logo vem novidade por ai!).

novo logo da Tegra

Foi um dia para deixarmos o viés estritamente técnico um pouco de lado e focarmos no que realmente acreditamos ser importante: as pessoas. O nosso trabalho é utilizar a tecnologia, com uma grande dose de criatividade, para solucionar problemas de outras pessoas e, principalmente, melhorar o dia-a-dia daqueles que precisam de nossas soluções.

Nosso trabalho diário é criar soluções e entregar software que atenda às expectativas de várias pessoas envolvidas no processo de desenvolvimento. Entretanto, não nos contentamos em atender às expectativas de quem nos cerca, mas sim superá-las constantemente. Se hoje estamos conseguindo conquistar esse objetivo é por trabalharmos verdadeiramente como um time! Não somos um grupo de pessoas, não somos uma equipe, nós somos um time! Somos um time pois não nos contentamos em entregar o trabalho que nos diz respeito, não nos contentamos em simplesmente cumprir obrigações. Por convivermos com parceiros, com amigos, nos importamos inclusive com as entregas e dificuldades do amigo ao lado. As conquistas e as dificuldades são encaradas pelo time e, para ser sincero, esse time só melhora a cada dia!

time tegra
Rafael, William Olbi, Gustavo, Abner, Etiane, Hélio, Fernando, Caio, Celso, Polis, Bruno, Alexandro e Leo Costa

 

Valeu galera!

 

Leia Mais

Nasce o Tegra Integrado

Quando tentamos entender o que é a Tegra, deixando toda burocracia de lado, uma só conclusão vem à tona: de fato, somos um conjunto de pessoas agindo em sincronia visando objetivos em comum. Atualmente nossas ações majoritariamente destinam-se a planejar, propor, construir e entregar soluções de software à pessoas. Nosso trabalho árduo, diário e contínuo visa entregar as melhores soluções de software para outras pessoas.

(mais…)

Leia Mais

Componentização, reutilização e Agilidade: Tegra Iglu

IgluAqui na Tegra nosso time de desenvolvimento e arquitetura de soluções é apaixonado por construir software. Mais do que simplesmente produção de soluções, todos na Tegra estão engajados para a construção das melhores soluções. Entretanto essas não são qualidades subjetivas e definidas exclusivamente por nossas equipes. A excelência de uma solução é baseada primordialmente pelas necessidades e objetivos de nossos clientes. Para que nossa equipe de negócios tenha condições de, junto aos clientes, propor as melhores soluções e se adaptar às singularidades de cada negócio, a equipe de desenvolvimento e arquitetura trabalha incansavelmente na construção de softwares que sejam flexíveis o suficiente para responder às necessidades desse negócio em um menor tempo possível, com o menor esforço possível o que resulta no melhor investimento possível aos nossos clientes.

Com essa mentalidade, com o aumento de complexidade das nossas soluções e com a alta demanda de nossos clientes foi que surgiu a necessidade de utilizarmos componentes de software reutilizáveis que proporcionassem a agilidade necessária para mudanças e customizações sem que fosse prejudicada a qualidade dos produtos finais, fator de extrema importância para nós.

Um componente de software pode ser compreendido como um elemento organizacional e estrutural de software que possua comportamento, responsabilidades e interfaces de comunição muito bem definidas. Um componente de software, como todo software, precisa ser testável, gerenciável e desenvolvido segundo as melhores práticas da Orientação a Objetos e padrões de projeto para que seja possível manter sua manutenibilidade e reutilização. Geralmente, mas não exclusivamente, um componente de software oferece funcionalidades não diretamente aos usuários da solução, mas para outros elementos de software que terão essa e outras responsabilidades. O conjunto de vários componentes é que forma a solução final.

A produção das soluções da Tegra, como dito anteriormente, são pautados diretamente pelas necessidades de nossos clientes e de seus negócios. Essa é uma preocupação de todas as equipes na Tegra e não seria diferente com nossos desenvolvedores e arquitetos. Assim sendo, todos os nossos componentes internos são produzidos e incrementados segundo as necessidades e demandas de projetos reais. Não desperdiçamos recursos para abstrair algo que não mostrou-se realmente necessário. De forma prática, para que determinada funcionalidade seja abstraída para nossos componentes ela deve ser observada e requerida em mais de um projeto. A partir do momento que uma função é requisitada por vários projetos entendemos que então ela está em condições de ser abstraída para nossos componentes reutilizáveis. Essas pré condições para componentização de software genérico é fundamental para que possamos direcionar nossos esforços para o que realmente possui valor ao negócio de nossos clientes.

O conjunto dos projetos de componentes internos da Tegra formam o Iglu. Um Iglu é uma construção de neve, construída por blocos rígidos de gelo formados pela neve soprada pelo vento. Esses blocos são dispostos de forma a depender um do outro para que todos se mantenham em formação. A forma arredondada dos iglus é importante pois a neve que cair sobre ele escorregará para os lados, impedindo a sobrecarga de peso e evitando o desabamento. A resistência de um iglu aumenta com o tempo. As tempestades e geadas colaboram para que os blocos de neve fiquem cada vez mais resistentes e grossos.

As características de um Iglu são semelhantes ao conjunto dos componentes genéricos e reutilizáveis que construímos a cada dia. Os nossos componentes são como os blocos de neve, que apesar de existirem singularmente, juntos formam um produto, uma solução muito bem estabelecida. Os nossos componentes são construídos de forma que possam ser incrementados facilmente sem interferir drasticamente nos produtos já construídos e a cada interação em que os componentes são incrementados eles se tornam mais coesos, mais testados e com funcionalidades requisitadas por mais projetos. Assim sendo, a cada novo ciclo de desenvolvimento nossos componentes ficam ainda melhores!

Uma das vantagens em se componentizar soluções em estruturas de softwares reutilizáveis é o de se manter o produto exclusivo de um negócio com código que expresse principalmente as regras daquele negócio. Mantemos uma camada de negócios em nossos projetos com o peso e tamanho respectivos ao negócio de forma que se o negócio apresenta muitas regras complexas, a camada do projeto poderá ficar maior. Mas se um projeto possui poucas regras, o projeto tende a manter-se mais simples e menor. Isso é possível pois hoje a maior parte de código referente à infraestrutura dos projetos já está abstraído no Tegra Iglu. Se considerarmos o Desenvolvimento Orientado ao Domínio (muito utilizado por nós), dizemos que nos projetos da Tegra, novos e já em andamento, conseguimos ter um enfoque maior na camada de Domínio da solução, pois nossas camadas de User Interface, Infraestrutura e de Aplicação já estão muito bem desenvolvidas.

Ao iniciar um projeto de componentização, em um primeiro momento pode se ter a noção de que está se envolvendo mais recursos do que o necessário ao projeto. Porém, com o desenvolvimento de forma incremental e consciente, como preconizamos na Tegra, sem perder o foco no que possui valor para o produto do cliente, estamos constatando na prática que os recursos estão sendo muito bem utilizados, muitas vezes até havendo economia pró ativa. Quando corrigimos um bug encontrado em algum componente, automaticamente esse bug é corrigido em diversos projetos. Ao mantermos as funcionalidades de um componente muito bem definida e testarmos essas funcionalidades unitariamente, conseguimos diminuir o trabalho com testes unitários em diversos projetos mantendo-os íntegros e com qualidade. O nosso maior esforço diariamente vem se tornando exclusivamente desenvolver, testar, integrar e entregar camadas de domínio, pois as demais camadas são providas pelo Tegra Iglu.

O Tegra Iglu é um projeto recente que vem sendo desenvolvido incrementalmente a cada interação da equipe de desenvolvimento e arquitetura da Tegra. Estamos constatando que os diversos componentes do Iglu cada vez se tornam mais maduros e coesos, bem como a criação de novas soluções se tornam mais simples e menos dispendiosas. Os projetos que já estão em produção têm se tornado mais simples de manutenir e consequentemente mais ágil de alterá-los caso um cliente solicite.

Estamos comprovando que é possível manter as melhores práticas de desenvolvimento, código e produtos de qualidade e inovação constante mesmo estando totalmente voltados para entregar valor aos nossos clientes ao final de cada iteração.

Abraço!

Leia Mais

Java Code Style (eclipse formatter e clean up)

java-coffee-beansUm ponto importante, mas que nem sempre é tratado com a seriedade que merece, é o code style dos projetos em que trabalhamos. Seja qual for a linguagem, escrevemos comportamentos para a máquina, mas quem mantém, altera e melhora esses comportamentos em formato de código são humanos. Assim sendo, nada mais importante do que pensar nisso quando estamos escrevendo código.

Graças as maravilhas do mundo moderno, os principais ambientes de desenvolvimento para a plataforma Java já podem formatar e limpar o código pra gente. No Eclipse, foco desse post, há duas funções básicas para isso: Code Formatter e Code Clean Up. O Clean Up além da formatação, faz mais algumas coisas no código, exemplo: declara variável como final quando possível, adiciona o this quando necessário, organiza imports, etc. Ambos são bastante configuráveis.

Eu fiz um clean up meu, com base no que acho necessário. Eu sugeriria altamente a todos que trabalham com Java também usassem essa função. Podem configurar um Clean Up com as preferências pertinentes ao projeto que estão trabalhando, ou que a equipe de desenvolvedores ache melhor. Se desejarem, um ponto de partida pode ser o caio-eclipse-cleanup.xml

Também fiz um formatter. O que fiz é praticamente igual ao Code Style do Google para Java. O que fiz foi alterar o espaço das tabulações de 2 para 4 e a versão target do Java de 1.5 para 1.7. Todo o formatador é configurável, mas o arquivo que estou usando também pode ser utilizado como ponto de partida: eclipse-java-google-style.xml

Para usar os arquivos que disponibilizei é simples, após o download os mesmos precisam ser importados para os workspaces onde serão utilizados:
Code Formatter:

  • Eclipse > Window > Preferences > Java > Code Style > Formatter > Import…

Code Cleanup:

  • Eclipse > Window > Preferences > Java > Code Style > Clean Up > Import…

No dia a dia eu uso muito os atalhos:

  • Ctrl + Shift + F: aplica a formatação definida no Formatter
  • Ctrl + Shift + O: organiza os imports

Com esses atalhos, aquele código escrito rapidamente para um teste, protótipo ou mesmo exercício da faculdade, não tem mais desculpas para não ficar formatado corretamente. Afinal, é muito rápido e fácil utilizá-los.

Para passar o Clean Up:
Selecione um projeto, um pacote, um arquivo .java ou mesmo ctrl + a no arquivo fonte, clique com o botão direito: Source > Clean Up.

É isso. Espero que o código, além de performático e muito bom para as máquinas, também fique ótimo para ser lido pelos programadores! Esse e mais conteúdo você pode encontrar em www.caiocarrara.com.br

Abraço!

 

Leia Mais