Google Doctype
O mais novo lançamento da Google chama-se Doctype. Trata-se de uma enciclopédia aberta (a la Wikipedia) para documentar padrões web abertos como HTML e CSS e outros tópicos sobre desenvolvimento como segurança e caching. De quebra ainda estão disponíveis 8 mil linhas de Javascript que formam a biblioteca Javascript desenvolvida pela Google.
A intenção é criar uma referência completa sobre padrões web, tudo com casos de teste. Uma iniciativa muito interessante, vale a pena conferir.
O modelo Dreyfus e a fuga de cérebros
Muitas empresas sofrem com o que se chama “fuga de cérebros”: os melhores profissionais da empresa estão sempre saindo para outros empregos. Isso pode ter vários motivos, como problemas de relacionamento pessoal, baixos salários, mudança de foco profissional, insatisfação com a estratégia ou foco da empresa e vários outros. Mas há um fator muito importante que geralmente é ignorado: a falta de confiança na intuição do profissional especialista (expert).
Pausa para explicação.
O modelo Dreyfus de aquisição de habilidades divide os profissionais em cinco níveis de conhecimento para uma dada habilidade (isto é, você pode estar no nível 1 em culinária e no nível 5 em jardinagem, ninguém “é” um nível 5 e pronto). Bem resumidamente, são eles:
- Novato: o novato precisa de regras claras e independentes de contexto (”receita de bolo”) para guiar seu trabalho, e não sabe lidar com problemas pois não tem experiência para tomar decisões sozinho. Também não toma responsabilidade pelas regras que segue - “Eu estava apenas seguindo ordens!”.
- Iniciante avançado: começa a tomar decisões mais básicas pois já possui alguma experiência e percebe que pode adaptar algumas regras a certos contextos. Ainda não toma decisões contrárias às regras, não sabe lidar com problemas inesperados e não experimenta a sensação de responsabilidade pessoal. A maioria das pessoas está nesse nível.
- Competente: questiona as regras de acordo com sua experiência e percebe consequências a longo prazo. Começa a tomar decisões de acordo com o contexto, resolver problemas inesperados e a tomar a responsabilidade sobre seus atos.
- Proficiente: se utiliza de pouquíssimas regras, começa a valorizar mais sua intuição e sempre analisa o contexto em que está inserido de acordo com o que já experimentou. Sente-se completamente responsável por suas decisões e respectivas consequências.
- Especialista: o especialista usa a intuição que adquiriu com a experiência e faz tudo parecer muito fácil. Toma decisões e resolve problemas sem esforço, pois reconhece padrões muito rapidamente. É o pior professor para um novato, pois não segue qualquer receita, apenas sabe o que fazer.
Um ponto interessante é que pessoas nos níveis mais baixos costumam se sobreavaliar, enquanto as pessoas nos níveis mais altos são bem mais críticos em relação ao seu trabalho e nível de conhecimento.
Links interessantes
- Ezra Zygmuntowicz anunciou que está fazendo modificações no ActionPack em seu fork do Rails no Github. Basicamente, ele está migrando a funcionalidade de integração com Rack do Merb para o Rails e, com isso, fazendo uma limpeza geral no código, conseguindo mais desempenho e estabilidade e caminhando para uma possível implementação thread-safe.
- Ruby Hero Awards - indique os membros da comunidade que, para você, fazem um trabalho importante. Reconhecimento é uma grande motivação.
- O que é Ruby Enterprise Edition? - Fábio Akita - o Railer que nunca dorme - em mais um excelente artigo.
- Interessado em Git? Então dê uma olhada nesse post para algumas boas referências
- A arte de testar aplicações web - mais uma ótima apresentação de Gregg Pollack
- Posts do Signal vs. Noise: Start a business, not a startup, If you’re working in a big group, you’re fighting human nature, Quit your job!.
- Metaprogramming Ruby Presentation
- Import GMail contacts using Rails
- Lançado Ubuntu 8.04
Pessoas ou máquinas?
Você trabalha com o quê?
Máquinas? Ok, então você desenvolve softwares que são utilizados por máquinas, certo?
Errado. Desenvolvedores trabalham com pessoas. Com clientes, gerentes, vendedores e outros desenvolvedores.
Médicos não trabalham com estetoscópios ou bisturis. Essas são ferramentas. Aprenda a utilizá-las bem, mas não esqueça do foco: pessoas, anseios, desejos, expectativas. Não importa se você domina Python ou 32 frameworks Java: se você não souber satisfazer aos anseios de pessoas, será um fracasso.
Ferramentas vem e vão, se aperfeiçoam, mudam, inovam e são deixadas para trás, ainda mais em nossa profissão. Um pedreiro não usa um martelo para tudo que faz. Um médico não depende de um esfigmômetro para fazer seu trabalho. Ferramentas são facilitadoras, não substituem a competência.
Não se prenda à ferramentas. Não dê atenção apenas aos aspectos técnicos. Uma solução que usa uma tecnologia simples ou “velha” (em TI, 6 meses bastam) que supra as expectativas do cliente é muito (muito mesmo) melhor do que uma solução que usa todos os últimos frameworks e deixa o cliente insatisfeito.
Crescimento das linguagens no mercado de trabalho
Gustavo Duarte comparou o número absoluto e o crescimento percentual da quantidade de oferta de empregos por linguagem de programação no Dice.com.
Interessante ver que, apesar da supremacia do Java em números absolutos, praticamente não há crescimento da procura há um bom tempo (há até queda, na verdade), enquanto cresce rapidamente procura por programadores que dominem Ruby (mais de 600%) e C# (mais de 50%).
Jason Fried: Questione seu trabalho
Em sua apresentação na conferência South by Southwest, Jason Fried novamente enfatizou a importância do sofware simples e de atitudes como dividir grandes decisões em várias pequenas decisões e de questionar seu trabalho.

