André Faria Gomes

Software Craftsmanship com Uncle Bob Martin

Publicado por: andrefaria em: 30 Novembro 2009

O pessoal da Software Engineering Podcast acabou de publicar a entrevista de Markus Völter com o consagrado Robert C. Martin, também conhecido como Uncle Bob Martin autor diversos livros como Clean Code e evangelista do movimento Software Craftsmanship. Recomendo que todos ouçam ao podcast (em inglês) na integra, mas gostaria de enfatizar alguns pontos importantes.

Sobre o Arquiteto de Software

Praying to the Wrong God, But The Protection Still Works!

Praying to the Wrong God, But The Protection Still Works!

Segundo Uncle Bob, pensar arquitetura e design vale muito a pena, porém, ele não gosta nada da idéia de se separar a arquitetura da codificação. Os melhores arquitetos são aqueles que codificam e vivem no “mundo que constroem para os outros”, disse. Se um arquiteto não codifica ele fica desconectado das decisões que toma, porque não é afetado por elas, ele  ”não tem que dormir na cama que faz”.
O importante é que arquitetos mantenham seus dedos no teclado, a final, você não pode liderar um time a menos que os conheça e entenda. Você tem que experienciar o que o time está fazendo para saber o que ele realmente precisa.

Documentação

O código é documentação mais imporante. Todos os outros documentos devem refletir o que o código faz. O código digire todos o resto e não é apenas resultado de outros documentos como sugure o waterfall.

Software Crafsmanship

O termo foi criado com a publicação do livro de Pete McBreen em 2002.  Fala-se sobre aprender com mestres. Aprenda as habilidades e como tomar decisões, mas você deve aprender com outras pessoas ajudando-as a fazerem seu trabalho.

  • Você deve sentir orgulho da forma que você trabalho.
  • Sinta orgulho de poder fazer Test Driven Development.
  • Sinta orgulho de ter alta cobertura de código.
  • Sinta orgulho de desenvolver software de alta qualidade.
  • Sinta orgulho de ter um bom design de código.
  • Sinta orgulho de desenvolver software que realmente agregue valor de negócio aos clientes.

Uncle Bob sugere como práticas TDD, Integração Contínua e Programação em par, e afirma que bons times trabalham em par na maior parte do tempo, no entanto, afirma que não se deve ser religioso quanto a isso, “você não precisa trabalhar em par 100% do tempo”, diz.

Qualidade e Relacionamento com Clientes

Não basta funcionar, o software deve ser bem escrito e fácil de manter. Foque em agregar valor. Deve haver um parceira com os clientes. Você deve realmente envolver-se com as decisões tomadas e garantir que o que cliente pede realmente vai agregar valor para ele. Não faça simplesmente porque é seu trabalho se você já sabe que não vai dar certo. Comprometa-se com o resultado do seu trabalho.

Produtividade

Aprenda os Shortkeys (atalhos de teclado). Tente fazer o máximo que você puder sem usar o mouse. Um desenvolvedor de software deve estar altamente integrado com seu ambiente.
Utilize uma boa ferramenta de SCM (Source Code Control), o CVS é razoável, o SVN é melhorzinho, mas meu favorito é o Git.

Bug Tracking Systems são importantes, mas use com certo cuidado. Devem ser leves  e simples de usar.
Use ferramentas para teste como  jUnit (xUnit), rSpec, Cucumber, JBehave e Fit.
Linguagens dinamicas são muito produtivas e se você faz TDD o “perigo” vai embora. Você não precisa mais de um compilador para te dar uma falsa segurança.

Desenvolvimento de Carreira

A coisa mais importante para um desenvolvedor de software é noção de aprendizado contínuo. Você nunca pode parar de aprender. É como um médico.

Você deve aprender o máximo de linguagens que puder, e deve conseguir escrever código em todas essas linguagens ainda que não seja um especialista em todas elas. Não adianta. Aprenda no mínimo uma linguagem estática, uma dinâmica e uma funcional. Robert diz que todos devem aprender LISP.

Recado de Uncle Bob no Rails Conf 2009

Uncle Bob Martin na RailsConf 2009 porFabio Akita no Vimeo

Mais Informações sobre Robert C. Martin

