Archive for the ‘Uncategorized’ Category

Trilha de Livros: Desenvolvedor

Tuesday, May 20th, 2008

Esta então é a prometida lista de livros para desenvolvedores. Claro que não é nenhuma lista exclusiva ou “o guia definitivo”, apenas minha recomendação de leitura, partindo do principio que você já sabe programar em uma linguagem como Ruby, C# ou Java.

Este guia é bem genérico, sem tentar se especializar em nada e sem tentar abranger mais que o mínimo necessário. Espere modificações nesta lista.

  1. Operating Systems: Design and Implementation: Este ode não ser o melhor livro sobre Sistemas operacionais –ou pelo menos não o mais didático- mas eu gosto bastante. A maioria dos conceitos básicos de um Sistema Operacional está presente mesmo nas máquinas virtuais e seja como for, antes de abstrair você precisa entender como seu computador funciona. Claro que se você cursou SO na faculdade e, principalmente, se lembra de como memória virtual, filesystems e demais funcionam pode passar por este item –eu acho que uns 5% dos desenvolvedores que conheço se enquadram nisso, entretanto.
  2. Fundamentals of Object-Oriented Design in UML: Este livro ensina métricas e princípios básicos para desenvolvimento de sistemas Orientados a Objetos. Se você passou por projeto estruturado provavelmente conhece o autor e algumas de suas métricas.
  3. Head First Design Patterns: Uma introdução suave aos Design Patterns. A vantagem em começar com este ao invés do clássico (que é o próximo na lista de qualquer modo) é que você não tem que lidar logo de cara com Smalltalk e C++. Aprender um conceito não-tão-simples quanto Design Patterns enquanto tenta entender uma sintaxe fora do dia-a-dia é criar complexidade acidental.
  4. Design Patterns: Elements of Reusable Object-Oriented Software: Apesar de não ser indicado ao iniciante eu não acredito que voc6e consiga ir muito longe sem ler este livro. Pelo menos as narrativas são fundamentais para entender as motivações e a evolução do conceito de patterns. A falta desta leitura faz com que pessoas cometam erros grotescos.
  5. Agile Software Development, Principles, Patterns, and Practices: (em versão Java ou .Net) este livro traz uma visão bem pratica sobre alguns aspectos mais teóricos da Orientação a Objetos. Como u organizo pacotes? Qual o problema em ter dependências e como me livro delas? Devo sempre retornar null? O que significa herança na pratica?
  6. Refactoring: Improving the Design of Existing Code: Conforme você for entendendo mais sobre design de software vai sentir uma vontade enlouquecedora de apagar todo o seu sistema e começar de novo. Antes de sair por aí cometendo carreiracídio leia este livro, ele vai te ensinar a fazer pequenas mudanças que melhoram a qualidade do sistema e identificar código que fede.
  7. Patterns of Enterprise Application Architecture: A maioria dos patterns que você teve contato até aqui tratam de design em um nível micro. Como classes interagem, como elas colaboram e como gerenciar seus problemas. Este livro, entretanto, fala sobre padrões em um contexto mais amplo, sobre arquitetura de software.
  8. Domain Driven Design: Os livros até então falam de sotware pelo software. Como criar uma classe, como gerenciar dependências entre classes… mas ninguém te mostrou o que deve ser uma classe e o que não deve. Eric Evans supre esta demanda mostrando uma abordagem simples e eficiente para criar domínios que se aproximam do mundo real.
  9. POJOs in Action e/ou Applying Domain-Driven Design and Patterns: With Examples in C# and .NET: É normal que exista uma certa dificuldade em levar estes conceitos para o dia-a-dia. Estes livros não são indispensáveis mas eles ajudam bastante a entender como aplicar conceitos, ainda que algumas vezes de maneira “não canônica” mas ainda assim eficaz.
  10. The Pragmatic Programmer: From Journeyman to Master: Infelizmente muitas vezes, especialmente em consultorias de três letrinhas e faculdades McDonald’s, não temos um ambiente sadio para nos ensinar como programadores profissionais se comportam. Este genial livro traz uma boa parcela deste conhecimento condensado. Eu adicionaria o The Art of UNIX Programming, especialmente para aqueles que vêm de uma cultura drag’n'drop para o mundo real
  11. Ship it! A Practical Guide to Successful Software Projects Este livro é bem interessante para entender como um desenvolvedor utiliza ferramentas simples como controle de versão e issue tracker. Ótimo par aquém está profissionalizando uma empresa.
  12. Agile and Iterative Development: A Manager’s Guide Antes de você se dedicar a estudar mais uma metodologia de desenvolvimento em específico uma boa idéia é ler este livro, que traz um apanhado de diversas metodologias e as compara.