Essas perguntas são sempre muito importante ao analisarmos as vantagens de se fazer algo. Realmente vale a pena? Poderíamos fazer mais simples? Poderíamos fazer outra coisa que agregue mais valor?
Outros pontos de destaque da apresentação:
- Otimize para agora, deixe o amanhã para amanhã;
- As decisões que você faz hoje não precisam durar para sempre;
- Tome pequenas decisões. Elas são mais fáceis de mudar caso não dêem resultado;
- Tenha sucesso e dinheiro ajudando outras pessoas a ter sucesso e dinheiro;
- Comece com o jeito mais fácil. Ele geralmente lhe entrega de 80 a 90% do que você quer;
- Invista mais no que não muda (ex: velocidade de busca sempre será necessário, então a Google investe muito nisso);
- Compartilhe seu conhecimento;
- Interrupções são inimigas da produtividade;
- Seja aberto, honesto e responsável;
- Quase nada é urgente ou complicado demais. Nós é que tornamos assim.
Confira o post de Jason e também o resumo de sua apresentação, feito por Tim Walker.
“Rápido e Sujo” ou “Lento e Limpo”. Porque não “Rápido e Limpo”?
Há algum tempo atrás assisti ao vídeo da apresentação de Martin Fowler na RailsConf 2006. Nessa apresentação ele fala sobre o que o faz gostar do Rails (e do Ruby) como plataforma para desenvolvimento de software comercial.
Um dos pontos mais interessantes mencionados por ele é o seguinte: com Rails, conseguimos software limpo entregue rapidamente. Antes disso, você tinha duas frentes: a do “Rápido e Sujo”, geralmente representada por PHP e VB (até a versão 6) e a do “Lento e Limpo”, com Java e .NET.
O grupo do “Rápido e Sujo” promete entregar o software em menos tempo mas, geralmente, o código é uma bagunça e qualquer correção, alteração ou melhoria torna-se um pesadelo.
Já o grupo do “Lento e Limpo” lhe promete entregar uma maravilha da engenharia de software, utilizando cada design pattern já visto nesse mundo (o que é algo bem prejudicial mas, ainda assim, comum), interfaces e IoC por todos os lados, enfim, um código com alta manutenabilidade e extensibilidade (ê palavrinhas…), o que demora uma eternidade e nem sempre é atingido.
Rails estimula uma visão diferente: “Rápido e Limpo”. O framework deve fazer todo o “trabalho sujo” por você, permitindo que você foque apenas no domínio do problema, eliminando muita complexidade acidental e permitindo menores tempos de entrega. Rails atinge isso através do extensivo uso de DSLs e convenções, entre outros conceitos. Além disso, está estimulando essa visão em outras plataformas, o que é muito bom.
Equilíbrio sempre é importante: você quer sim entregar software rapidamente (assim consegue vender mais), mas não quer ficar com uma bizarrice nas mãos para dar manutenção. Por outro lado, não precisa do código mais perfeito do universo, principalmente se isso significa demora excessiva. Pragmatismo é a chave. Faça o que funciona pra você.
Duas observações importantes:
1. Estou generalizando um pouco quanto à PHP, VB, Java e .NET. A qualidade do código depende muito do desenvolvedor, mas algumas linguagens/plataformas estimulam estilos de programação diferentes. Não se sinta ofendido ou menosprezado.
2. Por favor, não faça como muita gente e saia alardeando que Rails permite desenvolvimento rápido e ponto. Muita gente está fazendo todo tipo de atrocidade com o framework em nome da rapidez, isto é, prazos reduzidos. O foco da comunidade é na qualidade, por isso falamos tanto sobre TDD, beleza no código, DRY, KISS e outros conceitos. Os prazos menores são consequências, não são objetivos.
Alguém aí ainda não escreve testes?
Um bom motivador:

Fonte:
http://onestepback.org/index.cgi/Tech/Programming/DarthTest.red
Autor: http://www.flickr.com/photos/sebastian_bergmann/
Less is more
A complex system that works is invariably found to have evolved from a simple system that worked.
—John Gall
Systemantics
Developer 101: Codificação de caracteres
De tempos em tempos gosto de fazer uma “revisão geral” sobre conceitos que considero fundamentais para todo desenvolvedor de software. É natural que algumas coisas que estudamos acabem caindo no “limbo da memória” pela falta de uso, mas é sempre bom dar uma atualizada nesses conceitos, pois nunca se sabe quando eles serão necessário.
Resolvi, então, iniciar a série “Developer 101″ onde, à medida que faço minhas revisões, vou publicar um pouco sobre o assunto e listar links para mais recursos.
No primeiro artigo da série, falarei um pouco sobre algo fundamental e, geralmente, negligenciado por escolas e profissionais: a codificação de caracteres. Não é algo muito fácil de entender e muito dessa dificuldade deve-se às confusões e ambigüidades criadas pelas próprias empresas e entidades de padronização.