Os Melhores Podcasts de Tecnologia para Desenvolvedores

Publicado por: andrefaria em: 20 Novembro 2009

Um dos maiores problemas da sociedade moderna é a dificuldade de locomoção diária, a maioria das pessoas passa horas em seus carros, ou em meios de transporte públicos para irem de lugar a outro. Há alguns anos atrás quando morava na zona norte de São Paulo e trabalha na zona sul, essa era minha realidade. Uma vez que naquela época passar por isso era inevitável procurei formas de fazer com esse tempo pudesse de alguma forma torna-se produtivo, foi então que comecei a ouvir à podcasts.

iPod FM radio remote por dan taylor

iPod FM radio remote por dan taylor

De acordo com a Wikipedia, Podcasting é uma forma de publicação de arquivos de mídia digital (áudio, vídeo, foto, etc.) pela Internet, através de um feed RSS, que permite aos utilizadores acompanhar a sua atualização. Assim, é possível o acompanhamento e/ou download automático do conteúdo de um podcast.

Neste post apresentarei os podcasts aos quais escuto e os episódios principais para que você ouça. Sugiro que você utilize o iTunes para inscrever-se nos podcasts e sincronizar com seu iPod.

Desenvolvimento Ágil

por pcalcado

por pcalcado

Podcast da ImproveIt

por Vinícius Teles
http://improveit.com.br/podcast
Português

AgilCast

Por AgilCoop
http://agilcoop.incubadora.fapesp.br/portal/agilcast
Português

Agile Toolkit Podcast
http://agiletoolkit.libsyn.com
Inglês

ThoughtWorks Podcast

http://www.thoughtworks.com/what-we-say/podcasts.html
Inglês

Open Source

FLOSS Weekly

por Leo Laport, Jono Bacon e Randal Schwartz
Inglês

Java

HorecaExpo - Java por bramloquet

HorecaExpo - Java por bramloquet

JavaPosse

Por Tor Norbye, Carl Quinn, Dick Wall e Joe Nuxoll
Inglês
http://www.javaposse.com

Java Technology Insider

Inglês
http://www.javaworld.com/podcasts/jtech

Grails Podcast

Por Glen Smith e Sven Haiges
http://grailspodcast.com

Ruby

Ruby on Rails por Andrew*

Ruby on Rails por Andrew*

Rails Envy

Por Jason Seifer e Gregg Pollack
Inglês
http://railsenvy.com

Rails Podcast

por Geoffrey Grosenbach
Inglês
http://podcast.rubyonrails.com/

Rubiverse Podcast

Por Mike Moore
Ingles
http://rubiverse.com

JavaScript

jQuery Podcast

Português
http://blog.jquery.com/2009/11/13/announcing-the-official-jquery-podcast/

Gadgets

GeekBrief TV

por Cali Lewis
Inglês
http://www.geekbrief.tv

Software

Desk por Guillermo Esteves

Desk por Guillermo Esteves

Pragmatic Podcasts

por Pragmatic Bookshelf
Inglês
http://www.pragprog.com/podcasts

Software Engineering Radio

por Software Engineering Radio
http://www.se-radio.net
Inglês

Elegant Code

por Elegant Code Community
http://elegantcode.com
Inglês

Google Developer Podcast

http://code.google.com/p/google-developer-podcast/downloads/list
Inglês

Hearding Code

http://herdingcode.com
Inglês

Tecnologia

IT Conversations

http://itc.conversationsnetwork.org
Inglês

net@Night

por Amber MacArthur e Leo Laport
http://www.twit.tv/natn

Twit – This Week in Tech

por  Leo Laporte, Jeff Jarvis, Baratunde Thurston, e John C. Dvorak
http://www.twit.tv/twit

MacBreak Weekly

por Leo Laporte, Don McAllister, Paul Kent, and Andy Ihnatko
http://www.twit.tv/mbw

This Week in Google

por Leo Laporte, Gina Trapani, Jeff Jarvis e Mary Hodder
http://www.twit.tv/twig

SitePoint Podcast

inglês
http://www.sitepoint.com/podcast

Empreendedorismo e Negócios

37 Signals Podcast

por 37 Signals
Inglês
http://37signals.com/podcast

Max Gehringer (CBN)