Não vai pro FISL?

Thursday, April 17th, 2008

Não tem problema, siga o exemplo do Rodrigo e mande a sucata para quem regula uma profissão com leis de sucata.

Vai no FISL?

Wednesday, April 16th, 2008

Siga o exemplo do Rodrigo:

s

Aproveite e pergunte ao seu político preferido se ele tem respostas para as questões levantadas aqui.

Propostas de Trilha

Thursday, April 3rd, 2008

Recebi este e-mail esses dias (nome oculto por falta de permissão do autor):

[…]

Eu trabalho com Java a pouco tempo (desde maio de 2006), mas sempre procurei aprender bastante. Na época eu não conhecia nada, […] não sabia Java a fundo[…] comecei num projeto que já tinha essa arquitetura de usar TO, BO, etc. e tal, e a partir dele comecei a aprender e abstrair, com isso acabei criando umas coisas que depois viraram o “framework das arquiteturas” da empresa, framework que segue aquela porcaria de lógica de negócio separado de dados. Não trabalho mais nessa empresa, e meu antigo analista me fala com orgulho que aquele framework que fiz já é base para 5 projetos, me deixa feliz e ao mesmo tempo preocupado. Hoje estou em outra, e faltamente com a responsabilidade de novo de definir a arquitetura dos projetos (não acho que tenha experiência suficiente
para isso, mas eu tento estudar ao Maximo e fazer o melhor), e dessa vez, o negócio é grande, pois a empresa é infinitamente maior.

Lendo as várias discussões que vocês têm no GUJ, bem como seu blog, eu tenho certeza que aquele framework era errado. Quando criei, ainda era dependente de tecnologias, muita coisa mudou, e no fim não era mais dependente de nenhum framework especifico, ele continha uns utilitários, as interfaces e algumas abstrações para serem implementadas e especializadas em cada projeto, mesmo assim não
consegui juntar os dados com a lógica.

Bem, juntar eu até consigo, mas ai não consigo mais imaginar um framework, perfeito, vocês falam que esse framework é, teoricamente, uma coisa ruim. Porem morrendo esse cara, todos meus programadores terão de programar o modelo sempre do zero, bem como saber programar
da forma certa (o que acredite em mim, acho que 80% das pessoas não fazem noção nem do que é a forma certa, quem dirá fazer, eu posso ser uma delas, mas pelo menos tenho noção de que da forma que esta feito, é errado), ai que volto a pensar em ter um framework para eles
estenderem e não precisarem se preocupar com tanta coisa.

Ai surgem minhas duvidas, para mim, seguir os conceitos de DSL, DDD, Fluent Interfaces etc. é algo que exige do programador um bom conhecimento, e eu não tenho muita experiência com bons programadores, a maioria se quer sabe a importância de uma interface, programa em
Java como se estivesse programando em C, como cobrar desses caras uns conceitos que nem eu entendo a fundo, ai volto a pensar naquele framework, que ao menos obriga eles seguirem algo dividido em camadas, fazendo eles separar a lógica de negocio do acesso aos dados, a lógica de negocio de cliente da lógica de negocio de fornecedor, enfim, consigo que pelo menos saia algo não tão feio, e que em eventuais manutenções consigo fazer de forma rápida.

Mas para mim isso é péssimo, porque não consigo evoluir, não consigo aplicar nos projetos as coisas que gostaria de aprender. Mas acho que a culpa é minha, porque em todo lugar tem programadores que devem não conhecer, e isso não pode ser um impeditivo.