por Max Gehringer
Português
http://cbn.globoradio.globo.com/servicos/podcast/NOME.htm

Mundo Corporativo (CBN)

por Heródoto Barbeiro
Português em Áudio
http://cbn.globoradio.globo.com/servicos/podcast/NOME.htm

The Startup Success Podcast

http://startuppodcast.wordpress.com
Inglês

TED Talks

por TED Talks
Inglês
http://www.ted.com

Se você quiser incluir algum outro podcast nesta lista, deixe um comentário. Espero que seja Útil!

O futuro do Java em meio a computação em nuvem

Publicado por: andrefaria em: 16 Novembro 2009

Aconteceu nos dias 6 e 7 de novembro de 2009 a 3ª edição do evento The Developers Conference realizado pela Global Code. Diferente do ano passado houve apenas uma trilha, porém maior enfoque em palestrantes internacionais.

Em sua palestra “Major Trends in Enterprise Software Development”, Rod Johnson, fundador da SpringSource, apresentou um pouco sobre a sua visão do futuro da linguagem e da plataforma Java e as novas tendências que o mercado de Tecnologia da Informação deverá seguir nos próximos anos. Gostaria de explorar um pouco os tópicos que foram abordados e registrar minhas impressões.

Bancos de Dados e a Computação em Nuvem

Cloud por Florin Mogos

Cloud por Florin Mogos

Segundo Rod, o mercado de tecnologia da informação está sofrendo grandes transformações em virtude da computação em nuvem (Cloud Computing) e do fato de o maior custo ter sido movido de hardware para pessoas.

A computação em nuvem não é somente uma modismo imposto por fornecedores de ferramentas como foi SOA

Em meio a essa realidade uma série de suposições tornou-se questionáveis como, por exemplo, a forma com que os dados são armazenados. A maioria esmagadora dos softwares construídos na atualidade utiliza bancos de dados relacionais, porém, sabe-se que estes não famosos por sua habilidade de escalar aplicações. Neste cenário, bancos de dados orientados a documentos ou Document Stores vêm ganhando mais e mais espaço. O Google Big Table, o Hadoop e o Couch DB são exemplos de soluções inovadoras que devem ser consideradas. As aplicações do futuro deverão ser capazes de lidar com novos tipos de bancos de dados.

Google, Amazon, Facebook e LinkedIn utilizam bancos de dados NÃO Relacionais.

A computação em nuvem oferece escalabilidade dinâmica, a cobrança é realizada de acordo o consumo que as aplicações demandam, e a plataforma que suporta a aplicação passa a ser vista com um serviço (PaaS – Plataform as a Service). “A cada dia faz menos sentido para a maior parte das organizações possuírem e manterem seus próprios DataCenters” afirmou Rod, “É como fábricas que já não fabricam sua própria energia elétrica”.

E o Java Está Morto?

Coffe por databhi

Coffe por databhi

É fato que com a popularização de linguagens dinâmicas como Ruby e Python e em virtude da produtividade de frameworks para desenvolvimento de softwares para a web como Rails e Django muitas pessoas já se perguntaram: ‘A final de contas será que Java está morrendo?’. Muitos também vêm se questionado sobre as intenções da Oracle (que recentemente comprou a Sun) em relação à plataforma.

Penso que quanto a isso, a resposta é muito simples:

As pessoas estão acordando e começando a utilizar as ferramentas certas para resolver os problemas que têm.

Como disse Fred Brooks: ‘Não existe bala de Prata!’, isso é, não uma única solução que resolva todos os problemas. Java ainda faz muito sentido resolver muitos problemas, Ruby faz muito sentido para resolver outros, Erlang para outros, Scala para outros…
Resumindo, Java não está morto, no entanto já não é uma linguagem inovadora, e outras linguagens estão ganhando seu merecido espaço, não se acomode, corrá atrás de entender as motivações por trás dessas novas tendências, e, sobretudo, os princípios por trás delas.

No DevInRio, o Guabanara gravou uma entrevista com Guilherme e Paulo Silveira da Caelum em que esse assunto foi tratado com autoridade. Ouça ao MP3 ou assista o vídeo no Vimeo do  Guilherme Chapiewski.