Por isso, gostaria muito que você me indicasse livros, mas que seguisse uma ordem certa de aprendizado, o que eu preciso saber primeiro, depois e depois, eu não sei se eu devo começar lendo sobre a modelagem em si, ou conceitos DDD, DSL, sei la, queria apenas que você me guia-se recomendando links e principalmente livros.

Por exemplo, nesse tópico você deu exemplo de vários livros http://guj.com.br/posts/list/60/71466.java (na pagina 5 do tópico), qual seria o mais recomendado para iniciar, e depois, depois etc. […]

Antes de mais nada eu diria que você está na trilha certa. A primeira coisa que um bom arquiteto deve fazer é se questionar o tempo todo, e justificar suas escolhas para si mesmo antes mesmo de alguém falar qualquer coisa.

Uma coisa que você precisa ter em mente é que o framework perfeito não existe. Quando discutimos design muitas vezes focamos no ideal, mas nem sempre o ideal deve ser implementado. Dificuldades tecnológicas são um grande fator, mas como você mesmo notou um fator muito importante é que arquitetura é sobre pessoas. Não adianta você ter a arquitetura tecnologicamente, perfeita, o design que melhor modela seu domínio e a maior performance possível se seus desenvolvedores não entendem ou não entenderão este zoológico.

Eu fui freelancer por um bom tempo, e nesse período não só eu era completamente verde sobre tecnologias bem como na época o acesso à informação era restrito (Internet só depois da meia-noite, lembra do pulso único?). Ainda assim eu tive que definir arquiteturas para alguns sistemas que duram até hoje, e aprendi bastante com isso.

Uma das coisas que aprendi é um clichê: Keep it Simple. Uma boa arquitetura, sofisticada ou não, é composta de primitivas arquiteturais bem definidas. Para entender essa afirmação pense na linguagem Java. A linguagem possui primitivas que giram em torno de objetos, definidos por classes que trocam mensagens através de métodos. Você não precisa de exceções à estas primitivas, consegue implementar tudo no seu sistema com elas. Assim deve ser sua arquitetura.

Se você ainda não tem conhecimento para utilizar conceitos mais rebuscados se mantenha simples e elegante -e elegante para mim significa ter boas primitivas e pouquíssimas exceções. Claro que sua arquitetura não vai servir para todas as coisas mas lembre-se que arquiteturas devem ser pensadas de acordo com o projeto, não existe arquitetura de referência.

Mas se eu não tenho uma arquitetura de referencia como confio nos meus desenvolvedores? Primeiro você deve contratar desenvolvedores bons, ou experientes ou com um bom potencial. Como falei diversas vezes neste blog entre 2005 e 2007 uns bons 40% do meu tempo foi dedicado contratando gente. O que eu aprendi nessa fase é que os bons desenvolvedores dificilmente vão caber no seu orçamento. Eles já são superstars em outras empresas. O que você precisa fazer é criar um time de pessoas eficientes, compromissadas e competentes. Este tipo de pessoa pode não ter a bagagem técnica necessária mas possui um potencial tão grande que você cria seus próprios superstars.

Mas se você não está contratando ninguém, como fica? Então você precisa é de gerencia de conhecimento. Muitas vezes eu já entrei num projeto onde as pessoas repetiam um mantra qualquer como “Não podemos fazer isso porque vai dar conflito com a rebimboca” o tempo todo e quando você pergunta ninguém consegue te explicar direito o que é a tal rebimboca ou porque ela cisma de conflitar com seu software.

Pense no seguinte: se as pessoas fossem ler por si só livros e bibliografias complicadas elas já teriam feito isso por elas mesmas. Se elas não procuraram para ter sucesso profissional elas não vão procurar apenas para entender seu software.

Criou uma arquitetura nova? Crie uma página no wiki da empresa (ou na Intranet, ou sei lá) contendo a descrição do que vocês fizeram. Não pense numa especificação de arquitetura, pense que você está escrevendo um artigo para um grande site sobre a arquitetura. O objetivo é criar algo útil e informativo. Organize sessões onde as pessoas troquem conhecimentos, talvez através de palestras ou de lighting talks ao menos duas vezes por mês.

E quanto aos livros? Recomendar livros depende muito do que você quer aprender. Eu não vou recomendar os livros neste post, vou tentar fazer algo mais abrangente e criar uma serie de posts chamados Proposta de Trilha. Eles vão conter uma bibliografia que eu ache interessante e na ordem que eu gostaria ter seguido. Imagino posts específicos para: Desenvolvedor, Arquiteto, Testador e Gerente de Projeto. Talvez mais, talvez menos.

Rumo ao Pró

Tuesday, April 1st, 2008

Eu tenho reclamado constantemente do WordPress no meu blog. Além do motivo óbvio –ter conteúdo e meu servidor comprometidos- existe uma hidden agenda neste interesse por uma engine de blogs… decente.

Para quem ainda não sabe eu deixei a ThoughtWorks há uma semana. Se você notar todos os meus posts falam de projetos passados, nada muito recente. Mas por quê?

Foi notada que existe uma carência no Mercado brasileiro de blog genéricos de tecnologia. Sabe aqueles blogs que trazem notícias do mundo da tecnologia traduzidas diretamente dos sites internacionais e com fotos hot-linkadas? Pois é, não temos muito no Brasil e temos que nos acostumar com conteúdo original, que notoriamente não tem a mesma qualidade do conteúdo traduzido. Para melhorar também precisamos de um grande fórum onde pessoas comuns podem discutir tecnologia. Onde a minha tia possa falar do que ela gosta do Windows Vista e odeia Linux, onde meu primo possa falar que acha Java lento. Claro que tudo movido à ads do Google.

Vendo essa necessidade, a hef-bite technologies de Townsville, QLD me contatou e me fez uma proposta indecente. 10% de todos os cliques do novo site serão meus, e como falamos de uma população de 200 milhões de habitantes isso dá uns bons milhares de dólares por semana, e eu nem preciso voltar para o Brasil.

O site ainda está em construção. Estamos usando um framework web brasileiro para ficar mais “produto nacional” e conversando com alguns sites famosos para comprarmos seus domínios. Provavelmente vamos fechar negócio com um desses sites e você não vai nem perceber.

E porque eu estou falando isso agora? Bem, porque nesta data eu paro de escrever neste blog. Para evitar que o site seja hackeado e manter o conteúdo on-line eu vou bloquear o acesso de escrita no banco de dados, mas não espere novo conteúdo aqui. Eu ainda estou interessado nos mesmos temas e você pode esbarrar comigo em algum fórum da vida, mas meu contrato não me deixa ter mais de um blog. Caso não dê certo eu volto a blogar, mas eu espero que meu próximo post seja para informar que me aposentei com menos de 30 anos e estou indo morar em Bali ;)

Cadê o Vigia?

Sunday, March 30th, 2008

Estava eu voltando de uma pequena viagem à uma cidade da Great Ocean Road quando consulto o GMail no celular e vejo um email do Hugo (obrigado mais uma vez!) avisando que havia spam no meu site. Dessa vez fizeram algun injection para adicionar links (que, obiamente, eram para arrecadar renda para as obras religiosas de são viagra). Cheguei em casa extremamente irritado e disposto a tirar o WordPress do blog mas por u milagre de zahl saiu a versão nova do WordPress hoje.

Bem, por enquanto eu apenas atualizei a engine mas tenho certeza que vai aconecer algo parecido. Como eu não quero ter que fazer patch manual em PHP acho que vou passar a usar algo mais simples para o meu blog.

Vigiando

Monday, March 24th, 2008

O tema mudou para o default. Como alguns perceberam (obrigado pelos avisos!) estou sendo alvo de um ataque que modifica o text adicionando milhõs de links para sites de spammers e fecha os comentários. Tentei fechar uns buracos de segurança óbvios, mudar senhas e etc. e por fim resolvi tirar o tema para ver se esse foi o buraco. Atualizei o WP pra última versão mas não funcionou.