Já em relação a Oracle, Rod, afirmou que a empresa depende de tecnologia Java para atingir o sucesso, não é novidade que muitas soluções da Oracle são altamente dependes da plataforma Java e é obvio que a empresa não vai arruinar com tudo sem mais nem menos.

Para Rod, Java provavelmente será a última linguagem genérica de adoção em massa e no futuro mais e mais linguagens para finalidades específicas ganharão espaço no mercado, e muitas dessas novas linguagens serão executadas na Java Virtual Machine (JVM). Soluções integradas como Rails, Grails e Spring Roo tendem a ganhar espaço em virtude da alta produtividade que proporcionam.

Parabéns a Global Code pela realização do Evento!

Rails Summit – Carlos Brando

Publicado por: andrefaria em: 21 Outubro 2009

Carlos Brando do blog Nome do Jogo em sua palestra “Yet Another Ruby Framework – Como o Rails funciona por dentro” apresentou um pouco sobre a sua experiência no desenvolvimento de um framework em ruby para criação de aplicativos sociais baseados na plataforma open social, o sociably.

Carlos Brando no Rails Summit

Carlos Brando no Rails Summit

Depois de tentar adaptar o rails para atender a essa necessidade e chegar a conclusão que essa não era a melhor opção, Brando e sua equipe enfrentaram o desafio de desenvolver o framework que será disponibilizado, segundo ele, em código livre no futuro. Foram apresentados alguns conceitos que devem ser pensados antes de se construir um framework web como arquiteturas push-based e pull-based . Brando ressaltou ainda a importância de se considerar o projeto rack, ORM para banco de dados e geradores de código.

Veja os slides de Brando no SlideShare:

Rails Summit – Gregg Pollack

Publicado por: andrefaria em: 19 Outubro 2009

Depois da palestra de Chad Fowler, Gregg Pollack do scaling rails series apresentou “On The Edge Of Rails Performance“. Gregg falou sobre diversas estratégias e ferramentas que podem ajudar a tornar um aplicativo rails mais performático. A seguir veja os principais tópicos e soluções apresentados.

Gregg Pollack no Rails Summit

Gregg Pollack no Rails Summit

Caching

Gregg abordou caching em diversos níveis, tais como page caching, fragment caching, object caching, memcache e client-side caching (etags & last-modified), falou também sobre a importância de saber a hora certa de otimizar e não otimizar prematuramente.

Banco de Dados

Em se falando banco de dados, é inevitável que este tenha grandes chances de se tornar um gargalo, por isso, não abuse dele. Para ajudá-lo a melhor utilizar seu banco de dados, Gregg sugere as seguintes ferramentas:

  • Bullet Plugin – Criado por Richard Huang, este plugin pode melhorar a performance de sua aplicação diminuindo a quantidade de consultas que realizadas no banco de dados. Para maiores informações ouça este podcast da EnvyLabs.
  • Rails Indexes – Ferramenta que ajuda-o a encontrar indices que deveriam existir em seu banco de dados.
  • Scrooge Plugin – Otimiza consultas ao banco de dados para que seja obtido somente os dados que realmente forem necessários para construir as páginas requisitadas.

Prevençao de Bloat

De acordo com a Wikipedia, Code Bloat é a produção de código que desnecessariamente longo, lento e/ou desperdice recursos. Para prevenção de bloat, Gregg apresentou as seguintes ferramentas:

  • rack-bug – Barra de ferramentas para aplicações Rack que exibe informações como tempo de CPU e SQL.
  • memorylogic – Acrescenta IDs de processos e uso de memória nos logs do Rails.
  • oink – Encontra causas de incremente no tamanho do heap de memória da aplicação.

Escalabilidade

  • rubber – Um plugin capistrano e rails que facilita deploy, gerenciamento e escalabilidade para Amazon EC2.
  • cloud crowd – Gerenciamento de procesamento paralelo de processos de segundo plano.
  • Mad Mimi – Aplicativo de e-mail marketing que possui um API de fácil integração.

Assista a palestra na integra que foi gentilmente filmada e disponibilizada por Hugo Borges:

Fique ligado, informações sobre as outras palestras serão disponibilizadas em breve!

Rails Summit 2009 – Chad Fowler

Publicado por: andrefaria em: 15 Outubro 2009

Depois de ter me impressionado com a qualidade do evento Rails Summit 2008 e a força da comunidade Ruby, não poderia de forma alguma deixar de marcar presença novamente este ano. O evento foi realizado nos dias 13 e 14 de outubro na cidade de São Paulo no auditório Elis Regina do Anhembi, e com uma organização novamente fantástica, contando com excelentes palestrantes, e uma audiência que sem dúvida está acima da média, o evento foi mais uma vez um sucesso total. Parabéns Akita e equipe Locaweb!

Nesta série de posts que começa com este, quero registrar os pontos mais importantes e minhas principais impressões sobre a edição 2009 do evento.

Chad Fowler deu largada com a apresentação do keynote “Insurgência Ruby on Rails” em que explorou estratégias para insurgências de Ruby on Rails em ambientes pouco amigáveis. Logo no inicio da palestra Chad digiriu-se aos desenvolvedores dizendo “parem de fazer coisas que vocês sabem que estão erradas“,  sabemos que todos os dias, muitos de nós desenvolvedores realizamos nosso trabalho de forma burocrática e pouco produtiva, nem sempre utilizamos as melhores práticas e nem sempre temos coragem suficiente para transformar essa realidade.

Chad Fowler por Daniel Cukier

Chad Fowler por Daniel Cukier

Segundo Chad, ao se tentar introduzir desenvolvimento ágil, ruby, rails e novas tecnologias nas organizações geralmente nos deparamos com monstros guardiões que tentam proteger suas empresas de mudanças a todo o custo, e eles o fazem por causa do fenômeno FUD (Fear, uncertainty and doubtmedo, incerteza e dúvida), por alguma razão eles tem medo, medo de sair da zona de conforto, medo de lutar contra a inércia, medo perder suas posições, medo de errar, e é então que buscam todo tipo de argumento estúpido para tentar evitar algo novo seja feito.

Esse é o caso da velha conversa mole de que rails não escala, isso graças aos problemas que o twitter, um famoso case de rails, enfrentou no passado, “o twitter não escalava por causa de sua arquitetura” disse Chad. A lista de desculpas dos tais guardiões não pára por aí, eles dizem que ruby é lento, “mas é claro que é, e quem se importa? O ruby é responsável por em torno de apenas 6% do tempo de request de uma aplicação web tradicional” afirma Chad. Eles perguntarão “mas dá pra fazer isso? e aquilo?” e não vão parar até que finalmente encontrem alguma coisas que lhes sirva de desculpa. Mas afinal de contas quem são esses caras? Será que você tem sido um deles?

Two dragons... (the gate to the end) por Giampaolo Macorig

Two dragons... (the gate to the end) por Giampaolo Macorig

Para ajudá-lo na batalha contra os guardiões, Chad recomendou a leitura do artigo “beating the averages” de Paul Graham e acrescentou procure fazer as coisas de forma gradual, se você tentar fazer uma mudança massiva, provavelmente vai acabar fazendo uma bagunça. Você pode até mesmo começar a usar rails como uma ferramenta case, é possível fazer algo parecido com o que propõe o naked objects com java. Use também  Ruby para criar scripts. Use Ruby para testar java, .net, c++.  Use Ruby para gerar código. Use Ruby como template engine. Automatize o seu deployment com capistrano. Use Ruby para construir protótipos de UI. Crie metas mensuráveis, meça e apresente resultados!

Um outro ponto importante é que para introduzir Rails você não precisa necessariamente jogar fora o seu investimento anterior, IronRuby, JRuby e etc estão aí para entre outras coisas, te ajudar com isso, mas tome cuidado para não acabar escrevendo código Ruby da mesma forma que você escreve código Java ou C#, entenda que os paradigmas são diferentes e não tente abrir a casa nova com a chave da velha.

Chad recomendou ainda a leitura de sua série de artigos “The Big Rewrite” e enfatizou conserve a paixão pelo seu trabalho.

Assista a palestra na integra gentilmente gravada e disponibilizada por Hugo Borges:

Em breve publicarei sobre mais palestras, assine o feed e acompanhe!

ruby is slow? of course it is but who cares? ruby is reponsible of about 6% of a web request in typical application.

Perfil

Add to Technorati Favorites

André’s Twitter