Se alguém tiver uma dica eu agradeço.

Problemas nos Acentos

Wednesday, January 23rd, 2008

Muita gente reclamando de problemas nos acentos no feed. A data do início dos problemas parece coincidir com quando eu comecei a usar o Mac, hoje chequei todos os feeds, do WordPress e feedburner e todos estão setando o conteúdo curretamente para UTF-8.

Não tenho idéia sobre o que pode ser :( Estou procurando respostas, se alguém possuir alguma dica avise.

Enfim

Wednesday, December 19th, 2007

Um pouco após eu pedir demissão a Globo.com anunciou o projeto mais complicado dos último anos. Não são poucos os interessados nem fácil migrar sete anos de infra-estrutura, mas foi feito. Em um mês. Usando Scrum.

Após a adoção de práticas ágeis por toda a empresa o impossível ficou mais próximo e com o talento da equipe de WebMedia ele se tornou real. Globo Videos em Flash, para que não acreditava aqui está.

Parabéns à todos os globais!

Momento Mãe Diná 2008

Sunday, December 2nd, 2007

Como já é tradicional neste blog, meus pitacos para 2008:

  • Os EUA vão perder cada vez mais sua posição como principal mercado consumidor de software para Ásia e Europa mas vão continuar como maior mercado produtor
  • O Brasil vai viver ma onde de “somos ágeis” como já se vem sentindo, mas como quase tudo que chega de inovação por aí vai ter muito barulho e muita gente fazendo coisas erradas, sem se importar em “ler o manual” e quase nenhum benefício será visto no geral.
  • Vai ser o ano das consultorias pequenas. As ImproveIt, TriadWorks e Caelum da vida vão mostrar ao mercado brasileiro o que o internacional já sabe: times pequenos com foco em qualidade são melhores que enormes fábricas de software que simplesmente não conseguem entregar projetos
  • Essas empresas pequenas vão sofrer com a dificuldade em contratar pessoas mais do que já sofrem
  • Um dos problemas em contratar gente vai ser a grande quantidade de pessoas que vão continuar com a tendência que se formou este ano e realizar serviços diretamente para empresas de fora, geralmente utilizando Ruby on Rails
  • Com a maior divulgação do framework os Morts vão em boa parte migrar para Rails. A linguagem vai viver um bom ano mas nos próximos 2 ou 3 um movimento de “para onde os inovadores estão indo?”será visto, como ocorreu com Java
  • O TheServerSide.com vai fechar a ampa do caixão. O Infoq.com vai continuar com ótimo material
  • Qualquer evento da Sun (parece que não haverá Sun Tech Days ano que vem) será apenas sobre Netbeans e jRuby
  • jRuby vai ganhar mais e mais projetos mas ainda não atingirá uma fatia significativa do mercado mas vai gerar o Buzz. É o Rails no final de 2005.
  • Aproveitando que o RDT virou parte do Aptana e ficou um lixo o Netbeans será a plataforma dos Morts para desenvolver em jRuby mesmo quem usa Eclipse para Java rá utilizar Netbeans (exceto Einsteins e Elvis que usam ferramentas decentes como emcas, TextMate, OpenKomodo e IntelliJ)
  • A Apple vai, finalmente, investir no Brasil
  • OpenSocial não vai pegar e o Google vai continuar não dominando o espaço de comunidades na Internet
  • O Mono da Novell vai dar as caras como uma plataforma concorrente ao jRuby, não ao Java
  • Vai ser lançada uma versão de iPhone que vale a pena comprar
  • Vão haver menos eventos no Brasil. Talvez haja um grande e surpreendente evento aconteça (isso e mais um spoiler que previsão :) )
  • As empresas de 3 letrinhas vão continuar em declínio. ELas já estão há alguns anos perdendo os super-heróis que faziam alguns projetos serem entregues (ainda que atrasados), que estão migrando para consultorias pequenas, empresas fora da área de tecnologia o empresas de produto. Agora os clientes são atendidos por um mar de incompetentes espancadores de teclado e estão começando a ficar irritados